2

我最近开始使用 Infiniband 卡,具体来说是两个 Mellanox Technologies MT27700 系列 [ConnectX-4]。最终,我想使用基于 VPI Verbs API/RDMA CM API 的接口扩展现有框架。

关于我已经对 RDMA 编程进行的研究:我首先阅读了Mellanox 的 RDMA Aware Networks Programming User Manual。其次,我阅读了一篇关于 VPI Verbs/RDMA Verbs 功能的相当全面的博客。最后,我阅读了 Tarick Bedeir 发表的三篇关于 RDMA 编程的论文:[1][2][3]

为了了解什么最适合我的需求,我创建了一个测试平台来测量延迟、CPU 使用率和吞吐量等。我测试了不同的操作(见下表 1)、不同的发送标志(例如IBV_SEND_INLINE)以及检索工作完成的不同方式(忙轮询与等待完成通道中的事件)。我的测试台的部分灵感来自这项 RDMA 编程性能研究的结果。

OPCODE                      | IBV_QPT_UD | IBV_QPT_UC | IBV_QPT_RC
----------------------------+------------+------------+-----------
IBV_WR_SEND                 |     X      |     X      |     X
IBV_WR_SEND_WITH_IMM        |     X      |     X      |     X
IBV_WR_RDMA_WRITE           |            |     X      |     X
IBV_WR_RDMA_WRITE_WITH_IMM  |            |     X      |     X
IBV_WR_RDMA_READ            |            |            |     X
IBV_WR_ATOMIC_CMP_AND_SWP   |            |            |     X
IBV_WR_ATOMIC_FETCH_AND_ADD |            |            |     X

[表1来源]

目前,我仍在寻找所有可能性。

我注意到的一件事是,每次我想分别用oribv_post_send写入远程内存或从远程内存中读取时,我都必须调用它。所以,我的问题是是否可以将远程内存地址映射到主机的虚拟地址空间。IBV_WR_RDMA_WRITEIBV_WR_RDMA_READ

当然,VPI 组件的所有初始化、内存注册ibv_reg_mr以及远程密钥和地址的交换都必须完成。Infiniband 是否提供任何使这成为可能的东西?

谢谢!

4

1 回答 1

4

没有本地方法可以提供您正在寻找的 RDMA 功能。RDMA 被设计为一种网络协议,它依赖于用户应用程序来提交上述形式的工作请求。然而,虽然这不是原始协议的一部分,但我相信实现一个通过本地内存空间提供远程内存访问的层并非完全不可能——但我不知道有任何这样的系统。

想到的最接近的事情是内存分解解决方案,它基本上可以让您在充分利用本地内存时使用远程内存。这是此类系统的示例:https ://github.com/SymbioticLab/infiniswap

于 2018-06-12T20:31:02.687 回答