代码之家  ›  专栏  ›  技术社区  ›  Andy Grover

调用rdma_disconnect()后以同步或异步方式返回已发布的recv缓冲区

  •  3
  • Andy Grover  · 技术社区  · 15 年前

    调用rdma_disconnect()时,我是在rdma_disconnect()返回之前获取所有已发布的recv工作请求的完成队列事件,还是在rdma_disconnect()返回之后期望它们进入?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Roland    14 年前

    在rdma_disconnect()返回后,接收将异步(可能)完成(以“刷新错误”状态)。从rdma_disconnect()的源代码中可以看到,它所做的只是将qp转换为错误状态并向另一端发送一个disconnect请求。

    将qp转换为错误状态确实可以保证所有发布到qp的挂起工作请求都将以错误状态完成,但是modify qp操作将立即返回,而不等待队列排出。类似地,rdma_disconnect()不会等待所有挂起的工作请求完成——事实上,很难看到它是如何完成的,因为rdma cm实际上没有任何方法知道排队的工作请求有多少,更不用说查看相关的cq来查看它们何时全部完成。

    IB规范第1卷第10章非常详细地讨论了工作请求处理,如果您想知道在过渡到错误状态时正在运行的请求的角落情况,等等。