Remote Direct Memory Access

Remote Direct Memory Access(RDMA、リモートDMA)とは、ローカルのコンピュータのメモリから、異なるリモートのコンピュータのメモリへデータのDMA転送を行うことである。RDMAでは、両コンピュータのオペレーティングシステムを経由せずにデータの転送が行われる。これにより、高スループット、低レイテンシの通信を行うことができる。特に、大規模並列のコンピュータ・クラスターにおいて有用である。

概要

RDMAでは、ホストバスアダプタを通じてアプリケーションメモリ(ユーザーメモリ空間)のデータが直接転送される。これによりゼロコピー英語版ネットワーキングが可能になる。通常行われるメモリとOSのデータバッファ間でのデータ転送が起きないので、CPUキャッシュを用いることなく、あるいはコンテキストスイッチを行うこともなく、他の処理と並列にデータが転送できる。リード/ライト要求を発行するアプリケーションから見れば、メモリのデータは直接ネットワークに配送されるため、レイテンシが削減され高速なデータ転送が可能となる。

この仕組みを利用して補助記憶装置SCSI通信するRDMAプロトコルを、SCSI RDMAプロトコル英語版と呼ぶ。

標準化と実装

標準化団体にはIETFやInterconnect Software Consortium[1]があり、RDMAプロトコルとAPI標準を策定している。特に、RDMAコンソーシアムとDAT Collaborative[2]が中心となっている。オラクルを始めとするソフトウェアベンダーはこれらAPIを自社製品でサポートし始めた。ホストバスアダプタのベンダーも実装を進めている。現在公開されているRDMA実装にはVirtual Interface Architecture英語版InfiniBandiWARPがある。

これまで普及が進まなかった一因に、これまでとは異なるネットワーク環境を導入する必要があったことが挙げられる。しかしながら、物理層Ethernetを、トランスポート層TCP/IPを利用できるようになり(RDMA over Converged Ethernet英語版(RoCE)と呼ばれる)、低コストな環境でメリットを享受できるようになってきた。

欠点

RDMAでは送信先ノードからリクエスト完了通知がない(一方向通信)。そのため、リクエスト完了を知るには、送信先のメモリ上に完了通知領域を設け、その変更を送信先が頻繁なポーリングで確認する方法がある。しかし、この方法はCPUサイクルを消費するだけでなく、通信ノード数に比例してレイテンシや必要メモリ量を増加させるため、MPIを利用するスーパーコンピューティング(HPC)には不向きである。MyrinetQuadrics英語版のような他のゼロコピー通信を用いるHPCインターコネクトでは、このような問題はなく性能もよい。これは、MyrinetやQuadricsのインターフェースがMPIと酷似しているためである。

RDMAは元来プロトコル・オーバヘッドを削減するものであるが、余分なオーバヘッド:メモリレジストレーション処理(memory registration)が必要になることにも注意する必要がある。ゼロコピー通信では、少なくともデータ転送中は、通信に必要なメモリ領域が主記憶上に確保されることが暗黙の了解となる。メモリ領域の確保を保障するには、対象メモリ領域がスワップアウトされないようにする必要がある。そうでなければ、古いデータ領域を利用してメモリ破壊を引き起こす可能性がある。このためメモリ領域を主記憶上につなぎとめる当該処理が必要であるが、その処理量はデータ領域のサイズに比例したオーバヘッドを引き起こす。この問題を解決するには、次のようないくつかの手法がある。

  • 処理をクリティカルパスから遅延させることでレイテンシ増加を防ぐ
  • キャッシュ技術を利用しデータをなるべく主記憶上に保持する。同じメモリ領域を何度も通信に用いるアプリケーションではオーバヘッドを削減できる
  • InfiniBandMyrinetのように処理とデータ転送をパイプライン化する
  • Quadricsのように処理の必要性自体を取り除く

脚注

外部リンク

  • RDMA コンソーシアム
  • RFC 5040
  • InfiniBand Trade Association
  • RDMA Modelチュートリアル
  • RDMA 使用方法
  • HPCにおけるRDMA