Article de reference

Minuterie d'événements de haute précision

Le High Precision Event Timer ( HPET ) est un temporisateur matériel disponible dans les ordinateurs personnels modernes compatibles x86 . Par rapport aux anciens types de tempo...

Le High Precision Event Timer ( HPET ) est un temporisateur matériel disponible dans les ordinateurs personnels modernes compatibles x86 . Par rapport aux anciens types de temporisateurs disponibles dans l'architecture x86, HPET permet un traitement plus efficace des applications très sensibles au temps, telles que la lecture multimédia et le changement de tâches du système d'exploitation . Il a été développé conjointement par Intel et Microsoft et est intégré aux chipsets PC depuis 2005. Autrefois appelé par Intel « Multimedia Timer » , le terme HPET a été choisi pour éviter toute confusion avec les temporisateurs multimédias logiciels introduits dans les extensions multimédia de Windows 3.0 .

Les systèmes d'exploitation plus anciens qui ne prennent pas en charge un périphérique HPET matériel ne peuvent utiliser que des fonctions de synchronisation plus anciennes, telles que le temporisateur d'intervalles programmable (PIT) ou l' horloge en temps réel (RTC). Windows XP , lorsqu'il est équipé de la dernière couche d'abstraction matérielle (HAL), peut également utiliser le compteur d'horodatage (TSC) du processeur ou le temporisateur de gestion de l'alimentation ACPI (ACPI PMTIMER), avec l'horloge RTC pour fournir des fonctionnalités du système d'exploitation qui, dans les versions ultérieures de Windows, seraient fournies par le matériel HPET. Il est déroutant de constater que ces systèmes Windows XP citent la connectivité « HPET » dans le gestionnaire de pilotes de périphériques même si le périphérique Intel HPET n'est pas utilisé.

Caractéristiques

Une puce HPET se compose d'un compteur ascendant de 64 bits (compteur principal) comptant à une fréquence d'au moins 10 MHz et d'un ensemble de comparateurs (au moins trois, jusqu'à 256). Ces comparateurs ont une largeur de 32 ou 64 bits. Le HPET est programmé via une fenêtre d'E/S mappée en mémoire qui est détectable via ACPI . Le circuit HPET des PC modernes est intégré dans la puce du pont sud .

Chaque comparateur peut générer une interruption lorsque les bits les moins significatifs sont égaux aux bits correspondants de la valeur du compteur principal de 64 bits. Les comparateurs peuvent être mis en mode monocoup ou en mode périodique, avec au moins un comparateur prenant en charge le mode périodique et tous prenant en charge le mode monocoup. En mode monocoup, le comparateur déclenche une interruption une fois lorsque le compteur principal atteint la valeur stockée dans le registre du comparateur, tandis qu'en mode périodique, les interruptions sont générées à des intervalles spécifiés.

Les comparateurs peuvent être pilotés par le système d'exploitation, par exemple pour fournir un temporisateur par CPU pour la planification, ou par des applications.

Applications

Le HPET peut produire des interruptions périodiques à une résolution bien supérieure à celle du RTC et est souvent utilisé pour synchroniser les flux multimédias, offrant une lecture fluide et réduisant le besoin d'utiliser d'autres calculs d'horodatage tels que les instructions d'un processeur basé sur x86RDTSC . Cela améliore l'efficacité, car le processeur n'a pas besoin de gaspiller des cycles pour compenser la faible résolution des temporisateurs, et permet une utilisation plus agressive des états de veille , réduisant ainsi la consommation d'énergie. En plus de la demande au niveau de l'application pour une horloge de haute précision, il existe des avantages au niveau du système d'exploitation dans le planificateur et grâce à la disponibilité d'une base d'horloge stable pour les systèmes multiprocesseurs .

Comparaison avec les prédécesseurs

