用于在Windows上监视单个文件IO性能的API

时间:2016-01-28 14:10:30

标签: windows winapi etw

我可以使用哪种Windows API来监控特定文件或文件集的I / O性能指标?性能计数器似乎只提供更高级别的对象,如LogicalDisk和PhysicalDisk。我正在寻找Windows资源监视器在Disk->磁盘活动下使用的内容,即读/写bps和响应时间。

1 个答案:

答案 0 :(得分:1)

我快速搜索了#34; Perfmon个人文件"并没有看到任何有希望的东西。

但我不确定测量单个文件的性能是否有意义。 I / O活动在多个位置的I / O堆栈中合并,结果是在不同级别,操作系统无法区分一个文件与另一个文件的文件I / O.

假设应用程序没有对它自己进行任何缓冲/缓存,那么第一个地方可能是在" C" (或类似的)运行时库。另一个发生合并的地方是在文件系统中(我假设是NTFS)。文件目录的I / O可以在同一目录中的多个文件之间合并。可以根据文件系统的块大小合并I / O.因此,如果多个MFT条目共享一个块,则可以一次读取/写入它们。 NTFS还实现了缓存和其他I / O优化(预读)。通过访问要测量的相同文件(有助于将文件保留在缓存中)或访问其他文件(帮助从中删除文件),同时运行的其他进程可以影响缓存的性能高速缓冲存储器)。

合并也发生在逻辑磁盘级别的文件系统下方。单个I / O可以为多个文件提供服务。

在磁盘驱动程序级别,单个I / O请求可能再次涉及多个文件。此外,驱动程序(或更可能是驱动器固件)可以根据其对驱动器的几何知识对磁盘I / O进行重新排序"几何"以(可能的)响应时间为代价获得额外的吞吐量。在这种情况下,如果其他进程没有同时进行I / O操作,那么文件的I / O可能会受到影响。

许多磁盘在DRAM中实现缓存。此缓存也将受到其他进程的影响,其方式与Window缓存相同。再次影响由于其他过程活动导致的测量绩效。

如果您仍想测量,那么规避Perfmon限制的一种方法是将文件或文件集放在不同的驱动器上。驱动器不一定必须是不同的物理驱动器,它们可以是VHD,或其他类型的虚拟磁盘物理磁盘。我知道Volume Snapshot Service(VSS)SDK有一点实用程序可以用文件创建虚拟驱动器。

但是将文件放在自己的物理磁盘上可能会产生更加一致的结果。