Элементы ReadTime и WriteTime структуры DISK_PERFORMANCE - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь разобрать структуру DISK_PERFORMANCE , но не могу найти какой-либо достойной документации. Кто-нибудь знает, что означают члены ReadTime и WriteTime?

MSDN утверждает: «Время, необходимое для завершения чтения / записи», но чтение / запись чего? И в чем это измеряется?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Обновление: я не знал, но теперь знаю.

Я не был знаком с 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 нс.

0 голосов
/ 13 февраля 2012

В общем, как и все DeviceIOControl, это означает, что означает базовый драйвер. Как вы можете сделать из члена StorageManagerName, существует несколько драйверов, которые используют эту структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...