DISK_PERFORMANCE结构的读取时间和写入时间成员

DISK_PERFORMANCE struct's ReadTime and WriteTime members

本文关键字:时间 成员 取时间 读取 PERFORMANCE 结构 DISK      更新时间:2023-10-16

我试图删除DISK_PERFORMANCE结构,但似乎找不到任何像样的文档。有人知道ReadTime和WriteTime成员的意思吗?

MSDN声称,"完成读/写所需的时间",但读/写什么?还有它是以什么来衡量的?

更新:我以前不知道,但现在知道了。

我不熟悉DISK_PERFORMANCE,但我熟悉HKEY_PERFORMANCE_DATA性能数据。

平均磁盘秒/读取计数器报告每次读取的平均时间(还有另一个写入计数器)。此计数器的类型为PERF_AVERAGE_TIMER。实际得到的数据是花费在阅读上的总时间和操作的总次数。您获取两个样本,并将这些值相减,以获得在样本间隔期间花费的读取总时间和在样本间隔内的操作总数。然后将这两个值除以,得到每次读取的可用时间。

时钟频率也会与性能数据一起返回,因此您可以将时间单位转换为秒。

假设DISK_PERFORMANCE的工作原理类似,那么ReadTime和WriteTime将是所有读取和写入所花费的总时间。不幸的是,它使用的时钟频率并不明显,但很可能使用QueryPerformanceFrequency中的值。我会尝试一下,看看结果(平均读写时间)是否与您在perfmon中看到的值相比较。

头文件(winioctl.h)没有包含太多有用的信息,但它确实表示IOCTL_DISK_PERFORMANCE请求被转发到DISKPERF筛选器驱动程序或SIMBAD筛选器驱动程序(模拟磁盘故障)。这意味着您应该在不同的设备类型中获得一致的结果。

更新

所以我做了研究。一些样本数据:

3579000, 42, 801881, 42, 4.46325577
3749000, 79, 839970, 79, 4.46325464
4076000, 66, 913235, 66, 4.463254255
3614000, 77, 809723, 77, 4.463254718
1465000, 28, 328236, 28, 4.46325205

每一行都有来自DISK_PERFORMANCE的ReadTime和ReadCount成员的delta(每秒采样一次),然后是HKEY_PERFORMANCE_DATA中的相应值,然后是第一个ReadTime除以第二个。

HKEY_PERFORMANCE_DATA值以QueryPerformanceFrequency为单位,在我的电脑上为2240517Hz。10000000/2240517=4.4633,因此DISK_PERFORMANCE度量似乎以100ns(=10MHz)为单位。

重申一下,DISK_PERFORMANCE::ReadTime是用于读取的总时间,单位为100ns。

通常,与所有DeviceIOControl一样,它意味着底层驱动程序的含义。正如您可以从StorageManagerName成员推断的那样,有多个驱动程序使用此结构。