Remote Direct Memory Access

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

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

概要[編集]

RDMAではホストバスアダプタを通じてアプリケーションメモリ(ユーザーメモリ空間)同士が直接データをやりとりをする。これによりゼロコピーen:Zero-copy)ネットワーキングが可能になる。メモリ - OSのデータバッファ間でデータ転送が起きないので、CPUキャッシュを用いることなく、あるいはコンテキストスイッチを行うこともなく、他の処理と並列にデータ転送できる。リード/ライト要求を発行するアプリケーションから見れば、メモリのデータは直接ネットワークに配送されるためレイテンシが削減され高速なデータ転送が可能となる。この仕組みを利用して補助記憶装置SCSI通信するRDMAプロトコルen:SCSI RDMA Protocolと呼ぶ。

標準化と実装[編集]

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

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

欠点[編集]

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

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

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

脚注[編集]

外部リンク[編集]