SMB ファイル サーバーのパフォーマンス チューニング

SMB 構成に関する考慮事項

ファイル サーバーとクライアントに必要のないサービスや機能を有効にしないでください。 不要なサービスまたは機能には、SMB 署名、クライアント側キャッシュ、ファイル システム ミニ フィルター、検索サービス、スケジュールされたタスク、NTFS 暗号化、NTFS 圧縮、IPSEC、ファイアウォール フィルター、Teredo、SMB 暗号化などがあります。

BIOS およびオペレーティング システムの電源管理モードが必要に応じて設定されていることを確認します。これには、高パフォーマンス モードまたは変更された C 状態が含まれる場合があります。 最新で、最大の回復性があり、最速の記憶域とネットワーク デバイス ドライバーがインストールされていることを確認します。

ファイルのコピーは、ファイル サーバーで実行される一般的な操作です。 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 対応のネットワークを検出すると、SMB は自動的に RDMA 機能の使用を試みます。 ただし、何らかの理由で SMB クライアントが RDMA パスを使用して接続できない場合、代わりに TCP/IP 接続が引き続き使用されます。 SMB ダイレクトと互換性のあるすべての RDMA インターフェイスは、TCP/IP スタックも実装する必要があり、SMB マルチチャネルはそれを認識しています。

SMB ダイレクトはどの SMB 構成でも必要ありませんが、待機時間を短縮し、CPU 使用率を低くしたい場合は常にお勧めします。

SMB ダイレクトの詳細については、「SMB ダイレクトを使用してファイル サーバーのパフォーマンスを向上させる」を参照してください。

SMB マルチチャネル

SMB マルチチャネルを使用すると、ファイル サーバーは複数のネットワーク接続を同時に使用でき、スループットが向上します。

SMB マルチチャネルの詳細については、「SMB マルチ チャネルの展開」を参照してください。

SMB スケールアウト

SMB スケールアウトを使用すると、クラスター構成の SMB 3.0 はクラスターのすべてのノードで共有を表示できます。 このアクティブ/アクティブ構成を使用すると、複数のボリューム、共有、およびクラスター リソースを含む複雑な構成を使用せずに、ファイル サーバー クラスターをさらに拡張できます。 最大共有帯域幅は、すべてのファイル サーバー クラスター ノードの帯域幅の合計です。 帯域幅の合計は、1 つのクラスター ノードの帯域幅によって制限されなくなりましたが、バッキング ストレージ システムの機能に依存します。 ノードを追加することで合計の帯域幅を増大することができます。

SMB スケールアウトの詳細については、「アプリケーション データに対応するスケールアウト ファイル サーバーの概要」および「スケールアウトすべきか、スケールアウトせざるべきか、それが問題だ」のブログ投稿を参照してください。

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 ダイレクト接続

    これらのカウンターは接続アクティビティのさまざまな側面を測定します。 コンピューターは複数の SMB 直接接続を持つことができます。 SMB 直接接続カウンターは、各接続を IP アドレスとポートのペアとして表します。最初の IP アドレスとポートは接続のローカル エンドポイントを表し、2 番目の IP アドレスとポートは接続のリモート エンドポイントを表します。

  • 物理ディスク、SMB、CSV FS パフォーマンス カウンターの関係

    物理ディスク、SMB、および CSV FS (ファイルシステム) カウンターの関係に関する詳細については、「クラスターの共有ボリューム パフォーマンス カウンター」のブログ投稿を参照してください。

SMB ファイル サーバーのチューニング パラメーター

