仲間の 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() ドキュメントのタイムアウトの説明は、送信者のみが ACK を待機するため、タイムアウトは送信 (rdma_get_send_comp()) にのみ適用されることを示唆しているようです。しかし、受信にもタイムアウトを許可することに問題はありません。
この場合、rdma_get_recv_comp() 内でのハングが予想される場合、どうすればそれを回避したり、タイムアウトを実装したりできますか?
いくつかの可能性:
サーバーで rdma_get_recv_comp() がハングしたままにならないように、必要なすべての送信を実行するようにクライアントのシャットダウン シーケンスを変更しますか?
rdma_get_recv_comp() を、受信完了をポーリングするループに置き換えます