仲間のRDMAハッカーは、いつでも__ibv_get_cq_event()を呼び出すrdma_get_recv_comp()がタイムアウトしたことを知っていますか?rdma_get_recv_comp()または__ibv_get_cq_event()でスタックされないようにするにはどうすればいいですか?
私の問題は、ここに示すように、同じプログラムである: RDMA program randomly hangs
それは正常に動作しますが、それはランダムなクライアントが切断に対して堅牢ではありません。具体的には、強制的にクライアントを強制終了すると、サーバは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を()残していないように、必要に応じて、送信するすべての実行しますか?
受ける補完