Der High Precision Event Timer ( HPET ) ist ein Hardware-Timer, der in Personalcomputern verwendet wird. Es wurde von Intel und Microsoft gemeinsam entwickelt und ist seit etwa 2005 in PC-Chipsätzen enthalten. Früher von Intel als Multimedia Timer [1] bezeichnet, wurde der Begriff HPET gewählt, um Verwechslungen mit den Multimedia-Timern zu vermeiden als Softwarefunktion, die in den MultiMedia-Erweiterungen für Windows 3.0 eingeführt wurde. [2]
Ältere Betriebssysteme, die kein Hardware-HPET-Gerät unterstützen, können nur ältere Timing-Funktionen verwenden, beispielsweise den programmierbaren Intervall-Timer (PIT) oder die Echtzeituhr ( RTC). Wenn Windows XP mit der neuesten Hardware-Abstraktionsschicht (HAL) ausgestattet ist, kann der Time Stamp Counter (TSC) oder Power Management Timer (PMTIMER) des Prozessors zusammen mit der RTC verwendet werden, um Betriebssystemfunktionen bereitzustellen, die in späteren Windows-Versionen verfügbar wären von der HPET-Hardware bereitgestellt werden. Verwirrenderweise geben solche Windows XP-Systeme "HPET" -Konnektivität im Gerätetreibermanager an, obwohl das Intel HPET-Gerät nicht verwendet wird.
Features [ edit ]
Ein HPET-Chip besteht aus einem 64-Bit-Vorwärtszähler (Hauptzähler), der bei einer Frequenz von mindestens 10 MHz zählt, und einem Satz von ( mindestens drei, bis zu 256) Komparatoren. Diese Komparatoren sind 32 oder 64 Bit breit. Das HPET wird über ein durch Speicher zugeordnetes E / A-Fenster programmiert, das über ACPI (Advanced Configuration and Power Interface) erkannt werden kann. Die HPET-Schaltung in modernen PCs ist in den Southbridge-Chip integriert. [a]
Jeder Komparator kann einen Interrupt erzeugen, wenn die niedrigstwertigen Bits den entsprechenden Bits des 64-Bit-Hauptzählerwerts entsprechen. Die Komparatoren können in den One-Shot-Modus oder den periodischen Modus versetzt werden, wobei mindestens ein Komparator den periodischen Modus und alle den One-Shot-Modus unterstützt. 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 durch das Betriebssystem angetrieben werden, z. einen Timer pro CPU für die Zeitplanung oder für Anwendungen bereitzustellen.
Applications [ edit ]
Das HPET kann periodische Interrupts mit einer viel höheren Auflösung als der RTC erzeugen. Es wird häufig zur Synchronisation von Multimedia-Streams verwendet und sorgt für eine reibungslose Wiedergabe Verwenden Sie andere Zeitstempelberechnungen, wie z. B. eine X86-basierte CPU RDTSC Anweisung.
Vergleich mit Vorgängern [ edit ]
Dieser Abschnitt muss erweitert werden mit: Vergleich mit LAPIC-Timer, ACPI-PM usw. Sie können helfen ( February 2014 ) |
HPET soll den programmierbaren Intervall-Timer 8254 und die periodische Interrupt-Funktion der RTC ergänzen und ersetzen. Im Vergleich zu diesen älteren Zeitgeberschaltungen weist das HPET eine höhere Frequenz und breitere 64-Bit-Zähler auf (obwohl sie im 32-Bit-Modus betrieben werden können). [1]
Die HPET-Spezifikation definiert nicht die Timerfrequenz, die nur ein Minimum von 10 MHz erfordert; Die tatsächliche Frequenz wird dem Betriebssystem durch ein Hardwareregister zur Verfügung gestellt, das die Anzahl der Femtosekunden pro Periode angibt (mit einer oberen Grenze von 100 000 000 fs . ). Ein populärer Wert ist 14,3 18 MHz, das 12-fache der Standardfrequenz von 8254 von 1,193 18 MHz.
Während 8254 und RTC in einen HPET-artigen One-Shot-Modus versetzt werden können, ist der Einrichtungsprozess so langsam, dass der One-Shot-Modus in der Praxis nicht für Aufgaben verwendet wird, die eine genaue Planung erfordern [3] Stattdessen werden 8254 und RTC typischerweise im periodischen Modus mit einem sehr kleinen Zeitintervall verwendet. Wenn beispielsweise eine Anwendung mehrere kurze Wartezeiten (einige Millisekunden) ausführen muss, ist es besser, einen periodischen Timer mit einer Dauer von 1 ms zu betreiben, da die Einrichtungskosten eines 8254- oder RTC-One-Shot-Timers sehr hoch sind. Dies führt zu einer Unterbrechung bei jeder Millisekunde, selbst wenn die Anwendung weniger häufig ihre eigentliche Arbeit erledigen muss. Mit HPET können zusätzliche Interrupts vermieden werden, da die Einrichtungskosten eines HPET-One-Shot-Timers erheblich geringer sind.
Verwendung und Kompatibilität [ edit ]
Betriebssysteme, die vor dem HPET-System entwickelt wurden, können kein HPET verwenden. Daher verwenden sie andere Timer-Funktionen. Neuere Betriebssysteme können in der Regel beide verwenden. Einige Hardware hat beides. Tatsächlich enthalten die meisten aktuellen Southbridge-Chips ältere Versionen von PIT, PIC, Advanced Programmable Interrupt Controller (APIC) und RTC-Geräten, die in das Silizium integriert sind, unabhängig davon, ob sie vom Betriebssystem verwendet werden oder nicht, wodurch sehr moderne PCs ältere Betriebssysteme ausführen können .
Die folgenden Betriebssysteme sind bekannt, nicht um HPET verwenden zu können:
Windows XP SP2, [b] Windows Server 2003 und frühere Windows-Versionen, Linux-Kernel vor 2.6. [c]
Es ist bekannt, dass die folgenden Betriebssysteme HPET verwenden können:
Windows XP SP3, [d] Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows 7, x 86-basierte Versionen von OS X Linux-Betriebssysteme mit dem 2.6-Kernel (oder höher), FreeBSD [19659029] und OpenSolaris [ Zitat benötigt ]
Der Linux-Kernel kann auch HPET als Taktquelle verwenden. Die Dokumentation von Red Hat MRG Version 2 besagt, dass TSC aufgrund seines geringeren Overheads die bevorzugte Taktquelle ist, HPET jedoch als Fallback verwendet. Ein Benchmark in dieser Umgebung für 10 Millionen Ereigniszählungen ergab, dass TSC etwa 0,6 Sekunden, HPET etwas mehr als 12 Sekunden und ACPI Power Management Timer etwa 24 Sekunden dauerte. [5]
Probleme [ edit ]
HPET ist ein kontinuierlich ablaufender 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 tatsächlichen Zeitgeberwert und den programmierten Zielwert auf Gleichheit anstelle von "größer oder gleich" vergleicht, können Interrupts übersehen werden, wenn die Zielzeit bereits verstrichen ist, wenn der Komparatorwert in das Register des Chips geschrieben wird. [6] In einem solchen In diesem Fall wird der beabsichtigte Interrupt nicht nur übersehen, sondern tatsächlich weit in die Zukunft versetzt (etwa 2 32 oder 2 64 ). [7] Bei Anwesenheit von nicht maskierbaren Interrupts (z. B. ein System Management Interrupt (SMI)), deren Ausführungszeit keine strengen Obergrenzen hat, erfordert diese Race-Bedingung zeitaufwändige Überprüfungen des Timers nach dem Setup und lässt sich nur schwer vermeiden. Die Schwierigkeiten werden noch 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. [6]
Abgesehen von der oben diskutierten Race-Bedingung, a Das VMware-Dokument listet auch einige andere Nachteile auf: "Die Spezifikation verlangt nicht, dass der Zeitgeber besonders feinkörnig ist, eine geringe Drift aufweist oder schnell zu lesen ist. Bei einigen typischen Implementierungen wird der Zähler bei etwa 18 MHz betrieben und benötigt etwa die gleiche Menge Zeit (1–2 μs) zum Ablesen des HPET wie beim ACPI-Timer. Es wurden Implementierungen beobachtet, bei denen das Periodenregister um 800 ppm oder mehr ausgeschaltet ist. "[7]
- ^ Auf diesen hochintegrierten Chips Das BIOS richtet das HPET häufig falsch in der ACPI ein und initialisiert es nur im Intel 8253-Modus. Wenn die ACPI nicht richtig eingerichtet ist, kann das Betriebssystem den HPET nicht auflisten. Die Entwickler von BIOS und Betriebssystemen sehen keinen Bedarf an Echtzeitunterstützung. Das HPET erfüllt also nur die hohen Anforderungen des Systems. Wenn das HPET im ACPI vom BIOS aus korrekt eingerichtet ist, sollte sich die ACPI-MMIO-Seite des ersten HPET-Chips bei 0xFED00000 und des zweiten HPET auf Seite 0xFED80000 befinden (weitere Informationen finden Sie in der Diskussion).
- ^ Windows XP, SP2 kennt den HPET-Timer (als Gerät mit PNP0103-Kennung). Bei Erkennung (z. B. auf einem Intel DQ45CB-Motherboard) zeigt der Geräte-Manager (START / EINSTELLUNGEN / CONTROL_PANEL / SYSTEM / DEVICE_MANAGER) das Gerät "High Precision Event Timer" im Zweig "System devices" an. Dieses Gerät hat jedoch keinen Treiber und wird überhaupt nicht verwendet.
- ^ Bei einem Linux-Kernel benötigen Sie den neueren RTC-CMOS-Gerätetreiber für Hardware-Taktgeber anstelle des ursprünglichen RTC-Treibers.
- ^ XP SP3 "emuliert" den Großteil der HPET-Spezifikation aus dem Jahr 2002, in Erwartung eines Geräts, das 2005 auf PCs für Windows Vista entwickelt wurde.
Der Begriff "High Precision Event Timer" wird dann im Treibermanager verwendet, um TSC- (Time-Stamp-Counter-) oder ACPI Power Management Timer- (PMTimer) -Zeitsysteme zu beschreiben, auch wenn das 15-MHz-Intel HPET-Gerät nicht verwendet wird.
Zwar verwenden nur Windows Vista und später Windows das physische Intel 15 MHz HPET, doch die Betriebssystemfunktionen, die das HPET erfüllen sollte, waren in Windows XP bereits weitgehend vorhanden, allerdings mit einer anderen Spezifikation (die von 2002 statt 2002) 2005) und damit mit eingeschränkter Leistungsfähigkeit.
In Bezug auf die physische Ausführung in Windows XP SP3 werden IRQ0 und IRQ8 bei Verwendung des ACPI-HAL (Version 5.1.2600.5512) normalerweise einem "High Precision Event Timer" zugeordnet, obwohl der Aufruf der QueryPerformanceFrequency-API einen mit der Bewertung verbundenen Wert zurückgibt Prozessortaktgeschwindigkeit (zum Beispiel 2,6 GHz) oder PMTIMER (3,579545 MHz) anstelle des Intel HPET-Spezifikationen von 15 MHz, den Sie mit Windows Vista erhalten würden. Diese Anomalie verfälscht das Wasser über das, was mit "HPET" auf solchen Systemen gemeint ist, in diesem Fall handelt es sich jedoch eindeutig nicht um das 15-MHz-Intel-Gerät. Beachten Sie, dass diese mit "HPET" durchgeführte IRQ-Zuordnung und die Nicht-HPET-Taktbeziehung sowohl auf Intel-Systemen als auch auf AMD-Systemen zu finden sind, unabhängig davon, ob sie die Boot-Überschreibung / USEPMTIMER verwenden.
Da die ursprüngliche Spezifikation für HPET (im Jahr 2002) einen Zähler mit hoher Auflösung fordert, der dann durch die Aufrufe von QueryPerformanceFrequency und QueryPerformanceCounter (bereits seit Windows 2000 verfügbar) verfügbar gemacht wird, kann die QueryPerformanceFrequency Aufschluss darüber geben, wie diese "hohe Präzision" funktioniert "Zähler wird tatsächlich bereitgestellt.
Ein hoher Wert (im Bereich von 1 GHz bis 4 GHz) impliziert den Time Stamp Counter (TSC) der CPU als Quelle. Die frühen Multi-Core-CPUs von AMD stellten ein Problem mit den von TSC abgeleiteten QueryPerformanceCounter-Werten fest, da sie durch Spreizspektrum- und Energieverwaltungsgeschwindigkeitsschwankungen beeinflusst werden könnten. Während dies in späteren Prozessorkonstruktionen schließlich dadurch gelöst wurde, dass der TSC-Takt vom CPU-Takt unabhängig gemacht wurde, wurde der PM-Timer auf ACPI-Systemen zur Wahlquelle der Wahl, da er / USEPMTIMER in der Windows-Datei BOOT.INI überschreiben musste, um seine Verwendung durchzusetzen.
Auf Intel- und AMD-Computern, die ACPI HAL zusammen mit dem / USEPMTIMER-Boot-Switch verwenden, melden die IRQs 0 und 8 immer noch ein HPET, aber jetzt gibt QueryPerformanceFrequency 3,579545 MHz aus. Dies ist die Frequenz des PMTIMER. Dies hat den ausdrücklichen Vorteil, unabhängig von der CPU-Frequenz zu sein, und bietet dennoch eine sehr vernünftige Auflösung und Genauigkeit im Mikrosekundenbereich.
Ironischerweise können die sehr hohen Zählraten, die bei TSC-Mechanismen (im Vergleich zu PMTIMER oder dem Intel HPET-Gerät) erzielt werden, das Problem verursachen, dass die messbaren Zeitintervalle zu kurz sind: Es gibt eine Obergrenze für die Nützlichkeit eines Zählers, der früh überläuft. Es kann auch ein Ärgernis sein, dass die ständig steigende Prozessorgeschwindigkeit neuerer Prozessorkonzepte diese nutzbare Zeitspanne noch kürzer macht. Es ist daher nicht überraschend, dass PMTIMER- und Intel HPET-Systeme eine klar festgelegte feste Rate verwenden, die gezielt auf Auflösungen im Submikrosekundenbereich abzielt, sodass sie länger messen können, als dies mit TSC möglich ist.
Mit oder ohne / PMTIMER-Schalter kann der "event" -Teil der HPET-Spezifikation nur unter Verwendung einer anderen Timing-Quelle emuliert werden, da weder eine zugrunde liegende TSC- noch eine PMTIMER-Lösung implizite Hardware für die Triggerung perperiodischer Ereignisse enthält, wie in der Spezifikation beschrieben, und Dies ist jedoch über die Timer-API in Windows XP verfügbar (mit einer bestmöglichen Auflösung von 0,9766 ms, wenn die API-Aufrufe timeBeginPeriod - timeEndPeriod verwendet werden). Diesen Teil der Spezifikation erfüllt das RTC-Gerät immer noch mit Hilfe einer Software, obwohl der Gerätemanager HPET in den Positionen IRQ0 und IRQ8 zitiert.
Không có nhận xét nào:
Đăng nhận xét