Delen via


NetAdapterCx-energiebeheer configureren

Alle NetAdapterCx-clientstuurprogramma's zijn WDF-stuurprogramma's (Windows Driver Framework) met energiebeheerfunctionaliteit die vergelijkbaar is met alle WDF-stuurprogramma's. NetAdapterCx-stuurprogramma's vereisen aanvullende netwerkspecifieke energieconfiguraties, zoals beschreven in dit artikel.

Een typisch netwerkapparaat ondersteunt drie algemene energiebeheerfuncties:

Energiemogelijkheden van de netwerkadapter instellen

Nadat u de WDF-functionaliteit voor energiebeheer hebt geconfigureerd, is de volgende stap het instellen van de energiemogelijkheden van de netwerkadapter. Energiemogelijkheden zijn onderverdeeld in twee categorieën: offloadmogelijkheden van het low power-protocol en ontwaakmogelijkheden.

Offloadmogelijkheden van het low power-protocol

Voor achtergrondinformatie over hoe de Windows-netwerkstack gebruikmaakt van deze mogelijkheid, zie Protocol Offloads voor NDIS Power Management.

Clientstuurprogramma's stellen hun offloadmogelijkheden voor laag vermogen-protocollen in door de volgende geschikte methoden voor hun hardware aan te roepen.

Ontwaakmogelijkheden

Clientstuurprogramma's roepen een van de volgende methoden aan om de wekfunctionaliteiten in te stellen die door hun hardware worden ondersteund wanneer het apparaat zich in een lage energietoestand bevindt (Dx):

Energieverbruik en hervatting latentietijd

Wanneer het netwerkapparaat zich in Dx bevindt, verbruikt het nog steeds stroom om ontkoppeling en voorbereiding uit te voeren voor activering uit slaapstand. Nadat het apparaat ontwaakt van Dx, is er een vertraging voordat het apparaat pakketten opnieuw kan overdragen. Hoe dieper het interne energieniveau waar het apparaat in gaat, hoe minder energie het verbruikt in Dx, maar hoe langer de hervattingslatentie.

In de volgende tabel worden de algemene richtlijnen beschreven met betrekking tot de afweging tussen energieverbruik en hervattingslatentie voor elke ontwaakmogelijkheid.

Belangrijk

Sommige informatie heeft betrekking op vooraf uitgegeven producten die aanzienlijk kunnen worden gewijzigd voordat ze commercieel worden vrijgegeven. Microsoft geeft geen garanties, expliciet of impliciet, met betrekking tot de verstrekte informatie. Raadpleeg de mediaspecifieke documentatie en het Windows Hardware Compatibility Program (WHCP) voor meer informatie over een specifiek apparaattype.

Ontwaakmogelijkheid Wake Events Stroomverbruik Hervatten van latentie
PacketFilter Elk pakket komt overeen met de geconfigureerde ReceivePacketFilter Moet lager zijn dan wanneer in D0 en het apparaat in de juiste staat moet worden bewaard, zodat de latentie van het hervatten erg klein is <= 10 ms
Bitmapafbeelding Elk pakket komt overeen met het geconfigureerde bitmappatroon Moet lager zijn dan wanneer ingeschakeld voor PacketFilter omdat deze meer ruimte heeft in latentie bij hervatten. <= 300 ms
MagicPacket Magicpakket Vergelijkbaar met Bitmap <= 300 ms
MediaChange Verbonden of losgekoppelde media Vergelijkbaar met Bitmap <= 300 ms

In het volgende voorbeeld ziet u hoe een clientstuurprogramma de energiemogelijkheden kan initialiseren. Dit doet u tijdens het starten van de netadapter, maar voordat u NetAdapterStart aanroept. In dit voorbeeld stelt het clientstuurprogramma de mogelijkheden voor bitmap, mediawijziging en ontwaakmogelijkheden voor pakketfilters in.

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

De client kan eventueel EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD en EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE callback-functies registreren om binnenkomende protocol-offloads en ontwaakpatronen te accepteren of af te wijzen.

Ontlaad- en wekpatronen voor programmeerprotocollen

Tijdens het uitschakelen van de stroomafschakeling van het apparaat doorloopt het stuurprogramma de ingeschakelde wake-patronen en protocolvermogenoverdracht en programmeert deze in de hardware. De bestuurder doet dit in de functies EvtDeviceArmWakeFromS0 en EvtDeviceArmWakeFromSx callback.

