SMBのマルチチャネル転送機能でファイルサーバーへのアクセス速度を向上させるTech TIPS

SMB 3.0のマルチチャネル機能を使うと、NICを増設するだけでファイルサーバーとのコピー速度を向上できる。その方法と注意点を解説する。

» 2015年12月25日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows 8/Windows 8.1/Windows 10/Windows Server 2012/Windows Server 2012 R2



解説

●ギガビットを超えるイーサネットはまだ高価

 Windowsのファイルサーバーとクライアント間において、ファイルコピーなどの速度を向上させる一番簡単な方法は、より高速な通信速度をサポートした「NIC(ネットワークインターフェースカード)」を利用することである。

 現在一般的に広く使われているイーサネットの規格では10Gbit/sとかそれ以上の速度のものが開発されており、普及し始めている。だがこれらは非常に高価であり、現在は一部のサーバーやデータセンターなどでしか普及していない。

 一般のクライアントPCなどでは現在のところ、1Gbit/sのイーサネット(以下「ギガビットイーサネット」)が非常に多く使われている段階である。

●NICの枚数を増やせば転送速度は上がる!?

 ギガビットにしか対応していないNICでも、複数束ねて使えばより高速な通信を実現できる。具体的には「NICチーミング」や「ポートトランキング」「リンクアグリゲーション」などの技術がある(各技術については次の記事参照)。

 いずれも既存のソフトウエアなどに変更を加えることなく、通信速度だけをが高速化したシステムを実現できる。ただし対応したNICやスイッチングハブ、もしくはシステム側での事前設定などがいくらか必要であり、導入はあまり簡単ではない。

●より簡単にファイルコピー速度を向上できる「SMBマルチチャネル」機能

 だがファイルサーバーへのアクセス速度を向上させるだけなら、より簡単な方法がある。それはWindows 8/Windows Server 2012以降でサポートされている「SMBマルチチャネル」という機能を使うことだ。

 「SMB(Server Message Block)」プロトコルはWindows OSで使われているファイル共有のためのネットワークプロトコルであり、現在ではLinux/UNIXやMac OSなどでも使われている。

 SMBマルチチャネルとは、そのSMBのバージョン3.0で実装された新機能の一つだ。これは複数のNICを使ってSMBの通信を行い、ファイルサービス(ファイルの読み書きやコピーなど)の速度を向上させるという機能である。SMBのサーバーとクライアント間の通信ではTCPを利用するが、NICごとに1つ(もしくは複数の)TCPコネクションを開設し、それらを同時に使って通信する。例えばサーバーとクライアントの双方にギガビットのNICを3枚ずつ装着すると、理論的には3倍の速度でファイルをコピーできる。

SMBマルチチャネル SMBマルチチャネル
SMB 3.0で実装されたSMBマルチチャネル機能では、SMBのサーバー(ファイルサーバー)とクライアント間で複数のNICを使って複数のTCPコネクションを開設し、それらを同時に使ってデータを送受信する(以前は、サーバーとクライアント間では1つの通信路しか使わなかった)。理論的にはNICの枚数分だけ高速化できるし、障害対策としても機能する。

 ギガビットイーサネットでは最大100Mbytes/sほどでファイルコピーできる。だが、これは最新のハードディスクの転送速度に劣っている。さらにSSDではこの数倍の速度が出るため、SSDを使ったファイルサーバーシステムならもう少し高速化したいところだろう。

 そのような用途ではSMBマルチチャネルの利用を検討してもよいかもしれない。この機能を導入しても、SMB 3.0をサポートしていないシステムからのアクセスは従来通りなので、何も問題はない(はずである)。

