当 OS 取消固定远程内存缓冲区时,RDMA WRITE/READ 的行为如何?

How RDMA WRITE/READ behaves when the remote memory buffer is unpinned by the OS?

让两个infiniband进程在两台机器上执行。当一个进程终止时,它的所有资源(分配的文件、缓冲区等)都将被释放,甚至是该进程为 RDMA WRITE/READ 操作注册的内存。

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

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

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

当连接的对等体退出但未发送断开连接时,IB 核心启动清理过程,如果它是 RC QP,该过程还会向另一个 RNIC 发送 RDMA DISCONNECT MAD 数据包。在看到断开连接时,另一端 RNIC 清理它是 SQs/RQs 和东西