TL

RDMA と RoCE:カーネルバイパス転送の原理

1マイクロ秒級の低遅延転送が、CPUとカーネルを介さず相手のメモリへ直接読み書きする仕組みで成り立つ理由を原理から押さえられる。RoCEv2のUDPカプセル化とロスレス要求の落とし穴まで分かる。

応用RDMARoCEInfiniBandカーネルバイパスデータセンター最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.RDMAはNIC(RNIC)がDMAで相手ホストのメモリへ直接読み書きする方式で、CPUとカーネルを経由しないためコピー・コンテキストスイッチ・割り込みを排し、1マイクロ秒級の遅延と高スループットを実現する。
  • 2.アプリはverbs APIでQueue Pair(送信・受信キュー)へWork Requestを積み、RNICが非同期に処理してCompletion Queueへ完了を返す。RDMA WriteやReadは相手CPUを起こさない片側操作になる。
  • 3.RoCEv2はInfiniBandトランスポートをUDP/IPでカプセル化し既存Ethernet上で運ぶが、TCP的な再送制御を持たないためPFCやECN(DCQCN)でロスレス網を作り込む必要があり、ここが運用最大の難所になる。

なぜRDMAは速いのか:CPUとカーネルを外す

通常のTCP/IP転送では、データが到着するたびにNICがCPUへ割り込みをかけ、カーネルがプロトコル処理を行い、データを受信ソケットバッファからユーザー空間へ コピー し、アプリが recv() で読み出します。この経路にはコピー、コンテキストスイッチ、割り込み、プロトコルスタックのCPU処理がぶら下がっており、10Gbps超ではこれら自体がスループットと遅延の支配項になります。ユーザー空間への往復コピーを削る話は ソケットバッファとゼロコピー送受信 で扱いましたが、RDMA(Remote Direct Memory Access)はさらに踏み込み、カーネルとCPUのデータ経路そのものを丸ごと外します

RDMAでは専用NIC(RNIC)が、相手ホストの物理メモリへ DMAで直接 読み書きします。送信側CPUは「どこからどこへ何バイト」を指示するだけで、実データの移送にもプロトコル処理にも関与しません。受信側に至っては、後述する片側操作なら相手CPUは一切起きません。これがRDMAの本質で、効果は次の3点に整理できます。

  • ゼロコピー: ユーザーバッファとRNIC間でDMA転送し、カーネルバッファを経由しない。
  • カーネルバイパス: データ経路でシステムコール・コンテキストスイッチを発生させない(接続確立など制御経路はカーネルを通る)。
  • CPUオフロード: トランスポート処理(断片化・再組立・順序保証・ACK)をRNICのハードウェアが担う。
制御経路(control path)はカーネルを通る

「カーネルバイパス」が省くのはデータ経路(data path)だけです。Queue Pairの生成、メモリ登録、接続確立といった制御操作はカーネルドライバを通って行われます。一度セットアップが済めば、以降の送受信(data path)はユーザー空間からRNICのキューを直接叩くため、ホットパスにカーネルが現れません。「準備は遅いが運用は速い」構造だと捉えると正確です。

verbsとQueue Pair:非同期キューの機構

RDMAアプリはソケットAPIではなく verbs と呼ばれるAPI(libibverbs等)でRNICを操作します。中核データ構造が Queue Pair(QP) で、名のとおり 送信キュー(SQ)と受信キュー(RQ)の対 です。アプリは転送指示を Work Request(WR) として該当キューへ積み(post)、RNICがそれを Work Queue Element(WQE) として非同期に処理します。完了は別の Completion Queue(CQ)Completion Queue Element(CQE) として返され、アプリはCQをポーリングして完了を知ります。

アプリ → SQ/RQ に Work Request を post(システムコールなし、キューに直接書く)
RNIC  → WQE を取り出し DMA 転送・トランスポート処理を実行
RNIC  → 完了を CQE として CQ に書く
アプリ → CQ をポーリングして完了を回収

ポイントは 完全非同期 であること。post は即座に返り、アプリはCQで完了を確認するまで他の仕事ができます。送受信前にデータバッファをRNICへ メモリ登録(Memory Registration) しておく必要があり、登録するとそのバッファのページがピン留め(スワップ禁止)され、lkey/rkey というアクセスキーが発行されます。RNICはDMA時にこのキーで権限とアドレス変換を検証します。

