Обновление: я не знал, но теперь знаю.
Я не был знаком с DISK_PERFORMANCE, но я знаком с данными о производительности HKEY_PERFORMANCE_DATA.
Среднее значение ,Disk sec / Read counter сообщает среднее время чтения (и есть еще один счетчик для записи).Этот счетчик имеет тип 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
В каждой строке содержатся дельты членов ReadTime и ReadCount из DISK_PERFORMANCE (выборка раз в секунду), за которыми следуют соответствующие значения из HKEY_PERFORMANCE_DATA, за которыми следует первый ReadTime, разделенный на секунду.
Значения HKEY_PERFORMANCE_DATA указаны в единицах QueryPerformanceFrequency, 2240517 Гц на моем ПК.10 000 000/2240517 = 4.4633, поэтому метрики DISK_PERFORMANCE, по-видимому, представлены в единицах 100 нс (= 10 МГц).
Повторяю, DISK_PERFORMANCE :: ReadTime - это общее время, затраченное на чтение в единицах 100 нс.