次の方法で共有


SMB サーバーで CPU 使用率が高い問題

この記事では、SMB サーバーでの CPU 使用率の高い問題をトラブルシューティングする方法について説明します。

記憶域のパフォーマンスに問題があるため、CPU 使用率が高くなっている

記憶域のパフォーマンス問題が発生すると、SMB サーバーで CPU 使用率が高くなる可能性があります。 トラブルシューティングを行う前に、最新の更新プログラムのロールアップが SMB サーバーにインストールされていることを確認して、 srv2.sysの既知の問題を排除してください。

ほとんどの場合、システム プロセスで CPU 使用率が高くなるという問題が発生していることがわかります。 先に進む前に、プロセス エクスプローラーを使用して、 srv2.sysまたは ntfs.sys が過剰な CPU リソースを消費していることを確認します。

記憶域ネットワーク (SAN) のシナリオ

集計レベルでは、SAN 全体のパフォーマンスは良好に見える場合があります。 ただし、SMB の問題を処理する場合は、個々の要求の応答時間が最も重要になります。

通常、この問題は、SAN 内の何らかの形式のコマンド キューが原因で発生することがあります。 Perfmon を使用して、 Microsoft-Windows-StorPort トレースをキャプチャし、それを分析してストレージの応答性を正確に判断できます。

ディスク IO 待機時間

ディスク IO 待機時間は、ディスク IO 要求が作成されて完了するまでの遅延時間を測定したものです。

Perfmon で測定される IO 待機時間には、ハードウェア レイヤーで費やされた時間に加え、Microsoft ポート ドライバー キュー (SCSI の Storport.sys) で費やされた時間も含まれます。 実行中のプロセスが大きな StorPort キューを生成する場合、測定される待機時間が増加します。 これは、IO がハードウェア レイヤーにディスパッチされる前に IO を待機する必要があるためです。

Perfmon では、次のカウンターによって物理ディスクの待機時間が示されます。

  • "物理ディスク パフォーマンス オブジェクト" -> "平均ディスク秒/読み取りカウンター" - 平均読み取り待機時間を示します。
  • "物理ディスク パフォーマンス オブジェクト" -> "平均ディスク秒/書き込みカウンター" - 平均書き込み待機時間を示します。
  • "物理ディスク パフォーマンス オブジェクト" -> "Avg. Disk sec/Transfer counter" - 読み取りと書き込みの両方の合計平均が表示されます。

"_Total" インスタンスは、コンピューター内のすべての物理ディスクの待機時間の平均値です。 他の各インスタンスは、個々の物理ディスクを表します。

Note

これらのカウンターを「1 秒間のディスク転送平均回数」と混同しないでください。これらは完全に異なるカウンターです。

Windows Storage Stack

このセクションでは、Windows Storage Stack について簡単に説明します。

アプリケーションが IO 要求を作成すると、スタックの一番上にある Windows IO サブシステムに要求が送信されます。 その後、IO はスタックを下ってハードウェアの "ディスク" サブシステムに移動します。 その後、応答は再び上に移動します。 このプロセス中に各レイヤーはその機能を実行してから、IO を次のレイヤーに渡します。

ストレージ スタック フローを示す図。

perfmon では、1 秒あたりのパフォーマンス データは作成されません。 代わりに、Windows 内の他のサブシステムによって提供されるデータが消費されます。

"物理ディスクのパフォーマンス オブジェクト" の場合、データは記憶域スタックの "パーティション マネージャー" レベルでキャプチャされます。

前のセクションで説明したカウンターを測定する場合、要求によって "パーティション マネージャー" レベル以下の要求で費やされたすべての時間を測定します。 IO 要求がパーティション マネージャーによってスタックの下に送信されると、タイムスタンプが付けられます。 返されたときにもう一度タイムスタンプが付けられ、時間の差を計算が計算されます。 この時間差が待機時間です。

これを行うことで、次のコンポーネント内で費やされる時間を考慮します。

  • クラス ドライバー: デバイスの種類 (ディスクやテープなど) を管理します。
  • ポート ドライバー: トランスポート プロトコル (SCSI、FC、SATA など) を管理します。
  • デバイス ミニポート ドライバー: これは記憶域アダプターのデバイス ドライバーです。 これは、RAID コントローラーや FC HBA などのデバイスの製造元から提供されます。
  • ディスク サブシステム: デバイス ミニポート ドライバーの下にあるすべてのものが含まれます。 これは、1 台の物理ハード ディスクに接続されているケーブルのように単純なものもあれば、記憶域ネットワークのように複雑な場合もあります。 問題の原因がこのコンポーネントであると判断された場合は、トラブルシューティングの詳細についてハードウェア ベンダーに問い合わせることができます。

ディスク キュー

ディスク サブシステムが特定の時間に受け入れることができる IO の量は限られています。 余分な IO は、ディスクが IO を再び受け入れることができるようになるまでキューに入れられます。 I/O が "パーティション マネージャー" レベルより下のキューで費やす時間は、Perfmon の物理ディスク待機時間の測定値で考慮されます。 キューのサイズが大きくなり、IO の待機時間が長くなると、測定される待機時間も長くなります。

次のように、"パーティション マネージャー" レベルの下には複数のキューがあります。

  • Microsoft ポート ドライバー キュー - SCSIport または Storport キュー
  • 製造元が提供するデバイス ドライバ キュー - OEM デバイス ドライバ
  • ハードウェア キュー - ディスク コントローラー キュー、SAN スイッチ キュー、アレイ コントローラー キュー、ハード ディスク キューなど

また、ハードディスクが IO のサービスに積極的に費やす時間と、要求が「パーティション マネージャー」レベルに戻って完了としてマークされるまでにかかる移動時間も考慮します。

最後に、ポート ドライバー キュー (SCSI の場合は Storport.sys) には特に注意を払う必要があります。 ポート ドライバーは、製造元が提供するデバイス ミニポート ドライバーに渡す前に、IO に触れる最後の Microsoft コンポーネントです。

デバイス ミニポート ドライバーが、そのキューまたはその下にあるハードウェア キューが飽和状態になっているためにそれ以上の IO を受け入れることができない場合は、ポート ドライバー キューで IO の累積が開始されます。 Microsoft ポート ドライバー キューのサイズは、使用可能なシステム メモリ (RAM) によってのみ制限され、非常に大きくなる可能性があります。 これにより、測定される待機時間が長くなります。

フォルダーの列挙が原因で CPU が高くなる

この問題のトラブルシューティングを行うには、アクセス ベースの列挙 (ABE) 機能を無効にします。

ABE が有効になっている SMB 共有を確認するには、次の PowerShell コマンドレットを実行します。

Get-SmbShare | Select Name, FolderEnumerationMode

Unrestricted = ABE 無効。
AccessBase = ABE が有効です。

サーバー マネージャーで ABE を有効にすることができます。 [ファイルとストレージサービス]>[共有] に移動し、共有を右クリックして [プロパティ] を選択し、[設定] に移動して、[アクセスベースの列挙を有効にする] を選択します。

[サーバー マネージャーの設定] の [アクセス ベースの列挙を有効にする] オプションを示すスクリーンショット。

また、パフォーマンスを向上させるために、 ABELevel を低いレベル (1 または 2) に下げることもできます。

コンソールまたは RDP セッションを使用してローカルでフォルダーを開くと、列挙が遅い場合のディスク パフォーマンスを確認できます。