「RoCE」をめぐる、あれこれ。
InfiniBand(インフィニバンド) においてその核となるテクノロジは、RDMA(Remote Direct Memory Access )です。
通常のネットワーク転送では、CPUがコンピュータ内のアプリケーションから、ネットワークのプロトコルスタック、ドライバそしてNICへとコピーすることでデータが転送され受け取る側もその逆の手順でデータを受け取ります。転送速度が上がることで問題となるのは、「誰」が「コピー」するのかという点、これまでの方法では「誰が」は「CPU」であり、速度が上がれば上がるほどそれぞれのコピー自体に「CPUリソース」が消費されることになります。また各メモリの管理区分、あるいはCPUのリングを超えるごとにメモリ間コピーが発生します。メモリ間といえどコピーは物理的に行われるものですので、コピーの要素が増えればそれに伴い時間がかかることになり遅延性能に影響を与えることにも繋がります。この「CPUリソース」と「遅延性能」の問題を解決するのがRDMA転送になります。
RDMA 転送では、対応のカード間で通信を行いカードが直接送り元のコンピュータのアプリケーション内のメモリを読み、通常のネットワークプロトコルをバイパスすることでメモリ間コピーを行わず、カードのハードウェアで転送を行い、直接転送先のコンピュータのアプリケーションメモリにデータを書き込むことで転送を完了します。このRDMA転送を広義のイーサネット環境に持ち込むものが、RoCE(RDMA over Converged Ethernet)あるいは、iWARP(過去においては、Internet Wide Area RDMA Protocolの省略形としていましたが現在はこの頭文字をとったものではなく、単にiWARP)と呼ばれる仕様になります。
生い立ちも、IBTA(InfiniBand Trade Association)によって標準化がなされた RoCEに対し、IETF(Internet Engineering Task Force)によって標準化がなされたiWARPと異なっています。2つの仕様の大枠の切り分けは、FCoE(Fibre Channel over Ethernet)などでも活用される、当時の最新の仕様である、ロスレス(LossLess) のCEE (Converged Enhanced Ethernet)環境を活用するものがRoCE、通常の(Lossyな)Ethernet環境を活用しフロー制御にTCP/IPを活用するのがiWARPであり、ロスレス環境を前提にするため性能的にはRoCEが優れている一方、一般に普及している通常のEthernet機器を活用できるiWARPの方が導入のし易さはあると言われていました。
CEEでは、DCB(Data Center Bridging)という仕様名称でまとめられた、具体的には、Priority-based Flow Control (PFC – IEEE802.1Qbb)、Congestion Notification(CN – IEEE802.1 Qau)、Enhanced Transmission Selection (ETS – IEEE802.1Qaz)、Data Center Bridging Exchange プロトコル(DCBX)といった仕様で構成されています。
また、当初のRoCE(v1)では、EthernetのL2フレームにInfiniBandのNetwork Layer を乗せたものであったため、同一ドメイン内の転送のみをサポートしていましたが、2014年にIBTA(InfiniBand Trade Association)より、RoCEv2 と呼ばれる仕様がリリースされ、RoCEv2では、EthernetのLink Layerの上に一般的なIP/UDP レイヤーを乗せる事でネットワーク間を跨ぐことが出来るようになりました。
Mellanox のアダプタ―カードでは、ConnectX®-3 Pro以降の製品よりRoCEv2に対応しています。MellanoxのWindows系のドライバの場合、ConnectX-3 Proまでのカードは、WinOFドライバを、ConnectX®-4以降のカードを活用する場合、WinOF2ドライバを使用する必要があります。Linuxの場合は、この区分けはありませんが内部にMLNX4とMLNX5の2つのコアモジュールを両方抱えている構造となっています。
RoCEv2では、RDMAペイロードは、ペイロードがRDMAであることを示す特定のUDP宛先ポート番号を持つUDPペイロードとしてカプセル化されています。
WinOF ドライバにおいて、WinOF v5.02 v5.22より前では、RoCEv2トラフィックを示す宛先ポート番号は1021番でした。WinOF v5.35以降、使用されるデフォルトの宛先ポート番号は4791番です。これは、Internet Assigned Numbers Authority(IANA)のガイダンスに準拠するためです。またドライバのバージョンによってRoCE、RoCEv2のどちらのモードがデフォルトの設定となっているかが異なりますのでご注意ください。
Microsoftは、Windows Server 2012 R2で提供を開始した、SMB 3.0のSMB Directで、RDMA対応のストレージ接続のサポートを開始しましたが、最初はInfiniBand押しであったものが、(Microsoft の要請があったのかもしれませんが、)RoCEv2 の登場により、その注力がRoCEv2 になっています。現在では、同社のクラウド環境であるAzureにおいて、RoCEv2が活用・提供されています。
さて、このRoCEv2位までお話は、業界にいる方は、なんとなくご存じなのかもしれません。ただ、ここ数年の話としてMellanoxも支援するGitHubのコミュニティプロジェクトとして開発された「Soft-RoCE」というものがあります。
これは、RDMA トランスポートレイヤーのソフトウェア実装であり、主にテスト用途などを念頭に開発されたもので、ハードウェアを搭載していませんので性能を期待できるものではありませんが、RDMA 転送のためのハードウェアを搭載していない通常のNICカードで、RoCE プロトコルのやり取りを可能にするものです。:
Soft RDMA over Ethernet (RoCE) Driver:
https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home
HowTo Configure Soft-RoCE:
https://community.mellanox.com/s/article/howto-configure-soft-roce
また、2016年には、Linux環境においてメラノックスのConnectX-4 シリーズのカードとSpectrumベースのスイッチを活用し、Lossy環境でRoCEv2ベースの動作を可能とする、Resilient RoCE というものが発表されています。これは、ロスレス環境の構築においてマストとなるDCBのPFCの利用をオプション扱いとし、最悪のタイミングにおける再送を許容することを前提に、ECN(Exhibit Congestion Notification)のみをマストとして伝送を制御する(輻輳の発生を伝送元のスイッチに伝え、伝送帯域を絞ってもらう)ものになります。(ECNは、2001年にRFC 3168で定義された、インターネットプロトコルと伝送制御プロトコルの拡張であり、最新のLinux、Windows、MacOS などでも既にデフォルトでサポートされている仕様となります。)なお、Resilient RoCE の動作環境を整えるのには、カード側に加えスイッチ側の設定も必要となります。
Resilient RoCE—FAQ:https://community.mellanox.com/s/article/introduction-to-resilient-roce—faq
YouTubeビデオ:RoCE Over Lossy Fabric(1:41)
WinOF2 Rev. 2.30.51000より、このResilient RoCE の延長線上にあると思われる、「Zero Touch RoCE」が正式リリースになりました。これは、PFCもECNも設定されていないファブリックで(簡単に言えば、スイッチ側でのこれらの設定を行わずに)RoCE の動作を可能にするものであり、ConnectX の世代によりパケット損失処理の方法が異なります。ConnectX-4では、IB 再送信プロトコルの損失セグメントから送信を再開、ConnectX-5 以降:ハードウェアベースの再送信を使用し、パケット損失に対するレスポンスを改善、ConnectX-6 Dx:独自の選択的なリピートプロトコルを採用。ConnectXの世代を重ねるごとにパケット損失に対するレスポンス性能が改善され、優れた性能を維持しながら、設定を簡単にします。
また、その一方でスイッチ側でも動きがあり、現在、Mellanox Spectrum (SN2000)シリーズスイッチは、1つのCLIコマンドの入力だけでRoCEの設定を完了出来るコマンドを追加し、RoCE-Ready を標榜しています。詳細は、「Mellanox Spectrum®— The RoCE-Ready Switch(英語)」をご参照ください。(本機能は、ネットワーク(スイッチ) OS:Mellanox Onyx ver 3.8.2000以降でサポートしています。)
今回は、本当に「あれこれ」レベルの内容ではございますが、リリース当初は、ロスレス環境を前提としていたRoCEも、現在では、マイクロソフト社のクラウド環境で活用されていたり、データセンターのストレージ接続に当たり前のように使われていたりと活躍の場が増えており、また、更に広範囲に活用可能なように、Lossy な環境での動作をも可能とするなど、成長を続けている仕様です。転送速度が上がれば上がるほど、RDMA 転送自体のニーズが増えてくるのは自明であり、まだまだ注目せざるを得ない規格といえるのではないでしょうか?
※1 2019年11月27日:WinOF2 Rev. 2.30.51000 において、「Zero Touch RoCE」が正式サポートになったことにより、Zero Touch RoCE 部分を一部改稿。
※2 2020年1月29日:RoCE-Ready Switchの記載を追加。
本ページに記載されている会社名、会社ロゴ、商品名は、各社の商標または登録商標です。本ページに記載されているシステム名、製品名などには必ずしも商標表示(TM、®)を付記していません。