●万能ではないSMBマルチチャネル

 ただし、SMBマルチチャネルには以下のような制約/注意点があるので、注意して導入していただきたい。

  • SMBマルチチャネル機能は、サーバーもクライアントも共にWindows 8/Windows Server 2012以降のOSの場合にのみ有効。片方がWindows 7やWindows 2008 R2もしくはそれ以前のOSの場合は高速化されず、従来通りのまま
  • ファイル共有サービスのみが高速化される。それ以外のサービス(IISなど)は高速化されない
  • 複数のNICにそれぞれ固有のIPアドレスを割り当てるので、IPアドレスを多く消費するし、IPアドレスとのバインドが必要なサービス(IISなど)ではその設定に影響を与える。またHyper-Vなどの仮想環境を使う場合は、それらの仮想NICの設定が煩雑になる可能性がある
  • 速度の異なるNIC(1Gbit/sと100Mbit/s、無線LANなど)があっても、マルチチャネルで利用できるのは(デフォルトでは)最高速度のものに限られる
  • 通信経路の途中にボトルネックがあると(例えば100Mbit/sのルーターやハブが入っていたり、ハブをカスケード接続していたりした場合など)、マルチチャネル通信は行われるが、当然ながら速度はその部分で制約される
  • RSS(Receive Side Scaling)」や「RDMA(Remote Direct Memory Access)」などの機能をサポートしていないNICの場合は、マルチチャネル機能が利用できないか、理論的な最高速度が出ないことがある

 SMBマルチチャネルの詳細な機能解説や使い方、注意点、管理方法などについては、以下のブログ記事を参照のこと。

操作方法

●マルチチャネル機能の準備

 SMB 3.0のマルチチャネル接続機能はデフォルトで有効になっており、ユーザーが明示的に許可する必要はない。そのためユーザーが行うべき実質的な作業は、システムに複数のNICを装着してIPアドレスを割り当てることだけである。それ以上の操作は何も必要ない。

 ただし、IPアドレスの割り当てにDHCPを使っている場合は、1つのシステムで多くのIPアドレスを消費することになるので、IPアドレスの枯渇に注意していただきたい。

NICの増設 NICの増設
システムによってはネットワークポートを2つ以上持つものがある。そんな場合はとりあえずもう1本イーサネットケーブルをつないでみよう。PCI ExpressやPCIスロット、ハブのポートなどが余っている場合は、安価なギガビットイーサネットカードを購入して装着してもよいだろう。NICを3つ以上にしてもよいが、その分ハブのポートなどを多く消費することになるので注意。

 SMBマルチチャネルを使うためには、RSSやRDMAなどの機能をサポートしたNICが必要とされている。だがとりあえず、気にせずNICをシステムに装着してマルチチャネルが使えるかどうか試してみるとよい。いきなりNICを2枚以上増設するのではなく、まずは1枚だけ増設してみてマルチチャネル通信が有効になっているかどうか確認する。手元で試した限りでは、RSS機能がなくても十分高速化できていた。

 NICを追加してネットワークケーブルを接続したらシステムを起動して、IPアドレスが正しく割り当てられているかどうかを確認する。IPアドレスの確認は、コマンドプロンプトを開いて「ipconfig」コマンドを実行してもよいし、タスクマネージャーの[パフォーマンス]タブで[イーサネット]を選択してチェックしてもよい。

●マルチチャネル機能でファイルコピー速度が向上しているか確認する

 サーバーとクライアントの双方にNICを増設したら、ファイルサーバーとクライアント間でエクスプローラーなどを使ってファイルをコピーしてみる。なるべく大きなファイルを用意してコピーするだけでよい。大きなファイルは、例えばWindows OSのインストール用のISOファイルなどを用意してもよいし、「fsutil file createnew <ファイル名> <サイズ>」コマンドで巨大なダミーファイルを作成してコピーしてもよい(次のTIPS参照)。

 以下に実行例を示す。まずは、NICが一つしかないシステムの例である。コピー速度は「111Mbytes/s」ぐらいだが、これはギガビットイーサネットの理論最大通信速度1,000,000,000bit/s(=119.2Mbytes/s)に近い(リモートもローカルも共にSSDボリューム)。

SMBマルチチャネルを使わない場合のコピー SMBマルチチャネルを使わない場合のコピー
NICが一つしかないWindows 10間でのファイルコピーの例。コピー元もコピー先もSSDにしている。この場合はNIC 1つ分の最高速度でコピーされている。
  (1)コピー速度は「111Mbytes/s」。ギガビットイーサネットのほぼ最高速度でコピーされている。
  (2)残り約7分でコピーが完了予定。

 これに対して、NICを2枚ずつ装着したシステムでは次のようになっている。ほぼ2倍になっている。

