首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测RDMA读/写的完成

如何检测RDMA读/写的完成
EN

Stack Overflow用户
提问于 2020-11-29 10:53:13
回答 1查看 161关注 0票数 0

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

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

代码语言:javascript
复制
while ((*msg_start != 'A') && (*msg_end != 'A')) {
}

是否只有这种方法才能检测写/读的完成?有没有其他方法不轮询内存中的数据?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-11-30 04:12:09

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65056586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档