SMB 構成に関する考慮事項
BIOS とオペレーティング システムの電源管理モードが必要に応じて設定されていることを確認します。これには、ハイ パフォーマンス モードや変更された C-State が含まれる場合があります。 サーバー メッセージ ブロック (SMB) チューニングを構成する前に、最新かつ最も回復性が高く、最速の記憶域およびネットワーク デバイス ドライバーがインストールされていることを確認します。
ファイル サーバーとクライアントに必要のないサービスや機能を有効にしないでください。 次のような不要なサービスまたは機能を無効にすることを検討してください。
- クライアント側のキャッシュ
- ファイル システムのミニ フィルター
- ファイアウォール フィルター
- IPSEC
- NTFS 圧縮
- NTFS 暗号化
- スケジュールされたタスク
- Search Service
- SMB 暗号化
- SMB 署名
- Teredo
ファイルのコピーは、ファイル サーバーで実行される一般的な操作です。 Windows Server には、コマンド プロンプトを使用して実行できるファイル コピー ユーティリティがいくつか組み込まれています。 これらの操作には Robocopy をお勧めします。 Windows Server 2008 R2 では、Robocopy の /mt オプションが導入されました。このオプションにより、複数の小さなファイルをコピーするときに複数のスレッドを使用してリモート ファイル転送の速度が大幅に向上しました。 また、 /log オプションを使用して、ログを NUL デバイスまたはファイルにリダイレクトすることで、コンソール出力を減らすことをお勧めします。
xcopyを使用する場合は、既存のパラメーターに/qと/kのオプションを追加することをお勧めします。 前者のオプションは、コンソール出力を減らすことで CPU オーバーヘッドを削減し、後者はネットワーク トラフィックを減らします。
SMB のパフォーマンス チューニング
ファイル サーバーのパフォーマンスと使用可能なチューニングは、各クライアントとサーバーの間でネゴシエートされる SMB プロトコルと、展開されたファイル サーバーの機能によって異なります。 現在使用可能なプロトコルの最高バージョンは、Windows Server 2022、Windows Server 2016、および Windows 10 の SMB 3.1.1 です。 クライアント上の Windows PowerShell Get-SMBConnection とサーバー上の Get-SMBSession | FL を使用して、ネットワークで使用されている SMB のバージョンを確認できます。
SMB 3.0 プロトコル ファミリ
SMB 3.0 は Windows Server 2012 で導入され、Windows Server 2012 R2 (SMB 3.02) と Windows Server 2016 (SMB 3.1.1) でさらに強化されました。 このバージョンでは、ファイル サーバーのパフォーマンスと可用性を大幅に向上させる可能性のあるテクノロジが導入されました。 詳細については、 Windows Server 2012 および 2012 R2 2012 の SMB と SMB 3.1.1 の新機能に関するページを参照してください。
SMB ダイレクト
SMB ダイレクトでは、RDMA ネットワーク インターフェイスを使用して、待機時間が短く CPU 使用率が低い高スループットを実現する機能が導入されました。
SMB は、RDMA 対応ネットワークを検出するたびに、RDMA 機能の使用を自動的に試行します。 SMB クライアントが RDMA パスを使用して接続できない場合は、TCP/IP 接続の使用にフォールバックします。 SMB ダイレクトと互換性のあるすべての RDMA インターフェイスも TCP/IP スタックを実装する必要があり、SMB マルチチャネルはこれを認識します。
SMB ダイレクトは SMB 構成では必要ありませんが、待機時間を短縮し、CPU 使用率を低くしたいユーザーには常にお勧めします。
SMB ダイレクトの詳細については、「SMB ダイレクト を使用したファイル サーバーのパフォーマンスの向上」を参照してください。
SMB マルチチャネル
SMB マルチチャネルを使用すると、ファイル サーバーは複数のネットワーク接続を同時に使用でき、スループットが向上します。
SMB マルチチャネルの詳細については、「SMB マルチ チャネルの展開」を参照してください。
SMB のスケールアウト
SMB スケールアウトを使用すると、クラスター構成の SMB 3.0 で、クラスターのすべてのノードに共有を表示できます。 このアクティブ/アクティブ構成により、複数のボリューム、共有、およびクラスター リソースを含む複雑な構成なしで、ファイル サーバー クラスターをさらにスケーリングできます。 最大共有帯域幅は、すべてのファイル サーバー クラスター ノードの合計帯域幅です。 帯域幅の合計は、単一のクラスター ノードの帯域幅によって制限されなくなりましたが、バッキング ストレージ システムの機能によって異なります。 ノードを追加することで合計の帯域幅を増大することができます。
SMB スケールアウトの詳細については、 Scale-Out アプリケーション データのファイル サーバーの概要 に関するページと、 スケールアウトするかスケールアウトしないかを問うブログ投稿を参照してください。
SMB 3.0 のパフォーマンス カウンター
次の SMB パフォーマンス カウンターは Windows Server 2012 で導入されました。SMB 2 以降のバージョンのリソース使用状況を監視する場合、これらのカウンターはカウンターの基本セットと見なされます。 パフォーマンス カウンターをローカルの生 (.blg) パフォーマンス カウンター ログに記録します。 ワイルドカード文字 (*) を使用してすべてのインスタンスを収集し、Relog.exeを使用して後処理中に特定のインスタンスを抽出するコストが低くなります。
SMB クライアント共有
これらのカウンターには、SMB 2.0 以降のバージョンを使用してクライアントによってアクセスされたサーバー上のファイル共有に関する情報が表示されます。
Windows の通常のディスク カウンターに慣れている場合は、一定の類似点に気付くかもしれません。 それは偶然ではありません。 SMB クライアント共有のパフォーマンス カウンターは、ディスク カウンターと完全に一致するように設計されています。 これにより、現在使用しているアプリケーション ディスクのパフォーマンス チューニングに関するガイダンスを簡単に再利用できます。 カウンター マッピングの詳細については、 共有ごとのクライアント パフォーマンス カウンターに関するブログを参照してください。
SMB サーバー共有
これらのカウンターには、サーバー上の SMB 2.0 以降のファイル共有に関する情報が表示されます。
SMB サーバー セッション
これらのカウンターには、SMB 2.0 以降を使用している SMB サーバー セッションに関する情報が表示されます。
サーバー側 (サーバー共有またはサーバー セッション) でカウンターをオンにすると、高い IO ワークロードのパフォーマンスに大きな影響を与える可能性があります。
キー フィルターの再開
これらのカウンターには、再開キー フィルターに関する情報が表示されます。
SMB 直接接続
これらのカウンターは、接続アクティビティのさまざまな側面を測定します。 1 つのコンピューターに複数の SMB 直接接続を使用できます。 SMB 直接接続カウンターは、各接続を IP アドレスとポートのペアとして表します。 最初の IP アドレスとポートは接続のローカル エンドポイントを表し、2 番目の IP アドレスとポートは接続のリモート エンドポイントを表します。
物理ディスク、SMB、CSV FS のパフォーマンス カウンターの関係
物理ディスク、SMB、CSV FS (ファイル システム) カウンターの関連の詳細については、次のブログ投稿「Cluster Shared Volume Performance Counters」を参照してください。
SMB ファイル サーバーのチューニング パラメーター
次の REG_DWORD レジストリ設定は、SMB ファイル サーバーのパフォーマンスに影響する可能性があります。
Smb2CreditsMin と Smb2CreditsMax
HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\Smb2CreditsMinHKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\Smb2CreditsMaxWindows Server の既定値はそれぞれ 512 と 8192 です。 これらのパラメーターを使用すると、サーバーは、指定された境界内でクライアント操作のコンカレンシーを動的に調整できます。 一部のクライアントでは、高帯域幅の待機時間の長いリンク経由でファイルをコピーするなど、コンカレンシーの制限が高いスループットを実現できます。 これらの既定値は、Windows ではなく Windows Server に適用されます。
ヒント
Windows 10 および Windows Server 2016 より前では、クライアントに付与されるクレジットの数は、ネットワーク待機時間とクレジット使用量に基づいて付与する最適なクレジット数を決定しようとしたアルゴリズムに基づいて、 Smb2CreditsMin と Smb2CreditsMax の間で動的に変化しました。 Windows 10 および Windows Server 2016 では、SMB サーバーは、構成された最大クレジット数まで、要求に応じてクレジットを無条件に付与するように変更されました。 この変更の一環として、サーバーのメモリ不足時に各接続のクレジット ウィンドウのサイズを縮小するクレジット調整メカニズムが削除されました。 スロットリングを引き起こしたカーネルの低メモリイベントは、サーバーのメモリが極めて少なく(< 数MB以下)で役に立たないほどの場合にのみ通知されます。 サーバーはクレジット ウィンドウを縮小しなくなったため、 Smb2CreditsMin 設定は不要になり、現在は無視されます。
SMB クライアント共有\Credit Stalls /Sec を監視して、クレジットに問題があるかどうかを確認できます。
AdditionalCriticalWorkerThreads
HKLM\System\CurrentControlSet\Control\Session Manager\Executive\AdditionalCriticalWorkerThreads既定値は 0 です。これは、これ以上重要なカーネル ワーカー スレッドが追加されていないことを意味します。 この値は、先読み要求と書き込み側要求でファイル システム キャッシュが使用するスレッドの数に影響します。 この値を大きくすると、ストレージ サブシステムのキューに入れる I/O が増え、特に多くの論理プロセッサと強力なストレージ ハードウェアを備えたシステムで、I/O のパフォーマンスを向上させることができます。
注
この設定は、主に Windows 7、Windows Server 2008 R2、および以前のオペレーティング システムに適用されます。 以降のオペレーティング システムでは、Cache Manager はこの値を間接的に使用しますが、Cache Manager は後のオペレーティング システムに専用のワーカー スレッドを作成しません。むしろ、この値は、各型 (ジェネリック ワーカー、レイジー ライターなど) の作業項目の数に間接的に影響します。キャッシュ マネージャーは、後でカーネル スレッド プールに送信するために割り当てます。
ヒント
キャッシュ マネージャーのダーティ データ (パフォーマンス カウンター Cache\Dirty Pages) がメモリの約 25% を超えている場合、またはシステムが多数の同期読み取り I/O を実行している場合は、値を大きくすることを検討してください。
MaxThreadsPerNumaNode
HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\MaxThreadsPerNumaNode既定値は 20 です。 この値を大きくすると、ファイル サーバーが同時要求の処理に使用できるスレッドの数が増えます。 多数のアクティブな接続を処理する必要がある場合は、非効率的なサード パーティ製フィルター ドライバーが IO に影響を与えている場合に、値を大きくするとパフォーマンスが向上する可能性があります。 この設定を変更する代わりに、IO をより効率的に処理する更新されたサード パーティ製フィルター ドライバーと印刷ドライバーをインストールすることをお勧めします。
ヒント
値を増やす必要がある可能性があることを示す値は、SMB2 作業キューが比較的大きくなっている場合です (パフォーマンス カウンター 'Server Work Queues\Queue Length\SMB2 NonBlocking *' は一貫して最大 100 を超えています)。
注
SMB1 および Windows Server 2012 および Windows Server 2008 では、 MaxThreadsPerQueue を使用してこの設定を制御しました。 SMB1 は非推奨となり、インストールされなくなりました。この設定自体は機能しなくなりました。
AsynchronousCredits
HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\AsynchronousCredits既定値は 512 です。 このパラメーターは、1 つの接続で許可される同時非同期 SMB コマンドの数を制限します。 (バックエンド IIS サーバーを備えたフロントエンド サーバーがある場合など) には、大量のコンカレンシーが必要な場合があります (特に、ファイル変更通知要求の場合)。 これらのケースをサポートするために、このエントリの値を増やすことができます。 既定値は Windows ではなく Windows Server 用です。
RemoteFileDirtyPageThreshold
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\RemoteFileDirtyPageThreshold既定値は 5 GB です。 この値は、インライン フラッシュが実行される前のリモート書き込みのキャッシュ内のダーティ ページの最大数 (ファイルごとに) を決定します。 大量のリモート書き込み中にシステムで一貫した速度低下が発生しない限り、この値を変更することはお勧めしません。 通常、この速度低下の動作は、クライアントのストレージ IO パフォーマンスがリモート サーバーよりも高速である場合に表示されます。 設定の変更がサーバーに適用されます。 クライアントとサーバーは、特定のオペレーティング システムではなく、分散システム アーキテクチャを参照します。たとえば、SMB 経由で別の Windows Server にデータをコピーする Windows Server には、SMB クライアントと SMB サーバーが引き続き含まれます。 詳細については、「 キャッシュとメモリ マネージャーのパフォーマンスに関する問題のトラブルシューティング」を参照してください。
SMB サーバーのチューニングの例
次の設定では、多くの場合、ファイル サーバーのパフォーマンスに合わせてコンピューターを最適化できます。 設定は、すべてのコンピューターで最適または適切ではありません。 個々の設定を適用する前に、個々の設定の影響を評価する必要があります。
| パラメーター | 価値 | 既定値 |
|---|---|---|
| AdditionalCriticalWorkerThreads | 64 | 0 |
SMB クライアントのパフォーマンスモニタリングカウンター
SMB クライアント カウンターの詳細については、「 Windows Server 2012 ファイル サーバーのヒント: 新しい共有ごとの SMB クライアント パフォーマンス カウンターが優れた分析情報を提供する」を参照してください。