SMBマルチチャネルを使った場合のコピー SMBマルチチャネルを使った場合のコピー
Windows 10にNICをそれぞれ2つ装着したシステムでのファイルコピーの例。この場合は二つのNICをそれぞれ最高速度で使ってコピーしているので、トータルでは元のほぼ2倍の速度でコピーが行われている。
  (1)コピー速度は「210Mbytes/s」。ギガビットイーサネットのほぼ2倍の速度でコピーされている。
  (2)残り約3分30秒(単一NIC時の半分)でコピーが完了予定。
  (3)コピー元。リモートのWindows 10。
  (4)コピー先。ローカルのWindows 10。
  (5)一つ目のNIC。
  (6)一つ目のNICの受信時使用帯域。ほぼ100%使用されている。
  (7)ほぼ全帯域がコピー処理に費やされている。
  (8)二つ目のNIC。
  (9)二つ目のNICの受信時使用帯域。これもほぼ100%使用されている。

 高速化されていることが確認できたら、他のシステムでも試してみたり、さらにNICを増設してみたり、同時に複数のサーバー/クライアント間でコピーなどを行ってテストしていただきたい。またWindows 7など、SMB 3.0をサポートしていないクライアントとの相互運用テストなども行うこと(この場合は、NIC 1つ分の帯域しか使わない)。

 高速化されていなかったり、片方のNICの使用率が0のままなら、後述のPowerShellコマンドを使って、サーバー側とクライアント側の両方のNICの構成などをチェックする。

 理論的には、サーバー側もクライアント側も最大帯域になるように自動的にNIC間でトラフィックが均等に割り振られることになっている。例えばクライアントにNICを2枚、サーバーにNICを3枚という構成の場合は、クライアント側は100%×2、サーバー側は66%×3という負荷になるはずだ(当たり前だが、NIC枚数の少ない方で制限を受ける)。

 だが手元で試した限りでは、マルチチャネルでWindows 10間でコピー中に、さらにWindows 7からコピーさせると、Windows 10間のコピー速度が低下したり、NICを1つしか使わなくなったりすることがあった。用意したNICのうち、いくつかがRSSをサポートしていないためではないかと思われるが、詳細は不明だ。

 導入に当たっては、十分にテストして(特に導入の前後の比較を必ず行うこと)利用していただきたい。

●マルチチャネルの管理

 SMB 3.0のマルチチャネル機能はデフォルトでは有効になっている。これを無効にしたり、また有効に戻したりするにはPowerShellを利用する。詳細は先のブログ記事(英語)を参照していただきたい。

※サーバー側のマルチチャネルの有効化と無効化
Set-SmbServerConfiguration -EnableMultiChannel $true
Set-SmbServerConfiguration -EnableMultiChannel $false
※クライアント側のマルチチャネルの有効化/無効化
Set-SmbClientConfiguration -EnableMultiChannel $true
Set-SmbClientConfiguration -EnableMultiChannel $false



 上のコマンドレットの実行後、システムを再起動してサーバーに再接続する。

 NICの情報や、RSS/RDMA機能をサポートしているかどうかは次のコマンドレットで確認できる。

※SMBネットワークインターフェース情報の取得
Get-SmbServerNetworkInterface
Get-SmbClientNetworkInterface
※NIC情報の取得
Get-NetAdapter
※RSSをサポートしているかどうかの確認
Get-NetAdapterRSS
※RDMAをサポートしているかどうかの確認
Get-NetAdapterRDMA
※NICのハードウエア情報の取得
Get-NetAdapterHardwareInfo



 RSSやRDMAをサポートしていなくても高速化されている場合は、特に気にしなくてもよいだろう。RSSはNICやCPU間で負荷を均等に割り振るなどの機能を持つので、これがないと状況によっては全NICを均等に使わなかったり、特に高負荷/高トラフィックのシステムではシステムにパフォーマンスの劣化などを引き起こす可能性がある。マルチチャネルの導入に当たっては、CPUやI/Oなどの負荷も確認して、問題がないかどうか検証するようにしていただきたい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。