メモリ登録はピン留め=重い操作

メモリ登録はページをピン留めしアドレス変換テーブルをRNICに載せるため高コストです。ホットパスで都度登録すると遅延の利点が消えます。実装では登録済みバッファを再利用する「メモリプール」や登録キャッシュが定石です。RDMAが速いのはあくまで「事前に登録した領域を使い回す」前提が成り立つときで、毎回新規バッファを登録する設計はアンチパターンです。

片側操作と両側操作:相手CPUを起こすか否か

RDMAの転送には性格の異なる2系統があり、ここが設計上の分かれ目です。

分類代表オペレーション相手CPUの関与相手の事前準備
両側(two-sided)SEND / RECV必要(RECVをpost済みである必要)受信側がRQにRECVを積む
片側(one-sided)RDMA WRITE / READ不要(相手CPUは起きない)事前にrkeyとアドレスを共有
アトミックCompare-and-Swap / Fetch-and-Add不要rkeyとアドレスを共有

両側操作(SEND/RECV) はメッセージパッシング型です。送信側のSENDは、受信側があらかじめRQに積んだRECVバッファに対応づけられて着地します。受信側CPUはCQで完了を拾う必要があるため、ソケットの送受信に似た「双方が手を出す」モデルです。

片側操作(RDMA WRITE/READ) が真価です。送信側が相手のメモリアドレスと rkey を知っていれば、相手CPUを一切介さず 相手メモリへ書き込み(WRITE)/読み出し(READ)できます。相手は自分のメモリが書き換わったことにすら(明示的に通知しない限り)気づきません。これにより受信側の処理を完全にオフロードでき、分散KVS、分散ストレージ、RPCの高速化に使われます。さらにCompare-and-Swapなどの アトミック操作 も提供され、ロックや同期プリミティブを相手CPUなしで実装できます。

RoCEv2:InfiniBandトランスポートをUDPで運ぶ

RDMAのトランスポート層はもともとInfiniBand(IB)で規定されました。これを Ethernet上で動かす のがRoCE(RDMA over Converged Ethernet)です。世代で構造が異なります。

  • RoCEv1: IBトランスポートをEthernetフレームに直接載せる(EtherType専用)。L2に閉じ、IPルーティングを越えられない。
  • RoCEv2: IBトランスポートのパケットを UDP/IPでカプセル化 する。L3ルーティング可能になり、データセンタのClos網を越えて使える。事実上の主流。

RoCEv2のカプセル化はカプセル化の入れ子そのもので、パケットは次の構造になります。プロトコルが層ごとに包まれていく一般原理は プロトコルのカプセル化とヘッダ構造 の通りです。

[Ethernet][IP][UDP dport=4791][IB BTH][RDMA payload][ICRC][FCS]
                              └ Base Transport Header(QP番号・オペコード・PSN)

UDPの宛先ポート 4791 がRoCEv2の目印で、UDPのソースポートはフロー識別に使われECMPでの経路分散(エントロピー)に効きます。重要なのは、UDPは信頼転送を提供しない こと。RoCEはTCPのような重い再送・輻輳制御をソフトで持たず、トランスポートの信頼性(PSNによる順序保証とACK/NAK)はRNICのIBトランスポート層が担います。TCPとUDPの設計差の前提は TCPとUDPの違い を参照してください。

RoCEのトランスポートは“ロスを嫌う”

古典的なRoCEのIB信頼転送は go-back-N 的で、1パケットでも欠落すると以降をまとめて再送する挙動になりがちでした(実装による選択的再送の改良はあるものの)。TCPのCUBIC/BBRのような洗練された損失回復・輻輳制御を前提にできないため、そもそもパケットを落とさない網 を下回りに用意することが要求されます。これがRoCE運用の難所の根源です。

ロスレス要求と輻輳の課題:PFCとDCQCN

RoCEv2が高性能を出すには、スイッチがバッファ溢れでパケットを廃棄しない ロスレスEthernet が要ります。これを実現する2本柱がPFCとECNベースの輻輳制御です。

