Component-Level risparmio energia

A partire da Windows 8, il framework di risparmio energia (PoFx) consente a un driver di gestire gli stati di alimentazione dei singoli componenti in un dispositivo. Il risparmio energia a livello di componente esiste side-by-side con il risparmio energia a livello di dispositivo. Per un'introduzione, vedere Panoramica di Power Management Framework.

Questa pagina descrive l'API PoFx per Component-Level risparmio energia.

Per registrare un dispositivo da gestire da PoFx, il driver chiama la routine PoFxRegisterDevice . Il driver passa questa routine a una struttura PO_FX_DEVICE che, tra gli altri dati, contiene una matrice di strutture PO_FX_COMPONENT . Ogni elemento in questa matrice descrive gli stati di alimentazione Fx di un componente nel dispositivo e gli attributi di ogni stato Fx. (Almeno, un componente che non supporta il risparmio energia a livello di componente implementa solo lo stato F0. Gli attributi di un particolare stato di alimentazione fx in un determinato componente sono descritti da una struttura PO_FX_COMPONENT_IDLE_STATE , che contiene i valori seguenti:

  • La latenza di transizione, ovvero il tempo necessario per eseguire una transizione da questo stato Fx allo stato F0 (completamente attivo).
  • Il requisito di residenza, ovvero il tempo che un componente deve trascorrere in questo stato Fx per effettuare una transizione allo stato vale la pena.
  • Potenza nominale, ovvero la potenza consumata dal componente in questo stato Fx.

PoFx usa queste informazioni (oltre ad altri input e dipendenze a livello di sistema) per prendere decisioni intelligenti su quale stato di alimentazione fx deve essere in qualsiasi momento specifico. PoFx deve bilanciare due obiettivi concorrenti. In primo luogo, è necessario configurare un componente inattiva per utilizzare il minor consumo possibile di energia. In secondo luogo, un componente deve essere preparato per passare da uno stato fx a basso consumo a F0 abbastanza rapidamente per mantenere l'aspetto di un dispositivo sempre acceso e sempre connesso.

Il risparmio energia a livello di componente può essere eseguito solo quando un dispositivo si trova nello stato di alimentazione D0 (completamente acceso). Quando un dispositivo si trova in D1 (quasi acceso), D2 (quasi disattivato) o nello stato di alimentazione D3, il dispositivo non è accessibile. Quando il dispositivo si trova nello stato D0, solo i componenti usati dal driver devono rimanere nello stato F0. I componenti inattive possono potenzialmente passare agli stati fx a basso consumo per ridurre il consumo di energia.

Mentre un dispositivo si trova nello stato di alimentazione D0, il driver segue un protocollo semplice per abilitare il risparmio energia a livello di componente. Quando il driver deve accedere a un componente, il driver chiama la routine PoFxActivateComponent per richiedere l'accesso al componente. Se il componente si trova in uno stato fx a basso consumo quando si verifica questa chiamata, PoFx avvia una transizione allo stato F0 e invia una notifica al driver al termine della transizione. Il driver può quindi accedere al componente. Quando il driver non deve più accedere al componente, il driver chiama la routine PoFxIdleComponent per inviare una notifica a PoFx. In risposta a questa chiamata, PoFx può potenzialmente passare il componente a uno stato Fx a basso consumo.

Un componente accessibile si trova nella condizione attiva. Un componente inaccessibile si trova nella condizione di inattività. Per tenere traccia dell'accessibilità dei componenti in un dispositivo, PoFx mantiene un conteggio dei riferimenti di attivazione per ogni componente. Una chiamata PoFxActivateComponent incrementa il conteggio del componente specificato di uno e una chiamata PoFxIdleComponent decrementa il conteggio di uno.

Se una chiamata PoFxActivateComponent incrementa il conteggio da zero a uno, PoFx avvia una transizione dalla condizione di inattività alla condizione attiva e invia una notifica al driver al termine della transizione. Se un oggetto PoFxActivateComponent si verifica quando il componente si trova già nella condizione attiva, il componente rimane nella condizione attiva e il driver non riceve alcuna notifica.

Se una chiamata PoFxIdleComponent decrementa il conteggio da uno a zero, PoFx avvia una transizione dalla condizione attiva alla condizione di inattività e invia una notifica al driver al termine della transizione. Se una chiamata PoFxIdleComponent decrementa il conteggio ma il conteggio rimane diverso da zero, il componente rimane nella condizione attiva e il driver non riceve alcuna notifica.

Il conteggio dei riferimenti di attivazione gestisce in modo pratico le situazioni in cui due o più percorsi di codice nello stesso driver potrebbero dover accedere simultaneamente allo stesso componente in un dispositivo. Mantenendo questo conteggio, PoFx consente alle varie parti del driver di mantenere indipendentemente l'accesso al componente senza richiedere al driver di gestire centralmente l'accesso al componente.

La condizione attiva/inattiva di un componente è l'unico mezzo affidabile per un driver per determinare se un componente è accessibile. Un componente che si trova nello stato di alimentazione F0, ma che si trova nella condizione di inattività potrebbe essere in grado di passare a uno stato fx a basso consumo.

Un componente che si trova nella condizione attiva è sempre nello stato F0. Il componente non può lasciare F0 finché non entra nella condizione di inattività. Un componente che si trova nella condizione di inattività può essere in stato F0 o in uno stato Fx a basso consumo. Se un componente si trova in uno stato fx a basso consumo quando una chiamata PoFxActivateComponent avvia una transizione dalla condizione di inattività alla condizione attiva, PoFx deve prima passare il componente a F0 prima che il componente possa entrare nella condizione attiva.

Informazioni di riferimento sul risparmio energia del dispositivo