問題タブ [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.
c# - Windows CLR ベースのプラットフォームで LDMA または RDMA を使用できるメカニズムはありますか?
Windows CLR ベースのアプリケーション (.NET) で LDMA または RDMA を利用できるようにしたいと考えています。C++ で開発された低遅延アプリケーションがあり、それらのアプリケーションは LDMA または RDMA を使用してデータを受信します。おそらくパフォーマンスが低下することを理解した上で、CLR アプリケーションで同じ API を使用したいと考えています。
Windows には Windows Direct がありますが、.NET アプリケーションで Windows Direct を使用できるものは見たことがありません。Windows 用の真の SDP (ソケット ダイレクト プロトコル) の実装は見たことがありません。これを実現する方法を知っている人はいますか?
networking - rdma_disconnect() を呼び出した後、同期または非同期で返されたポストされた recv バッファー
rdma_disconnect() を呼び出すとき、rdma_disconnect() が戻る前にポストされたすべての recv 作業要求の完了キュー イベントを取得しますか? それとも rdma_disconnect() が戻った後にそれらが来ると期待すべきですか?
java - JavaでDMAまたはRDMAを使用するには?
ここでの「DMA」は、ダイレクト メモリ アクセスを意味し、「RDMA」はリモート ダイレクト メモリ アクセスを意味します。
Java を使用して株式データを転送するアプリケーションを作成しましたが、予想よりもレイテンシーが大きいことがわかりました。性能の良い「DMA/RDMA」を使った同種のアプリケーションを開発した人がいると聞いたので、「DMA/RDMA」をJavaで使えるのだろうか?
そうでない場合、どの言語を使用すればよいですか?また、使用するのに適したライブラリがあれば教えてください。
c - InfinibandデバイスのIPアドレスをプログラムで取得する
名前がアプリオリにわからないInfinibandインターフェースのinetアドレスをプログラムで見つけようとしています。
私はLinuxを使用していますが、ifconfig (8)
出力の解析は避けたいと思います。この回答の2番目のコメントを読みました。これgetifaddrs()
は、インターフェイスの取得に使用することを提案していますが、Infinibandのものを選択できません。
どんな助けでも大歓迎です。
infiniband - RDMA メモリ共有
Infiniband ネットワークで接続されたマルチコア コンピューターがいくつかあります。リモートのアトミック操作を使用して、共有メモリのプールで低レイテンシの計算を行いたいと考えています。私はRDMAが進むべき道であることを知っています。各ノードで、データ共有用のメモリ領域 (および保護ドメイン) を登録します。
オンライン RDMA の例は、多くの場合、シングルスレッド サーバーとシングルスレッド クライアント間の単一の接続に焦点を当てています。ここで、各 Infiniband ノードでマルチスレッド プロセスを実行したいと考えています。以下の点が非常に気になります...
合計で n ノードと m スレッドのクラスターの場合、各ノードでいくつのキュー ペアを準備する必要がありますか? 具体的には、同じノード上の複数のスレッドが同じキュー ペアを共有できますか?
各ノードでいくつの完了キューを準備する必要がありますか? 各ノードでリモートの読み取り/書き込み/cas 操作を発行する複数のスレッドを用意します。共通の完了キューを共有すると、完了イベントが混同されます。スレッドに独自の個別の完了キューがある場合、実際には多数の完了キューが存在します。
このソフトウェアを作成する代わりに、既存のライブラリを使用することをお勧めしますか? (うーん、それとも私が書いてオープンソースにするべきですか? :-)
親切な提案をありがとうございます。
mpi - 効率的な一方的なコミュニケーション
RDMA を効率的に実装するために使用できる効率的な片側通信ライブラリを探しています。
現在、私は MPICH2 や MVAPICH2 (RDMA を使用する MPI-2 のインフィニバンド アーキテクチャ ベースの実装) などの MPI-2 実装を調べてきました。
MVAPICH2 には、私が探している機能がたくさんありますが、残念ながら、私の大学では現在 InfiniBand アーキテクチャにアクセスできないため、それを使用できません。
だから私が本当に欲しいのは、通信プロセス間のオーバーヘッドを削減するという意味で効率的であると見なすことができる他のライブラリ(MPI実装バリアントである必要はない)があるかどうかです(例:ランデブープロトコルでハンドシェイクを回避し、ターゲットプロセスからオーバーヘッドをオフロードします)。
また、調理済みの適切なライブラリを見つけるのではなく、何か違うことをするのに役立つアドバイスをいただければ幸いです。
ありがとう。
c - tcp(カーネル)バイパスはどのように実装されていますか?
着信パケットを処理する際の Linux カーネルのオーバーヘッドを回避し、代わりにユーザー空間から直接パケットを取得したいとします。私は少しグーグルで調べましたが、発生する必要があるのは、いくつかのソケットオプションで生のソケットを使用することだけのようです。これは事実ですか?それとも、これよりも複雑ですか?もしそうなら、このようなものを実装するために何をグーグルまたは参照できますか?
tcp-ip - GAライブラリを使用したプロセス間通信
(GA)グローバルアレイライブラリ(ARMCIの実装)を使用して、異なるリモートマシンにある2つのプロセス間の通信を行う方法。
これは、一方のプロセスがデータを待機し、もう一方のプロセスがデータを転送するTCPソケットプログラミングに似ていますか?
ga_put()とga_get()がプロセス間通信に使用される2つの操作であるというドキュメントを確認しようとしています。これまでは、共有メモリアーキテクチャを使用する同じマシンで実行されるプログラムしか考えられませんでした(ga_put()とga_get()を使用して、データをグローバル配列に配置し、それぞれ取得しました)。
ここで、このプログラムを使用して、2つのリモートプロセス間でデータを通信する(基本的に片側通信を実行する)ようにします。明らかに、私が実行しているプログラムをリモート側の単一のマシンに配置するとうまくいきます。どのマシンにアクセスして適切なデータを取得する必要があるかを判断する方法が必要です。そして、ここで私はあなたの助けが必要です。これどうやってするの?(GAでのTCP / IPのリッスン、受け入れ、接続に相当するものは何ですか?)
それとも、GAがその下でTCP / IPソケットも使用している場合ですか?
誰かが私に説明してもらえますか?また、通信する2つのリモートプロセスのサンプルコードも評価できます。
ありがとう、
cuda - GPUからリモートホストへのGPUDirectRDMA転送
シナリオ:
Infinibandに接続されたクライアントとサーバーの2台のマシンがあります。サーバーマシンにはNVIDIAFermiGPUがありますが、クライアントマシンにはGPUがありません。いくつかの計算にGPUを使用するGPUマシンで実行されているアプリケーションがあります。GPU上の結果データは、サーバーマシンによって使用されることはなく、代わりに処理なしでクライアントマシンに直接送信されます。現在cudaMemcpy
、GPUからサーバーのシステムメモリにデータを取得し、ソケットを介してクライアントに送信しています。この通信でRDMAを有効にするためにSDPを使用しています。
質問:
cudaMemcpy
この状況で、NVIDIAのGPUDirectテクノロジーを利用して通話を取り除くことは可能ですか?GPUDirectドライバーが正しくインストールされていると思いますが、最初にホストにコピーせずにデータ転送を開始する方法がわかりません。
SDPをGPUDirectと組み合わせて使用することはできないと思いますが、サーバーマシンのGPUからクライアントマシンへのRDMAデータ転送を開始する他の方法はありますか?
ボーナス: GPUDirectの依存関係が正しくインストールされているかどうかをテストする簡単な方法が誰かにある場合は、それも役立ちます!
linux - infinibandrdma貧弱な転送bw
私のアプリケーションでは、インフィニバンドインフラストラクチャを使用して、サーバーから別のサーバーにデータのストリームを送信します。私はソケットプログラミングに精通しているので、infinibandを介して開発IPを簡単に使用していました。これまで、パフォーマンス(max bw)は私にとって十分でした(達成可能な最大帯域幅が得られていないことはわかっていました)が、今はその無限帯域幅接続からより多くの帯域幅を取得する必要があります。
ib_write_bwは、達成可能な最大帯域幅が約1500 MB / sであると主張しています(カードがPCI 2.0 8xにインストールされているため、3000MB / sを取得していません)。
ここまでは順調ですね。ibverbsとrdmaを使用して通信チャネルをコーディングしましたが、取得できる帯域幅よりもはるかに少なくなっています。ソケットを使用するよりも帯域幅が少し少なくなっていますが、少なくともアプリケーションはCPUパワーを使用していません。
ib_write_bw:1500 MB / s
ソケット:700 MB / s <=このテスト中、システムの1つのコアは100%です。
ibvers + rdma:600 MB /s<=このテストではCPUはまったく使用されません
ボトルネックはここにあるようです:
この時点で、完了を待機している次のコードは次のとおりです。
私のibv_post_sendからibv_get_cq_eventがイベントを返すまでの時間は、8MBのチャンクを転送して約600MB/sを達成したときに13.3msです。
さらに指定するには(疑似コードでグローバルに行うこと):
アクティブサイド:
パッシブサイド:
誰かが私が間違っていることを知っていますか?または私が改善できることは何ですか?私は「ここで発明されていない」症候群の影響を受けていないので、今までやってきたことを捨てて、何か他のものを採用することさえできます。ポイントツーポイントの連続転送のみが必要です。