Hochpräziser Ereignis-Timer - High Precision Event Timer

Der High Precision Event Timer ( HPET ) ist ein Hardware- Timer, der in PCs verwendet wird . Es wurde gemeinsam von Intel und Microsoft entwickelt und ist seit 2005 in PC-Chipsätzen integriert . Früher von Intel als Multimedia Timer bezeichnet , wurde der Begriff HPET gewählt, um eine Verwechslung mit den Software-Multimedia-Timern zu vermeiden, die in den MultiMedia Extensions zu Windows 3.0 eingeführt wurden .

Ältere Betriebssysteme , die kein Hardware-HPET-Gerät unterstützen, können nur ältere Zeitfunktionen wie den programmierbaren Intervall-Timer (PIT) oder die Echtzeituhr (RTC) verwenden. Windows XP , wenn sie mit der neuesten ausgestatteter Hardware Abstraction Layer (HAL), kann auch den Prozessor verwenden Time Stamp Counter (TSC) oder ACPI Power Management Timer (ACPI PMTimer) zusammen mit der RTC - Betriebssystem zu schaffen , bietet das wäre, in neuere Windows-Versionen von der HPET-Hardware bereitgestellt werden. Verwirrenderweise geben solche Windows XP-Systeme im Gerätetreiber-Manager "HPET"-Konnektivität an, obwohl das Intel HPET-Gerät nicht verwendet wird.

Merkmale

Ein HPET-Chip besteht aus einem 64-Bit- Aufwärtszähler (Hauptzähler), der mit einer Frequenz von mindestens 10 MHz zählt, und einem Satz (mindestens drei, bis zu 256) Komparatoren. Diese Komparatoren sind 32 oder 64 Bit breit. Der HPET wird über ein speicherabgebildetes E/A- Fenster programmiert , das über Advanced Configuration and Power Interface (ACPI) auffindbar ist. Die HPET-Schaltung moderner PCs ist in den Southbridge-Chip integriert .

Jeder Komparator kann eine Unterbrechung erzeugen , wenn die niedrigstwertigen Bits gleich den entsprechenden Bits des 64-Bit-Hauptzählerwerts sind. Die Komparatoren können in den One-Shot-Modus oder Periodic-Modus versetzt werden, wobei mindestens ein Komparator den Periodic-Modus unterstützt und alle den One-Shot-Modus unterstützen. Im One-Shot-Modus löst der Komparator einmal einen Interrupt aus, wenn der Hauptzähler den im Register des Komparators gespeicherten Wert erreicht, während im periodischen Modus die Interrupts in bestimmten Intervallen erzeugt werden.

Komparatoren können vom Betriebssystem angesteuert werden, zB um einen Timer pro CPU für die Zeitplanung bereitzustellen, oder von Anwendungen.

Anwendungen

Die HPET können periodische Unterbrechungen bei einer viel höheren Auflösung als der RTC erzeugen und oft zu synchronisieren Multimediaströmen verwendet wird, reibungslose Wiedergabe bereitstellt und reduziert die Notwendigkeit andere Zeitstempel - Berechnungen zu verwenden , wie beispielsweise eine X86-basiert CPU ‚s RDTSCAnweisung.

Vergleich zu Vorgängern

HPET soll den 8254 programmierbaren Intervalltimer und die periodische Interruptfunktion des RTC ergänzen und ersetzen . Im Vergleich zu diesen älteren Zeitgeberschaltungen hat der HPET eine höhere Frequenz und breitere 64-Bit-Zähler (obwohl sie im 32-Bit-Modus betrieben werden können).

Die HPET-Spezifikation definiert die Timer-Frequenz nicht, sondern erfordert nur ein Minimum von 10 MHz; die tatsächliche Frequenz wird dem Betriebssystem von einem Hardwareregister bereitgestellt, das die Anzahl der Femtosekunden pro Periode angibt (mit einer Obergrenze von100 000 000  fs ). Ein beliebter Wert ist 14,3 18  MHz, das 12-fache der Standardfrequenz von 8254 von 1,193 18  MHz.

Während 8254 und RTC kann in eine HPET artigen One-Shot - Modus, der Set-up - Prozess ist so langsam , dass ihr One-Shot - Modus wird nicht für Aufgaben , die genaue Zeitplanung in der Praxis angewandt werden darf. Stattdessen werden 8254 und RTC typischerweise im periodischen Modus mit einem sehr kleinen Zeitintervall verwendet. Wenn eine Anwendung beispielsweise mehrere kurze (vielleicht einige Millisekunden) Wartezeiten ausführen muss, ist es aufgrund der hohen Einrichtungskosten eines 8254- oder RTC-One-Shot-Timers besser, einen periodischen Timer konstant mit einer 1-ms-Periode laufen zu lassen. Dadurch wird jede Millisekunde ein Interrupt ausgelöst, auch wenn die Anwendung seltener tatsächlich arbeiten muss. Mit HPET können die zusätzlichen Interrupts vermieden werden, da die Einrichtungskosten eines HPET-One-Shot-Timers erheblich geringer sind.

