DISK_PERFORMANCE结构的读取时间和写入时间成员
DISK_PERFORMANCE struct's ReadTime and WriteTime members
我试图删除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
成员推断的那样,有多个驱动程序使用此结构。
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 用于测量重载运算符和成员函数的时间的函数
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 我看到将我的类成员函数指定为内联实际上会增加执行时间,即使函数体非常小
- 结构成员的地址作为编译时间常数之间的差异
- C++中结构的存储持续时间和成员初始化
- 如何在声明时间内启动成员对象
- 成员子对象继承存储持续时间是否有任何非直观的副作用
- C++子级在复制构造函数和输出之间的某个时间点更改父成员
- 静态成员变量分配时间
- 嵌套类中的静态成员是否具有封闭类的静态持续时间
- 数据成员和值生存时间
- 如何修复MacOSX上全局命名空间中缺少时间相关的无成员错误
- DISK_PERFORMANCE结构的读取时间和写入时间成员
- 正在查找具有tm以外的成员对象的另一个时间结构
- 测试一个方法的私有成员是否依赖于时钟时间
- 成员函数中的变量生存时间,值不断重置为“0”,原因是什么
- constexpr数组成员是否编译时间常量
- 模板的模板成员的消除歧义器模板关键字:确切时间