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

用于在Windows上监视单个文件IO性能的API,windows,winapi,etw,Windows,Winapi,Etw,我可以使用什么Windows API来监视特定文件或文件集的I/O性能指标?性能计数器似乎只提供更高级别的对象,如LogicalDisk和PhysicalDisk。我正在寻找Windows资源监视器在“磁盘->磁盘活动”下使用的内容,即读/写bps和响应时间。我快速搜索了“Perfmon单个文件”,但没有看到任何有希望的内容 但我不确定衡量单个文件的性能是否有意义。I/O活动在多个位置的I/O堆栈中合并,结果是在不同的级别上,操作系统无法区分不同文件的文件I/O 假设应用程序本身不进行任何缓冲/

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

我快速搜索了“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中实现缓存。此缓存也会受到其他进程的影响,其影响方式与窗口的缓存相同。由于其他流程的活动,再次影响测量的性能

但是,如果您仍然想进行测量,可以通过将文件或文件集放在不同的驱动器上来规避Perfmon中的限制。驱动器不一定必须是不同的物理驱动器,它们可以是VHD,或者物理磁盘上的其他类型的虚拟磁盘。我知道卷快照服务(VSS)SDK有一个小实用程序,可以用文件创建虚拟驱动器


但是,将文件放在它们自己的物理磁盘上可能会得到更一致的结果。

它们可能会打开ETW会话。请删除关键字performancecounter,改为添加ETW,因为这是您要使用的检测。请参阅以获取一个小的介绍。