如何让服务器通过 RDMA 写入客户端设备的内存区域

问题描述

正如标题所示,我正在尝试将数据发送到客户端(通过 RDMA),而不是客户端发送到服务器。我可以在该主题上找到的所有示例都是客户端到服务器。有没有我可以参考的资源/参考资料?

解决方法

当将 libibverbs 库用于 RDMA 动词时,在大多数情况下,没有客户端和服务器的概念。使用带外通道(TCP 或 RDMA CM)在两个队列对之间建立连接,然后使用交换的连接信息配置 QP。建立连接后,如果 QP 配置允许,双方都可以使用 RDMA 单边操作。

此类应用程序的一个示例是 perftest,它与 TCP(或 RDMA CM)交换连接信息,然后测量 RDMA 单侧和双侧操作的性能。

对于 librdmacm 和 rsockets,有一个服务器(侦听 ID 或套接字)和一个客户端的概念。尽管如此,在建立连接后,双方都可以使用 RDMA。您可以在 rdma-core 存储库中找到两者的示例。例如,rping 使用 RDMA CM 并调用从服务器到客户端的 RDMA 读取和写入,而 riostream 使用 rsockets 并从客户端和服务器调用 RDMA 写入。