1

IB ネットワークを介してファイルを交換する必要がある補足プロセスがあります。その後、ファイルは他のプロセスによって使用されます。

ワークフローは次のとおりです。

  1. /dev/shm にファイルを作成する
  2. ファイルのサイズを適切に変更する
  3. プロセスの VM 内のファイルをマップする
  4. mmaped 領域を ibv_reg_mr で登録します
  5. データ転送の RDMA 操作を開始する

私のスキームのボトルネックは ib_reg_mr であることが判明しました (3Gb メモリの登録に 1.78 秒かかると個別に測定しました)。プロセスのアドレス空間へのメモリ領域のマッピングをトリガーするようです。残念ながら、受信プロセスはこのメモリを使用しないため、この操作は必要ありません。メモリは、後で他のプロセスでマップして使用する必要があります。

そのため、受信プロセスのページテーブルを変更することを回避するのが賢明だと思いましたが、それが可能かどうかはわかりませんでした。

メモリ領域をプロセスのアドレス空間にマッピングせずにデータ転送を開始する方法があれば教えていただけますか?

4

2 に答える 2

2

私の知る限り、メモリ領域をプロセス ページ テーブルにマップせずに登録する方法はありません。デバイスがページにアクセスしている間にマッピングが変更されないように、登録時にページが固定されます。これには、ページをプロセスにマッピングする必要があります。オンデマンド ページングでは、HCA が実際にページを使用するまでプロセスへのページのマッピングを遅らせることができますが、最終的にはマッピングされます。

于 2016-06-06T10:14:26.160 に答える
1

代わりに FRWR (Fast memory Registration Work Request) を試してください。これは、ibv_post_send 動詞を介してメモリ登録を行う API です。はるかに高速な方法です。

http://lists.openfabrics.org/pipermail/general/2008-May/050235.html

http://lxr.free-electrons.com/source/include/rdma/ib_verbs.h?v=3.2#L734

于 2016-06-05T12:38:49.403 に答える