問題タブ [rdma]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
448 参照

c - rdma 接続マネージャー ドライバー パターン

アプリケーションにインフィニバンド ドライバーの OFED 3.18r2 実装を使用しています。特に、rdma 接続マネージャーのラッパー関数を使用しています。内部で何が起こっているのかをよりよく理解するために、私はソースコードを見ることに慣れています。こうやってパターンみたいなのが出てくるんだけど理解できない。例を挙げましょう。rdma 接続マネージャー関数は cma.c にあります。rdma_listen 呼び出しの例を見てください (これは、「rdma_」で始まるライブラリで定義されているほぼすべての関数に共通です)。

ここで、前に述べたパターンを見ることができます。

write 呼び出しの最初の引数は、 /dev/infiniband/rdma_cmに関連付けられたファイル記述子ですが、 cmd引数の使用法を理解できません。ソースを調べてみると、 cmdが rdma cm 関数呼び出しの ABI 定義に使用される構造体であることがわかりました。これがデバイスドライバー呼び出しを実行する一般的なパターンであるかどうか、およびそれがどのように機能するか、cmd引数に関連付けられた実際のコードはどこにあるのか、私には本当にわかりません。手伝っていただけませんか?

0 投票する
1 に答える
588 参照

infiniband - RDMA プログラムがランダムにハングする

RDMA_CM ライブラリを使用して RDMA プログラミングを行った人はいますか?

勉強する簡単な例でさえ見つけるのに苦労しています。librdmacm に rdma_client & rdma_server の例がありますが、ループでは実行されません (rping はループしますが、rdma_cm 関数の代わりに IB 動詞を直接使用して記述されています)。

簡単なピンポン プログラムを作成しましたが、1 回から 100 回のバウンス後にどこでもロックしてしまいます。クライアント内にスリープを追加すると、競合状態を示すハングするまでの時間が長くなることがわかりました。

クライアントは rdma_get_send_comp() でスタックし、サーバーは rdma_get_recv_comp() でスタックします。

私の限られた理解は、すべての rdma_post_send() の前に、送信後に来る rdma_post_recv() を発行する必要があるということです。また、すべての送信 (最初のクライアント送信を除く) の前に、相手側が受信する準備ができていることを示すメッセージ (rdma_get_recv()) を待つ必要があります。

何が間違っている可能性がありますか?

0 投票する
0 に答える
268 参照

rdma - RDMA 経由でトラフィックを送信できません

SUSE Linux SP11 に softROCE をセットアップしました。RXE デバイス経由のトラフィックを検証しようとしています。を使用してトラフィックを送受信できますibv_*_pingpong。しかし、rpingの場合、それは与えられ、エラーになりますRDMA_CM_EVENT_UNREACHABLE, error -110

0 投票する
1 に答える
734 参照

infiniband - libibverbs Hello World

libibverbs で Infiniband を使用する短い「Hello World」の例を見つけようとしています。これは良い方向に進みますが、端末への「Hello World」の書き込みは 800 行未満で可能になるはずです。私はこのようなものを望んでいました。

0 投票する
1 に答える
458 参照

linux-kernel - Linux で IRQ を無効にすると rdma_read と rdma_write が失敗するのはなぜですか?

Mellanox インフィニバンド HCA で接続された 2 台のホスト マシンがあります。あるマシン (クライアント) から別のマシン (サーバー) で RDMA 書き込みおよび RDMA 読み取り操作を実行する単純な RDMA アプリケーションを実行しています。各マシンの HCA カードに関連する割り込みを確認するために、次のコマンドを実行しました。

__disable_irq()サーバー マシンで、これら 4 つの割り込みで関数を使用すると、クライアントによって実行されるすべての RDMA 読み取り/書き込み操作が失敗し、「トランスポート リトライ カウンターが超過しました」というエラー メッセージが表示されることを実験しました。

私の質問は、RDMA 読み取り/書き込み操作がリモート マシンで irq を生成できる理由と時期です。リモート CPU が関与しなければ、いかなる種類の IRQ も実行しないと思いました。

では、なぜこれらの割り込みを無効にすると、これらの操作が失敗するのでしょうか?

0 投票する
2 に答える
674 参照

c - リモート メモリ バッファが OS によってピン留めされていない場合、RDMA WRITE/READ はどのように動作しますか?

2 台のマシンで 2 つのインフィニバンド プロセスを実行します。1 つのプロセスが終了すると、すべてのリソース (割り当てられたファイル、バッファーなど) が解放され、プロセスがRDMAWRITE/READ 操作用に登録したメモリも解放されます。

他のプロセスのリモートチャネルアダプタがバッファメモリが解放されたことをどのように知っているかについて、誰かが参照できますか? これはインフィニバンド スタックのどの要素をいつ制御しますか?

0 投票する
1 に答える
368 参照

infiniband - RDMA WRITE: ibv_wc.byte_len が、書き込もうとしているものと一致しません

私は、Mellanox Infiniband ハードウェアで RDMA を使用している Infiniband/RDMA 初心者です。ここでソースコードを使用しました。このプログラムは、一見したところごく普通に実行されます。サーバーは、RDMA_WRITE 操作を使用してクライアント メモリに数バイトを書き込みます。しかし、後で、書き込み完了構造体 (ibv_wc) によって示される転送バイト数が、ibv_send_wr 構造体に入れたデータの量と一致しないことがわかりました。以下は、rdma_write() での ibv_send_wr 初期化のコードです。

次に、書き込み完了キューに書き込み完了エントリを取得した後、ibv_wc.byte_len を読み取ります。32537、32743、32533 の乱数が表示されます。ibv_wc.status が IBV_WC_SUCCESS と等しいため、転送は成功したと思います。私は何か間違ったことをしましたか?