1.Get the device list;
首先,您必须检索本地主机上可用的IB设备列表。这个列表中的每个设备都包含一个名称和一个GUID。
2.Open the requested device;
浏览设备列表,根据设备的GUID或名称选择设备并打开。
3.Query the device capabilities;
设备功能允许用户了解所打开设备的支持功能(APM、SRQ)和功能。
4.Allocate a Protection Domain to contain your resources;
保护域(PD)允许用户限制哪些组件只能相互交互。这些组件可以是AH、QP、MR、MW和SRQ。
5.Register a memory region;
VPI只适用于注册内存。任何在进程的虚拟空间中有效的内存缓冲区都可以注册。在注册过程中,用户设置内存权限,并接收本地和远程键(lkey/rkey),这些键稍后将用于引用这个内存缓冲区。
6.Create a Completion Queue (CQ);
CQ包含完成的工作请求(WR)。每个WR将生成一个放置在CQ上的完成队列条目(CQE)。CQE将指定WR是否成功完成。
7.Create a Queue Pair (QP);
创建QP还将创建关联的发送队列和接收队列。
8.Bring up a QP;
创建的QP仍然不能使用,直到它经过几个状态的转换,最终到达准备发送(RTS)。这为QP提供了发送/接收数据所需的信息。
9.Post work requests and poll for completion;
使用创建的QP进行通信操作。
10.Cleanup;
按创建对象的相反顺序销毁对象:
删除QP
删除CQ
取消注册
释放PD
关闭设备
…
翻译:https://docs.nvidia.com/networking/display/RDMAAwareProgrammingv17/Typical+Application
网上可以跑通的demo:https://github.com/tarickb/the-geek-in-the-corner