使用Verbs API剖析一个小型ib应用程序

2 Layers

一个连接中涉及多个驱动程序,它们存在于内核和用户空间中。
参见图2。简单地说,大部分连接设置工作都是通过内核驱动程序完成的,
因为在这方面速度不是一个关键问题。用户空间驱动程序涉及ibv_post_send和ibv_post_recv等函数调用。 它们不经过内核空间,而是通过写入映射内存的一段直接与硬件交互。 避免内核陷阱是减少每个操作的总体延迟的一种方法。
使用Verbs API剖析一个小型ib应用程序_第1张图片

3 Remote Direct Memory Access

InfiniBand中的一个关键概念是远程直接内存访问(RDMA)。
这允许一个节点直接访问子网上另一个节点的内存,而不涉及远程CPU或软件层。
记住如图2b所示的直接内存访问(DMA)的关键概念。
在DMA中,CPU发送一个命令到硬件开始DMA操作。当操作完成时,DMA硬件与CPU引发中断,表示完成。在InfiniBand中使用的RDMA概念类似于DMA,除了两个节点访问彼此的内存;一个节点是发送方,一个节点是接收方。图3演示了一个InfiniBand连接。在这种情况下,DMA硬件是主机通道适配器(HCA),两个HCA通过交换机相互连接。HCA是ib版的网卡;每个节点的本地硬件促进了通信。这允许一个节点上的HCA使用另一个HCA在远程节点上执行DMA操作。
使用Verbs API剖析一个小型ib应用程序_第2张图片

4 Overview

ibv_rc_pingpong程序执行以下操作。

  1. 从操作系统中为发送和接收数据预留内存
  2. 从verbs API分配资源
  3. 使用TCP套接字交换ib连接信息
  4. 创建两个ib端口之间的连接
  5. 通过连接传输数据
  6. 确认转移成功完成

5 Data Transfer Modes

InfiniBand规范规定了四种不同的连接类型:可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)、不可靠数据报(UD)。这个程序ibv_rc_pingpong使用了一个简单的RC模型。当前硬件不支持RD。
可靠和不可靠之间的区别是可以预测的——在可靠的连接中,数据按顺序传输并保证到达。在不可靠的连接中,这两种保证都没有。
连接类型是严格意义上两个主机之间的关联。在数据报中,主机可以自由地与子网中的任何其他主机通信。

6 Queue Based Model

ib硬件通过请求处理来自客户端软件的请求被放入队列中。要在节点之间发送消息,每个节点必须至少有一个三个队列:发送队列(SQ),接收队列(RQ)和完成队列(CQ)。
在ibv_rc_pingpong程序中使用的可靠连接中,两个不同主机上的队列对会破坏端到端上下文。它们互相发送信息,而且只发送给对方。本文就局限于这种模式。
队列本身存在于HCA上。然而,libibverb将返回给用户一个与QP相对应的数据结构。虽然库将创建QP,但用户将承担将QP与远程节点“连接”的责任。这通常是通过打开一个带外套接字连接,用标识号交换队列,然后用该信息更新硬件来实现的。
最近,librdmacm(一个用于连接管理的OFED库)允许用户通过类似POSIX套接字的库调用来创建和连接qp。这些调用超出了本文的范围。

6.1 Posting Work Requests to Queues

为了在ib连接(端到端上下文)中发送和接收数据,工作请求,它们成为工作队列条目(WQE,发音为“wookie”)被发布到适当的队列中。这些工作请求指向分散/收集元素的列表(每个元素都有一个与之相关的地址和大小)。这是一种对内存中不连续的缓冲区进行写入和读取的方法。
内存缓冲区必须注册到硬件;这个过程将在后面解释。在远程主机可以发送任何发送之前,必须将内存缓冲区发送到接收队列。ibv rc pingpong程序在执行开始时向接收队列发送大量缓冲区,然后根据需要重新填充队列。当远程主机发布发送操作时,将处理接收队列条目。
当硬件处理工作请求时,在CQ上放置一个完成队列条目(CQE,预先声明的“cookie”)。有一个示例代码展示了如何在ibv_ack_cq_events(3)中处理完成事件。

7 Connecting the Calls

下表,ibv_rc_pingpong中用于创建连接的函数调用,以及调用它们的顺序。

使用Verbs API剖析一个小型ib应用程序_第3张图片
该表介绍了在创建连接过程中分配的资源。这些资源将在后面详细解释。
rdma-core -> rc_pingpong.c
翻译:https://blog.zhaw.ch/icclab/infiniband-an-introduction-simple-ib-verbs-program-with-rdma-write/

你可能感兴趣的:(RDMA,网络,服务器,linux)