首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程直接内存访问和操作系统

远程直接内存访问和操作系统
EN

Stack Overflow用户
提问于 2013-09-12 13:27:12
回答 3查看 1.1K关注 0票数 1

我想知道启动RDMA时操作系统的作用。是谁启动它的操作系统还是CPU?RDMA启动后,操作系统会发生什么情况?

EN

回答 3

Stack Overflow用户

发布于 2013-09-13 07:52:10

“启动RDMA”是什么意思?它是否真正开始使用RDMA读/写数据,或者为了启用RDMA而需要做的所有准备工作?

无论如何,RDMA描述了NIC/HCA通过远程机器上的NIC/HCA访问该机器上的内存的能力,该机器的NIC/HCA没有涉及到本地和远程机器上的CPU。RDMA还包括DMA,这意味着网卡可以在没有CPU参与的情况下访问本地机器上的物理内存。

网卡获得以下类型的订单:

代码语言:javascript
复制
Take the buffer that is located on the local machine at address ADDR_LOCAL
of size SIZE and write it to remote machine's memory at address ADDR_REMOTE.

此操作示例称为RDMA写入。

命令由驱动程序发送给网卡(反过来,驱动程序可以由某个应用程序发出请求)。从现在开始,该卡将在没有CPU的情况下完成两端的所有工作(即,没有操作系统)。

当命令完成时,发送器侧的网卡可以生成将由驱动程序(OS)拾取的事件。在接收端,OS将完全不知道RDMA写入操作刚刚发生。接收方将需要定期检查请求地址的内存,以了解数据何时到达,或者具有一些其他机制(有许多选择,不想深入讨论太多细节)。

还有其他的RDMA命令,比如RDMA Read,但我认为主要思想现在已经很清楚了。

但是,请注意,为了能够执行RDMA命令,驱动程序必须准备所有的基础设施:必须注册和固定from/to内存缓冲区,以防止它们在RDMA命令执行期间换出,本地网卡必须知道遥控器的机器内存密钥,等等。所有这些准备工作都是由两台机器上的驱动程序完成的。

票数 2
EN

Stack Overflow用户

发布于 2014-06-12 09:47:35

在CPU和OS上运行的程序会启动RDMA传输。它负责设置内存区域的所有API调用,这些内存区域将能够被RDMA读取或写入。操作系统是程序和支持RDMA的硬件之间的中介。

你的程序发出的调用就是操作系统的用武之地。有些在内核驱动程序中,有些在用户空间。这里混合了用户空间和内核驱动程序。

在RDMA传输之前需要调用的一个调用是OS系统调用,用于创建固定的内存或不能从RAM中调出的内存。

另一个API调用将固定的内存区域注册到Infiniband HBA或RDMA NIC。

还有一些调用用于设置传输和配置各种参数。

流控制还需要其他一些send/recv调用,这些调用不是RDMA,而是异步完成的。

最后是RDMA读写调用本身。当这些调用正在运行时,CPU不做任何工作。

票数 2
EN

Stack Overflow用户

发布于 2014-07-11 20:50:58

RDMA实际上很难使用。我已经开始在Isis2 (Isis2.codeplex.com)中支持它,这是我们在康奈尔大学创建的一个用于数据复制、容错和分布式一致性的系统。它主要用在云平台上,比如EC2,但你也可以配置Isis2在其他的Linux或Windows设置上运行,通过UDP、IPMC、TCP或RDMA (目前只在Infiniband上测试,但我们很快就会在RDMA Ethernet上测试)

我的建议:使用MPI (广泛流行的高性能计算系统)或我的Isis2库中的RDMA。不要试图直接使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18755999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档