本地内存操作的 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 写入同步以确保数据一致性。
我有以下场景:我的服务器分配了一个 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 写入同步以确保数据一致性。