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 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 秒的所有空闲时段的累计空闲时间为 1000 秒。

第三行通过将桶的空闲时间除以总空闲时间,计算出每个桶的空闲时间百分比。

第四行是为每个桶捕获的空闲时段计数。 在本示例中,有 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

第一行显示用于估计停止运行时间的空闲超时值。 第二行显示对应于每个超时的估计总停止运行时间。 在本示例中,5 秒的超时值产生了 3800 秒的总停止运行时间。 第三行显示磁盘对应于每个超时值的停止运行估计次数。

-spinupOverheadT
如果不指定参数,则默认值为 0 秒。

-exc_fileFile1 File1 ...FileN
排除与提供的完整文件路径匹配的文件。 必须指定要排除的每个文件的完整文件路径。

-exc_filestrString1 String2 ...StringN
排除包含一个或多个提供的字符串的文件。

-exc_filere<regx>
排除与提供的 ATL 正则表达式匹配的文件。 例如,可以通过指定表达式“.*\.dll”,忽略以 .dll 结尾的所有文件。

注意:在定义新行时,必须包含一个回车符。 使用 \r\n,而不是使用 \n。 通过同时包含这两个字符(回车 = r;换行 = n),创建一个行终止符。 这在创建感兴趣的区域文件时很有帮助。

注解

有几个系统文件的磁盘 I/O 是为了响应其他文件的磁盘 I/O。 这些系统文件包括:

  • $LogFiles

  • $Mft

  • $Bitmap

  • lastalive0.dat

  • lastalive1.dat

  • $UsnJrnl:$J

可能很难区分出其他文件的哪些磁盘 I/O 导致上述系统文件的特定磁盘 I/O。 因此,如果想要看到已排除的文件的影响,还必须排除这些系统文件。 由于这些系统文件的磁盘 I/O 是为了响应其他磁盘 I/O 或者附带在其他磁盘 I/O 上,因此,只忽略这些系统文件本身并不会对磁盘空闲直方图有明显的改变。

此操作的输出可以导入到电子表格以进行排序和分析。 为输出提供了两个额外的指标:

AvgIOInterval
对于特定文件,这是此文件的两个后续 I/O 之间的平均时间间隔。 如果一个文件具有微小的 I/O 间隔(如小于 1 秒的间隔),此指标可能会产生误导。 即使这个文件也有较大的 I/O 间隔(如 30 分钟),平均 I/O 时间间隔也可能比具有中等短 I/O 间隔(如 10 分钟)的另一个文件看上去差很多。 在这种情况下,可以使用 -idlethreshold T 从分析中删除小于 1 秒的空闲时段。

MaxIOInterval
对于每个文件,这是此文件的两个后续 I/O 之间的最大时间间隔。 默认情况下,输出根据此指标进行排序。 具有一个较大 I/O 间隔的文件平均来说可能仍有频繁的 I/O。

注意:使用这两个指标和每个文件的直方图可全面了解磁盘活动。

通过使用不同的物理磁盘(或设备,例如 U 盘)来收集跟踪,避免干扰正在进行研究的磁盘。

示例

下面的示例展示了此操作使用默认参数的典型用法。

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 操作