如何使用RDMA在Windows下将一块内存从一台服务器复制到另一台服务器?我们没有infiniband,但我们有10GB的网络交换机。我需要的只是一个例子,但我对谷歌没有太多运气。
修改
到目前为止,还没有人回答我的问题。我只需要一个示例的链接,或一些函数的名称。到目前为止,我所阅读的所有内容似乎都在驱动程序SDK或套接字中。我想在我们的软件中使用RDMA来更新主服务器的本地数据副本。数据大小高达10GB。大多数情况下更新大约为1GB,但如果服务器必须重新启动,则整个压缩数据集为10GB。我想几乎连续更新一些数据,RDMA似乎是要采取的路线。
答案 0 :(得分:5)
您需要NetworkDirect API。 使用NetworkDirect编写内容时,没有任何文档,只有 界面说明 。 我能找到的最接近文档的是starting from here,然后深入到每个链接。 但您可以查看ND tests source code以获取用法示例。
答案 1 :(得分:2)
OpenFabrics Enterprise Distribution for Windows提供类似于Linux上常用的libibverbs接口。主要区别似乎在于处理完成通道:在Linux上,您将轮询文件描述符,但在Windows上,有一个(sparsely documented)I / O完成基于端口的帮助程序库。 Windows OFED(WinOF)libibverbs是winverbs之上的包装器,winverbs是一个基于COM的API,可以镜像libibverbs和相关的驱动程序。当然,根据this thread,NetworkDirect是Microsoft要求硬件供应商支持的唯一API。
答案 2 :(得分:2)
Isis2(isis2.codeplex.com)现在支持Linux和Windows上的RDMA,MPI也支持。我建议您使用这些类型的现有库。 RDMA非常难以直接使用(我过去一年大部分时间都在为Isis2添加RDMA支持)。文档很糟糕,只有少数设备实际上提供RDMA(虽然设置正在增加),一旦你理解了你需要做什么,实际上这样做也很难。如果你很好奇,请查看INFINIBAND的Isis2代码 - 我的东西是开源的。
我没有任何关于Windows I / O完成机制的经验,Trevor提到,但只是指出显而易见的:如果你不局限于Linux和Windows常见的方面,你最终会得到非便携式代码。所以这也是一个问题 - 只有RDMA的某些方面可以在两个平台上运行,并且可以通过反复试验找到答案!