RDMA示例

这是一个比较有趣的技术吧,可以直接访问远端内存,而不需要远端cpu相应来处理。

更多的介绍可以参考其他文章。这里主要是尝试构建一个简单的示例来展示rdma的基本使用。

 

参考官方文档, 可以比较简单的跑起来一个测试程序

我拷到了一个仓库里,可以直接打开测试。

 

下面讲述一下里面的一个操作流程。

如果内容上,对名词等有不懂的话,可以期待下我的另一篇文章~

 

初始化

获取设备上下文

ibv_get_device_name获取设备列表

然后ibv_open_device来打开其中一个设备,获取上下文

然后可以把列表释放掉ibv_free_device_list

 

随后测试端口可否来通信ibv_query_port

 

申请保护域

 

ibv_alloc_pd

 

 

创建完成队列

ibv_create_cq

 

绑定内存

申请一块用来存储数据,随后用ibv_reg_mr来注册获得mr

 

创建队列对

初始化ibv_qp_init_attr的参数包含消息队列长度,接收队列等信息,使用ibv_create_qp创建qp

 

 

连接队列对

 

先用ibv_modify_qp初始化qp,状态,rtr rts等信息,

 

通信

发起

接收端 告知准备好接收ibv_post_recv

发送端 发送数据 ibv_post_send

 

等待完成

不断ibv_poll_cq查询完成队列是否完成。确认后完成一次传输

 

 

销毁

倒序销毁前面建立的对象即可

ibv_destroy_qp

ibv_dereg_mr

销毁内存

ibv_destroy_cq

ibv_dealloc_pd

ibv_close_device

 

更详细的内容可以参考我的仓库里面,可以直接跑起来示例。仓库(来都来了,star一下呗~~)

如果希望更多的内容可以留言啊,不定期更新

上一篇:“黑科技”RDMA如何帮助深度学习模型优化通信网络?


下一篇:SparkRDMA:使用RDMA技术提升Spark的Shuffle性能