Configurazione del risparmio energia NetAdapterCx
Tutti i driver client NetAdapterCx sono driver WDF (Windows Driver Framework) con funzionalità di risparmio energia simili a tutti i driver WDF. I driver NetAdapterCx richiedono configurazioni di alimentazione aggiuntive specifiche della rete, come descritto in questo articolo.
Un dispositivo di rete tipico supporta tre funzionalità comuni di risparmio energia:
Il dispositivo di rete può entrare in uno stato di potenza inferiore (Dx) quando richiesto dal sistema operativo.
Il driver client registra i callback di eventi WDF facoltativi per ricevere la notifica delle transizioni di alimentazione, come descritto in Supporto di PnP e risparmio energia nei driver di funzione.
Se il dispositivo di rete può entrare nello stato Dx mentre il sistema rimane nello stato di funzionamento (S0), il driver client deve supportare l'alimentazione inattiva. Vedere Supporto dell'alimentazione inattiva. Oltre al controllo utente standard del comportamento di inattività e riattivazione disponibile per tutti i dispositivi WDF, NetAdapterCx consente un controllo di inattività specifico della rete aggiuntivo tramite *IdleRestriction come definito nelle parole chiave INF standardizzate per il risparmio energia.
Quando il dispositivo di rete si trova nello stato Dx, può attivare un segnale di riattivazione se si è verificata una condizione di riattivazione preconfigurata.
Per informazioni dettagliate su come un dispositivo WDF può riattivare il sistema da uno stato a basso consumo di sistema, vedere Supporto della riattivazione del sistema.
NetAdapterCx fornisce API per il driver client per dichiarare gli eventi di rete per cui l'hardware dispone del supporto per la riattivazione. Vedere Impostazione delle funzionalità di alimentazione della scheda di rete.
Quando il dispositivo di rete si trova nello stato Dx, può comunque rispondere ad alcune richieste di rete comunemente usate per mantenere la presenza del sistema host nella rete senza svegliare il sistema host. Vedere Impostazione delle funzionalità di alimentazione della scheda di rete.
Impostazione delle funzionalità di alimentazione della scheda di rete
Dopo aver configurato la funzionalità di risparmio energia di WDF, il passaggio successivo consiste nell'impostare le funzionalità di alimentazione della scheda di rete. Le funzionalità di risparmio energia sono suddivise in due categorie: funzionalità di offload del protocollo a basso consumo e Riattivazione.
Funzionalità di offload del protocollo a basso consumo
Per informazioni di base su come lo stack di rete Windows usa questa funzionalità, vedere Offload del protocollo per il risparmio energia NDIS.
I driver client impostano le funzionalità di offload del protocollo a basso consumo chiamando i metodi seguenti appropriati per l'hardware:
Funzionalità di riattivazione
I driver client chiamano uno dei metodi seguenti per impostare le funzionalità di riattivazione supportate dall'hardware quando il dispositivo è in stato di bassa potenza (Dx):
- NetAdapterWakeSetBitmapCapabilities
- NetAdapterWakeSetMagicPacketCapabilities
- NetAdapterWakeSetMediaChangeCapabilities
- NetAdapterWakeSetPacketFilterCapabilities
Consumo energetico e ripresa della latenza
Quando il dispositivo di rete si trova in Dx, consuma ancora l'alimentazione per eseguire l'offload e il braccio per la riattivazione. Dopo che il dispositivo avvia la riattivazione da Dx, si verifica un ritardo prima che il dispositivo possa trasferire nuovamente i pacchetti. Più profondo è lo stato interno di alimentazione che il dispositivo entra nella minore potenza consuma mentre è in Dx, ma più lunga è la latenza di ripresa.
La tabella seguente descrive le linee guida generali relative al compromesso tra consumo energetico e la latenza di ripresa per ogni funzionalità di riattivazione.
Importante
Alcune informazioni riguardano il prodotto in versione non definitiva che potrebbe essere modificato in modo sostanziale prima del rilascio commerciale. Microsoft non fornisce alcuna garanzia, espressa o implicita, rispetto alle informazioni fornite. Per altre informazioni su un tipo di dispositivo specifico, vedere la documentazione specifica del supporto e il programma di compatibilità hardware Windows (WHCP).
Funzionalità di riattivazione | Eventi di riattivazione | Consumo di energia elettrica | Riprendi latenza |
---|---|---|---|
PacketFilter | Eventuali corrispondenze di pacchetti configurate receivePacketFilter | Deve essere inferiore a quando in D0 e il dispositivo deve essere mantenuto in uno stato appropriato in modo che la latenza di ripresa sia molto piccola | <= 10 ms |
Bitmap | Tutti i pacchetti corrispondono al modello bitmap configurato | Deve essere inferiore rispetto a quando è armato per PacketFilter perché ha più latitudine nella latenza di ripresa | <= 300 ms |
MagicPacket | Magic Packet | Simile a Bitmap | <= 300 ms |
MediaChange | Supporti connessi o disconnessi | Simile a Bitmap | <= 300 ms |
Nell'esempio seguente viene illustrato come un driver client potrebbe inizializzare le funzionalità di risparmio energia. Questa operazione viene eseguita durante l'avvio dell'adattatore net, ma prima di chiamare NetAdapterStart. In questo esempio, il driver client imposta le funzionalità di attivazione bitmap, modifica del supporto e filtro pacchetti.
//
// Set bitmap wake capabilities
//
NET_ADAPTER_WAKE_BITMAP_CAPABILITIES bitmapCapabilities;
NET_ADAPTER_WAKE_BITMAP_CAPABILITIES_INIT(&bitmapCapabilities);
bitmapCapabilities.BitmapPattern = TRUE;
bitmapCapabilities.MaximumPatternCount = deviceContext->PowerFiltersSupported;
bitmapCapabilities.MaximumPatternSize = 256;
NetAdapterWakeSetBitmapCapabilities(Adapter, &bitmapCapabilities);
//
// Set media change wake capabilities
//
NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES mediaChangeCapabilities;
NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES_INIT(&mediaChangeCapabilities);
mediaChangeCapabilities.MediaConnect = TRUE;
mediaChangeCapabilities.MediaDisconnect = TRUE;
NetAdapterWakeSetMediaChangeCapabilities(Adapter, &mediaChangeCapabilities);
//
// Set packet filter wake capabilities
//
if(deviceContext->SelectiveSuspendSupported)
{
NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES packetFilterCapabilities;
NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES_INIT(&packetFilterCapabilities);
packetFilterCapabilities.PacketFilterMatch = TRUE;
NetAdapterWakeSetPacketFilterCapabilities(Adapter, &packetFilterCapabilities);
}
Il client può facoltativamente registrare EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD e EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE funzioni di callback per accettare o rifiutare gli offload e i modelli di riattivazione del protocollo in ingresso.
Modelli di offload e riattivazione del protocollo di programmazione
Durante la sequenza di accensione del dispositivo, il driver scorre i modelli di riattivazione abilitati e l'alimentazione del protocollo li scarica e li programma nell'hardware. Il driver esegue questa operazione nelle funzioni di callback EvtDeviceArmWakeFromS0 e EvtDeviceArmWakeFromSx .
L'esempio seguente mostra come un driver client potrebbe scorrere l'elenco dei criteri di riattivazione per verificare la presenza di una voce di pacchetto magic, quindi eseguire l'iterazione sull'elenco di offload di alimentazione per elaborare l'offload del protocollo ARP IPv4:
NTSTATUS
EvtDeviceArmWakeFromSx(
WDFDEVICE Device
)
{
NETADAPTER adapter = GetDeviceContext(Device)->Adapter;
//
// Process wake source list
//
NET_WAKE_SOURCE_LIST wakeSourceList;
NET_WAKE_SOURCE_LIST_INIT(&wakeSourceList);
NetDeviceGetWakeSourceList(Device, &wakeSourceList);
for(UINT32 i = 0; i < NetWakeSourceListGetCount(&wakeSourceList; i++); i++)
{
NETWAKESOURCE wakeSource = NetWakeSourceListGetElement(&wakeSourceList, i);
NET_WAKE_SOURCE_TYPE const wakeSourceType = NetWakeSourceGetType(wakeSource);
if(wakeSourceType == NetWakeSourceTypeMagicPacket)
{
// Enable magic packet wake for the adapter
..
//
}
}
//
// Process power offload list
//
NET_POWER_OFFLOAD_LIST powerOffloadList;
NET_POWER_OFFLOAD_LIST_INIT(&powerOffloadList);
NetDeviceGetPowerOffloadList(Device, &powerOffloadList);
for(UINT32 i = 0; i < NetPowerOffloadListGetCount(&powerOffloadList); i++)
{
NETPOWEROFFLOAD powerOffload = NetPowerOffloadGetElement(&powerOffloadList, i);
NET_POWER_OFFLOAD_TYPE const powerOffloadType = NetPowerOffloadGetType(powerOffload);
if(powerOffloadType == NetPowerOffloadTypeArp)
{
// Enable ARP protocol offload for the adapter
..
//
}
}
return STATUS_SUCCESS;
}
Per tornare ad alta potenza , il driver disabilita normalmente i modelli di alimentazione e riattivazione del protocollo programmati in precedenza nei callback EvtDeviceDisarmWakeFromSx e EvtDeviceDisarmWakeFromS0 corrispondenti .
Motivo della riattivazione dei report
Importante
È obbligatorio che i driver client segnalano il motivo della riattivazione a NetAdapterCx.
Quando l'hardware della scheda di interfaccia di rete riattiva il sistema, il driver client deve segnalare a NetAdapterCx quale origine di riattivazione ha attivato la riattivazione. Per la maggior parte delle origini di riattivazione, i driver usano la struttura NET_ADAPTER_WAKE_REASON_PACKET per descrivere il pacchetto di rete che ha attivato la riattivazione.
Se il NET_WAKE_SOURCE_TYPE è:
NetWakeSourceTypeBitmapPattern, chiamare NET_ADAPTER_WAKE_REASON_PACKET_INIT per inizializzare la struttura NET_ADAPTER_WAKE_REASON_PACKET . Chiama NetAdapterReportWakeReasonPacket per segnalare questo motivo di riattivazione.
NetWakeSourceTypeMagicPacket, chiamare NET_ADAPTER_WAKE_REASON_MAGIC_PACKET_INIT per inizializzare la struttura NET_ADAPTER_WAKE_REASON_PACKET . Chiama NetAdapterReportWakeReasonPacket per segnalare questo motivo di riattivazione.
NetWakeSourceTypePacketFilterMatch, chiamare NET_ADAPTER_WAKE_REASON_FILTER_PACKET_INIT per inizializzare la struttura NET_ADAPTER_WAKE_REASON_PACKET . Chiama NetAdapterReportWakeReasonPacket per segnalare questo motivo di riattivazione.
NetWakeSourceTypeMediaChange, chiama NetAdapterReportWakeReasonMediaChange per segnalare questo motivo di riattivazione.
Scenari di risparmio energia per il sistema di standby moderno
Importante
Per la piattaforma modern standby, il driver di dispositivo di rete deve:
- Chiamare WdfDeviceInitSetPnpPowerEventCallbacks per registrare i callback di alimentazione.
- Chiamare WdfDeviceAssignS0IdleSettings per supportare l'inattività del dispositivo quando il sistema si trova nello stato di funzionamento (S0).
- Chiama WdfDeviceInitSetPowerPolicyEventCallbacks per registrare i callback di riattivazione.
- Supportare le funzionalità di offload del protocollo a basso consumo appropriate per il tipo di dispositivo.
- Supportare le funzionalità di riattivazione appropriate per il tipo di dispositivo.
Per i requisiti moderni di standby completi per il tipo di dispositivo, vedere la documentazione specifica del supporto e WHCP.
Il sistema operativo è responsabile delle decisioni relative ai criteri di risparmio energia dei dispositivi di rete. Ad esempio, il sistema operativo controlla quando un dispositivo deve passare a Dx e quali tipi di eventi di rete il dispositivo deve riattivare. La responsabilità del driver del dispositivo è eseguire in modo affidabile la sequenza di transizione della potenza quando richiesto dal sistema operativo e quindi programmare correttamente l'hardware per la condizione di riattivazione impostata dal sistema operativo.
Il sistema operativo prende decisioni relative ai criteri di risparmio energia in base a un ampio set di fattori, inclusi i criteri di risparmio energia a livello di sistema e le scelte degli utenti. Di seguito sono riportati alcuni criteri di alimentazione comuni usati per i dispositivi di rete in un sistema di standby moderno:
Importante
Questi criteri di risparmio energia possono cambiare con gli aggiornamenti del sistema operativo e le informazioni seguenti vengono fornite come esempio. È consigliabile evitare dipendenze da specifici comportamenti end-to-end del sistema operativo.
Quando lo schermo del PC è attivo e il dispositivo di rete è inattiva, il sistema operativo chiede al sistema operativo di passare a Dx e armeggiarlo per La riattivazione di PacketFilter e MediaChange.
Quando il PC entra in standby moderno e il dispositivo di rete è stato inattiva, il sistema operativo chiede al sistema operativo di passare a Dx e armeggiarlo per Bitmap, MediaChange e Magic Packet wake.
Quando il PC passa a Hibernation, il sistema operativo chiede al sistema operativo di passare a Dx e bracciolo per la riattivazione del pacchetto magic.
Nota: i driver client NetAdapterCx controllano la visibilità della scheda gestione energia. Per altre informazioni, vedere Controllo utente dell'inattività del dispositivo e comportamento di riattivazione.