伊勢雅英氏のInfiniBand関連記事まとめ
久々に伊勢雅英氏のInfiniBandの記事が掲載となっているので、これまでの記事をまとめてみた。伊勢氏の最初のInfiniBand記事2004年からちょうど10年。10年前にはクラウドやデータセンターという話題がまだほとんど無かったと言ってもよく、随分と状況は変わった。
今回の記事は、ユーザー事例に加え、新動向としてRoCEが取り上げられている点に注目である。RoCEを使えば、慣れ親しんだEthernetでありながらInfiniBandの性能の核心であったRDMAが使える。「運用性と転送効率を両立した新世代のプロトコル」と紹介されているが、クラウド、データセンターといった外側ネットワークとの接続や従来のVLAN運用が必要となる部分にもRDMAが活用できるようになってきた、という10年前には無かった、最近のニーズに合わせた動向と思う。
RoCEの登場によって10G/40G Ethernetの魅力がさらに増す
InfiniBandがどれだけ高速であろうと、実績の豊富なEthernetを使いたいと思う人がいるのも事実だ。InfiniBand製品は、Mellanoxを中心とする極めて少数のベンダーしか手がけていないが、Ethernet製品であればさまざまなベンダーから選べるからだ。また、接続先となるストレージシステムも、InfiniBandポートをネイティブに備えた製品はまだ少なく、Ethernetポートを搭載した製品が圧倒的に多い。
これまでを振り返ると、InfiniBandがネイティブでRDMA技術をサポートしていたのに対し、Ethernetは通信効率の面で見劣りする部分があった。しかし、近年ではInfiniBandで培われた広帯域・低レイテンシの通信技術をEthernetに適用したRoCE(RDMA over Converged Ethernet)が実製品のレベルで登場している。RoCEは、フロー制御によるロスレスの10Gigabit/40Gigabit Ethernet(10GbE/40GbE)を足回りとしながら、その上でInfiniBand譲りのRDMA転送を行う、運用性と転送効率を両立した新世代のプロトコルである。
過去記事
- InfiniBand探検隊リターンズ【前編】〜2012年現在も進化を続けるInfiniBandの最新状況 - クラウド Watch (2012/1/26)
- InfiniBand探検隊リターンズ【後編】〜広帯域I/Oを必要とする仮想化やDB分野で強く期待されるInfiniBand - クラウド Watch (2012/1/27)
Windows Server 2012 R2 - 40GbE TCP/IP性能例
※実際の性能はハードウェア構成、ドライババージョン、設定等で異なるため、あくまで一例である。
- NIC :Mellanox ConnectX-3Pro (40GbEモード) [FW:2.30.8000(WinOF4.60に付属)]
- ドライバ :Mellanox WinOF4.60
- ドライバオプション:全てデフォルト設定(JumboFrame無効)
- 構成:40GbE Copper QSFPケーブル直結対向構成
- ベンチマークツール :NTttcp v5.28(Microsoftのベンチマークツール)
※Windows版iperf等もあるが、Windows環境での推奨ベンチマークツールはNTttcpとのこと。下記Microsoft WEBより入手可能。2013年4月に公開されている。過去5年に渡ってMicrosoft "internal only"であったが、内外各所からの要望で公開された模様。
- テストコマンド(PowerShellではなく、コマンドプロンプトから実行。PowerShellから"cmd"と打てばOK)
送信側:# NTttcp.exe -s -m 16,*,10.0.0.10 -a 2 -t 10000
受信側:# NTttcp.exe -r -m 16,*,10.0.0.10 -a 2 -t 10000
性能状況例
- 受信側タスクマネージャー:38.4 Gbps程度を確認
参考:NTttcpのヘルプ
NTttcp: [-s|-r|-l|-n|-p|-sp|-a|-rb|-sb|-u|-w|-d|-t|-cd|-wu|-v|-6|-wa|-nic|-xml]
-m <mapping> [mapping]
-s work as a sender
-r work as a receiver
-l <Length of buffer> [default TCP: 64K, UDP: 128]
-n <Number of buffers> [default: 20K]
-p <port base> [default: 5001]
-sp synchronize data ports, if used -p should be same on every instance
-a <outstanding I/O> [default: 2]
-rb <Receive buffer size> [default: 64K]
-sb <Send buffer size> [default: 8K]
-a : [default: 0]
<Send buffer size> < 0 : system default
-u UDP send/recv
-w WSARecv/WSASend
-d Verify Flag
-t <Runtime> in seconds. When with -n mans max test time and disables
-wu and -cd flags. [default (with -n): 3h]
-cd <Cool-down> in seconds
-wu <Warm-up> in seconds
-v enable verbose mode
-6 enable IPv6 mode
-wa Sets the WAIT_ALL flag when using recv or WSARecv functions
Use NIC with <NIC IP> for sending data (sender only).
-xml [filename] save XML output to a file, by default saves to xml.txt
-m <mapping> [mapping]
where a mapping is a session(s),processor,StartReceiver IP set
e.g. -m 4,0,1.2.3.4 sets up:
4 sessions on processor 0 to test a network on 1.2.3.4
VMware ESXi5.5 - 40GbE inbox 実機デモ - vForum 2013
VMware ESXi5.5では、40GbEドライバがinboxサポート(OSやハイパーバイザーにドライバが内蔵されていること)されたことが大きなアップデートであった。
VMwareのイベントであるvForum 2013(東京)及びvSS 2013(大阪)での会場にて実機デモを実施した記録である。
- 日時:2013年11月6日-7日(東京:vForum 2013)
- 2013年11月19日(大阪:vSS 2013)
- 場所:ザ・プリンスパークタワー東京 展示会場
- ホテル阪急インターナショナル 展示会場
Mellanox 40GbE inboxドライバ実機デモ
デモ構成
(受信側VM)# iperf -s
デモでの性能例(受信側サーバ)
- 受信側サーバにて4.86GB/s(=38.88Gbps)程度のスループットでの安定動作を確認
Mellanox 40GbE I/O統合デモ
SMB Direct - 40GbE RoCE 実機デモ - Interop Tokyo 2013
Interop Tokyo 2013でのSMB Direct実機デモ内容の記録。
40GbE(RoCE) x 2本をSMB Multichannelで束ね、SMB DirectでのファイルシステムI/OをIOmeter(1MBシーケンシャルリード)で実行するデモを会場ブースにて実施した。
デモ概要
- 日時:2013年6月11日-14日
- 場所:Interop Tokyo 2013 幕張メッセ 展示会場
デモの目的
- Windows Server 2012環境での40GbE End-to-End接続を実証
- 40GbE RoCE(RDMA over Converged Ethernet)でのSMB Directアクセスが安定して充分な性能が出ることを実証
- SMB Multichannelにて安定動作し、片パス障害及び障害復帰時にアクセスが途切れることなく動作することを実証
性能はストレージの構成やサーバーの構成によるため、あくまで一例としてだが、展示会場でのデモでは、2パスで7,000MB/sを超えるスループット性能を確認した。
2パスでの接続状況(SMB Multichannel / SMB Direct)
展示会場では一方のパスのケーブルをオンラインで抜き差しするデモも実施。
ストレージアクセスが途切れることなく、片パスの抜き差しが出来ることを実演。
片パスを抜いた場合の状況(SMB Multichannel(1パス) / SMB Direct)
参考:デモを含めて展示内容を紹介する動画(RBBtoday)
SMB Direct - Windows Server 2012 / R2
SMB Direct関連情報まとめ
SMB Directとは
Windows Server 2012(及びR2)[以降、Win2012/R2と記載]にてサポートされたSMB3.0は、RDMA対応のネットワークアダプタとの組み合わせで、SMBプロトコル(ファイル共有プロトコル)がRDMA(RDMAに関する説明)で動作する。このRDMAで動作するSMBプロトコルをSMB Directと呼ぶ。
従来、ファイル共有プロトコルは、運用性に優れるものの、CPUに負荷が掛かりやすく、性能が出しにくい部分があったが、SMB Directによって運用性と性能の両立を実現している。SMB DirectはRDMAによるデータ転送のため、CPUに負荷を掛けないデータ転送が可能である。
また、SMB Directは、Win2012/R2でOS標準サポートされており、RDMA対応ネットワークアダプタが実装されていれば、特に設定変更などすることなく、自動的に動作する。
SMB Directは、RDMAがOSで標準サポートされ、しかもファイル共有プロトコルがRDMA動作するという二つの意味で、非常に画期的な技術である。
SMB Direct関連情報
SMB ダイレクトを使用してファイル サーバーのパフォーマンスを向上させる
Deploy SMB Direct with InfiniBand Network Adapters (InfiniBandでの構成)
Deploy SMB Direct with RoCE Network Adapters (RoCEでの構成)
Hyper-V over SMB Direct
Win2012/R2では、Hyper-V環境でのストレージとして、SMBファイルストレージが使用できるようになった。前項で述べたSMB DirectもHyper-V環境で使用可能であり、仮想化環境でボトルネックとなりやすいストレージアクセスを高速化できる。
Hyper-V Live Migration over SMB Direct
Windows Server 2012 R2でのアップデートとして、Hyper-V環境でのLive MigrationでSMB Directが選択できるようになった。SMB DirectはRDMAによるデータ転送のため、CPUに負荷を掛けず、非常に高速なLive Migrationが可能であり、運用面で大きなメリットが期待できる。
Microsoft Worldwide Partner Conference (2013年7月)での講演で紹介されたデモ
Microsoft Pushes the Envelope with Hyper-V Live Migration -- Redmondmag.com
- 約8GBのVMでSQL Serverが動作しているVMをLive Migrationするというデモ
デモの結果:
Win2012とWin2012間:1分26秒
Win2012R2とWin2012R2間(圧縮あり):32秒
Win2012R2とWin2012R2間(RDMA):11秒
このデモでは、VM上でSQL Serverが動作しているため、圧縮ありの場合のLive Migrationでは圧縮処理に使うCPUとSQL Server動作が競合するのに対し、RDMAの場合にはCPUを使う必要がないため、圧縮ありの場合とRDMAの場合での所要時間に顕著な差がついている。
RoCE(RDMA over Converged Ethernet)
RoCEは、「アールオーシーイー」または「ロッキー」と発音する。
- Ethernet上でRDMA転送を行うことができるネットワークプロトコル
- 下位レイヤのネットワークヘッダはEthernetヘッダであり、上位レイヤのネットワークヘッダ(データ部分を含む)はInfiniBandのヘッダである。
- 標準的なEthernet環境(ロスレス機能が備わったスイッチ)でRDMA転送を行うことを可能であり、NICがRoCEをサポートしている必要がある。
RoCEフレームフォーマット
出典: IBTA Supplement to InfiniBandArchitecture Specification Volume 1 Release 1.2.1 - Annex A16:RDMA over ConvergedEthernet (RoCE)
RoCEとInfiniBandとの比較
RoCEの最下位レイヤのフレームヘッダは、標準的なEthernetフレームと同じである。
また、上位のネットワークヘッダはデータを含めてInfiniBandと同じである。
リモートダイレクトメモリアクセス(Remote Direct Memory Access : RDMA)の紹介
#本記事は、下記ブログの日本語訳(+一部補足)版を原文筆者Dotan Barak*1の了解を得て掲載しています。
Introduction to Remote Direct Memory Access (RDMA) - RDMAmojo
目次
- RDMAとは?
- RDMAの利点
- RDMAをサポートするネットワークプロトコル
- RDMAを使うために複数のプログラムAPIを学ぶ必要がある?
- RDMAをサポートするネットワークプロトコル相互の互換性は?
- RDMAを使うには?(特別なパッケージをダウンロード? OS付属? )
1.RDMAとは?
ダイレクトメモリアクセス(Direct Memory Access (DMA))は、CPUが介在することなく、ホストメモリへ直接アクセスを行うデバイスの機能である。
RDMA (Remote DMA)は、CPUが関与することなくネットワーク越しにリモート計算機上のメモリへアクセスする(すなわち、リモート計算機上のメモリからリードおよびリモート計算機上のメモリへライトする)機能である。
翻訳者補足:データを水にたとえると・・・
TCP/IP : バケツリレーして水を運ぶような方式。バケツの数には限りがあるし、運ぶのに労力が掛かる。
(性能に限界あり、CPU負荷大)
RDMA : 太いホースで繋いで水道の蛇口を開けるような方式。送りたい水(データ)を一気に流し、流し終わったら送り側の蛇口を閉めるだけ。
(帯域をフルに活用、CPU負荷ゼロ(データ転送時))
※FibreChannel等のチャネル系プロトコルとの違いは?
FibreChannel等では最大でも1MB程度のサイズの細切れでバッファ確保/開放を通信ペアで確認しながら送受信。細切れサイズ毎にCPU割り込みやドライバ処理が発生するため、性能には限界がり、CPUも使ってしまう。
一方、RDMAでは、ローカルとリモートの大きなメモリ領域の間で連続的にデータ転送(最大GB単位での連続転送)をすることができる。また、細かいサイズの転送であっても、バッファ確保を通信の都度行う必要がないので(ワンサイドオペレーション(One Side Operation)でのデータ通信が可能)、圧倒的に低いレイテンシと高スループットを実現することができる。
2.RDMAの利点
RDMAを用いることによる主なメリット:
ゼロコピー (Zero-copy)
アプリケーションは、ネットワークソフトウェアスタックを経由することなくデータ転送を行うことができ、データはネットワークレイヤ間のコピー無しでバッファへ送信または受信される。
カーネルバイパス (Kernel Bypass)
アプリケーションは、ユーザ空間から直接データ転送されるため、コンテキストスイッチを行う必要がない(コンテキストスイッチには非常に多くのCPU処理が必要とされるため、コンテキストスイッチを減らすことは性能向上に直結する)。
CPUの介在がない (No CPU Involvement)
アプリケーションは、リモート計算機のCPUを全く使うことなくリモートメモリにアクセスすることができる。リモート計算機は、リモートプロセス(プロセッサ)が介在することなくメモリリードを行うことができる。リモートCPUのキャッシュは、アクセスされたメモリデータで使用されない(したがって、CPUキャッシュを無駄に消費する必要がない)。
メッセージベースのトランザクション (Message Based Transactions)
データはストリームではなく、離散的なメッセージとして処理される。このことにより、アプリケーションは別のストリームを別々のメッセージやトランザクションとして処理する必要がない。
スキャッタ/ギャザー処理のサポート (Scatter/Gather Entries Support)
RDMAは、スキャッタ/ギャザー処理をネイティブサポートしている。すなわち、複数のメモリバッファ(メモリ領域)を読み込んで1つのストリームとして送信したり、1つのストリームから複数のメモリバッファ(メモリ領域)へ書き出したりすることができる。
3.RDMAをサポートするネットワークプロトコル
現時点でRDMAをサポートするネットワークプロトコルの例:
InfiniBand(インフィニバンド)
初めからRDMAをネイティブサポートする新世代のネットワークプロトコルである。新しいテクノロジーのため、このテクノロジーをサポートするNIC(InfiniBand規格ではHCA (Host Channel Adapter)と呼ぶ)とスイッチが必要となる。
RDMA Over Converged Ethernet (RoCE)(アールオーシーイーまたはロッキー)
Ethernet上でRDMA転送を行うことができるネットワークプロトコルである。下位レイヤのネットワークヘッダはEthernetヘッダであり、上位レイヤのネットワークヘッダ(データ部分を含む)はInfiniBandのヘッダである。このプロトコルは、標準的なEthernet環境(スイッチ)でRDMA転送を行うことを可能とする。NICのみが特別なものであり、RoCEをサポートしている必要がある。
Internet Wide Area RDMA Protocol (iWARP)
TCP上でRDMA転送を行うネットワークプロトコルである。InfiniBand (RDMA)とRoCEではサポートされていてiWARPではサポートされていない機能がある。このプロトコルは、標準的なEthernet環境(スイッチ)でRDMA転送を行うことを可能とする。NICのみが特別なものであり、iWARPをサポートしている必要がある(ただし、CPUオフロードが使われる場合)。CPUオフロードを使用しない場合は、全てのiWARPスタックはソフトウェアとして実装可能であるが、RDMAの性能的な長所の大部分は失われてしまう。
4.RDMAを使うために複数のプログラムAPIを学ぶ必要がある?
前章でRDMAをサポートするネットワークプロトコルが複数あることを述べた。そうすると、RDMAを使うにはそれぞれ別のプログラムAPIを習得する必要があるように思えるかもしれないが、答えは「いいえ」(複数のプログラムAPIを学ぶ必要はない)である。幸運なことに、同じAPI(すなわち、verbs)は、上記の全てのRDMA対応のネットワークプロトコルで使用可能である。Liux系ではlibibverbsとKernel verbsであり、WindowsではNetwork Direct (ND)に相当する。
5.RDMAをサポートするネットワークプロトコル相互の互換性は?
RDMAをサポートするネットワークプロトコルは互いに異なるプロトコルであるため、パケットフォーマットが異なり、それら相互に直接メッセージの送受信はできない。何らかのルータやゲートウェイを挟む必要がある。しかしながら、同じコードでRDMAネットワークプロトコル全てをサポートすることができる。全てのRDMAネットワークプロトコルはlibibverbsをサポートするため、ソースコードの再コンパイルさえも不要で同じバイナリを使用することができる。
6.RDMAを使うには?(特別なパッケージをダウンロード? OS付属?)
いくつかのOSでは、Kernel標準でRDMAをサポートしている。例えば、LinuxはRDMAをネイティブサポートしており、Linuxの主要なディストリビューションでRDMAをサポートしている。その他のOSではRDMAサポートを追加するためにある種のパッケージ(OFED等)をダウンロードする必要となる場合がある。
*1:Dotanは当ブログ筆者と同じハイテク企業に勤務しており、当ブログ筆者も本社にて彼の技術講座を受講したことがあります。