次の方法で共有


diskidlehistogram

このアクションにより、すべてのディスク アクティビティとアイドル時間を表示するヒストグラムが生成されます。

-a diskidlehistogram [-disknum <n>] [-buckets B1 B2 ... Bn] [-idletimeout T1 T2 ... Tn] [-idletheshold <t>] [-spindownOverhead [t]] [-spinupOverhead [t]] [-exc_file File1 File2 ... FileN] [-exc_filestr String1 String2 ... StringN] [-exc_filere <regex>]

オプション

-disknum<n>
n は、ディスク番号 (0 ベースのディスク インデックス) を示します。 既定値は、すべてのディスクのヒストグラムを出力します。

-bucketsB1 B2 … Bn
引数は、アイドル状態の長さについて、さまざまな範囲を秒単位で示します。 既定のバケットは次のとおりです。

  • [0 s, 1 s]

  • [1 s, 5 s]

  • [5 s, 60 s]

  • [60 s, 180 s]

  • [180 s, 600 s]

  • [600 s, 900 s]

  • [900 s, 1200 s]

  • [1200 s, 1800 s]

  • [1800 s, +inf]

ディスク アイドル ヒストグラムには、さまざまな範囲のアイドル期間の長さに対してディスク アイドル時間とアイドル期間の数の分布が表示されます。次の表に値の例を示します。

1 秒未満 1 - 600 秒 600 秒超

アイドル時間

1000

1000

2000

合計アイドル時間の割合

25

25

50

アイドル期間の数

90

5

5

アイドル期間の総数の割合

90

5

5

1 行目は、ヒストグラムのバケット、つまりアイドル状態の長さについてさまざまな範囲を示しています。

2 行目は、各バケットについて累積アイドル時間を示しています。 たとえば、1 秒未満のすべてのアイドル期間の累積アイドル時間は 1000 秒です。

3 行目は、バケットのアイドル時間を合計アイドル時間で割ることによって、各バケットのアイドル時間の割合を計算しています。

4 行目は、バケットごとのキャプチャされたアイドル期間の数です。 この例では、1 秒未満のアイドル期間が 90 あります。

最後の行は、バケットのアイドル期間の数をアイドル期間の総数で割ることによって、各バケットのアイドル期間の割合を計算しています。

次のコマンドを実行すると、以下のリストのバケットが生成されます: -buckets 1s 5s 60s 180s

  • [0, 1 s]

  • [1 s, 5 s]

  • [5 s, 60 s]

  • [60 s, 180 s]

  • [180 s, +inf]

-idletimeoutT1 T2 … Tn
引数は、アイドル タイムアウトを秒単位で示します。 既定値は、5、60、180、600、1800 です。

-idletheshold<t>
引数は、アイドルしきい値を秒単位で示します。 このしきい値より短いアイドル期間は無視されます。

-spindownOverhead[t]
引数を指定しない場合、既定値は 0 です。

ディスク I/O のタイムスタンプ シーケンスと指定したアイドル タイムアウトを使用して、次の表に示すように、ディスクがスピンダウンされるタイミングと、スピンダウン状態のままになる時間を計算できます。

タイムアウト (秒) 5 60 180 600

スピンダウンの推定時間 (秒)

3800

2000

1000

500

スピンダウンの推定回数

500

100

50

10

1 行目は、スピンダウン時間の推定に対して対象となるアイドル タイムアウト値を示しています。 2 行目は、各タイムアウトに対応する合計スピンダウン時間の推定値を示しています。 この例では、タイムアウトが 5 秒の場合、合計スピンダウン時間は 3800 秒になりました。 3 行目は、各タイムアウト値に対してディスクがスピンダウンされる回数の推定値を示しています。

-spinupOverheadT
引数を指定しない場合、既定値は 0 秒です。

-exc_fileFile1 File1 … FileN
指定したフル ファイル パスに一致するファイルは除外されます。 除外するファイルごとにフル ファイル パスを指定する必要があります。

-exc_filestrString1 String2 … StringN
指定した文字列を 1 つ以上含むファイルは除外されます。

-exc_filere<regx>
指定した ATL 正規表現に一致するファイルは除外されます。 たとえば、式 ".*\.dll" を指定することで、.dll で終わるすべてのファイルを無視できます。

新しい行を定義する場合は、改行文字を含める必要があります。 \n ではなく、\r\n を使用してください。 両方の文字 (キャリッジ リターン = r、ライン フィード = n) を含めることによって、行終端記号を作成します。 これは目的領域ファイルを作成する場合に便利です。

解説

システム ファイルの中には、そのディスク I/O が他のファイルへのディスク I/O に対する反応であるものがいくつかあります。 このようなシステム ファイルには、次のようなものがあります。

  • $LogFiles

  • $Mft

  • $Bitmap

  • lastalive0.dat

  • lastalive1.dat

  • $UsnJrnl:$J

他のファイルへのディスク I/O のうち、どれによって上記のシステム ファイルへの特定のディスク I/O が発生するかを見分けるのは困難な場合があります。 そのため、除外したファイルの影響を確認する場合は、これらのシステム ファイルも除外する必要があります。 これらのシステム ファイルのディスク I/O は、他のディスク I/O に対する反応または "ピギーバック" であるため、これらのシステム ファイルだけを無視する場合、ディスク アイドル ヒストグラムが大幅に変わることはありません。

このアクションからの出力をスプレッドシートにインポートして、並べ替えと分析を行うことができます。 出力には、次の 2 つの指標が追加で用意されています。

AvgIOInterval
特定のファイルに対して、これはこのファイルに対する連続する 2 回の I/O の平均間隔です。 この指標は、ファイルに小さい I/O 間隔 (1 秒未満の間隔など) がある場合、誤解を招く可能性があります。 このファイルに大きな I/O 間隔 (30 分など) も存在する場合でも、平均 I/O 間隔は、やや短い I/O 間隔 (10 分など) をもつ別のファイルよりもかなり悪く見える可能性があります。 この場合、-idlethreshold T を使用して、1 秒未満のアイドル期間を分析から削除することができます。

MaxIOInterval
各ファイルに対して、これはこのファイルに対する連続する 2 回の I/O の最大間隔です。 既定では、この指標に基づいて出力が並べ替えられます。 大きな I/O 間隔が 1 つあるファイルでも、平均して頻繁な I/O がある可能性があります。

ディスクのアクティビティを包括的に把握するには、これらの指標とファイルごとのヒストグラムの両方を使用します。

調査対象のディスクに変動を与えないよう、別の物理ディスク (または USB フラッシュ ドライブなどのデバイス) を使用してトレースを収集します。

次の例は、既定のパラメーターでこのアクションを使用する一般的な方法を示しています。

Xperf -i Trace.etl -a diskidlehistogram > output.csv

より詳細な分析が必要な場合は、ディスク I/O に関する情報と、registry/cswitch/stacks などの関連情報を収集します。 Compact_cswitch を使用すると、トレース ファイルのサイズを小さくすることができます。 次の例は、推奨の Xperf フラグのセットを示しています。

xperf -on dispatcher+PROC_THREAD+LOADER+CSWITCH+COMPACT_CSWITCH +registry+DISK_IO+DISK_IO_INIT+FILEIO -stackwalk cswitch+readythread+DiskReadInit+DiskWriteInit+DiskFlushInit -buffersize 1024
sleep <desired trace time in seconds> or run scenario
xperf -d trace.etl

Xperf のアクション