連載
» 2013年04月25日 17時30分 UPDATE

Windows Server 2012クラウドジェネレーション:第9回 強化されたファイル共有プロトコルSMB 3.0の概要

Windows Server 2012ではファイル共有プロトコルが強化され、SMB 3.0となった。クラスタ環境対応やスケールアウト/マルチチャンネル対応などによるパフォーマンス改善、そして管理機能の強化と、改善点は多岐にわたる。本稿ではその概要をまとめておく。

[打越浩幸,デジタルアドバンテージ]
Windows Server 2012クラウドジェネレーション
Windows Server Insider


「Windows Server 2012クラウドジェネレーション」のインデックス

連載目次

 Windows Server 2012ではファイル共有サービスの強化を行うにあたり、従来からのファイル共有プロトコル(SMBプロトコル)に対して、大幅な強化が行われている。本稿ではそのSMBの概要についてまとめておく。

SMB 3.0とは

 Windows Server 2012やWindows 8では、従来からWindows OSで利用されてきたファイル共有プロトコル「SMB(Server Message Block)」を改良した、「SMB 3.0」が実装されている。SMB3.0では、クラスタ環境対応やマルチチャンネル/スケールアウト/SMBダイレクト対応などによるパフォーマンス改善、PowerShellなどによる管理機能の強化など、数多くの改良が行われている。SMB 3.0の機能強化の概要を次表にまとめておくが、より詳細な情報については以下のサイトなどを参照していただきたい。

機能 概要
SMB透過フェイルオーバー ファイル・サーバをクラスタ化して、フェイルオーバーしてもクライアントから継続してアクセスできるようにする機能。ファイル共有を利用するアプリケーションを再起動するなどの処理は不要
SMBスケールアウト ファイル・サーバ・クラスタ内のすべてのノードから同時にクラスタ共有ボリューム(CSV)上のファイルにアクセス可能(以前のバージョンでは、クラスタ内のどれか1台からのみ同時にアクセス可能)。これにより、クラスタのノード数を増やしただけ、ファイル・サーバの帯域をスケールアウトでき、クライアントの負荷分散が可能になる
SMBマルチチャンネル 同時に複数のNICを使って送受信することにより、ネットワーク帯域を拡大したり、負荷分散や障害対策を実現する機能
SMBダイレクト RDMAという、CPUの介在なしでデータを転送する機能を持つアダプタを使うことにより、高速・低レイテンシの通信を実現する機能
オフロード・データ転送(ODX) ローカルのCPUやネットワークを使うことなく、リモートのストレージ内でデータを直接コピーする機能
サーバ・アプリケーションのためのパフォーマンス・カウンタ SMB 3.0の動作状況をモニタするための新しいパフォーマンス・カウンタが用意された
パフォーマンスの最適化 SQL ServerのOLTPなど、サーバ・アプリケーションのI/Oは小規模なランダム読み/書きが多いため、それに合わせてSMBが最適化された。またデフォルトのMTU(最大転送単位)を1Mbytesに拡大し、大規模なシーケンシャル・アクセスのパフォーマンス向上を図っている
SMB暗号化 ファイル・アクセスの通信を暗号化する機能。サーバとクライアント間の通信セッションごとに暗号化するかどうかを指定できる
SMBリモート・ファイル記憶域 クラスタ上に共有ボリュームを作成して、Hyper-Vの仮想マシン・ファイルやSQL Serverのデータベース・ファイルなどを配置できる。Hyper-Vのライブ・マイグレーションにも対応
SMBファイル共有のVSS クラスタ共有ボリュームのVSS(ボリューム・シャドウ・コピー)を作成できる(以前のVSSはローカル・ディスクでしか取れなかった)。これにより、リモートのファイル・サーバ上のアプリケーション・ファイルなどを、ローカルのPCからバックアップできる
SMBディレクトリ・リース リモート・ファイル・サーバのディレクトリやファイルのメタデータ情報をローカルにキャッシュすることにより、特に、遅延時間の大きいブランチ・オフィスにおけるファイル・アクセスの応答時間が改善される。サーバのデータに変更があるとクライアントに通知されるので、キャッシュの一貫性も保たれる。ホーム・フォルダ(読み書き可、共有なし)とパブリケーション(読み出し専用、共有あり)の両方に対応
SMB PowerShell PowerShellによるSMBファイル共有サービスの管理が可能
SMB 3.0関連の機能改善点

