我最近开始使用Infiniband卡,两个Mellanox Technologies MT27700系列[ConnectX-4]具体。最后,我想扩展一个基于VPI Verbs API / RDMA CM API的接口的现有框架。
关于我在RDMA编程上所做的研究:我从阅读Mellanox' RDMA Aware Networks Programming User Manual开始。其次,我读了a quite comprehensive blog关于VPI动词/ RDMA动词的功能。最后,我阅读了Tarick Bedeir发表的关于RDMA编程的三篇论文:[1],[2],[3]。
为了了解什么是最适合我的需求,我创建了一个测试平台来测量延迟,CPU使用率和吞吐量等。我测试了不同的操作(参见下面的表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_post_send
或IBV_WR_RDMA_WRITE
从远程内存中读取时,我都必须调用IBV_WR_RDMA_READ
,分别。所以,我的问题是,是否可以将远程内存地址映射到主机的虚拟地址空间。
当然,所有初始化VPI组件,使用ibv_reg_mr
注册内存,以及交换远程密钥和地址仍然必须完成。 Infiniband能提供任何可能的功能吗?
谢谢!
答案 0 :(得分:3)
没有本机方式可以提供您正在寻找的RDMA功能。 RDMA被设计为一种网络协议,它依赖于用户应用程序来提交上面定义的表单的工作请求。然而,虽然这不是原始协议的一部分,但我认为实现一个通过本地存储空间提供远程内存访问的层并非完全不可能 - 但我不知道任何这样的系统。
最让人想到的是内存分解解决方案,它基本上允许您在充分利用本地内存时使用远程内存。以下是此类系统的示例:https://github.com/SymbioticLab/infiniswap