関数 ibv_post_recv() は -1 を返しますが、ドキュメントによると、errno を返す必要があります。
この場合、失敗の理由を知るにはどうすればよいですか?
よろしくお願いします、
関数 ibv_post_recv() は -1 を返しますが、ドキュメントによると、errno を返す必要があります。
この場合、失敗の理由を知るにはどうすればよいですか?
よろしくお願いします、
使用している低レベルのハードウェア ドライバーは何ですか? バージョンは?libmlx4 (Mellanox ConnectX/ConnectX-2/ConnectX-3) だと思います。
その場合、バージョン >= libmlx4 1.0.2 では実際にこれが修正されています -- ibv_post_send() は -1 ではなくエラー コードを返します。
いずれにせよ (そして、これは実際には低レベルのドライバーにあまり依存していません。libmthca、libcxgb4 などはほとんど同じだと思います)、ibv_post_send()
すぐにエラーが返される理由は次のとおりです。
送信キューがいっぱいです (つまり、収集されていない完了でポストされた送信の数が送信キューのサイズ >= です)。
送信 WR のオペコードが無効です
収集エントリの数が無効です (送信キューの作成時に指定された <= 0 または > max gs エントリのいずれか)
インライン データが送信キューの最大インライン データより大きい
編集:質問を読むのが速すぎて混乱ibv_post_recv()
しているようibv_post_send()
です. の答えibv_post_recv()
はほとんど同じですが、少し単純です。ibv_post_recv()
基本的に、エラーを返す唯一の理由は次のとおりです。
受信キューがいっぱいです
受信作業要求内のスキャッター エントリの数が無効です
-1を返し、 errno を設定します。関数が戻ったときに errno 値を確認します。