各位 RDMA 黑客,有谁知道调用 __ibv_get_cq_event() 的 rdma_get_recv_comp() 是否超时?
我的问题与此处显示的程序相同: RDMA 程序随机挂起
它工作正常,但它对随机客户端断开连接并不稳健。具体来说,如果我强行杀死客户端,那么服务器就会卡在 rdma_get_recv_comp() / ipv_get_cq_event() 中。
这是针对 Mellanox ConnectX-3 的,我检查了默认超时是 2.14 秒,重试次数 = 1。但我不清楚阻塞模式下的 ibv_get_cq_event() 是否会超时。ibv_modify_qp() 文档中对超时的解释似乎表明超时仅适用于发送 (rdma_get_send_comp()),因为只有发送方等待 ACK。但我认为允许接收也有超时没有任何困难。
如果在这种情况下预计会挂在 rdma_get_recv_comp() 内,我该如何避免它或实现超时?
一些可能性:
更改我的客户端关闭顺序,以便它执行所有必要的发送,这样它就不会让服务器上的 rdma_get_recv_comp() 挂起?
用轮询接收完成的循环替换 rdma_get_recv_comp()