次の REG_DWORD レジストリ設定は、SMB ファイル サーバーのパフォーマンスに影響する可能性があります:

  • Smb2CreditsMinSmb2CreditsMax

    HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\Smb2CreditsMin
    
    HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\Smb2CreditsMax
    

    Windows Server の既定値はそれぞれ 512 と 8192 です。 これらのパラメーターを使用すると、サーバーは指定された境界内でクライアント操作の同時実行を動的に調整できます。 クライアントによっては、高帯域幅で待機時間の長いリンクを介してファイルをコピーするなど、同時実行性の制限を高くしてスループットを向上させる場合があります。 これらの既定値は、Windows ではなく Windows Server に適用されます。

    ヒント

    Windows 10 および Windows Server 2016 より前のバージョンでは、クライアントに付与されるクレジットの数は、ネットワーク待機時間とクレジットの使用量に基づいて付与するクレジットの最適な数を決定しようとするアルゴリズムに基づいて、Smb2CreditsMin と Smb2CreditsMax の間で動的に変化していました。 Windows 10 および Windows Server 2016 では、SMB サーバーは要求に応じて、構成されたクレジットの最大数まで無条件にクレジットを付与するように変更されました。 この変更の一環として、サーバーのメモリが不足しているときに各接続のクレジット ウィンドウのサイズを縮小するクレジット調整のメカニズムが削除されました。 調整をトリガーしたカーネルのメモリ不足イベントは、サーバーのメモリが不足して (< 数 MB)、役に立たない場合にのみ通知されます。 サーバーがクレジット ウィンドウを縮小しなくなったため、Smb2CreditsMin 設定は不要になり、無視されるようになりました。

    SMB クライアント共有\クレジットの停止/秒を監視して、クレジットに問題があるかどうかを確認できます。

  • AdditionalCriticalWorkerThreads

    HKLM\System\CurrentControlSet\Control\Session Manager\Executive\AdditionalCriticalWorkerThreads
    

    既定値は 0 で、これ以上重要なカーネル ワーカー スレッドが追加されていないことを意味します。 この値は、ファイル システム キャッシュが先行読み取りおよび後書き込み要求に使用するスレッドの数に影響します。 この値を大きくすると、記憶域サブシステムでより多くのキューに入っている I/O が可能になり、特に論理プロセッサと強力な記憶域ハードウェアが多数搭載されているシステムで I/O パフォーマンスが向上します。

    Note

    この設定は、主に Windows 7、Windows Server 2008 R2、および以前のオペレーティング システムに適用されます。 以降のオペレーティング システムでは、Cache Manager はこの値を間接的に使用しますが、それ以降のオペレーティング システムに専用のワーカー スレッドを作成しません。むしろ、この値は、各型 (一般的な労働者、怠け者の作家など) の作業項目の数に間接的に影響します。キャッシュ マネージャーは、後でカーネル スレッド プールに送信するために割り当てます。

    ヒント

    キャッシュ マネージャーのダーティ データの量 (パフォーマンス カウンターのキャッシュ \ ダーティ ページ) が増加してメモリの大部分 (約 25% 以上) を消費する場合、またはシステムが大量の同期読み取り I/O を実行している場合は、値を増やす必要があります。

  • MaxThreadsPerNumaNode

    HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\MaxThreadsPerNumaNode
    

    既定値は 20 です。 この値を大きくすると、ファイルサーバーが同時要求を処理するために使用できるスレッドの数が増加します。 多数のアクティブな接続を処理する必要がある場合は、非効率的なサード パーティ製フィルター ドライバーが IO に影響を与えている場合に、値を大きくするとパフォーマンスが向上する可能性があります。 この設定を変更する代わりに、IO をより効率的に処理する更新されたサード パーティ製フィルター ドライバーと印刷ドライバーをインストールすることをお勧めします。

    ヒント

    SMB2 作業キューのサイズが非常に大きくなっている (パフォーマンス カウンターの ‘Server Work Queues\Queue Length\SMB2 NonBlocking *' が一貫して 100 を超えている) 場合は、値を大きくする必要があることを示しています。

    Note

    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

既定値は 5GB です。 この値は、インライン フラッシュが実行される前のリモート書き込みのキャッシュ内のダーティ ページの最大数 (ファイルごとに) を決定します。 大量のリモート書き込み中にシステムで一貫した速度低下が発生しない限り、この値を変更することはお勧めしません。 この速度低下の動作は、通常、クライアントのストレージ IO パフォーマンスがリモート サーバーよりも高速である場合に見られます。 設定の変更がサーバーに適用されます。 クライアントとサーバーは、特定のオペレーティング システムではなく、分散システム アーキテクチャを参照します。たとえば、SMB を介して別の Windows Server にデータをコピーする Windows Server には、SMB クライアントと SMB サーバーが含まれます。 詳細については、「 キャッシュとメモリ マネージャーのパフォーマンスに関する問題のトラブルシューティング」を参照してください。

SMB サーバー チューニングの例

次の設定では、多くの場合、ファイル サーバーのパフォーマンスに合わせてコンピューターを最適化できます。 設定は、すべてのコンピューターで最適または適切ではありません。 個々の設定を適用する前に、その影響を評価する必要があります。

パラメーター Default
AdditionalCriticalWorkerThreads 64 0

SMB クライアント パフォーマンス モニター カウンター

SMB クライアント カウンターの詳細については、「Windows Server 2012 ファイルサーバーのヒント: 優れたインサイトを提供する共有ごとの新しいクライアント パフォーマンス カウンター」を参照してください。