使用 Infiniband 将远程内存映射到主机的地址 space
Mapping remote memory into the address space of a host using Inifiniband
我最近开始使用 Infiniband 卡,具体来说是两个 Mellanox Technologies MT27700 系列 [ConnectX-4]。最终,我想使用基于 VPI Verbs API/RDMA CM API.
的接口扩展现有框架
关于我已经对 RDMA 编程进行的研究:我从阅读 Mellanox' RDMA Aware Networks Programming User Manual. Secondly, I read a quite comprehensive blog written on the capabilities of the VPI Verbs/RDMA Verbs. Finally, I read the three papers on RDMA programming, published by Tarick Bedeir: [1], [2], [3] 开始。
为了了解什么最适合我的需求,我创建了一个测试台来测量延迟、CPU 使用情况和吞吐量等。我测试了不同的操作(参见下面的 table 1)、不同的发送标志(例如 IBV_SEND_INLINE
)以及检索工作完成的不同方式(忙轮询与等待完成通道中的事件)。我的测试平台部分受到 this performance study on RDMA programming.
的启发。
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
目前,我还在摸索各种可能性。
我注意到的一件事是,每次我想写入远程内存或使用 IBV_WR_RDMA_WRITE
或 [=15= 从远程内存读取时,我都必须调用 ibv_post_send
], 分别。所以,我的问题是是否可以将远程内存地址映射到主机的虚拟地址space。
当然,VPI 组件的所有初始化、向 ibv_reg_mr
注册内存以及远程密钥和地址的交换仍然必须完成。 Infiniband 是否提供任何东西使之成为可能?
谢谢!
没有本地方法可以提供您正在寻找的 RDMA 功能。 RDMA 被设计为一种网络协议,它依赖于用户应用程序提交上述定义形式的工作请求。然而,虽然这不是原始协议的一部分,但我相信实现一个通过本地内存提供远程内存访问的层并非完全不可能 space - 但我不知道有任何这样的系统。
想到的最接近的事情是内存分解解决方案,基本上可以让您在充分利用本地内存时使用远程内存。这是此类系统的示例:https://github.com/SymbioticLab/infiniswap
我最近开始使用 Infiniband 卡,具体来说是两个 Mellanox Technologies MT27700 系列 [ConnectX-4]。最终,我想使用基于 VPI Verbs API/RDMA CM API.
的接口扩展现有框架关于我已经对 RDMA 编程进行的研究:我从阅读 Mellanox' RDMA Aware Networks Programming User Manual. Secondly, I read a quite comprehensive blog written on the capabilities of the VPI Verbs/RDMA Verbs. Finally, I read the three papers on RDMA programming, published by Tarick Bedeir: [1], [2], [3] 开始。
为了了解什么最适合我的需求,我创建了一个测试台来测量延迟、CPU 使用情况和吞吐量等。我测试了不同的操作(参见下面的 table 1)、不同的发送标志(例如 IBV_SEND_INLINE
)以及检索工作完成的不同方式(忙轮询与等待完成通道中的事件)。我的测试平台部分受到 this performance study on RDMA programming.
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
目前,我还在摸索各种可能性。
我注意到的一件事是,每次我想写入远程内存或使用 IBV_WR_RDMA_WRITE
或 [=15= 从远程内存读取时,我都必须调用 ibv_post_send
], 分别。所以,我的问题是是否可以将远程内存地址映射到主机的虚拟地址space。
当然,VPI 组件的所有初始化、向 ibv_reg_mr
注册内存以及远程密钥和地址的交换仍然必须完成。 Infiniband 是否提供任何东西使之成为可能?
谢谢!
没有本地方法可以提供您正在寻找的 RDMA 功能。 RDMA 被设计为一种网络协议,它依赖于用户应用程序提交上述定义形式的工作请求。然而,虽然这不是原始协议的一部分,但我相信实现一个通过本地内存提供远程内存访问的层并非完全不可能 space - 但我不知道有任何这样的系统。
想到的最接近的事情是内存分解解决方案,基本上可以让您在充分利用本地内存时使用远程内存。这是此类系统的示例:https://github.com/SymbioticLab/infiniswap