期待のネット新技術

10GBASE-Tの速度をWindowsファイル共有に活かす「SMBダイレクト」、RDMA対応のWindows 10 Enterprise/Pro for Workstationで利用可能

【10GBASE-T、ついに普及?】(第9回)

 1000BASE-Tの10倍速、という高速な有線LAN規格「10GBASE-T」が、いよいよ身近になりつつある。

 LANカードは既に100ドル以下のモデル2万円台のモデルが登場、ハブについても8ポート8万円の製品が国内で発売済み。10GBASE-T標準搭載のiMac Proも12月に発売されるなど、価格・製品バリエーションの両方で徐々に環境が整ってきた。

 長らく望まれてきた10GBASE-Tの低価格化だが、技術的には1000BASE-Tから変更された点も多く、設定や活用上のノウハウも新たなものが必要になる。そこで、規格の詳細や現状、そしてその活用方法を、大原雄介氏に執筆していただいた。今回のテーマは「Windows 10での「RDMA」の対応状況とSMBダイレクトについて」。今後、集中連載として、毎週火・木曜日に掲載していく。(編集部)

 まだあるのか? とか言われてしまいそうだが、最後にOS側の対応がある。もちろんOSといっても、TCPなりUDPで直接通信する限りにおいては、とりあえずOSに対応したドライバーを入れさえすれば、そのまま使える。話はもう1つ上位のファイル共有サービスに関係してくる。これを説明するためには、まずRDMAの話が必要だ。

DMAのネットワーク版「RDMA」、利用はOS側の実装に依存

 RDMA(Remote Direct Memory Access)は、DMA(Direct Memory Access)のネットワーク版……と書いても理解できないと思われるため、もう少し詳細を解説しよう。そもそもDMAとは何か? というと、「CPUを介さずにデバイスとメモリ(またはデバイス同士)の間で直接転送を行う」仕組みだ。

 DMAのケースでは、まず(1)CPU(が出すリクエストを受けたDMAコントローラー)が、デバイスに対して転送命令を掛ける。すると(2)Deviceは勝手にMemoryとの間でデータ転送を行い、転送が終わればCPU(に繋がるDMAコントローラー)に通知する、という仕組みだ。これが便利なのは、いちいちCPUがDeviceからデータを読み取ってMemoryに書き出す(もしくはメMemoryから読んでDeviceに書き出す)より、ずっとオーバーヘッドが少なく高速に転送ができることだ。

DMAによるデータ転送の仕組み

 これをネットワーク越しに拡張したのがRDMAである。以下のようにNode 1からNode 2にデータを転送する場合、まず(1)Node 1のCPU #1がDMAコントローラー経由でDevice(LANカード)にリクエストを出すと、(2)DeviceはMemoryからデータを直接読み込んで、(3)それをEthernetに送出する。(4)これを受け取ったNode 2のDeviceは、それをそのままNode 2のMemoryに書き出すという仕組みだ。転送が完了すると、Node 1とNode 2のDeviceはそれぞれのCPUに転送が行われたことを通知して処理が終了する。結果から見れば、ネットワーク越しにNode 1からNode 2まで一気にDMAが行われたような形に見えることから、この名前が付いている。

RDMAによるデータ転送の仕組み

 この仕組みがないと、送信側はDMAを利用して大量にフレームを送り出せても、受信側は1フレーム毎にCPUに「データを受け取った」通知を送り出し、そのたびにCPUが動作するので、結局は受信側がボトルネックになってしまうわけだ。

 RDMAは、10GBASE-Tで初めて採用されたわけではなく、InfiniBandは当初からこれをサポートしていた。「RoCE(RDMA over Converged Ethernet)」や「iWARP(Internet Wide Area RDMA Protocol)」などを使うことでTCP/IPでも利用は可能だったが、10GBASE-TではRDMAの仕組みがサポートされないと、ちゃんと性能が出ないということが早くから認知されていた。

 このRDMAは、OS側の実装にも依存するが、Windows系の場合はWindows Server 2012 R2とWindows Server 2012からインボックスドライバーの形でサポートされることになった。Linuxはもっと前からネイティブでRDMAをサポートしている。問題はクライアント側で、Windows 10 Proでは、現在のAnniversary UpdateでもこのRDMAがサポートされていない(Windows 10 Enterpriseは例外的にRDMAがサポートされる)。ただし、まもなく登場すると言われている「Windows 10 Pro for Workstations」ではサポートされる予定だ。

SMB 3.0に搭載される「SMBダイレクト」、RDMA対応のWindows 10 Enterprise/Pro forWorkstationで利用可能に

 このRDMAの存在を前提に実装されるのが、「SMBダイレクト」だ。「SMB(Server Message Block)」は、Windows(というか、大元はMS-DOS)のファイル共有/プリンター共有に利用されているプロトコルで、大昔は「NetBEUI(NetBIOS Extended User Interface)」とか「CIFS(Common Internet File System)」などとも呼ばれていた。SMBと名乗るようになったのはWindows 2000からで、以下のように、妙に細かくバージョンを刻みながら進化している。

バージョン対応OS
SMB 1.0Windows 2000
SMB 2.0Windows Vista/Windows Server 2008
SMB 2.1Windows 7/Windows Server 2008 R2
SMB 3.0Windows 8/Windows Server 2012
SMB 3.02Windows 8.1/Windows Server 2012 R2
SMB 3.1.1Windows 10/Windows Server 2016

 SMB 3.0からは、新機能として「SMBダイレクト(SMB over RDMA)」や「SMB Multichannel」「SMB Transparent Failover」といった機能が搭載されている。このうち転送性能に関係してくるのがSMBダイレクトで、SMBプロトコルをRDMA経由で利用できるようにするものだ。

SMB Directの概念図。出典は"Microsoft RDMA Update"

 実はWindows 10ではSMB 3.1.1をサポートすることもあり、SMBダイレクトを標準でサポートしている。ただし、「Windowsの機能の有効化または無効化」の画面でチェックを入れても、RDMAをサポートしていないので何も起きない。RDMAをサポートしているWindows 10 Enterprise(将来的にはWindows 10 Pro for Workstationも)に切り替えれば、ここを有効化することで利用できるようになるわけだ。

「コントロールパネル」-「プログラムと機能」-「Windowsの機能の有効化または無効化」の画面で、「SMBダイレクト」の機能を有効にできる

 というわけで、10GBASE-Tの環境では、サーバーとクライアントの双方で、RDMAとSMBダイレクトをサポートしたものを選ぶことが重要になる。10GBASE-Tを搭載したNASを利用する場合、OSは通常Linux系かFreeBSD系と思われるので、RDMAはサポートされると思われるが、SMBダイレクトをサポートしているかをきちんと確認しておいた方がいいだろう。

 余談ながら、もし利用するサーバーがWindows 2012で、しかもドメインコントローラーとしても動作させている場合、こんな話も公開されているので、そうした場合は、SMBダイレクトをあきらめるか、別のサーバーを立てたほうがいいだろう。

 今回は、10GBASE-Tの普及までの状況について解説しました。次回11月16日更新分では、実用編として、10GBASE-Tの派生規格である25GBASE-Tと40GBASE-Tについて解説します。

大原 雄介

フリーのテクニカルライター。CPUやメモリ、チップセットから通信関係、OS、データベース、医療関係まで得意分野は多岐に渡る。ホームページはhttp://www.yusuke-ohara.com/