Verwendung und Kompatibilität

Image
Ein Linux- Bootprotokoll, das den Wechsel von HPET zu TSC als Systemtaktquelle anzeigt

Betriebssysteme, die vor der Existenz von HPET entwickelt wurden, können HPET nicht verwenden, daher verwenden sie andere Zeitgeberfunktionen. Neuere Betriebssysteme sind in der Regel in der Lage, beides zu verwenden. Manche Hardware hat beides. Tatsächlich verfügen die meisten aktuellen Southbridge-Chips über Legacy-unterstützende Instanzen von PIT, PIC, Advanced Programmable Interrupt Controller (APIC) und RTC-Geräten, die in ihr Silizium integriert sind, unabhängig davon, ob sie vom Betriebssystem verwendet werden oder nicht, was sehr modernen PCs hilft, ältere Betriebssysteme auszuführen .

Die folgenden Betriebssysteme sind dafür bekannt , nicht der Lage sein , HPET zu verwenden: Windows XP SP1 und früheren Windows - Versionen, Linux - Kernel vor 2.6.

Die folgenden Betriebssysteme können HPET verwenden: Windows XP SP3, Windows Server 2003 SP2 , Windows Server 2008 , Windows Server 2008 R2 , Windows Vista , Windows 7 , x86-basierte Versionen von OS X , Linux- Betriebssysteme mit 2.6 Kernel (oder höher), FreeBSD und OpenSolaris .

Der Linux-Kernel kann auch HPET als Taktquelle verwenden . Die Dokumentation von Red Hat MRG Version 2 besagt, dass TSC aufgrund seines viel geringeren Overheads die bevorzugte Taktquelle ist, aber es verwendet HPET als Fallback. Ein Benchmark in dieser Umgebung für 10 Millionen Ereigniszählungen ergab, dass TSC etwa 0,6 Sekunden dauerte, HPET etwas mehr als 12 Sekunden und ACPI Power Management Timer etwa 24 Sekunden.

Im Jahr 2019 wurde beschlossen, HPET aufgrund seiner Instabilität in neueren Linux-Kerneln auf die schwarze Liste zu setzen, wenn es auf einigen Intel-CPUs ( Coffee Lake ) ausgeführt wird.

Probleme

HPET ist ein kontinuierlich laufender Timer, der aufwärts zählt, kein One-Shot-Gerät, das auf Null herunterzählt, einen Interrupt verursacht und dann stoppt. Da HPET den aktuellen Timer-Wert und den programmierten Zielwert auf Gleichheit und nicht auf "größer oder gleich" vergleicht, können beim Schreiben des Komparatorwerts in das Register des Chips Interrupts übersehen werden, wenn die Zielzeit bereits abgelaufen ist. In einem solchen Fall wird der beabsichtigte Interrupt nicht nur verpasst, sondern tatsächlich weit in die Zukunft gesetzt (etwa 2 32 oder 2 64 Zählungen). Bei nicht maskierbaren Interrupts (wie einem System Management Interrupt (SMI)), deren Ausführungszeit keine harte Obergrenze hat, erfordert diese Race Condition zeitaufwändige erneute Überprüfungen des Timers nach dem Setup und ist hart ganz zu vermeiden. Die Schwierigkeiten werden verschärft, wenn der Komparatorwert nicht sofort mit dem Timer synchronisiert wird, sondern um ein oder zwei Ticks verzögert wird, wie dies bei einigen Chipsätzen der Fall ist.

Neben der oben diskutierten Race-Condition listet ein VMware- Dokument auch einige andere Nachteile auf: „Die Spezifikation verlangt nicht, dass der Timer besonders feinkörnig ist, eine geringe Drift aufweist oder schnell gelesen werden kann. Einige typische Implementierungen führen den Zähler bei ungefähr 18 MHz und benötigen ungefähr die gleiche Zeit (1–2 μs) zum Lesen des HPET wie beim ACPI-Timer. Es wurden Implementierungen beobachtet, bei denen das Periodenregister um 800 Teile pro Million oder mehr aus ist."

Anmerkungen

Verweise