Использование набора средств производительности Windows (WPT) с WDF
Начиная с Windows 10, вы можете использовать набор средств производительности Windows (WPT) для просмотра данных о производительности для заданного драйвера в режиме ядра (KMDF) или драйвера среда выполнения платформы драйвера режима пользователя (UMDF) 2.
Как можно использовать расширения Windows Driver Framework (WDF) для справки WPT?
Вы можете использовать WPT для получения аналитических сведений о производительности или устранения проблем с производительностью. Например:
- Изучите частоту завершения запросов WDF драйвера, загрузку ЦП и время, затраченное на обратные вызовы питания и PnP.
- Сравните драйвер UMDF 2 с аналогичным драйвером KMDF и определите, соответствует ли UMDF требованиям к производительности.
- Определение сбоев производительности в пути ввода-вывода WDF.
- Определите, какой экземпляр данного обратного вызова занимает много времени. Затем изучите примеры использования ЦП, чтобы понять, почему.
- Проверьте, выполняется ли устройство переходы питания и из состояния питания D0 слишком часто.
Начало работы
WPT входит в состав пакета средств оценки и развертывания Windows (ADK). Вы можете установить ADK из скачивания и установки Windows ADK.
WPT состоит из двух отдельных средств: средства записи производительности Windows и Windows Анализатор производительности (WPA). В этом разделе мы используем WPR для записи трассировки, а затем WPA для просмотра трассировки в настраиваемом формате графического интерфейса.
Чтобы узнать, как использовать набор средств производительности Windows для измерения производительности драйвера WDF, просмотрите следующее видео или ознакомьтесь с инструкциями ниже видео. Видео и шаги охватывают ту же процедуру.
Запись и просмотр журнала событий для драйвера WDF
Установите драйвер, если он еще не установлен.
В командной строке с повышенными привилегиями введите следующую команду.
<WdfPerfEnhancedVerifier.cmd Имя службы><UMDF или KMDF>
Обратите внимание , что WdfPerfEnhancedVerifier.cmd следует скопировать из установленного расположения WPT. Если вы установили WPT на компьютере разработки, необходимо скопировать скрипт из каталога установки WPT на целевой компьютер.
Этот скрипт задает записи реестра для указанного драйвера, чтобы платформа регистрирует события, необходимые для включения анализа производительности при включении поставщика ETW на шаге 4.
Перезагрузите компьютер.
В командной строке с повышенными привилегиями введите следующую команду.
Wpr.exe -Start WdfTraceLoggingProvider -filemode
Эта команда включает поставщик ETW для WDF. Компьютер начинает запись трассировки.
Примечание. Как и в шаге 2, Wpr.exe следует скопировать из установленного расположения WPT. Если вы установили WPT на компьютере разработки, скопируйте эти файлы из каталога установки WPT на целевой компьютер.
В Windows 10 для классических выпусков (Home, Pro, Enterprise и Education) можно также запустить трассировку с Wprui.exe, которая предоставляет графический интерфейс для записи трассировок. В разделе "Дополнительные параметры" разверните узел "Анализ ресурсов" и выберите действие драйвера WDF.
Выполните свой сценарий, интересующий вас.
Остановка сеанса трассировки трассировки ETW: Wpr.exe -Stop MyPerfTrace.etl
Откройте журнал трассировки событий в средстве просмотра Анализатор производительности Windows:
Wpa.exe MyPerfTrace.etl
Чтобы записать другую трассировку для того же драйвера, используйте Wpr.exe для запуска и остановки новой трассировки. Чтобы записать трассировку для другого драйвера, сначала повторно запустите WdfPerfEnhancedVerifier.cmd для нового драйвера.
Анализ трассировки
Чтобы начать анализ производительности драйвера, найдите обозреватель Graph слева, откройте категорию вычислений и перетащите граф UMDF или KMDF в основную рабочую область на вкладке "Анализ". На снимка экрана показана панель обозревателя графов:
Существует выделенная таблица для UMDF и другой для драйверов KMDF.
Граф запросов ввода-вывода в UMDF и сводная таблица
WPT может отображать пропускную способность завершения запросов WDF двумя способами:
- Количество запросов ввода-вывода в секунду
- Длительность каждого запроса ввода-вывода (отформатированная как диаграмма Ганта)
На следующем снимке экрана показаны примеры сводных графов и таблиц для производительности запросов ЦП и операций ввода-вывода UMDF. На графике частоты завершения запросов ввода-вывода UMDF число запросов в секунду отображается на оси y.
В сводной таблице большинство столбцов являются самообъявительными, но есть несколько вещей, которые следует заметить. Столбец WdfDevice содержит дескриптор WDFDEVICE, связанный с запросом ввода-вывода. ActivityID содержит уникальный идентификатор запроса ввода-вывода. Платформа создает этот идентификатор при доставке запроса ввода-вывода драйверу. Если идентификатор действия уже связан с соответствующим IRP, платформа использует этот идентификатор. Дополнительные сведения см. в разделе "Использование идентификаторов действий".
Время входа — это метка времени трассировки, когда платформа доставила запрос драйверу, а время выхода — это метка времени, когда драйвер под названием WdfRequestComplete или связанный метод для завершения запроса.
Граф запросов ввода-вывода KMDF и сводная таблица
Ниже приведен аналогичный снимок экрана, показывающий сведения о запросе ввода-вывода для драйвера KMDF.
Граф обратного вызова PnP и сводная таблица
WPT также может отображать время обработки каждого вызова PnP и обратного вызова питания. На следующем снимке экрана показана длительность обратного вызова EvtDeviceD0Entry, EvtDeviceD0Exit и EvtDevicePrepareHardware для примера драйвера KMDF и примера драйвера UMDF.
Столбец WdfDevice содержит дескриптор WDFDEVICE, связанный с обратным вызовом. ActivityID содержит уникальный идентификатор для экземпляра обратного вызова.
Какие вызовы инструментируются?
В этом разделе описывается, какие события используются для создания графов и таблиц, показанных выше.
После запуска WdfPerfEnhancedVerifier.cmd для определенного драйвера платформа записывает события в журнал трассировки ETL при вызове системными вызовами некоторых вызовов указанного драйвера, а также при вызове определенных методов платформы указанным драйвером.
Чтобы определить, когда начинаются запросы ввода-вывода, платформа записывает события при вызове следующих обратных вызовов:
Платформа также записывает события запуска запроса ввода-вывода, когда драйвер вызывает следующие методы:
Чтобы определить, когда запросы ввода-вывода завершены, платформа отслеживает при вызове драйвера:
Наконец, чтобы определить длительность обратного вызова для обратных вызовов PnP/Power, платформа записывает записи при вызове следующих подпрограмм обратного вызова, предоставленных драйвером, и после их завершения:
Ресурсы и устранение неполадок
Не забудьте перезагрузить после запуска скрипта WdfPerfEnhancedVerifier.cmd.
Чтобы определить, настроен ли драйвер для записи журнала событий, используйте ! ! Команда отладчика ядра WdfKd.wdfdriverinfo . Если драйвер настроен для трассировки производительности, вы увидите следующие выходные данные:
!WdfKd.WdfDriverInfo Echo.sys … … ---------------------------------- WDF Verifier settings for echo.sys is ON Enhanced verifier: performance analysis hooking ON ----------------------------------
Для целей разработки и тестирования можно временно отключить принудительное применение политики подписи кода драйвера. Дополнительные сведения см. в разделе "Установка пакета драйвера без знака" во время разработки и тестирования.