【问题标题】:How could I detect the completion of a RDMA read / write我怎样才能检测到 RDMA 读/写的完成
【发布时间】:2020-11-30 04:12:08
【问题描述】:

我是 RDMA 的新手。现在,我正在学习使用 RDMA 读/写。如果客户端向服务器发布写入/读取。客户端如何知道写入/读取是否成功完成?换句话说,如何知道写入已经应用到服务器,以及如何知道数据已经从服务器读取。

我通过https://github.com/jcxue/RDMA-Tutorial 中的教程学习 RDMA。它通过轮询两个内存位置 start 和 end 来检测完成。

while ((*msg_start != 'A') && (*msg_end != 'A')) {
}

是否只有这种方式可以检测写入/读取的完成?不轮询内存中的数据还有其他方法吗?

谢谢!

【问题讨论】:

    标签: rdma


    【解决方案1】:

    我无法在您链接的 github 存储库中找到您引用的代码,但无论如何代码都不正确 - RDMA 适配器可能会以任何顺序从 RDMA 操作将数据写入内存,所以它是可能缓冲区的第一个字节和最后一个字节都已填充,但缓冲区的中间部分尚未传输。 (尽管在实践中,例如 Mellanox 适配器的排序确实比规范严格要求的要强)

    客户端检查 RDMA 操作是否已完成的正确方法是轮询完成。 RDMA 操作被提交到发送队列,每个发送队列都有一个完成队列(CQ)附加到它上面。当 RDMA 操作完成时,会生成一个完成并添加该 CQ,客户端可以轮询该 CQ 以查看它是否存在。

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2016-05-19
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多