DISK PERFORMANCE构成Read Time和WriteTime成员

时间:2012-02-13 10:12:31

标签: c++ performance winapi performancecounter

我正在尝试传播DISK_PERFORMANCE结构但似乎找不到任何体面的文档。有谁知道ReadTime和WriteTime成员是什么意思?

MSDN声称“完成读/写所需的时间”,但读/写的内容是什么?它的衡量标准是什么?

2 个答案:

答案 0 :(得分:1)

更新:我不知道,但我现在这样做。

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

Avg. Disk sec/Read计数器报告每次读取的平均时间(还有另一个写入计数器)。此计数器具有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成员的增量(每秒采样一次),然后是HKEY_PERFORMANCE_DATA的相应值,接着是第一个ReadTime除以秒。

HKEY_PERFORMANCE_DATA值在我的PC上的QueryPerformanceFrequency单位,2240517Hz。 10,000,000 / 2240517 = 4.4633所以DISK_PERFORMANCE指标似乎是100ns(= 10MHz)单位。

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

答案 1 :(得分:0)

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