高精度事件計時器(英語:High Precision Event Timer,縮寫HPET),也稱高精度事件定時器,它是個人電腦中使用的一種硬件計時器,由英特爾(Intel)與微軟共同開發,並自2005年以來已被納入晶片組

使用不支援硬件HPET的舊款作業系統的裝置只能使用舊型號計時裝置,例如可程式化間隔計時器英語Programmable interval timer(PIT)或實時時鐘(RTC)。當Windows XP配有最新的硬件抽象層(HAL)時,也可以使用處理器的時間戳控制器英語Time Stamp Counter(TSC)或電源管理計時器英語Power Management Timer(PMTIMER),從而與RTC一起提供作業系統的功能,這些功能在Windows Vista中由硬件HPET提供。

特性

一個HPET晶片包含一個以至少10 MHz赫茲計數的64位元向上計數器(主計數器)和,和一組(至少三個,最多256個)比較器。比較器的位寬為32位元或64位元。HPET可通過以進階組態與電源介面(ACPI)發現的一個主記憶體對映I/O窗口來編程。現代PC中的HPET電路整合在南橋晶片中。[a]

當最低有效位等於64位元主計時器值的相應位時,每個比較器可以產生一個中斷。比較器可以進入單觸發模式或周期模式,至少有一個比較器支援周期模式,並且都支援單觸發模​​式。在單觸發模式下,當主計數器達到儲存在比較器暫存器中的值時,比較器會觸發一次中斷,而在周期模式下,中斷將以指定間隔生成。

比較器可以由作業系統驅動,例如為每個CPU的排程提供一個計時器,或者由應用程式操作。

應用

HPET可以提供比RTC更高的解像度產生周期性中斷,並經常用於同步多媒體流、提供平滑播放,和減少使用其他時間戳計算(如基於x86 CPURDTSC指令)的使用需求。

與前輩的比較

HPET旨在補充和替換8254可程式化間隔定時器和RTC的周期性中斷功能。與這些較老計時器電路相比,HPET具有更高的頻率(至少10 MHz)和更寬的64位元計數器(也可以在32位元模式下驅動)。[1]

雖然8254和RTC可以類似HPET進入單觸發模式,但是設​​置過程非常慢,以致於它們的單觸發模式在實際應用中不會用於需要精確排程的任務。[2]相反,8254和RTC通常以非常小的時間間隔用於周期模式。例如,如果一個應用程式需要執行幾個短暫的時間(也許是等待),把定時器設定為1ms間隔的周期模式會更好,因為8254和RTC的設置成本太高(例如為了實現5ms的延時,設置和啟動定時器卻花費了1ms,造成精度不達標)。這樣的設定會導致每個毫秒都產生一次中斷,而應用程式的工作很可能並不如此頻繁。使用HPET可以避免額外的中斷,因為HPET單觸發計時器的設置成本小得多。

使用與相容性

在HPET出現之前設計的作業系統不能使用HPET,因此將使用其他計時器裝置。較新的作業系統往往可以使用較新與較舊的計時器。一些硬件同時有較新與較舊的計時器。事實上,目前的南橋晶片大多數也都同時支援傳統的PIT、PIC、進階可程式化中斷控制器英語Advanced Programmable Interrupt Controller(APIC)和RTC裝置,無論作業系統是否使用,從而有助於非常現代的PC執行舊款作業系統。

已知下列作業系統無法使用HPET:Windows XP SP2[b]Windows Server 2003及更早的Windows版本,Linux內核2.6以前。[c]

已知下列作業系統可以使用HPET:Windows XP SP3、[d] Windows Server 2008Windows Server 2008 R2Windows VistaWindows 7、基於x86的OS X[3]、使用2.6或更高內核的Linux作業系統以及FreeBSD[4]

Linux內核也可以使用HPET作為其時鐘源英語Clock sourceRed Hat MRG第二版的文件指,TSC是首選時鐘源——因為它的開銷低很多,而HPET作為後備時鐘源。一個千萬次事件計數的基準測試顯示,TSC花費約0.6秒,而HPET花費略微超過12秒,ACPI電源管理計時器花費約24秒。[5]

問題

HPET是一個持續向上計數計時器,而不是一個倒數到零並導致一個中斷然後客製化的單次觸發元件。因為HPET是比較實際計數器值是否大於或等於可程式化目標值,因此如果寫入晶片暫存器的比較值所指的目標時間已經錯過,中斷則被錯過。在此種情況下,不僅目標中斷被錯過,而且將遠遠落後(約232或264次)。在存在如系統管理模式(SMI)等執行時間沒有硬上限的不可封鎖中斷英語Non-maskable interrupt時,這種競爭危害需要在設置後對計時器進行耗時的重新檢查,並且難以完全避免。如果比較器的值不立即與計時器同步,而是延遲一至兩個周期(某些晶片組如此),則困難更為艱巨。[6]

除了上面提到的競爭條件,一篇VMware文件還列出了其他一些缺點:「規範未要求計時器特別精細,具有低飄移和快速讀取能力。遊戲盤典型實現在大約18 MHz上執行計時器,並且讀取HPET所需時間(1–2 μs)與讀取ACPI計時器花費的時間相差無幾。 Implementations have been observed in which the period register is off by 800 parts per million or more."[7]

備註

參考資料

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.