PFC(Priority Flow Control, IEEE 802.1Qbb) は、特定の優先度クラスのバッファが閾値に達すると、上流スイッチへ PAUSEフレーム を送って一時停止させ、廃棄の代わりに送出を止めます。優先度ごとに止められる点がQoSのクラス分けと結びつきます(QoS(CoS/DSCP/シェーピング・ポリシング) 参照)。だがPFCはホップ単位のバックプレッシャであるため、停止が上流へ連鎖して無関係なフローまで止める head-of-line blocking、さらに循環依存による PFCデッドロック、ストームの伝播といった深刻な副作用を生みます。

そこでホップ単位のPFCを最後の砦に留め、エンドツーエンドで送出レートを絞るのが DCQCN(Data Center QCN) です。仕組みはECNに依存します。スイッチはキューが混み始めるとパケットに ECNマーク(CE) を付け、受信RNICはこれを検出して送信元へ CNP(Congestion Notification Packet) を返し、送信RNICがレートを下げます。ECN/L4Sの一般原理は ECN と L4S(明示的輻輳通知) と地続きです。設計思想は「PFCが発火する“前”にDCQCNでレートを落とし切る」こと。PFCはあくまで取りこぼし防止の保険で、常用すると副作用が表面化します。

機構層/粒度役割副作用・リスク
PFCL2・優先度クラス/ホップ単位バッファ満杯時に廃棄を止める最後の砦HOLブロッキング・デッドロック・ストーム伝播
DCQCN(ECN+CNP)L3・フロー単位/エンドツーエンド混雑“前”に送出レートを下げる主制御パラメータ調整が難しく不安定化しうる
試験・面接で問われる急所

「なぜRDMAは速いか」→ カーネルバイパス+ゼロコピー+CPUオフロードでコピー・割り込み・コンテキストスイッチを排す。「片側操作とは」→ RDMA WRITE/READは相手CPUを起こさずrkeyで相手メモリへ直接アクセス。「RoCEv2のカプセル化」→ IBトランスポートをUDP/IP(dport=4791)で包みL3ルーティング可能にする。「RoCE運用の難所」→ UDPで信頼制御が弱くロスレス網が前提、PFCはHOLブロッキング/デッドロックを招くのでDCQCN(ECN)で混雑前にレートを絞る。

まとめ

RDMAはRNICが相手メモリへDMAで直接読み書きすることで、カーネルとCPUのデータ経路を外し、ゼロコピー・低遅延・低CPU負荷を同時に実現します。アプリはverbsでQueue Pairへ非同期にWork Requestを積み、Completion Queueで完了を回収し、RDMA WRITE/READのような片側操作では相手CPUを一切起こしません。RoCEv2はこのInfiniBandトランスポートをUDP/IPでカプセル化して既存Ethernet上でL3ルーティング可能にしますが、TCP級の損失回復を前提にできないため、PFCとDCQCN(ECN)でロスレス網を作り込むことが必須になります。速さの源泉と運用の難所は表裏一体——「CPUとカーネルを外す」設計が遅延を削る一方、その代償としてネットワーク側に厳密なロスレス制御を要求する、というのが全体像です。

ネットワーク Article

RDMA と RoCE:カーネルバイパス転送の原理を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

RDMA

比較で見る軸

難易度: advanced / カテゴリ: ネットワーク / タグ数: 5

導入後に効く点

アプリはverbs APIでQueue Pair(送信・受信キュー)へWork Requestを積み、RNICが非同期に処理してCompletion Queueへ完了を返す。RDMA WriteやReadは相手CPUを起こさない片側操作になる。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
ネットワーク
タグ数
5

判断チェックリスト

  • 自社の用途が「RDMA / RoCE」に近いか確認する。
  • 強みである「RDMAはNIC(RNIC)がDMAで相手ホストのメモリへ直接読み書きする方式で、CPUとカーネルを経由しないためコピー・コンテキストスイッチ・割り込みを排し、1マイクロ秒級の遅延と高スループットを実現する。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

RDMARoCEInfiniBandカーネルバイパスデータセンターRDMARoCEInfiniBand