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 ...億
引數表示閒置長度的不同範圍,以秒為單位。 預設貯體如下所示:
[0 秒,1 秒]
[1 秒,5 秒]
[5 秒,60 秒]
[60 秒,180 秒]
[180 秒,600 秒]
[600 s, 900 s]
[900 秒,1200 秒]
[1200 s, 1800 s]
[1800 s, +inf]
磁片閒置長條圖會顯示磁片閒置時間的分佈,以及不同閒置期間長度範圍內閒置期間的數目,如下表中的範例值所示。
小於 1 秒 | 1-600 秒 | 超過 600 秒 | |
---|---|---|---|
閒置時間 |
1000 |
1000 |
2000 |
總閒置時間百分比 |
25 |
25 |
50 |
閒置計數 |
90 |
5 |
5 |
總閒置計數的百分比 |
90 |
5 |
5 |
第一個資料列顯示長條圖的貯體:不同的閒置長度範圍。
第二個數據列會顯示每個貯體累積的閒置時間。 例如,所有閒置期間的累積閒置時間少於 1 秒是 1000 秒。
第三個數據列會計算每個貯體閒置時間的百分比,方法是將貯體閒置時間除以總閒置時間。
第四個數據列是針對每個貯體擷取的閒置期間計數。 在此範例中,有 90 個閒置期間持續少於一秒。
最後一個資料列會將貯體閒置期間數目除以閒置期間總數,計算每個貯體閒置期間百分比。
下列命令會產生下列清單中的貯體: -buckets 1s 5s 60s 180s:
[0, 1 秒]
[1 秒,5 秒]
[5 秒,60 秒]
[60 秒,180 秒]
[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 |
第一個資料列會顯示估計停機時間感興趣的閒置逾時值。 第二個數據列顯示對應至每個逾時的估計總 spun-down 時間。 在此範例中,逾時 5 秒會產生 3800 秒的總停止時間。 第三個數據列顯示磁片針對每個逾時值關閉的估計次數。
-spinupOverheadT
如果您未指定引數,預設值為 0 秒。
-exc_fileFile1 File1 ...FileN
排除符合所提供完整檔案路徑的檔案。 您必須為每個要排除的檔案指定完整檔案路徑。
-exc_filestrString1 String2 ...StringN
排除包含一或多個所提供字串的檔案。
-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 上的或「piggyback」,因此不預期只會忽略這些系統檔案本身,而不會大幅變更磁片閒置長條圖。
此動作的輸出可以匯入試算表,以進行排序和分析。 輸出會提供兩個額外的計量:
AvgIOInterval
對於特定檔案,這是此檔案的兩個後續 I/O 之間的平均間隔。 如果檔案有小型 I/O 間隔,例如小於 1 秒的間隔,此計量可能會產生誤導。 即使此檔案也有大型 I/O 間隔,例如 30 分鐘,平均 IO 間隔可能比另一個短 I/O 間隔的檔案更糟,例如 10 分鐘。 在此情況下,您可以使用 -idlethreshold T
從分析中移除小於 1 秒的閒置期間。
MaxIOInterval
對於每個檔案,這是此檔案的兩個後續 I/O 之間的最大間隔。 輸出預設會根據此計量排序。 具有一個大型 I/O 間隔的檔案平均仍可能會有頻繁的 I/O。
注意 使用這兩個計量和每個檔案長條圖,以取得磁片活動的完整圖片。
避免使用不同的實體磁片 (或 USB 快閃磁片磁碟機等裝置來收集追蹤,以避免 (受研究的磁片) ) 。
範例
下列範例示範此動作搭配預設參數的一般用法
Xperf -i Trace.etl -a diskidlehistogram > output.csv
收集磁片 I/O 的相關資訊,以及登錄/cswitch/stack 等相關資訊,以防需要更深入的分析。
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