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

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

Windows ファイルサーバー関連のチューニングポイント一覧

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

先日、VDI を導入する際に最低限実施しておきたい SMB/CIFS 周りの最適化設定 をまとめました。

"最低限" と書いた通り、Windows の SMB/CIFS にはたくさんのチューニング項目があります。
「こういったチューニングパラメーターはどこに載っているの?」とご質問をいただくのですが、誰もが入手でき、Windows エンジニア内で最も著名なのは「Performance Tuning Guidelines for Windows Server」です。

Microsoft Windows Dev Center - Hardware
Performance Tuning Guidelines for Windows Server 2012
http://msdn.microsoft.com/en-us/library/windows/hardware/jj248719.aspx


今回は、4月にリリースされた本ガイドの WS2012 版をベースに、
SMB/CIFS のチューニングポイントについて簡単にご紹介します。


Windows 7 クライアント用の SMB/CIFS チューニングポイント

資料には Windows 8 専用の設定もありますが、ここでは Windows 7 で利用できるものに絞ってみます。すべて REG_DWORD 型です。
 
HKLM\system\CurrentControlSet\Services\LanmanWorkstation\Parameters


DisableLargeMtu
SMB のフレーム長を 64 KB から 1 MB まで増やすかどうか?
(Default=1)

DisableBandwidthThrottling
ネットワークのレイテンシが長い場合に、
スループットを自動的に抑制するかどうか?
(Default=0)

RequireSecuritySignature
未署名の SMB 通信をドロップするかどうか?
※サーバー側にも設定が必要
(Default=0)

DirectoryCacheEntriesMax
DirectoryCacheEntrySizeMax
DirectoryCacheLifetime
クライアント側でキャッシュする
ディレクトリ情報:
・数量(qty: Default=16, 1-4096)
・サイズ(KB: Default=64)
・保持期間(sec: Default=10)

FileInfoCacheEntriesMax
FileInfoCacheLifetime
クライアント側でキャッシュする
ファイル情報:
・数量(qty: Default=64, 1-65536)
・保持期間(sec: Default=10)

FileNotFoundCacheEntriesMax
FileNotFoundCacheLifetime
クライアント側でキャッシュする
File Not Found 情報:
・数量(qty: Default=128, 1-65536)
・保持期間(sec: Default=5)

DormantFileLimit
CacheFileTimeout
クライアント側でキャッシュする
クローズ済みファイル:
・数量(qty: Default=1023)
・保持期間(sec: Default=10)

HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\


EnableWsd
利用機器が TCP スケーリングに未対応の場合に、TCP 受信ウィンドウを自動調整するかどうか?
(Default=1)


残念ながら Windows 7 では見れないのですが、Windows 8 からは Get-SmbClientConfiguration コマンドで現在設定されている値を一覧にできます。



Windows Server 2012 ファイルサーバーの SMB/CIFS チューニングポイント

サーバー側に関しては、Windows Server 2012 で利用できるものに絞ります。すべて REG_DWORD 型です。
 
HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\


TreatHostAsStableStorage
クライアントからの書き込みフラッシュ要求を無視するかどうか?
(Default=0)

AsynchronousCredits
単一セッション内での非同期要求の上限
(Default=512)

Smb2CreditsMin
Smb2CreditsMax
クライアントからの同時実行数
・最小値 (Default=64)
・最大値 (Default=1024)

AdditionalCriticalWorkerThreads
重要なカーネル命令用に、別途スレッドを用意するかどうか?
(Default=0)

MaximumTunnelEntries
NTFS トンネリングキャッシュのサイズ
(Default=1024)

MaxThreadsPerQueue
同時要求を処理するために使用できるスレッド数
(Default=20)

RequireSecuritySignature
未署名の SMB 通信をドロップするかどうか?
※クライアント側にも設定が必要
(Default=0)

HKLM\System\CurrentControlSet\Control\FileSystem\


NtfsDisable8dot3NameCreation
8+3 ファイル名の自動生成を中止するかどうか? ※WS2012 ではシステムボリュームのみ自動生成
(Default=0)


サーバー側も、WS2012 であれば現在設定されている値を
Get-SmbServerConfiguration コマンドで一覧出力可能です。



このほかのパラメーターは?

翻訳元のドキュメントで「General Tuning Parameters」と表現されているとおり、今回ご紹介したチューニングポイントは 一般的なもの で、これが全てではありません。スクリーンショットのとおり、他にもたくさんの設定項目があります。
しかし、これ以外のパラメーターについては Developer's Guide レベルの内容であり、KB などで指示されない限りはそのままで良いのではと思います。

なお、対向の CIFS ファイルサーバーが Windows OS ではなく「CIFS 互換 NAS」の場合、効果を発揮しなかったり、逆効果もあり得ますのでご注意ください。


VDI の場合はどうしていけば良い?

VDI は、HDD を占有する FATPC に比べて、ストレージを共有します。
更に、ユーザーデータへの I/O はネットワーク越しになるケースも多く、サーバーとクライアント間の CIFS 通信が最適でないと、ハードウェア性能が余分に消費され、ユーザーの体感に影響を生じます。

カリカリにチューニングするのもありですが、最低限ユーザーが「マイドキュメントが遅い」と感じない程度にチューニングできれば合格点かなと思っています。
最適化によって無駄な処理(力技)が減りますので、
1ランク下のハードウェアで済んだり、管理者としても大きなメリットです。


環境依存*1 もあるなか、どのようにして「最適値」に見つけていくかですが、Windows にある程度詳しい SIer 様であれば、自社で検証・ベンチマークしていますので、最低限の設定で大きく改善できる設定項目をノウハウとしているものです。
VDI の設計構築を SI ベンダーに依頼する際、このような部分まで支援いただけるかを確認しましょう。ゲスト OS を VDI 向けに最適化する際に、環境に応じた推奨値を提示・指南してくれます。

*1:ネットワーク帯域、中継スイッチの機能・種類、ファイルサーバーの CPU パワー など