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 有兩個主要目標:

  • 它提供一種標準方式,讓設備磁碟機通知 PEP 關於效能狀態變更,讓 PEP 可以採取適當的動作。
  • 它為驅動程式提供標準方式,通知作業系統 Windows 效能分析器 (WPA) 記錄和分析的效能狀態變更,而不需要每個驅動程式的自訂外掛程式。

適用于Component-Level效能狀態的 PoFX API 簡介

PoFx 可讓裝置為每個元件定義下列類型的效能狀態:

  • 以 Hz () 測量的頻率單位、以每秒位) 或不透明索引編號測量的頻寬 (單位的離散狀態數。
  • 最小值和最大值之間的狀態連續分佈。

效能狀態會組織成集合,並以每個元件為基礎註冊。 集合內的效能狀態必須以單調方式增加。 大部分驅動程式預期會為每個元件定義一組效能狀態。 例如,驅動程式可能會定義一組效能狀態,以控制元件的時鐘頻率。 不過,某些驅動程式可能需要定義多個效能狀態集,以控制元件的多個效能狀態維度。 例如,驅動程式可能會定義兩組效能狀態,以控制時鐘頻率和匯流排頻寬。

若要註冊裝置元件以進行 PoFx 的效能狀態管理,驅動程式會遵循下列一般步驟:

  1. 驅動程式會註冊要由 PoFx 管理的裝置元件。 如需詳細資訊,請參閱 元件層級電源管理

  2. 驅動程式會呼叫 PoFxRegisterComponentPerfStates來註冊對效能狀態的支援。 在註冊呼叫過程中,驅動程式可以自行定義指定的元件的效能狀態,或延遲平臺擴充功能外掛程式 (PEP) 來定義它們。

    裝置驅動程式或 PEP 必須具備效能狀態的知識,包括每個元件的效能狀態集數目、效能狀態的類型 (離散或範圍型) ,以及實際效能狀態的值和計數的詳細資料。 如果 PEP 不支援效能狀態,驅動程式仍可能會向 PoFx 註冊效能狀態支援,並通知作業系統 Windows 效能分析器 (WPA) 中的記錄和分析效能狀態變更。

    在這兩種情況下,在 成功完成 PoFxRegisterComponentPerfStates時,驅動程式具有包含已註冊效能狀態集 的PO_FX_COMPONENT_PERF_INFO 結構。

  3. 當驅動程式決定元件應該變更效能狀態時,它會呼叫 PoFxIssueComponentPerfStateChangePoFxIssueComponentPerfStateChangeMultiple。 當效能狀態變更完成時,PoFx 會叫用驅動程式提供的 ComponentPerfStateCallback 常式。

  4. 不論 PEP 成功或拒絕效能狀態變更, ComponentPerfStateCallback 常式都會通知驅動程式。 如果 PEP 成功變更,驅動程式會從其觀點執行變更效能狀態所需的任何工作。 如果 PEP 拒絕變更,驅動程式可能會選擇不執行任何動作,或使用相同或替代的效能狀態再次重試要求。

裝置電源管理參考