本地内存操作的 RDMA 读保护

RDMA Read protection for local memory operations

我有以下场景:我的服务器分配了一个 1MB 的缓冲区,它会定期更新和写入(大约每 50 毫秒)。客户端通过 Infiniband 连接到服务器,并通过 RDMA Read 定期读取该缓冲区(可能比更新速度更快)。

我的问题是:有没有办法保证本地写操作是原子的,使得RDMA读只能读到有效且连续的内存?

我是否正确理解内存区域仅受到并行 RDMA 操作的保护,而不是本地内存操作?有什么方法可以使用 ibverbs API?

答案可能取决于设备。在 RDMA 动词中,有两种不同的原子操作模式(可以使用 ibv_query_device 动词来检查)。对于 IBV_ATOMIC_HCA,原子操作仅相对于来自同一设备的其他操作是原子的,而 IBV_ATOMIC_GLOB 意味着它们对于 CPU 操作和其他 RDMA 设备也是原子的。

如果设备使用 IBV_ATOMIC_HCA,您需要将 RDMA 读取与 CPU 写入同步以确保数据一致性。