Delen via


No-Wake timers

Vanaf Windows 8.1 kunnen stuurprogramma's zogenaamde 'no-wake timers' gebruiken om te voorkomen dat een processor onnodig uit een laag energieverbruik wordt gehaald. Door de processor in een lage energiestatus te houden, vermindert een no-wake timer het energieverbruik en verlengt het de tijd dat een tablet of andere mobiele computer kan werken op een acculading.

Een timer kan alleen verlopen wanneer de processor in een actieve toestand is. Als een timer de verlooptijd bereikt wanneer de processor een lage energiestatus heeft en de timer onmiddellijk moet verlopen, moet de timer de processor wakker maken. Wanneer een no-wake timer echter de verlooptijd bereikt en de processor een lage energiestatus heeft, wacht deze timer totdat de processor om een andere reden dan de timer wordt geactiveerd. Als optie kan een stuurprogramma een maximale vertragingstolerantie voor een no-wake timer opgeven, zodat als de processor niet wordt geactiveerd (om een andere reden) binnen de maximale vertragingstolerantie na de verlooptijd van de timer, de timer de processor ontwaakt.

Een besturingsprogramma kan een niet-actieve timer gebruiken om bewerkingen te starten die alleen moeten worden uitgevoerd wanneer de processor actief is. Een stuurprogramma kan bijvoorbeeld een no-wake timer gebruiken om opgeslagen statusinformatie van een geheugenbuffer periodiek naar een bestand te schrijven. Deze statusinformatie beschrijft het verwerken van werk dat het stuurprogramma alleen uitvoert wanneer de processor actief is. Wanneer de processor een lage energiestatus heeft, wordt er geen statusinformatie gegenereerd en hoeft de processor niet te worden geactiveerd.

Om een no-wake timer te maken, roept een WDM-stuurprogramma de ExAllocateTimer-routine aan. In deze aanroep stelt het stuurprogramma het EX_TIMER_NO_WAKE vlagbit in via de parameter Kenmerken.

Het stuurprogramma roept de ExSetTimer-routine aan om een geen wake-timer in te stellen die op een bepaald tijdstip verloopt. In dit gesprek kan het stuurprogramma opgeven hoe lang de no-wake timer moet wachten nadat deze de verlooptijd heeft bereikt voordat de timer de processor ontwaakt. De bestuurder schrijft deze toelaatbare vertragingstijd naar het NoWakeTolerance-lid in de EXT_SET_PARAMETERS structuur die het stuurprogramma als invoerparameter doorgeeft aan de ExSetTimer-routine . Als de bestuurder het lid NoWakeTolerance instelt op de speciale waarde EX_TIMER_UNLIMITED_TOLERANCE, wordt de processor nooit geactiveerd en kan de timer dus pas verlopen als de processor om een andere reden wakker wordt.

Een Kernel-Mode Driver Framework -stuurprogramma (KMDF) of User-Mode Driver Framework -stuurprogramma (UMDF) kan de WdfTimerCreate-methode aanroepen om een no-wake timer te maken. In deze aanroep geeft het stuurprogramma een aanwijzer door aan een WDF_TIMER_CONFIG structuur als parameter. Als u een no-wake timer wilt maken die de processor nooit ontwaakt, stelt het stuurprogramma het tolerableDelay-lid van deze structuur in op de constante TolerableDelayUnlimited . Deze constante wordt ondersteund vanaf Windows 8.1 en KMDF versie 1.13 of UMDF 2.0.

Vergelijking met samenvoegbare timers

De KeSetCoalescableTimer-routine is geïntroduceerd in Windows 7. Met deze routine kan een stuurprogramma opgeven hoeveel tolerantie moet worden toegestaan in de verlooptijd van een timer. Vaak kan het besturingssysteem deze informatie gebruiken om twee of meer timeronderbreken te samenvoegen tot één interrupt. Als de verlooptijden van meerdere timers dicht bij elkaar liggen dat hun tolerantievensters overlappen, kan één timeronderbreker in het overlappingsgebied voldoen aan de timingvereisten van al deze timers.

Het belangrijkste voordeel van timersamenstrekken is dat het de tijd verlengt dat de processor in een status met weinig vermogen kan blijven tussen het verlopen van timers. Stuurprogramma's maken dus gebruik van timercoalescing en non-wake-timers voor vergelijkbare doeleinden.

Timers die kunnen worden samengevoegd gedragen zich echter anders dan no-wake timers. Met name geldt de toegestane vertraging die is opgegeven voor een no-wake timer alleen wanneer de processor zich in een lage-energiestatus bevindt, terwijl de tolerantie die is opgegeven voor het verlopen van een samenvoegbare timer van toepassing is, ongeacht of de processor in een lage-energiestatus is. Voor een samenschakelbare timer kan een stuurprogramma de hoeveelheid tolerantie in de verlooptijd verhogen om de kans te verminderen dat de timer de processor ontwaakt, maar het vergroten van de tolerantie heeft het neveneffect van het verlagen van de nauwkeurigheid van de timer wanneer de processor actief is. De opgegeven vertraging voor een no-wake timer heeft daarentegen geen invloed op de nauwkeurigheid van de timer wanneer de processor actief is. Voor veel bestuurders zijn no-wake timers een betere manier om energieverbruik te verminderen.