如何利用Windows中的RDMA

如何使用RDMA在Windows下将内存块从一台服务器复制到另一台服务器? 我们没有infiniband,但是我们有10gbnetworking交换机。 我所需要的只是一个例子,但我没有太多的运气与谷歌。

编辑:

那么到目前为止没有人回答我的问题。 我只需要一个例子的链接,或者一些函数的名字。 目前为止,我读过的所有东西似乎都在驱动程序SDK或套接字中。 我想在我们的软件中使用RDMA更新来自主服务器的本地数据副本。 数据大小可达10GB。 大多数情况下,更新大约为1GB,但是如果服务器必须重新启动,则整个压缩数据集为10GB。 我想几乎连续地更新一些数据,而RDMA似乎是要采取的路线。

您需要NetworkDirect API。 没有关于如何使用NetworkDirect写东西的文档,只有接口描述 。 最接近我能找到的文档是从这里开始 ,然后深入到每个链接。 但是您可以查看使用示例的ND测试源代码 。

Windows的OpenFabrics Enterprise Distribution提供了一个类似于Linux上常用的libibverbs接口。 主要区别似乎在于处理完成通道:在Linux上,您将轮询文件描述符,但在Windows上,有一个( 稀疏记录的 )I / O完成基于端口的帮助程序库。 Windows OFED(WinOF)libibverbs是一个基于COM的API函数 – 一个映射libibverbs和相关驱动程序的API的封装。 当然,根据这个线程 ,NetworkDirect是微软要求硬件供应商支持的唯一的API。

Isis2(isis2.codeplex.com)现在支持Linux和Windows上的RDMA以及MPI。 我建议你使用这些现有的库。 RDMA非常难以直接使用(在过去的一年中,我花费了很多时间来为Isis2添加RDMA支持)。 文档是可怕的,只有少数设备实际上提供RDMA(虽然集合正在增加),一旦你明白你需要做什么,实际上做的也很难。 查看INFINIBAND的Isis2代码,如果你好奇 – 我的东西是开源的。

我对Trevor提到的Windows I / O完成机制没有任何经验,只是指出了一些显而易见的事情:如果不将自己局限于Linux和Windows常见的方面,则最终将得到不可移植的代码。 所以这也是一个问题 – 只有RDMA的一些方面在这两个平台上工作,并且通过反复试验发现了这一点。