지시된 전원 관리 프레임워크 소개

Windows 10 버전 1903부터 PoFx(런타임 전원 관리 프레임워크) 버전 3은 선택적 방향 전원 모델인 DFx(Directed PoFx)를 제공합니다.

DFx를 사용하면 운영 체제는 시스템이 유휴 상태로 전환되고 활성화자 조정 소프트웨어 활동이 없을 때 디바이스 스택이 적절한 저전력 유휴 상태로 전환되도록 지시하여 시스템이 저전력으로 보다 안정적으로 진입할 수 있도록 합니다.

목표는 시스템을 보다 전력 효율화하고 폼 팩터에서 Windows 디바이스의 에너지 소비를 줄이는 것입니다.

DFx는 현재 D 상태 제약 조건이 있는 디바이스에서만 지원됩니다. DFx는 F-state 제약 조건이 있는 모든 디바이스 하위 트리를 건너뜁니다.

DFx는 페이징 또는 디버그 디바이스의 전원을 사용하지 않습니다.

WDF(미니포트가 아닌) 드라이버에 대한 요구 사항

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조에서 SystemManagedIdleTimeout 또는 SystemManagedIdleTimeoutWithHint를 지정하는 WDF 드라이버는 DDInstall.HW 섹션 내 INF의 AddReg 지시문 섹션에 다음 레지스트리 키를 추가하여 DFx를 옵트인할 수 있습니다.

HKR,"WDF","WdfDirectedPowerTransitionEnable",0x00010001,1

버전 31 이상을 대상으로 하는 WDF 드라이버는 기본적으로 DFx를 사용하도록 설정합니다. 원치 않는 경우 드라이버는 레지스트리 키를 0으로 설정하여 DFx를 옵트아웃할 수 있습니다.

HKR,"WDF","WdfDirectedPowerTransitionEnable",0x00010001,0

버전 33 이상을 대상으로 하는 WDF 드라이버는 WDF_POWER_FRAMEWORK_SETTINGS 구조체의 DirectedPoFxEnabled 멤버를 WdfFalse로 설정하여 DFx를 옵트아웃할 수 있습니다.

WDF_POWER_FRAMEWORK_SETTINGS 구조를 초기화하려면 드라이버가 WDF_POWER_FRAMEWORK_SETTINGS_INIT 호출해야 합니다.

시스템 관리 유휴 시간 제한을 요청하면 WDF가 드라이버를 대신하여 PoFx에 등록되므로 이 시나리오에서는 드라이버가 PoFx에 등록할 필요가 없습니다.

드라이버가 DriverManagedIdleTimeout을 지정하는 경우 시스템 관리 유휴 시간 제한으로 전환하는 것이 좋습니다. 이것이 가능하지 않은 경우 아래 WDM 섹션의 지침을 사용하여 DFx를 옵트인합니다.

WDF 드라이버가 런타임 전원 관리를 사용하지 않는 경우 지원을 추가하고 시스템 관리 유휴 시간 제한을 사용합니다. 이렇게 하려면 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조를 WdfDeviceAssignS0IdleSettings에 대한 입력으로 제공합니다.

WDM(미니포트가 아닌) 드라이버에 대한 요구 사항

드라이버가 WDF에서 제공하는 시스템 관리 유휴 지원을 사용하지 않는 경우(드라이버는 드라이버 관리 유휴를 사용하는 WDF 드라이버이거나 WDM 드라이버임) PoFx에 등록하여 DFx 지원을 받을 수 있습니다. 이 시나리오에서 드라이버는 다음을 구현하여 PoFx에 등록합니다.

PoFxRegisterDevice 함수에 입력되는 PO_FX_DEVICE_V3 구조에서 이러한 콜백에 대한 포인터를 제공합니다.

DFx 지원을 받으려면 드라이버가 다음을 수행해야 합니다.

예제

다음 예제에서는 위에서 설명한 자체 등록 옵션을 보여줍니다.

PO_FX_DEVICE_V3 MyPoFxDevice;
POHANDLE MyPoFxHandle;

RtlZeroMemory(&MyPoFxDevice, sizeof(PO_FX_DEVICE_V3));
MyPoFxDevice.Version = PO_FX_VERSION_V3;

// Initialize other PoFx callbacks and other fields like
// components and their idle states.

MyPoFxDevice.DirectedPowerUpCallback = <Driver's DFx power up callback>
MyPoFxDevice.DirectedPowerDownCallback = <Driver's DFx power down callback>