In het volgende voorbeeld ziet u hoe een clientstuurprogramma door de wake-patroonlijst kan itereren om te controleren op een wake-on-magic-packet-vermelding en vervolgens door de power-offload-lijst kan itereren om de offload van het IPv4 ARP-protocol te verwerken.

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++)
    {
        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 = NetPowerOffloadListGetElement(&powerOffloadList, i);
        NET_POWER_OFFLOAD_TYPE const powerOffloadType = NetPowerOffloadGetType(powerOffload);

        if(powerOffloadType == NetPowerOffloadTypeArp)
        {
            // Enable ARP protocol offload for the adapter
            ..
            //
        }
    }

    return STATUS_SUCCESS;
}

Op weg terug naar hoog vermogen schakelt de bestuurder normaal gesproken de eerder geprogrammeerde protocol stroom offloads en wake patronen in de bijbehorende EvtDeviceDisarmWakeFromSx en EvtDeviceDisarmWakeFromS0 callbacks uit. NetDeviceGetPowerOffloadList en NetDeviceGetWakeSourceList kunnen worden gebruikt om het protocol power offloads en wake-patroon in de callbacks op te halen.

Reden voor wakker worden rapporteren

Belangrijk

Het is verplicht dat clientstuurprogramma's de reden voor ontwaking aan NetAdapterCx rapporteren.

Wanneer de NIC-hardware het systeem ontwaakt, moet het clientstuurprogramma rapporteren aan NetAdapterCx die de wake-bron heeft geactiveerd. Voor de meeste wake-bronnen gebruiken stuurprogramma's de NET_ADAPTER_WAKE_REASON_PACKET structuur om het netwerkpakket te beschrijven dat de wake heeft geactiveerd.

Als de NET_WAKE_SOURCE_TYPE is:

Energiebeheerscenario's voor modern stand-bysysteem

Belangrijk

Voor modern stand-byplatform moet het netwerkapparaatstuurprogramma het volgende doen:

Raadpleeg de mediaspecifieke documentatie en WHCP voor de volledige moderne stand-byvereisten voor uw apparaattype.

Het besturingssysteem is verantwoordelijk voor beslissingen over het energiebeleid van het netwerkapparaat. Het besturingssysteem bepaalt bijvoorbeeld wanneer een apparaat naar Dx moet gaan en op welke typen netwerk gebeurtenissen het apparaat moet worden geactiveerd. De verantwoordelijkheid van het apparaatstuurprogramma is om de stroomovergangsreeks betrouwbaar uit te voeren wanneer dit door het besturingssysteem wordt aangevraagd en vervolgens de hardware van het besturingssysteem correct te programmeren voor de ontwaakvoorwaarde die is ingesteld door het besturingssysteem.

Het besturingssysteem neemt beslissingen over energiebeleid op basis van een brede set factoren, waaronder systeembreed energiebeleid en gebruikerskeuzen. Hier volgen enkele algemene energiebeleidsregels die worden gebruikt voor netwerkapparaten op een modern stand-bysysteem:

Belangrijk

Dit energiebeleid kan worden gewijzigd met updates van het besturingssysteem en de volgende informatie wordt als voorbeeld gegeven. Afhankelijkheden van specifiek end-to-end gedrag van het besturingssysteem moeten worden vermeden.

  • Wanneer het pc-scherm is ingeschakeld en het netwerkapparaat inactief is, vraagt het besturingssysteem het apparaat naar Dx te gaan en het te koppelen aan PacketFilter en MediaChange wake.

  • Wanneer de pc Modern Standby ingaat en het netwerkapparaat inactief is, vraagt het besturingssysteem de NIC om naar de Dx-toestand te gaan en deze voor Bitmap, MediaChange en Magic Packet-ontwaken in te stellen.

  • Wanneer de pc naar de sluimerstand gaat, vraagt het besturingssysteem de NIC om naar Dx te gaan en deze te bewapenen voor Magic Packet wake.

Opmerking: NetAdapterCx-clientstuurprogramma's bepalen de zichtbaarheid van het tabblad Energiebeheer. Zie Gebruikersbeheer van apparaatinactiviteit en ontwaakgedrag voor meer informatie.