SMBプロトコルとバージョン・ネゴシエーション

 SMB 3.0はWindows Server 2012やWindows 8で利用できるSMBのバージョンだが、以前のWindows OSでサポートされているSMBのバージョンは3.0ではない。以下にSMBのバージョンと実装されているWindows OS、SMBの主要な機能などを示しておく。バージョン番号が大きいものは、それ以前のバージョンの機能を含んでいる。

SMB 実装されているWindows OS 概要
SMB 1.0 Windows 9x/Windows Me/Windows NT/Windows 2000/Windows XP/Windows Server 2003 ・一番基本的なファイル共有プロトコル
・CIFS(インターネット上でのSMB)のサポート
SMB 2.0 Windows Vista/Windows Server 2008 ・複数のSMBコマンドの連結
・切断時の透過的な再接続処理
・バッファリング・サイズの拡大
・ファイル・プロパティのキャッシュ
・スケーラビリティの拡大
・シンボリック・リンクのサポート
SMB 2.1 Windows 7/Windows Server 2008 R2 ・1MbytesのラージMTU(デフォルトは64Kbytes)サポート
・クライアントoplockリース・モデル
・スリープ・モードのサポート
SMB 3.0 Windows 8/Windows Server 2012 ・SMB透過フェイルオーバー
・SMBマルチチャンネル、ほか(全機能については上の表参照)
SMBのバージョン
SMBのバージョン番号と主な機能。例えばSMB 2.0はSMB 1.0の機能をすべて内包している。

 Windows OSによってサポートされているSMBプロトコルのバージョンは異なるが、基本的には次のように、サーバ側とクライアント側のSMBのバージョンを比較して、低い方に合わせてアクセスされる(バージョンのネゴシエーションが行われる)。新しいバージョンのOSから古いバージョンのOSへアクセスする場合は古い方のバージョンのSMBが使われ(ダウンレベル・アクセスという)、その分だけ機能も限定されることになる。例えば今回解説しているSMB 3.0の機能を使いたければ、サーバもクライアントもWindows 8かWindows Server 2012にする必要がある。どちらかがWindows 7やWindows Server 2008 R2なら、使用されるプロトコルや機能はSMB 2.1に制限される。

SMBプロトコルのネゴシエーション SMBプロトコルのネゴシエーション
サーバとクライアント間でサポートされているSMBのバージョンが異なる場合、セッション開始時に低い方のバージョンに合うようにネゴシエーションが行われ、利用できる機能が制限される。

 以下、いくつかSMB 3.0の主要な機能を取り上げて、詳しく見ていこう。

【可用性の向上】 SMB透過フェイルオーバー・サポート

 「SMB透過フェイルオーバー」とは、クラスタ化したWindows Server 2012のファイル・サーバ(のクラスタ共有ボリュームCSV)上に共有フォルダを作成しておくと、何らかの障害などでクラスタがフェイルオーバーしても、クライアントからは自動的に別ノードに再接続し、処理を継続できるという機能である。接続先が切り替わっても、クライアントからのアクセスはそのまま継続するので、処理を続行できる。

【性能と耐障害性の向上】SMBマルチチャンネル・サポート

 SMBのサーバとクライアント間に複数のネットワーク・パス(ネットワーク接続)が存在していることが検出されると、同時に複数のパス(通信路、コネクション)を開設し、パケットを分散して送受信してデータを読み書きする。これにより、1つのネットワーク・インターフェイス・カード(NIC)だけでは得られないような高速なアクセスが可能になる。また、ネットワーク・インターフェイスやケーブルなどの障害で通信ができなくなっても、自動的にほかのパスを使って通信を継続できるので、耐障害性も高くなる。

 この機能を利用するためには、次のいずれかの構成のハードウェアが必要となる。

  • 複数のネットワーク・アダプタ(ギガビット・イーサネットもしくはInfiniBand*1ネットワーク・アダプタなど)
  • 1つもしくは複数のRSS(Receive Side Scaling)をサポートしたネットワーク・アダプタ(RSSについてはこちらを参照)
  • NICチーミングとして構成された1つもしくは複数のネットワーク・アダプタ
  • 1つもしくは複数のRDMA(後述)をサポートしたネットワーク・アダプタ