Status = PoFxRegisterDevice(
  <Driver's device object>,
  (PPO_FX_DEVICE)&MyPoFxDevice,
  &MyPoFxHandle);
  if (!NT_SUCCESS(Status)) {
  return Status;
}

드라이버가 이전에 지정한 PO_FX_VERSION_V1 경우 구조체는 PO_FX_DEVICE_V3 구성 요소 배열 구조에 사용됩니다 PO_FX_COMPONENT_V2 .

미니포트 드라이버에 대한 요구 사항

포트/미니포트 드라이버 모델을 따르는 디바이스 클래스의 경우 시스템 제공 포트 드라이버는 일반적으로 전원 정책 소유권을 처리합니다. 해당 포트 드라이버가 DFx 지원을 처리해야 하므로 대부분의 미니포트는 DFx를 옵트인하기 위해 코드를 변경할 필요가 없습니다.

KS.sys 타사 미니포트에 대한 지침

Windows 10 버전 2004(20H1 또는 빌드 19041이라고도 함)부터는 기본적으로 DFx 및 관련 HLK 요구 사항을 옵트아웃하는 KS.sys. 타사 KS.sys minports는 PoFx에 자신을 등록하고 KsDFxSupportEnable 레지스트리 키를 INF에 추가하여 DFx 및 관련 HLK에 옵트인할 수 있습니다.

드라이버는 이 섹션에 설명된 구현을 사용하여 PoFx에 등록할 수 있습니다. 또한 AddReg 지시문 섹션에 다음 줄을 추가해야 합니다.

HKR, , KSDFxSupportEnable, 0x00010001, 1

AddReg 섹션은 디바이스의 [DDInstall.HW] 섹션 또는 드라이버의 [service-install-section]에서 호출할 수 있습니다. [DDInstall.HW] 섹션에 추가하면 해당 특정 디바이스만 변경합니다. 이는 동일한 드라이버가 서로 다른 VID/PID 조합에 사용되지만 특정 디바이스에 대해서만 DFx를 사용하도록 설정해야 하는 경우에 유용합니다.

해당 드라이버를 사용하는 모든 디바이스에 대해 [service-install-section] 옵트인 DFx에서 AddReg 섹션을 추가합니다.

테스트

Microsoft는 DFx에 대한 세 가지 테스트, 즉 사용자 지정 디바이스를 테스트하기 위한 Windows 드라이버 키트의 단일 디바이스 테스트, 디바이스 수준 HLK 테스트 및 시스템의 모든 디바이스를 테스트하기 위한 시스템 수준 HLK 테스트를 제공합니다.

단일 디바이스 테스트는 WDK와 함께 제공되는 PwrTest 도구의 일부로 사용할 수 있습니다. 액세스하려면 스위치를 사용하여 도구를 /directedfx 실행합니다. 자세한 내용은 PwrTest DirectedFx 시나리오를 참조하세요.

HLK 테스트에 대한 자세한 내용은 다음 페이지를 참조하세요.

S4 전환 후 DFx 테스트는 S4에서 다시 시작한 후 드라이버가 PoFxReportDevicePoweredOn 을 올바르게 호출하지 않는 경우를 catch하는 것이 좋습니다.

DFx 및 S 상태 전환

  • DFx 전환의 대상 D-상태는 S3/S4 전환의 대상 D 상태와 다를 수 있는 RTD3(런타임 D3)의 경우와 일치해야 합니다. 디바이스가 RTD3용 D2를 입력하지만 S3/S4용 D3을 입력하는 시나리오를 고려합니다. 이 경우 DFx의 대상 D 상태는 D2여야 합니다.
  • 마찬가지로 DFx의 절전 모드 해제 동작은 RTD3의 경우와 일치해야 하며, 이는 S3/S4 전환에 사용된 동작과 다를 수 있습니다. 예를 들어 디바이스는 RTD3용 D2/wake-armed를 입력할 수 있지만 S3/S4에 대해 D3/no-wake-armed를 입력합니다. 이 시나리오에서는 DFx 전환도 D2/wake-armed로 입력해야 합니다.

DFx 및 런타임 D3(RTD3)

  • RTD3을 사용하면 디바이스가 유휴 상태가 되면 일반적으로 더 낮은 전원 D 상태가 됩니다. 새 작업이 도착하면 디바이스가 즉시 D0으로 절전 모드 해제됩니다. DFx를 사용하면 PoFx가 전원을 백업하도록 지시할 때까지 디바이스가 대상 D-상태(및 큐에서 보류 중인 새 작업)에 계속 남아 있어야 합니다.

참고 항목