Konfigurieren der NetAdapterCx-Energieverwaltung
Alle NetAdapterCx-Clienttreiber sind WDF-Treiber (Windows Driver Framework), deren Energieverwaltungsfunktionen allen WDF-Treibern ähneln. NetAdapterCx-Treiber erfordern zusätzliche netzwerkspezifische Energiekonfigurationen, wie in diesem Artikel beschrieben.
Ein typisches Netzwerkgerät unterstützt drei allgemeine Energieverwaltungsfeatures:
Das Netzwerkgerät kann auf Anweisung des Betriebssystems in einen Zustand mit niedrigerer Leistung (Dx) wechseln.
Der Clienttreiber registriert optionale WDF-Ereignisrückrufe, um Benachrichtigungen über Energieübergänge zu erhalten, wie unter Unterstützen von PnP und Energieverwaltung in Funktionstreibern beschrieben.
Wenn das Netzwerkgerät in den Dx-Zustand wechseln kann, während das System in seinem Betriebszustand (S0) verbleibt, sollte der Clienttreiber das Herunterfahren im Leerlauf unterstützen. Weitere Informationen finden Sie unter Unterstützen des Herunterschaltens im Leerlauf. Neben der Standardmäßigen Benutzersteuerung des Geräte-Leerlauf- und Aktivierungsverhaltens , das für alle WDF-Geräte verfügbar ist, ermöglicht NetAdapterCx zusätzliche netzwerkspezifische Leerlaufsteuerung über *IdleRestriction , wie in standardisierten INF-Schlüsselwörtern für die Energieverwaltung definiert.
Wenn sich das Netzwerkgerät im Dx-Zustand befindet, kann es ein Aktivierungssignal auslösen, wenn eine vorkonfigurierte Aktivierungsbedingung aufgetreten ist.
Ausführliche Informationen dazu, wie ein WDF-Gerät das System aus einem systemweiten Energiesparzustand reaktivieren kann, finden Sie unter Unterstützung der Systemreaktivierung.
NetAdapterCx stellt APIs für den Clienttreiber bereit, um zu deklarieren, für welche Netzwerkereignisse seine Hardware Aktivierungsunterstützung hat. Weitere Informationen finden Sie unter Festlegen der Energiefunktionen des Netzwerkadapters.
Wenn sich das Netzwerkgerät im Dx-Zustand befindet, kann es weiterhin auf einige häufig verwendete Netzwerkanforderungen reagieren, um die Anwesenheit des Hostsystems im Netzwerk aufrechtzuerhalten, ohne das Hostsystem zu aktivieren. Weitere Informationen finden Sie unter Festlegen der Energiefunktionen des Netzwerkadapters.
Festlegen der Energiefunktionen des Netzwerkadapters
Nach dem Konfigurieren der WDF-Energieverwaltungsfunktion besteht der nächste Schritt darin, die Energiefunktionen des Netzwerkadapters festzulegen. Energiefunktionen sind in zwei Kategorien unterteilt: Low Power Protocol Offload-Funktionen und Aktivierungsfunktionen.
Low Power Protocol Offload-Funktionen
Hintergrundinformationen dazu, wie der Windows-Netzwerkstapel diese Funktion nutzt, finden Sie unter Protokollauslagerungen für die NDIS-Energieverwaltung.
Clienttreiber legen ihre Protokollauslagerungsfunktionen mit geringer Leistung fest, indem sie die folgenden Methoden aufrufen, die für ihre Hardware geeignet sind:
Aktivierungsfunktionen
Clienttreiber rufen eine der folgenden Methoden auf, um die Aktivierungsfunktionen festzulegen, die ihre Hardware unterstützt, wenn sich das Gerät im Energiesparmodus (Dx) befindet:
- NetAdapterWakeSetBitmapCapabilities
- NetAdapterWakeSetMagicPacketCapabilities
- NetAdapterWakeSetMediaChangeCapabilities
- NetAdapterWakeSetPacketFilterCapabilities
Stromverbrauch und Wartezeit fortsetzen
Wenn sich das Netzwerkgerät in Dx befindet, verbraucht es weiterhin Strom, um das Auslagern und Die Aktivierung durchzuführen. Nachdem das Gerät die Aktivierung von Dx initiiert hat, gibt es eine Verzögerung, bevor das Gerät Pakete erneut übertragen kann. Je tiefer der interne Energiezustand des Geräts ist, desto weniger Strom verbraucht es in Dx, aber desto länger ist die Wartezeit für das Fortsetzen.
In der folgenden Tabelle werden die allgemeinen Richtlinien für den Kompromiss zwischen Stromverbrauch und Wiederaufnahmelatenz für jede Aktivierungsfunktion beschrieben.
Wichtig
Einige Informationen beziehen sich auf vorab freigegebene Produkte, die vor der kommerziellen Freigabe wesentlich geändert werden können. Microsoft übernimmt keine ausdrücklichen oder stillschweigenden Gewährleistungen in Bezug auf die bereitgestellten Informationen. Weitere Informationen zu einem bestimmten Gerätetyp finden Sie in der medienspezifischen Dokumentation und im Windows Hardware Compatibility Program (WHCP).
Aktivierungsfunktion | Aktivierungsereignisse | Stromverbrauch | Latenz fortsetzen |
---|---|---|---|
PacketFilter | Jedes Paket stimmt mit konfigurierten ReceivePacketFilter überein. | Sollte niedriger sein als in D0, und das Gerät muss in einem geeigneten Zustand gehalten werden, damit die Wartezeit für das Fortsetzen sehr gering ist. | <= 10 ms |
Bitmap | Jedes Paket entspricht dem konfigurierten Bitmapmuster. | Sollte niedriger sein als bei der Bewaffnung für PacketFilter, da es mehr Spielraum bei der Latenz für die Fortsetzung hat | <= 300 ms |
MagicPacket | Magic Packet | Ähnlich wie Bitmap | <= 300 ms |
MediaChange | Verbundene oder getrennte Medien | Ähnlich wie Bitmap | <= 300 ms |
Im folgenden Beispiel wird veranschaulicht, wie ein Clienttreiber seine Energiefunktionen initialisieren kann. Dies erfolgt beim Starten des Netzadapters, aber vor dem Aufruf von NetAdapterStart. In diesem Beispiel legt der Clienttreiber seine Bitmap-, Medienänderungs- und Paketfilterreaktivierungsfunktionen fest.
//
// 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);
}
Der Client kann optional EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD registrieren und Rückruffunktionen EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE , um eingehende Protokollauslagerungen und Aktivierungsmuster zu akzeptieren oder abzulehnen.
Programmierung von Protokollstromabladungs- und Aktivierungsmustern
Während der Herunterschaltsequenz des Geräts durchläuft der Treiber die aktivierten Aktivierungsmuster und protokollbasierten Stromabladungen und programmiert sie in die Hardware. Der Treiber führt dies in seinen Rückruffunktionen EvtDeviceArmWakeFromS0 und EvtDeviceArmWakeFromSx aus.
Das folgende Beispiel zeigt, wie ein Clienttreiber die Aktivierungsmusterliste durchlaufen kann, um nach einem Aktivierungseintrag für magic-Pakete zu suchen und dann die Stromabladungsliste zu durchlaufen, um die IPv4-ARP-Protokollauslagerung zu verarbeiten:
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;
}
Auf dem Weg zurück zu hoher Leistung deaktiviert der Treiber normalerweise die zuvor programmierten Protokollauslagerungen und Aktivierungsmuster in den entsprechenden Rückrufen EvtDeviceDisarmWakeFromSx und EvtDeviceDisarmWakeFromS0 .
Melden von Aktivierungsgrund
Wichtig
Es ist obligatorisch, dass Clienttreiber den Aktivierungsgrund an NetAdapterCx melden.
Wenn die NIC-Hardware das System reaktiviert, muss der Clienttreiber netAdapterCx melden, welche Aktivierungsquelle die Aktivierung ausgelöst hat. Für die meisten Aktivierungsquellen verwenden Treiber die NET_ADAPTER_WAKE_REASON_PACKET-Struktur , um das Netzwerkpaket zu beschreiben, das die Aktivierung ausgelöst hat.
Wenn die NET_WAKE_SOURCE_TYPE wie folgt lautet:
NetWakeSourceTypeBitmapPattern, rufen Sie NET_ADAPTER_WAKE_REASON_PACKET_INIT auf, um die NET_ADAPTER_WAKE_REASON_PACKET-Struktur zu initialisieren. Rufen Sie NetAdapterReportWakeReasonPacket auf, um diesen Aktivierungsgrund zu melden.
NetWakeSourceTypeMagicPacket, rufen Sie NET_ADAPTER_WAKE_REASON_MAGIC_PACKET_INIT auf, um die NET_ADAPTER_WAKE_REASON_PACKET-Struktur zu initialisieren. Rufen Sie NetAdapterReportWakeReasonPacket auf, um diesen Aktivierungsgrund zu melden.
NetWakeSourceTypePacketFilterMatch, rufen Sie NET_ADAPTER_WAKE_REASON_FILTER_PACKET_INIT auf, um die NET_ADAPTER_WAKE_REASON_PACKET-Struktur zu initialisieren. Rufen Sie NetAdapterReportWakeReasonPacket auf, um diesen Aktivierungsgrund zu melden.
NetWakeSourceTypeMediaChange, rufen Sie NetAdapterReportWakeReasonMediaChange auf , um diesen Aktivierungsgrund zu melden.
Energieverwaltungsszenarien für modernes Standbysystem
Wichtig
Für die Moderne Standby-Plattform muss der Netzwerkgerätetreiber:
- Rufen Sie WdfDeviceInitSetPnpPowerEventCallbacks auf, um Energierückrufe zu registrieren.
- Rufen Sie WdfDeviceAssignS0IdleSettings auf, um den Leerlauf von Geräten zu unterstützen, wenn sich das System im Betriebszustand (S0) befindet.
- Rufen Sie WdfDeviceInitSetPowerPolicyEventCallbacks auf, um Reaktivierungsrückrufe zu registrieren.
- Unterstützung von Low Power Protocol Offload-Funktionen , die für den Gerätetyp geeignet sind.
- Unterstützung von Aktivierungsfunktionen , die für den Gerätetyp geeignet sind.
Die vollständigen Modern Standby-Anforderungen für Ihren Gerätetyp finden Sie in der medienspezifischen Dokumentation und in WHCP.
Das Betriebssystem ist für die Energierichtlinienentscheidungen des Netzwerkgeräts verantwortlich. Beispielsweise steuert das Betriebssystem, wann ein Gerät zu Dx wechseln muss und welche Arten von Netzwerkereignissen das Gerät reaktivieren soll. Der Gerätetreiber ist dafür verantwortlich, die Energieübergangssequenz auf Anforderung des Betriebssystems zuverlässig auszuführen und dann seine Hardware für die vom Betriebssystem festgelegte Aktivierungsbedingung ordnungsgemäß zu programmieren.
Das Betriebssystem trifft Energierichtlinienentscheidungen basierend auf einer Vielzahl von Faktoren, einschließlich systemweiter Energierichtlinien und Benutzerauswahl. Im Folgenden finden Sie einige allgemeine Energierichtlinien, die für Netzwerkgeräte in einem modernen Standbysystem verwendet werden:
Wichtig
Diese Energierichtlinien können sich mit Betriebssystemupdates ändern, und die folgenden Informationen werden als Beispiel bereitgestellt. Abhängigkeiten vom spezifischen End-to-End-Verhalten des Betriebssystems sollten vermieden werden.
Wenn der PC-Bildschirm eingeschaltet ist und sich das Netzwerkgerät im Leerlauf befindet, fordert das Betriebssystem das Gerät auf, zu Dx zu wechseln, und stellt es für PacketFilter und MediaChange Wake bereit.
Wenn der PC in den modernen Standbymodus wechselt und sich das Netzwerkgerät im Leerlauf befindet, fordert das Betriebssystem die NIC auf, zu Dx zu wechseln und die Aktivierung für Bitmap, MediaChange und Magic Packet zu aktivieren.
Wenn der PC in den Ruhezustand wechselt, fordert das Betriebssystem die NIC auf, zu Dx zu wechseln und für die Magic Packet-Aktivierung zu starten.
Hinweis: NetAdapterCx-Clienttreiber steuern die Sichtbarkeit der Registerkarte Energieverwaltung. Weitere Informationen finden Sie unter Benutzersteuerung des Geräte-Leerlauf- und Aktivierungsverhaltens.