*1 InfiniBandとは、イーサネットのようなバス型ではなく、ポイント・トゥ・ポイントで接続する高速通信インターフェイス技術。構成にもよるが、数十〜数百Gbit/sといった高速通信が可能だ。ハイエンドのサーバやデータセンターなどでよく使われている。
いま知っておくべきWebサービスのための高速ネットワーク技術(Master of IP Network)


 複数のネットワーク・インターフェイスを利用する場合、1台のスイッチを経由してサーバとクライアント間を結んでもよいし、異なるスイッチ(サブネットワーク)を経由して接続してもよい。いずれにしろ、SMBのサーバとクライアント間に複数のパスがあれば、自動的に判断して通信が行われる。図にすると、次のようなものがある。

SMBマルチチャンネルの構成例 SMBマルチチャンネルの構成例
このような構成になっていると、SMB 3.0では自動的にサーバとクライアント間でマルチチャンネルの通信路を確立し、分散して利用するようになっている。

 ハードウェアの構成やSMBサービスの設定などによって、どのように負荷が分散されているかを調べたり、同時に最大何コネクション使うように設定されているかなどを知るには、以下のサイトの情報を参照していただきたい。PowerShellを使ってSMBサービスの設定や、通信状態などをチェックする方法が紹介されている。

コラム「Windows OSレベルでのNICチーミング・サポート」

SMBマルチチャンネルではSMBのレベルで複数のチャネルを束ねているが、もっと下位のレベルで複数のNICを束ねて1つのNICのように扱う「NICチーミング(NIC teaming)」という技術もある。NICチーミングは、従来はNICカードでサポートされている機能であったが、Windows Server 2012ではこれをOSレベルでサポートしている。NICカードでのサポートでは、ベンダごとに設定方法が異なるし、(通常は)同じベンダの同じ製品を揃えなければ利用できないが、OSレベルでサポートされることにより、異なるNIC製品であっても、速度さえ同じならばまとめてNICチーミングを構成できるというメリットがある。

NICチーミングを構成する NICチーミングを構成する
NICチーミングの設定は、サーバ・マネージャのプロパティ画面から行う。ここでは4つの1ギガビット・イーサネットを4つまとめてNICチーミングを行ってみた。
  (1)NICチーミングで作成したインターフェイス名。
  (2)このではスイッチ非依存型のチーミング・モードを選択している。ほかに、NICやスイッチの設定を「LACP(Link Aggregation Control Protocol)」という標準プロトコルなどを使って行う方法もある。
  (3)負荷分散方法は「アドレスのハッシュ」型。MACアドレスの値に基づいてトラフィックを各インターフェイスに振り分ける。ほかに「Hyper-Vポート」というモードを選択すると、Hyper-Vの各仮想NICに割り当てることができる。
  (4)4つのNICでチーミングを行っている。チーミングを行うと、元の4つのNICはipconfigコマンドなどでは表示されなくなる。
  (5)各NICの速度は1Gbps。

 NICチーミングで作成したインターフェイスの属性を見ると、次のようになっており、元のNICの速度が全部合計された速度になっていることが分かる。

NICチーミングで作成したインターフェイスの属性 NICチーミングで作成したインターフェイスの属性
これはタスク・マネージャのイーサネット画面で表示できるネットワーク・プロパティの画面。
  (1)リンク速度が、4つのNICの合計である4Gbit/sになっている。


