Bagikan melalui


Pengantar Kerangka Kerja Manajemen Daya Terarah

Mulai Windows 10, versi 1903, versi 3 dari kerangka kerja manajemen daya run-time (PoFx) menyediakan model daya yang diarahkan opsional, Directed PoFx (DFx).

Dengan DFx, sistem operasi mengarahkan tumpukan perangkat untuk memasuki status diam berdaya rendah yang sesuai ketika sistem beralih ke siaga dan tidak ada aktivitas perangkat lunak broker aktivator, dan dengan demikian memungkinkan sistem untuk memasukkan daya rendah dengan lebih andal.

Tujuannya adalah untuk membuat sistem lebih hemat daya dan mengurangi konsumsi energi untuk perangkat Windows di seluruh faktor bentuk.

DFx saat ini hanya didukung untuk perangkat dengan batasan status D. DFx melewati subtree perangkat apa pun dengan batasan status F.

DFx tidak mematikan paging atau perangkat debug.

Persyaratan untuk driver WDF (non-miniport)

Driver WDF yang merupakan pemilik kebijakan daya harus menerapkan kebijakan S0-Idle yang sesuai dengan menentukan SystemManagedIdleTimeout atau SystemManagedIdleTimeoutWithHint dalam struktur WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS . Ini akan memungkinkan perangkat untuk mati ketika diam. Sebagai ukuran ketahanan tambahan, driver dapat memilih ke DFx dengan menambahkan kunci registri berikut ke bagian direktif AddReg INF dalam bagian DDInstall.HW:

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

Driver WDF yang menargetkan versi 31 ke atas akan mengaktifkan DFx secara default. Jika ini tidak diinginkan, driver dapat memilih keluar dari DFx dengan mengatur kunci registri ke 0:

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

Driver WDF yang menargetkan versi 33 ke atas dapat memilih keluar dari DFx dengan mengatur anggota DirectedPoFxEnabled dari struktur WDF_POWER_FRAMEWORK_SETTINGS ke WdfFalse.

Tip

Untuk menginisialisasi struktur WDF_POWER_FRAMEWORK_SETTINGS , driver Anda harus memanggil WDF_POWER_FRAMEWORK_SETTINGS_INIT.

Karena meminta batas waktu diam yang dikelola sistem menyebabkan WDF mendaftar dengan PoFx atas nama driver, driver tidak perlu mendaftar dengan PoFx dalam skenario ini.

Jika driver menentukan DriverManagedIdleTimeout, pertimbangkan untuk beralih ke batas waktu diam yang dikelola sistem. Jika itu tidak layak, gunakan pedoman di bagian WDM di bawah ini untuk memilih DFx.

Jika driver WDF tidak menggunakan manajemen daya runtime, tambahkan dukungan untuk itu dan gunakan batas waktu diam yang dikelola sistem. Untuk melakukannya, berikan struktur WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS sebagai input ke WdfDeviceAssignS0Idle Pengaturan.

Persyaratan untuk driver WDM (non-miniport)

Jika driver Anda tidak menggunakan dukungan diam yang dikelola sistem yang disediakan oleh WDF (driver adalah driver WDF menggunakan idle yang dikelola driver, atau driver WDM), driver tersebut masih bisa mendapatkan dukungan DFx dengan mendaftarkan dirinya dengan PoFx. Dalam skenario ini, driver mendaftar dengan PoFx dengan menerapkan:

Berikan pointer ke panggilan balik ini dalam struktur PO_FX_DEVICE_V3 yang dimasukkan ke fungsi PoFxRegisterDevice.

Untuk mendapatkan dukungan DFx, driver harus:

Contoh

Contoh berikut menunjukkan opsi pendaftaran mandiri yang dijelaskan di atas:

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;
}

Jika driver Anda ditentukan PO_FX_VERSION_V1 sebelumnya, perhatikan bahwa PO_FX_DEVICE_V3 struktur digunakan PO_FX_COMPONENT_V2 untuk struktur array komponen.

