SMB 3.0のマルチチャネル機能を使うと、NICを増設するだけでファイルサーバーとのコピー速度を向上できる。その方法と注意点を解説する。
対象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やスイッチングハブ、もしくはシステム側での事前設定などがいくらか必要であり、導入はあまり簡単ではない。
だがファイルサーバーへのアクセス速度を向上させるだけなら、より簡単な方法がある。それは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倍の速度でファイルをコピーできる。
ギガビットイーサネットでは最大100Mbytes/sほどでファイルコピーできる。だが、これは最新のハードディスクの転送速度に劣っている。さらにSSDではこの数倍の速度が出るため、SSDを使ったファイルサーバーシステムならもう少し高速化したいところだろう。
そのような用途ではSMBマルチチャネルの利用を検討してもよいかもしれない。この機能を導入しても、SMB 3.0をサポートしていないシステムからのアクセスは従来通りなので、何も問題はない(はずである)。
ただし、SMBマルチチャネルには以下のような制約/注意点があるので、注意して導入していただきたい。
SMBマルチチャネルの詳細な機能解説や使い方、注意点、管理方法などについては、以下のブログ記事を参照のこと。
SMB 3.0のマルチチャネル接続機能はデフォルトで有効になっており、ユーザーが明示的に許可する必要はない。そのためユーザーが行うべき実質的な作業は、システムに複数のNICを装着してIPアドレスを割り当てることだけである。それ以上の操作は何も必要ない。
ただし、IPアドレスの割り当てにDHCPを使っている場合は、1つのシステムで多くのIPアドレスを消費することになるので、IPアドレスの枯渇に注意していただきたい。
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ボリューム)。
これに対して、NICを2枚ずつ装着したシステムでは次のようになっている。ほぼ2倍になっている。
高速化されていることが確認できたら、他のシステムでも試してみたり、さらに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などの負荷も確認して、問題がないかどうか検証するようにしていただきたい。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.