Управление состоянием производительности Component-Level
Начиная с Windows 10, платформа управления питанием (PoFx) позволяет драйверу определять один или несколько наборов индивидуально настраиваемых состояний производительности для отдельных компонентов на устройстве. Драйвер может использовать состояния производительности для регулирования рабочей нагрузки компонента, чтобы обеспечить достаточную производительность для его текущих потребностей.
Обзор состояний производительности
В Windows 8 и Windows 8.1 PoFx предоставляет состояния простоя (F-состояния) для экономии энергии на уровне компонентов за счет питания и передачи часов при вводе определенного F-состояния. Эта модель экономит электроэнергию, когда компонент находится в состоянии простоя (не F0), но не предоставляет никакого механизма для оптимизации энергопотребления или балансировки его потребностей в производительности, когда компонент активен. Несмотря на то, что компонент активен (в F0) и обслуживает запрос, ему может не потребоваться полная производительность устройства. Например, графическому карта может потребоваться обновить только мигающий курсор, и это может не нуждаться в полной производительности.
Переменные состояния производительности устраняют эту проблему, позволяя драйверу регулировать компонент устройства, чтобы обеспечить достаточную производительность для его текущих потребностей. В Windows 8 и Windows 8.1, если компонент поддерживает состояния производительности, каждый драйвер должен реализовать собственный алгоритм выбора состояния производительности, который является внутренним для драйвера, и при необходимости уведомлять подключаемый модуль расширения платформы (PEP) собственным способом. PEP — это программный компонент, который выполняет задачи управления питанием, относящиеся к определенной линейке процессоров или модулей Системы на микросхеме (SoC). Собственные решения с состоянием производительности для конкретного драйвера имеют недостаток тесной связи с PEP и не могут быть легко отлаживаемы.
Начиная с Windows 10, PoFx предоставляет API для управления состоянием производительности. Этот API имеет две main цели:
- Он предоставляет стандартный способ для драйверов устройств уведомлять PEP об изменениях состояния производительности, чтобы PEP мог предпринять соответствующие действия.
- Он предоставляет стандартный способ для драйверов уведомлять ОС об изменениях состояния производительности для ведения журнала и анализа в Windows Анализатор производительности (WPA), не требуя пользовательского подключаемого модуля для каждого драйвера.
Общие сведения об API PoFX для Component-Level состояний производительности
PoFx позволяет устройству определять следующие типы состояний производительности для каждого компонента:
- Дискретное число состояний в единицах частоты (измеряется в Гц), пропускной способности (в битах в секунду) или непрозрачном номере индекса.
- Непрерывное распределение состояний между минимальным и максимальным значениями.
Состояния производительности организованы в наборы и регистрируются по каждому компоненту. Состояния производительности в наборе должны увеличиваться монотонно. Ожидается, что большинство драйверов определяют единый набор состояний производительности для каждого компонента. Например, драйвер может определить один набор состояний производительности для управления частотой часов для компонента. Однако некоторым драйверам может потребоваться определить несколько наборов состояний производительности для управления несколькими измерениями состояний производительности для компонента. Например, драйвер может определить два набора состояний производительности для управления частотой часов и пропускной способностью шины.
Чтобы зарегистрировать компонент устройства для управления состоянием производительности с помощью PoFx, драйвер выполняет следующие общие действия:
Драйвер регистрирует компоненты устройства, которыми будет управлять PoFx. Дополнительные сведения см. в разделе Управление питанием на уровне компонентов.
Драйвер регистрирует поддержку состояний производительности, вызывая PoFxRegisterComponentPerfStates. В рамках вызова регистрации драйверы могут самостоятельно определить состояние производительности конкретного компонента или отложить его в подключаемый модуль расширения платформы (PEP), чтобы определить их.
Драйвер устройства или PEP должны обладать знаниями о состояниях производительности, включая количество наборов состояний производительности для каждого компонента, тип состояния производительности (дискретное или на основе диапазона), а также сведения о значениях и количестве фактических состояний производительности. Если PEP не поддерживает состояния производительности, драйвер по-прежнему может зарегистрироваться для поддержки состояния производительности в PoFx и уведомлять ОС об изменениях состояния производительности для ведения журнала и анализа в Windows Анализатор производительности (WPA).
В любом случае после успешного завершения PoFxRegisterComponentPerfStates драйвер имеет PO_FX_COMPONENT_PERF_INFO структуру, содержащую зарегистрированные наборы состояний производительности.
Когда драйвер решает, что компонент должен изменять состояния производительности, он вызывает PoFxIssueComponentPerfStateChange или PoFxIssueComponentPerfStateChangeMultiple. PoFx вызывает предоставленную драйвером подпрограмму ComponentPerfStateCallback по завершении изменения состояния производительности.
Подпрограмма ComponentPerfStateCallback сообщает драйверу о том, успешно ли выполнено pep или отклонено изменение состояния производительности. Если PEP успешно завершил изменение, драйвер выполняет все необходимые действия, чтобы изменить состояние производительности с точки зрения. Если PEP отклонил изменение, драйвер может ничего не делать или повторить запрос с тем же или альтернативным состоянием производительности.