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

时间:2013-09-12 05:27:12

标签: rdma

我想知道启动RDMA时操作系统的作用。谁启动了操作系统或CPU? RDMA启动后OS会发生什么?

3 个答案:

答案 0 :(得分:2)

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

无论如何,RDMA描述了NIC / HCA通过该机器的NIC / HCA(无需CPU)访问远程机器上的内存的能力,无论是在本地机器还是远程机器上。 RDMA还包括DMA,这意味着网卡可以访问本地计算机上没有CPU的物理内存。

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

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 Write。

驱动程序将命令提供给网卡(反过来,某些应用程序可以给出请求)。从这时起,该卡将完成所有工作,无需双方的CPU(即无操作系统)。

当命令完成时,发送方的网卡可能会生成将由驱动程序(OS)拾取的事件。在接收器端,操作系统将完全不知道RDMA写操作刚刚发生。接收方需要定期检查所请求地址的内存以了解数据何时到达,或者有其他机制(有很多选项,不想详细介绍)。

还有其他RDMA命令,比如RDMA Read,但我认为现在主要的想法是明确的。

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

答案 1 :(得分:2)

在CPU上运行的程序与OS一起启动RDMA传输。它负责设置可以进行RDMA读取或RDMA写入的内存区域的所有API调用。操作系统是程序和支持RDMA的硬件之间的中介。

程序调用是操作系统的用武之地。有些是内核驱动程序,有些是用户空间。有很多用户空间和内核驱动程序。

在RDMA传输之前所​​需的一个调用是OS系统调用,以创建无法从RAM中分页的固定内存或内存。

另一个API调用使用Infiniband HBA或RDMA NIC注册该内存区域。

还有其他调用可以为传输设置并配置各种参数。

流控制还需要其他发送/接收调用,这些调用不是RDMA,而是异步完成。

最后还有RDMA阅读&自己写电话。当这些调用正在运行时,CPU没有做任何工作。

答案 2 :(得分:1)

RDMA实际上相当难以使​​用。我已经开始在Isis2(Isis2.codeplex.com)中支持它,这是我们在康奈尔创建的用于数据复制,容错和分布式一致性的系统。大多数人在EC2等云平台上使用它,但您也可以将Isis2配置为在其他Linux或Windows设置中运行,通过UDP,IPMC,TCP或RDMA运行(目前仅通过Infiniband进行测试,但我们将很快在RDMA以太网上进行测试)

我可以说的是,我老实说从未发现过更难以使用的技术。 RDMA更像是一种硬件功能,而不是通常直接使用的任何功能。

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