Persyaratan untuk driver miniport

Untuk kelas perangkat yang mengikuti model driver port/miniport, driver port yang disediakan sistem biasanya menangani kepemilikan kebijakan daya. Sebagian besar miniport tidak diharapkan memerlukan perubahan kode apa pun untuk memilih DFx, karena driver port yang sesuai diharapkan untuk menangani dukungan DFx.

Panduan untuk miniport pihak ketiga KS.sys

Dimulai dengan Windows 10, versi 2004 (juga dikenal sebagai 20H1 atau build 19041), KS.sys menolak persyaratan DFx dan HLK terkait secara default. Miniport pihak ketiga KS.sys dapat ikut serta ke DFx dan HLK terkait dengan mendaftarkan dirinya dengan PoFx dan menambahkan kunci registri KsDFxSupportEnable ke INF.

Driver dapat mendaftarkan dirinya dengan PoFx dengan menggunakan implementasi yang disebutkan di bagian ini. Selain itu, baris berikut perlu ditambahkan di bagian direktif AddReg.

HKR, , KSDFxSupportEnable, 0x00010001, 1

Bagian AddReg dapat dipanggil oleh bagian [DDInstall.HW] perangkat atau [service-install-section] driver. Menambahkannya di bagian [DDInstall.HW] hanya mengubah perangkat tertentu. Ini berguna jika driver yang sama digunakan untuk kombinasi VID/PID yang berbeda, tetapi DFx hanya perlu diaktifkan untuk perangkat tertentu.

Menambahkan bagian AddReg di DFx opts-in [service-install-section] untuk semua perangkat menggunakan driver tersebut.

Pengujian

Microsoft menyediakan tiga pengujian untuk DFx: pengujian satu perangkat di Windows Driver Kit yang ditujukan untuk menguji perangkat yang ditentukan pengguna, pengujian HLK tingkat perangkat, dan pengujian HLK tingkat sistem yang ditujukan untuk menguji semua perangkat pada sistem.

Pengujian perangkat tunggal tersedia sebagai bagian dari alat PwrTest yang dikirim dengan WDK. Untuk mengaksesnya, jalankan alat dengan sakelar /directedfx . Untuk informasi selengkapnya, lihat Skenario PwrTest DirectedFx.

Untuk informasi tentang pengujian HLK, silakan lihat halaman berikut:

Pengujian DFx setelah transisi S4 disarankan untuk menangkap kasus apa pun di mana driver mungkin tidak memanggil PoFxReportDevicePoweredOn dengan benar setelah melanjutkan dari S4.

Transisi DFx dan S-state

  • Target D-state untuk transisi DFx harus cocok dengan yang untuk Runtime D3 (RTD3), yang mungkin berbeda dari target D-state untuk transisi S3/S4. Pertimbangkan skenario di mana perangkat memasuki D2 untuk RTD3, tetapi memasukkan D3 untuk S3/S4. Dalam hal ini, target D-state untuk DFx harus D2.
  • Demikian pula, perilaku arm-for-wake untuk DFx harus cocok dengan yang untuk RTD3, yang mungkin berbeda dari yang digunakan dalam transisi S3/S4. Misalnya, perangkat dapat memasukkan D2/wake-armed untuk RTD3, tetapi masukkan D3/no-wake-armed untuk S3/S4. Dalam skenario ini, transisi DFx juga harus memasuki D2/wake-armed.

DFx dan Runtime D3 (RTD3)

  • Dengan RTD3, perangkat biasanya memasuki status D daya yang lebih rendah saat diam. Jika pekerjaan baru tiba, perangkat segera bangun ke D0. Dengan DFx, perangkat harus terus tetap dalam status D targetnya (dan menunggu pekerjaan baru pada antreannya) sampai PoFx mengarahkannya untuk menyalakan kembali.

Lihat Juga