Component-Level 성능 상태 관리

Windows 10 시작해서 PoFx(전원 관리 프레임워크)를 사용하면 드라이버가 디바이스 내의 개별 구성 요소에 대해 개별적으로 조정 가능한 성능 상태 집합을 하나 이상 정의할 수 있습니다. 드라이버는 성능 상태를 사용하여 구성 요소의 워크로드를 제한하여 현재 요구 사항에 충분한 성능을 제공할 수 있습니다.

성능 상태 개요

Windows 8 및 Windows 8.1 PoFx는 특정 F 상태를 입력할 때 전원 및 클록 레일 게이팅을 통해 구성 요소 수준의 전력 절약을 위해 유휴 상태(F-state)를 제공합니다. 이 모델은 구성 요소가 유휴 상태(비 F0)에 있을 때 전원을 절약하지만, 구성 요소가 활성 상태일 때 전력 사용량을 최적화하거나 성능 요구 사항과 균형을 맞추기 위한 메커니즘은 제공하지 않습니다. 구성 요소가 활성 상태(F0)이고 요청을 처리하더라도 디바이스의 전체 성능이 필요하지 않을 수 있습니다. 예를 들어 그래픽 카드 깜박이는 커서만 업데이트하면 되며 전체 성능이 필요하지 않을 수 있습니다.

가변 성능 상태는 드라이버가 디바이스의 구성 요소를 제한하여 현재 요구 사항에 충분한 성능을 제공할 수 있도록 하여 이 문제를 해결합니다. Windows 8 및 Windows 8.1 구성 요소가 성능 상태를 지원하는 경우 각 드라이버는 드라이버 내부인 독점 성능 상태 선택 알고리즘을 구현해야 하며 필요한 경우 전용 방식으로 PEP(플랫폼 확장 플러그 인)에 알립니다. PEP는 특정 제품 프로세서 라인 또는 SoC(System on a Chip) 모듈과 관련된 전원 관리 작업을 수행하는 소프트웨어 구성 요소입니다. 드라이버별 독점 성능 상태 솔루션은 PEP와 긴밀하게 결합되는 단점이 있으며 쉽게 디버그할 수 없습니다.

Windows 10 시작하여 PoFx는 성능 상태 관리를 위한 API를 제공합니다. 이 API에는 두 가지 기본 목표가 있습니다.

  • 디바이스 드라이버가 PEP가 적절한 조치를 취할 수 있도록 성능 상태 변경에 대해 PEP에 알릴 수 있는 표준 방법을 제공합니다.
  • 드라이버가 각 드라이버에 대한 사용자 지정 플러그 인 없이 WPA(Windows 성능 분석기)에서 로깅 및 분석에 대한 성능 상태 변경 내용을 OS에 알리는 표준 방법을 제공합니다.

Component-Level 성능 상태에 대한 PoFX API 소개

PoFx를 사용하면 디바이스가 각 구성 요소에 대해 다음과 같은 유형의 성능 상태를 정의할 수 있습니다.

  • 빈도 단위(Hz로 측정), 대역폭(초당 비트 단위로 측정) 또는 불투명 인덱스 번호의 불연속 상태 수입니다.
  • 최소값과 최대값 사이의 상태 연속 분포입니다.

성능 상태는 집합으로 구성되며 구성 요소별로 등록됩니다. 집합 내의 성능 상태는 단조로 증가해야 합니다. 대부분의 드라이버는 구성 요소당 단일 성능 상태 집합을 정의해야 합니다. 예를 들어 드라이버는 하나의 성능 상태 집합을 정의하여 구성 요소의 클록 빈도를 제어할 수 있습니다. 그러나 일부 드라이버는 구성 요소에 대한 성능 상태의 여러 차원을 제어하기 위해 둘 이상의 성능 상태 집합을 정의해야 할 수 있습니다. 예를 들어 드라이버는 시계 빈도 및 버스 대역폭을 제어하는 두 가지 성능 상태 집합을 정의할 수 있습니다.

PoFx에서 성능 상태 관리를 위해 디바이스 구성 요소를 등록하려면 드라이버는 다음 일반적인 단계를 수행합니다.

  1. 드라이버는 PoFx에서 관리할 디바이스 구성 요소를 등록합니다. 자세한 내용은 구성 요소 수준 전원 관리를 참조하세요.

  2. 드라이버는 PoFxRegisterComponentPerfStates를 호출하여 성능 상태에 대한 지원을 등록합니다. 등록 호출의 일부로 드라이버는 지정된 구성 요소의 성능 상태를 직접 정의하거나 PEP(플랫폼 확장 플러그 인)로 연기하여 대신 정의할 수 있습니다.

    디바이스 드라이버 또는 PEP는 구성 요소당 성능 상태 집합 수, 성능 상태 유형(불연속 또는 범위 기반) 및 실제 성능 상태의 값 및 개수에 대한 세부 정보를 포함하여 성능 상태에 대한 지식을 보유해야 합니다. PEP가 성능 상태를 지원하지 않는 경우 드라이버는 여전히 PoFx에 성능 상태 지원을 등록하고 WPA(Windows 성능 분석기)에서 로깅 및 분석을 위한 성능 상태 변경 내용을 OS에 알릴 수 있습니다.

    두 경우 모두 PoFxRegisterComponentPerfStates가 성공적으로 완료되면 드라이버에 등록된 성능 상태 집합을 포함하는 PO_FX_COMPONENT_PERF_INFO 구조가 있습니다.

  3. 드라이버에서 구성 요소가 성능 상태를 변경해야 한다고 결정하면 PoFxIssueComponentPerfStateChange 또는 PoFxIssueComponentPerfStateChangeMultiple을 호출합니다. PoFx는 성능 상태 변경이 완료되면 드라이버 제공 ComponentPerfStateCallback 루틴을 호출합니다.

  4. 드라이버에는 PEP가 성능 상태 변경에 성공했는지 또는 거부되었는지에 대한 ComponentPerfStateCallback 루틴이 표시됩니다. PEP가 변경에 성공하면 드라이버는 성능 상태를 관점에서 변경하는 데 필요한 모든 작업을 수행합니다. PEP가 변경을 거부한 경우 드라이버는 아무 작업도 수행하지 않거나 동일한 성능 또는 대체 성능 상태로 요청을 다시 시도할 수 있습니다.

디바이스 전원 관리 참조