仮想化でプリセールスしてるSEの一日

VMware から Azure まで、インフラや仮想化の最新情報をベンダー色をできるだけ抑えて綴っていきます

ファイルサーバーへのアクセスを高速化する Windows ノウハウ

f:id:ogawad:20190203195637p:plain:right

VDI システムを恙なく構築するには、
コモディティ化している仮想化スキルよりも、Windows OS をきちんと設定することの方が重要とつねづね感じています。

「仮想化インフラと Windows のスキルセットは両立できないのが SI 現場の実態」ということなので、少しでも橋渡しができるよう、CIFS 周りのノウハウを5つほど書き綴りたいと思います。

1. SMB/CIFS 2.1 以降で通信する

以前も記事にしましたが、Windows 7 からの NAS アクセスは
SMB 2.1 で通信するよう、心掛けましょう。
Windows Server 2003 サーバーにアクセスすると、SMB 1.0 になってしまうために 3倍以上 の性能差があるというデータもあるようです。

最近のファイルサーバーや NAS の性能 - (1) プロトコルと CPU の進化
http://d.hatena.ne.jp/ogawad/20130124/1358984437

2. 接続中の SMB/CIFS バージョンを確認する

Windows Server 2012 / Windows 8 以降から実行する必要がありますが、
現在接続している CIFS セッションのプロトコルバージョンを簡単な PowerShell コマンド「Get-SmbConnection」で調べることができます。

Windows 同士の場合はオートネゴシエーションで最適なバージョンが選ばれるので安心ですが、対向ストレージが Windows 純正でない CIFS 互換 NAS の場合は、ネゴシエーションに失敗して下位バージョンが選ばれてしまうこともありますので特に注意が必要です。

PS C:\> Get-SmbConnection

ServerName    ShareName     UserName      Credential    Dialect     NumOpens
 ---------    ---------     --------      ----------    -------     --------
DC            Share         VMDEMO\Adm... VMDEMO.HPJ... 3.00        6
IC4VC         IPC$          VMDEMO\Adm... VMDEMO.HPJ... 2.10        0

PS C:\> Get-SmbConnection | fl *

ContinuouslyAvailable : False
Credential            : VMDEMO.HPJ\Administrator
Dialect               : 3.00
Encrypted             : False
NumOpens              : 6
ServerName            : DC
ShareName             : Share
UserName              : VMDEMO\Administrator
PSComputerName        :
CimClass              : ROOT/Microsoft/Windows/SMB:MSFT_SmbConnection
CimInstanceProperties : {ContinuouslyAvailable, Credential, Dialect, Encrypted...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

ContinuouslyAvailable : False
Credential            : VMDEMO.HPJ\Administrator
Dialect               : 2.10
Encrypted             : False
NumOpens              : 0
ServerName            : IC4VC
ShareName             : IPC$
UserName              : VMDEMO\Administrator
PSComputerName        :
CimClass              : ROOT/Microsoft/Windows/SMB:MSFT_SmbConnection
CimInstanceProperties : {ContinuouslyAvailable, Credential, Dialect, Encrypted...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties


3. Windows 7 クライアントの CIFS Large MTU を有効にする

さて、ここからが本題です。
ポイントは次のスライド。「CIFS の MTU サイズ」



MTU といえば Jumbo Frame や Network Virtualization といった Ethernet MTU が有名ですが、ここで言及したいのは CIFS ウィンドウの Jumbo Frame です。
Large MTU(CIFS 版 Jumbo Frame)は Windows 8 からは既定で有効なものの、Windows 7 は既定が無効であるため、有効化しなければなりません。


Registry keyHKEY_LOCAL_MACHINE
Registry pathSystem\CurrentControlSet\Services\Lanmanworkstation\Parameters
Value NameDisableLargeMtu
Value typeREG_DWORD
Value range1=disable, 0=enable
Default value1 (if not present)


次のグラフは Microsoft の米国製品開発チームによる検証結果です。
SMB 1.0 → 2.1 で 3 倍という話をしましたが、同じ SMB 2.1 でも Large MTU を有効にするだけで 30% 以上も高速化できています。



 
Source: SMB 2 Multi-Credit Operations - MSFT DSS DSC Protocol Team


Ethernet における Jumbo Frame と同様に、広帯域なほど効果は高まりますし、End-to-End、つまり対向のストレージも Large MTU サポートが必要です。SMB 2.1 が喋れても Large MTU に対応していないものもあるということなので注意。


(2013.07.11 追記) Large MTU などの最適化項目をこちらにまとめました。


4. ファイルサーバーのメモリは多いほど速い


以前も書きましたが、
Windows Server 2008 R2 以降の Windows ファイルサーバーは、空きメモリをキャッシュとして利用する ため Read 性能が大幅に高速化します。
キャッシュ効果でディスクアクセスが減少し、「速度」「レイテンシ」「ストレージの I/O 負荷」のいずれも改善するので非常にお勧めです。ここ数年メモリ単価も下落したことも追い風になっています。

なお、「どのくらい積めば良い?」と質問されるのですが、基本的には多ければ多いほど...です。但し、キャッシュですのでディスク容量以上は意味ありません。


5. ファイルサーバーの省電力設定を無効化する

こちらは受け売りのネタですが、ファイルサーバーの省電力設定をハードウェアではなく OS に任せている場合、「バランス」から「高パフォーマンス」に変更することで性能が改善されるケースがあるようです。

Microsoft TechNet Blog - Windows Server 2012 File Server Tip
http://blogs.technet.com/b/josebda/archive/2012/11/10/windows-server-2012-file-server-tip-switch-to-the-high-performance-power-profile.aspx




実際、Windows クライアントや SMB/CIFS ファイルサーバー・移動ユーザープロファイル周りについて、こういった最低限の最適化すら行わない*1 で引き渡したり、稼働させてケースがあるようです。
性能トラブルの原因になりますので VDI の構築業者を選定する際は、仮想化インフラ・ハードウェアだけではなく、こういった Windows のノウハウもあるか確認しましょう*2Window OS の内部に詳しくなければ VDI は難しい。と思います。


なお、ここまで書いておきながらですが、
移動ユーザープロファイルとフォルダリダイレクトは 以前警鐘した内容 や、プレミアサポートに調査いただい結果など、挙動を知れば知るほど躊躇してしまいます。
実際、MS 自身も WS2012 では移動ユーザー回避の流れですし...




関連記事(VDI, Windows, パフォーマンス)

*1:そもそも知らなかったというケースも...泣

*2:この両方に詳しいエンジニアはなかなか居ないらしいなので、プロジェクト "チーム" として両方を満たしていれば良いのかな、と思っています。