【性能の向上】SMBダイレクト・サポート

 「SMBダイレクト」は、「RDMA(Remote Direct Memory Access)」をサポートした特殊なネットワーク・アダプタ(InfiniBandなど)を使った場合に利用できる機能である。RDMAとは、ソフトウェア(デバイス・ドライバやネットワーク・プロトコル・スタック)などを介さずに、アダプタ自身で受信したデータを直接メイン・メモリ上へ書き込んだり、逆にメモリ上のデータを送信したりできる。これにより、CPUの負荷を大幅に削減しながらも、高速な通信が可能になる。

SMBダイレクトを使ったデータ転送 SMBダイレクトを使ったデータ転送
RDMA(Remote Direct Memory Access)は、CPUを介さずに、アダプタ自身でデータをメイン・メモリから読み書きして送受信する機能。InfiniBandなどのハイエンド向けシステムでよくサポートされている。SMBダイレクトでは、RDMAをサポートしたネットワーク・アダプタを使うことにより、CPUの介在なしに、SMBプロトコルのパケットを直接サーバとクライアント間でやりとりする。この結果、CPUに負荷をかけずにデータを高速に転送できる。

【コピー性能の大幅な向上】オフロード・データ転送

 これはSMB 3.0だけの機能ではなく、正確にはWindows Server 2012のファイル・サービスの機能の1つであるが、ファイル・コピーのパフォーマンスを大幅に改善するために「オフロード・データ転送(ODX)」という機能もサポートされている。通常ファイル・コピー操作を行うと、コピー元ストレージからの読み出しとコピー先ストレージへの書き込みはすべてCPUが処理する。ファイルがローカルのディスク上ではなく、リモートのファイル・サーバやSAN、iSCSIなどで接続されたストレージ上にある場合は、ネットワークやInfiniBand、Fibre Channel(FC)なども使ってデータを読み書きすることになる。だがもし、コピー元とコピー先のファイルが同じストレージ・デバイス上にあるなら、原理的にはいちいちネットワークを介してデータをコピーする必要はなく、ストレージ・デバイス上で直接データを読み書き(移動)すれば、CPUやネットワークに負荷を与えず、しかも高速にコピーできる。これを実現するのがオフロード・データ転送である。

 Windows Server 2012にオフロード・データ転送に対応したストレージ・デバイスを接続しておくと、同じストレージ上でのコピーであることが検出された場合、同一ストレージ内で直接データが転送される。これにより、ローカルのCPUやネットワークをほとんど使用することなく、ファイル・コピーが行われる。例えばリモートのファイル・サーバ上にある巨大なバックアップ・ファイルやVHDXファイルを(同じサーバ内で)コピーしても、ネットワークの速度には関わらず、リモートのファイル・サーバ上でコピー処理が完結する。

オフロード・データ転送(ODX)によるファイル・コピー オフロード・データ転送(ODX)によるファイル・コピー
オフロード・データ転送(ODX)に対応したストレージやリモートのWindows Server 2012のファイル共有(SMB 3.0)を使用している場合、同じストレージ上のファイル・コピーでは、いちいちローカルにデータを読み出してからコピー先へ書き込むのではなく、リモートのストレージ内でのデータ転送でコピー動作が完了する。ネットワークを介さないので最速でコピーできるし、ローカルのCPUやネットワークの負荷も大幅に抑制できる。

【セキュリティの向上】SMB暗号化サポート

 Windows Server 2012のSMB 3.0では、ファイル共有ごとに通信内容を暗号化させるかどうかを選択できるようになっている。特別なハードウェアなどは何もいらず、共有設定のプロパティで暗号化をオンにするだけでよい。ブランチ・オフィスからインターネットのVPNなどを経由してリモートのファイル・サーバなどへアクセスする場合、通信内容をのぞき見られて情報が漏洩するリスクを軽減できる。

SMB共有の暗号の設定 SMB共有の暗号の設定
Windows Server 2012のSMB 3.0では、共有リソースごとに暗号化するかどうかを選択できる。暗号化の有効/無効は、サーバ・マネージャの[ファイル サービスと記憶域サービス]−[共有]で設定できる。
  (1)共有名。
  (2)アクセス権がないファイルやフォルダは、ユーザーから見えないようにする機能。デフォルトではオフになっている。
  (3)共有フォルダの内容をローカルにキャッシュさせるかどうかの設定。
  (4)これをオンにすると、この共有に対するアクセスはすべて暗号化される。共有ごとにオン/オフを設定する。デフォルトではオフ。

