2015-09-24 15 views
1

让两个infiniband进程在两台机器上执行。当一个进程终止时,其所有资源(分配的文件,缓冲区等)都将被释放,即使进程注册的内存为RDMA WRITE/READ操作。当远程内存缓冲区被操作系统解除锁定时,RDMA WRITE/READ如何运行?

有人可以参考其他进程上的远程通道适配器如何知道缓冲区内存现在是空闲的吗? infiniband栈的哪个元素可以控制这个控件,以及何时?

+0

如果数据正在直接传输到进程拥有的内存,则取决于本地计算机上的驱动程序,以确保当进程退出时传输被中止和/或进程退出延迟到其完成或中止。驱动程序也可以使用驱动程序拥有的中间缓冲区来代替。 –

+0

@RossRidge,然而,在RDMA WRITE/READ的情况下情况不同,因为远程进程没有通知执行这些操作。我的理解是没有任何机制(中断,驱动程序回调......)通知远程进程实际上在其缓冲区中发生了什么。它是否允许进程继续在远程可用内存上读取或写入?或者当内存被释放时执行“特殊”操作? –

+0

没有任何变化。与退出进程相同的机器上的驱动程序必须确保传输被中止,进程不会退出,或者进程内存实际上并未被硬件首先访问。 –

回答

1

当一个Linux进程终止其所有打开的文件描述符被关闭。使用RDMA的进程将有一个打开的设备文件与ib_uverbs模块连接。当该文件描述符关闭时,模块会清理进程打开的每个打开的RDMA资源,包括任何内存区域和队列对。这种清理包括通知HCA的驱动程序并通过设备本身。

如果远程机器继续尝试执行RDMA操作,HCA将拒绝其请求,因为相关资源将被关闭。

+0

感谢您提供那些有价值的细节。 'HCA会拒绝它的请求'你的意思是HCA在收到远程rdma读/写后不会发送并确认ou NACK? –

+0

如果MR已关闭但QP仍处于开放状态,HCA需要发送NAK。一旦QP关闭,如果我记得正确,似乎没有反应。 –

+0

再次感谢您的时间(+1) –

相关问题