다음을 통해 공유


Directed Power Management Framework에 대한 소개

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

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

시스템 전원 효율을 높이고 폼 팩터에서 Windows 디바이스의 에너지 소비를 줄이기 위한 것입니다.

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

DFx는 페이징 또는 디버그 장치의 전원을 끄지 않습니다.

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

전원 정책 소유자인 WDF 드라이버는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조에서 SystemManagedIdleTimeout 또는 SystemManagedIdleTimeoutWithHint를 지정하여 적절한 S0-Idle 정책을 구현해야 합니다. 이렇게 하면 장치가 유휴 상태일 때 전원이 꺼질 수 있습니다. 추가된 전원 복원력 측정값으로 드라이버는 DFx를 옵트인할 수 있습니다. 전원 하위 시스템은 시스템이 저전력 최신 대기 상태로 들어갈 때, 해당 디바이스가 D-상태 제약을 받고 아직 전원이 차단되지 않았다면, WDF에 디바이스의 전원을 끄도록 지시할 수 있습니다. 전원 하위 시스템이 WDF에 디바이스 전원을 빼도록 지시하면 WDF는 저전력 Dx 상태로의 전환을 시작합니다. 이는 개념적으로 WDF가 Sx(여기서 x > 0)로의 시스템 전원 전환에 대응하여 디바이스의 전원을 낮추는 방법과 유사합니다. 디바이스가 PoFx에 의해 전원이 꺼졌을 때, 전원 관리 IO 요청 또는 WdfDeviceStopIdle 호출은 디바이스를 전원이 켜진 D0 상태로 복원하지 않습니다. 자세한 내용은 WdfDeviceStopIdle 참조하세요.

드라이버는 DDInstall.HW 섹션INF의 AddReg 지시문 섹션에 다음 레지스트리 키를 추가하여 옵트인할 수 있습니다.

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 지원을 받으려면 드라이버는 다음을 수행해야 합니다.

  • PoFx에 등록할 때 PO_FX_DIRECTED_POWER* 콜백 제공
  • 유휴 상태에서 복귀할 때 PO_FX_DIRECTED_POWER_UP_CALLBACK 콜백 함수에서 PoFxReportDevicePoweredOn을 호출합니다. WDF 드라이버인 경우 플래그를 설정하고, 그런 다음 EvtDeviceD0Entry에서 플래그를 확인하고 PoFxReportDevicePoweredOn를 호출합니다.
  • Sx 전환에서 다시 시작할 때 PoFxReportDevicePoweredOn을(를) 호출합니다. WDF 드라이버인 경우, 그 드라이버는 IRP_MN_SET_POWER를 전처리해야 합니다. 전처리 콜백은 Parameters.Power.Type == SystemPowerState경우에만 진행해야 합니다. 디바이스가 절전/다시 시작 주기의 전체 동안 Dx 상태로 유지될 수 있으므로 EvtDeviceD0Entry 플래그를 확인하는 위의 방법은 작동하지 않습니다. 대신 EvtDeviceWdmIrpPreprocess 이벤트 콜백 함수는 IoSetCompletionRoutine 호출하여 IoCompletion 루틴을 설정하고 완료 루틴에서 PoFxReportDevicePoweredOn 호출해야 합니다.

예시

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

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라고도 함)부터, KS.sys는 기본 설정으로 DFx 및 관련 HLK 요구 사항에서 제외됩니다. 타사 KS.sys 미니포트는 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 전환 후에는 드라이버가 S4 복귀 후 PoFxReportDevicePoweredOn 을 올바르게 호출하고 있는지 확인하기 위해 DFx 테스트를 권장합니다.

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-상태를 유지하고 큐에 새 작업을 보류해야 합니다.

또한 참조하십시오