パフォーマンス・カウンタやPowerShellによるSMB 3.0の管理

 Windows 8/Windows Server 2012では、SMB 3.0の動作状態をチェックするための機能として、パフォーマンス・カウンタ(パフォーマンス・モニタ)やPowerShellによる管理機能が追加されている。従来は、SMB関連の設定やセッションの状態などを調べるには、netコマンドや(タスク・マネージャから起動する)リソース・モニタを利用することが多かった。例えばセッションの状態を調べるには「net session」や「net use」「net config server/workstation」「net file」などのコマンドが利用できるし、リソース・モニタの「ディスク」や「ネットワーク」カテゴリなどでもチェックできる。

 これらの方法もそのまま使えるが、SMB 3.0ではさらにPowerShellのSmbShareモジュールのコマンドレットも利用できる。「net 〜」コマンドよりも詳細な情報が得られるし、コマンド体系も統一されているので使いやすい。

※SmbShare関連のコマンドの一覧
PS C:¥> get-command -module smbshare
CommandType Name                             ModuleName
----------- ----                             ----------
Function    Block-SmbShareAccess             SmbShare
Function    Close-SmbOpenFile                SmbShare
Function    Close-SmbSession                 SmbShare
Function    Get-SmbClientConfiguration       SmbShare
Function    Get-SmbClientNetworkInterface    SmbShare
Function    Get-SmbConnection                SmbShare
Function    Get-SmbMapping                   SmbShare
Function    Get-SmbMultichannelConnection    SmbShare
Function    Get-SmbMultichannelConstraint    SmbShare
Function    Get-SmbOpenFile                  SmbShare
Function    Get-SmbServerConfiguration       SmbShare
Function    Get-SmbServerNetworkInterface    SmbShare
Function    Get-SmbSession                   SmbShare
Function    Get-SmbShare                     SmbShare
……(以下省略)……

※SMBサーバの設定の確認
PS C:¥> Get-SmbServerConfiguration

AnnounceServer                  : False
AsynchronousCredits             : 64
AutoShareServer                 : True
AutoShareWorkstation            : True
CachedOpenLimit                 : 5
AnnounceComment                 :
EnableDownlevelTimewarp         : False
EnableLeasing                   : True
EnableMultiChannel              : True
EnableStrictNameChecking        : True
AutoDisconnectTimeout           : 0
DurableHandleV2TimeoutInSeconds : 30
EnableAuthenticateUserSharing   : False
……(以下省略)……

※SMBクライアントの設定の確認
PS C:¥> Get-SmbClientConfiguration

ConnectionCountPerRssNetworkInterface : 4
DirectoryCacheEntriesMax              : 16
DirectoryCacheEntrySizeMax            : 65536
DirectoryCacheLifetime                : 10
EnableBandwidthThrottling             : True
EnableByteRangeLockingOnReadOnlyFiles : True
EnableLargeMtu                        : True
EnableMultiChannel                    : True
DormantFileLimit                      : 1023
……(以下省略)……

※ネットワーク・インターフェイスの確認
PS C:¥> Get-SmbServerNetworkInterface | fl
ScopeName      : *
InterfaceIndex : 12
RssCapable     : False
RdmaCapable    : False
Speed          : 1 Gbps
IpAddress      : 10.20.2.102
……(以下省略)……




 今回はSMB 3.0の機能について簡単に紹介してきた。クラスタやマルチチャンネル/スケールアウト対応、RDMAサポート、ディレクトリ・キャッシュによる性能向上など、かなり大幅な機能強化が図られている。クラスタ環境での運用方法やマルチチャンネル/NICチーミングの使い方など、より実践的な使い方については今後改めて紹介する。

更新履歴

【2013/05/07】オフロード・データ転送(ODX)に関する記述を追加しました。



「Windows Server 2012クラウドジェネレーション」のインデックス

Windows Server 2012クラウドジェネレーション

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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