Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
À compter de Windows 8.1, les pilotes peuvent utiliser des minuteurs sans éveil pour éviter inutilement de réveiller inutilement un processeur à partir d’un état de faible alimentation. En conservant le processeur dans un état à faible alimentation, un minuteur sans éveil réduit la consommation d’alimentation et étend le temps qu’une tablette ou un autre ordinateur mobile peut exécuter sur une charge de batterie.
Un minuteur peut expirer uniquement lorsque le processeur est dans un état actif et en cours d’exécution. Si un minuteur atteint son heure d’expiration lorsque le processeur est dans un état de faible alimentation et que le minuteur doit expirer immédiatement, le minuteur doit réveiller le processeur. Toutefois, lorsqu’un minuteur sans éveil atteint son heure d’expiration et que le processeur est dans un état à faible alimentation, ce minuteur attend d’expirer jusqu’à ce que le processeur se réveille pour une raison autre que le minuteur. En option, un pilote peut spécifier une tolérance de délai maximale pour un minuteur de non-réveil afin que, si le processeur ne se réveille pas (pour une autre raison) dans le délai de tolérance maximum après le délai d’expiration du minuteur, le minuteur réveille le processeur.
Un pilote peut utiliser un minuteur sans éveil pour lancer des opérations non critiques qui doivent être effectuées uniquement lorsque le processeur est dans un état actif. Par exemple, un pilote peut utiliser un minuteur de veille pour vider régulièrement les informations d’état accumulées d’une mémoire tampon dans un fichier. Ces informations d’état décrivent le travail de traitement que le pilote effectue uniquement lorsque le processeur est actif. Lorsque le processeur est dans un état à faible alimentation, aucune information d’état n’est générée et il n’est pas nécessaire de réveiller le processeur.
Pour créer un minuteur sans éveil, un pilote WDM appelle la routine ExAllocateTimer . Dans cet appel, le pilote définit le bit d’indicateur EX_TIMER_NO_WAKE dans le paramètre Attributes .
Pour définir un minuteur sans veille à expirer à un moment donné, le pilote appelle la routine ExSetTimer . Dans cet appel, le pilote peut spécifier la durée pendant laquelle le minuteur sans réveil doit attendre une fois qu’il atteint son heure d’expiration avant que le minuteur ne réveille le processeur. Le pilote écrit ce délai tolérable au membre NoWakeTolerance dans la structure EXT_SET_PARAMETERS que le pilote passe en tant que paramètre d’entrée à la routine ExSetTimer . Si le pilote définit le membre NoWakeTolerance sur la valeur spéciale EX_TIMER_UNLIMITED_TOLERANCE, le minuteur ne réveille jamais le processeur et, par conséquent, ne peut pas expirer tant que le processeur ne se réveille pas pour une autre raison.
Un pilote utilisant le Kernel-Mode Driver Framework (KMDF) ou le User-Mode Driver Framework (UMDF) peut appeler la méthode WdfTimerCreate pour créer un minuteur non réveil. Dans cet appel, le pilote transmet un pointeur à une structure WDF_TIMER_CONFIG en tant que paramètre. Pour créer un minuteur sans éveil qui ne réveille jamais le processeur, le pilote définit le membre IntolérableDelay de cette structure sur la constante IntolérableDelayUnlimited . Cette constante est prise en charge à partir de Windows 8.1 et KMDF version 1.13 ou UMDF 2.0.
Comparaison des minuteurs fusionnables
La routine KeSetCoalescableTimer a été introduite dans Windows 7. Cette routine permet à un pilote de spécifier la tolérance à autoriser dans le délai d’expiration d’un minuteur. Souvent, le système d’exploitation peut utiliser ces informations pour fusionner deux interruptions de minuteur ou plus en une seule interruption. Si les délais d’expiration de plusieurs minuteurs sont suffisamment proches les uns des autres que leurs fenêtres de tolérance se chevauchent, une seule interruption du minuteur dans la région de chevauchement peut satisfaire aux exigences de minutage de tous ces minuteurs.
Le principal avantage de la coalescence des temporisateurs est qu'elle prolonge le temps pendant lequel le processeur peut rester dans un état de faible puissance entre les expirations des temporisateurs. Ainsi, les pilotes utilisent la fusion du minuteur et les minuteurs sans éveil à des fins similaires.
Toutefois, les minuteurs fusionnables se comportent différemment des minuteurs sans réveil. En particulier, le délai tolérable spécifié pour un minuteur sans éveil s’applique uniquement lorsque le processeur est dans un état de faible puissance, tandis que la tolérance spécifiée pour l’expiration d’un minuteur pouvant être fusionné s’applique, que le processeur soit dans un état de faible puissance. Pour un minuteur coalescable, un pilote peut augmenter la quantité de tolérance dans le temps d’expiration afin de réduire la probabilité que le minuteur réveille le processeur, mais l’augmentation de la tolérance a l’effet secondaire de la diminution de la précision du minuteur lorsque le processeur est actif. En revanche, le délai tolérable spécifié pour un minuteur sans éveil n’affecte pas la précision du minuteur lorsque le processeur est actif. Pour de nombreux pilotes, les minuteurs sans éveil peuvent être un meilleur moyen de réduire la consommation d’énergie.