Le HPET est destiné à compléter et à remplacer le temporisateur d'intervalle programmable 8254 et la fonction d'interruption périodique du RTC. Par rapport à ces anciens circuits de temporisation, le HPET a une fréquence plus élevée et des compteurs 64 bits plus larges (bien qu'ils puissent être pilotés en mode 32 bits).

La spécification HPET ne définit pas la fréquence du temporisateur, exigeant seulement un minimum de 10 MHz ; la fréquence réelle est fournie au système d'exploitation par un registre matériel donnant le nombre de femtosecondes par période (avec une limite supérieure de100 000 000 fs ). Une valeur courante est 14,3 18 MHz, soit 12 fois la fréquence standard 8254 de 1,193 18 MHz.

Bien que les 8254 et RTC puissent être mis en mode one-shot de type HPET, le processus de configuration est si lent que leur mode one-shot n'est pas utilisé en pratique pour les tâches nécessitant une planification précise. Au lieu de cela, les 8254 et RTC sont généralement utilisés en mode périodique avec un intervalle de temps très court. Par exemple, si une application doit effectuer plusieurs courtes attentes (quelques millisecondes, peut-être), il est préférable d'avoir un temporisateur périodique fonctionnant en permanence avec une période de 1 ms en raison du coût de configuration élevé d'un temporisateur one-shot 8254 ou RTC. Cela provoque une interruption toutes les millisecondes même si l'application doit effectuer un travail réel moins fréquemment. Avec HPET, les interruptions supplémentaires peuvent être évitées, car le coût de configuration d'un temporisateur one-shot HPET est considérablement plus faible.

Utilisation et compatibilité

Un journal de démarrage Linux montrant le passage de HPET à TSC comme source d'horloge système

Les systèmes d'exploitation conçus avant l'existence de HPET ne peuvent pas utiliser HPET, ils utilisent donc d'autres fonctions de temporisation. Les systèmes d'exploitation plus récents ont tendance à pouvoir utiliser l'un ou l'autre. Certains matériels disposent des deux. En effet, la plupart des puces de pont sud actuelles ont des instances de PIT, PIC, Advanced Programmable Interrupt Controller (APIC) et de dispositifs RTC prenant en charge les anciens systèmes d'exploitation, qu'ils soient ou non utilisés par le système d'exploitation, ce qui permet aux PC très modernes d'exécuter des systèmes d'exploitation plus anciens.

Les systèmes d'exploitation suivants ne sont pas connus pour pouvoir utiliser HPET : Windows XP SP1, et les versions antérieures de Windows , les noyaux Linux antérieurs à 2.6.

Les systèmes d'exploitation suivants sont connus pour pouvoir utiliser HPET : Windows XP SP3, Windows Server 2003 SP2 , Windows Server 2008 , Windows Server 2008 R2 , Windows Vista , Windows 7 , les versions x86 d' OS X , les systèmes d'exploitation Linux utilisant le noyau 2.6 (ou version ultérieure), FreeBSD et OpenSolaris .

Le noyau Linux peut également utiliser HPET comme source d'horloge. La documentation de Red Hat MRG version 2 indique que TSC est la source d'horloge préférée en raison de sa charge beaucoup plus faible, mais il utilise HPET comme solution de secours. Un test de référence dans cet environnement pour 10 millions d'événements a révélé que TSC prenait environ 0,6 seconde, HPET prenait un peu plus de 12 secondes et ACPI Power Management Timer prenait environ 24 secondes.

En 2019, il a été décidé de mettre sur liste noire HPET dans les noyaux Linux plus récents lors de l'exécution sur certains processeurs Intel ( Coffee Lake ) en raison de son instabilité.

Problèmes

HPET est un minuteur fonctionnant en continu qui compte vers le haut, et non un dispositif à un coup qui compte à rebours jusqu'à zéro, provoque une interruption puis s'arrête. Étant donné que HPET compare la valeur réelle du minuteur et la valeur cible programmée sur l'égalité plutôt que sur « supérieure ou égale », des interruptions peuvent être manquées si le temps cible est déjà passé lorsque la valeur du comparateur est écrite dans le registre de la puce. Dans un tel cas, non seulement l'interruption prévue est manquée, mais elle est en fait définie très loin dans le futur (environ 2 32 ou 2 64 comptages). En présence d' interruptions non masquables (telles qu'une interruption de gestion du système (SMI)) qui n'ont pas de limite supérieure stricte sur leur temps d'exécution, cette condition de concurrence nécessite de longues vérifications du minuteur après la configuration et est difficile à éviter complètement. Les difficultés sont exacerbées si la valeur du comparateur n'est pas synchronisée immédiatement avec le minuteur, mais retardée d'un ou deux ticks, comme le font certains chipsets.

Outre la mention de la condition de concurrence évoquée ci-dessus, un document VMware énumère également d'autres inconvénients : « La spécification n'exige pas que le compteur soit particulièrement précis, qu'il ait une faible dérive ou qu'il soit rapide à lire. Certaines implémentations typiques font tourner le compteur à environ 18 MHz et nécessitent à peu près le même temps (1 à 2 μs) pour lire le HPET qu'avec le compteur ACPI. Des implémentations ont été observées dans lesquelles le registre de période est décalé de 800 parties par million ou plus. »

Remarques

Original text
Rate this translation
Your feedback will be used to help improve Google Translate