0

関数 ibv_post_recv() は -1 を返しますが、ドキュメントによると、errno を返す必要があります。

この場合、失敗の理由を知るにはどうすればよいですか?

よろしくお願いします、

4

2 に答える 2

0

使用している低レベルのハードウェア ドライバーは何ですか? バージョンは?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()基本的に、エラーを返す唯一の理由は次のとおりです。

  • 受信キューがいっぱいです

  • 受信作業要求内のスキャッター エントリの数が無効です

于 2013-05-15T13:37:54.823 に答える
0

-1返し、 errno を設定します。関数が戻ったときに errno 値を確認します。

于 2013-05-14T18:34:55.717 に答える