高精度事件计时器(英语:High Precision Event Timer,缩写HPET),也称高精度事件定时器,它是个人计算机中使用的一种硬件计时器,由英特尔(Intel)与微软共同开发,并自2005年以来已被纳入PC芯片组。英特尔以前曾有多媒体计时器(Multimedia Timer),因此选择了HPET作为术语,避免与作为软件特性在Windows 3.0中引入到多媒体扩展的多媒体计时器混淆。
使用不支持硬件HPET的旧款操作系统的设备只能使用旧型号计时设备,例如可编程间隔计时器(PIT)或实时时钟(RTC)。当Windows XP配有最新的硬件抽象层(HAL)时,也可以使用处理器的时间戳控制器(TSC)或电源管理计时器(PMTIMER),从而与RTC一起提供操作系统的功能,这些功能在之后的Windows版本中由HPET硬件提供。但令人困惑的是,即使未使用英特尔WPET设备,Windows XP系统也会在设备驱动程序管理器中引用“HPET”连接。
特性一个HPET芯片包含一个以至少10 MHz赫兹计数的64位向上计数器(主计数器)和一组(至少三个,最多256个)比较器。比较器的位宽为32位或64位。HPET可通过以高级配置与电源接口(ACPI)发现的一个内存映射I/O窗口来编程。现代PC中的HPET电路集成在南桥芯片中。
当最低有效位等于64位主计时器值的相应位时,每个比较器可以产生一个1。比较器可以进入单触发模式或周期模式,至少有一个比较器支持周期模式,并且都支持单触发模式。在单触发模式下,当主计数器达到存储在比较器寄存器中的值时,比较器会触发一次中断,而在周期模式下,中断将以指定间隔生成。
比较器可以由操作系统驱动,例如为每个CPU的调度提供一个计时器,或者由应用程序操作。
应用HPET可以提供比RTC更高的分辨率产生周期性中断,并经常用于同步多媒体流、提供平滑播放,和减少使用其他时间戳计算(如基于x86 CPU的RDTSC指令)的使用需求。
与前辈的比较HPET旨在补充和替换8254可编程间隔定时器和RTC的周期性中断功能。与这些较老计时器电路相比,HPET具有更高的频率(至少10 MHz)和更宽的64位计数器(也可以在32位模式下驱动)。
虽然8254和RTC可以类似HPET进入单触发模式,但是设置过程非常慢,以致于它们的单触发模式在实际应用中不会用于需要精确调度的任务。相反,8254和RTC通常以非常小的时间间隔用于周期模式。使用HPET可以避免额外的中断,因为HPET单触发计时器的设置成本小得多。
使用与兼容性在HPET出现之前设计的操作系统不能使用HPET,因此将使用其他计时器设备。较新的操作系统往往可以使用较新与较旧的计时器。一些硬件同时有较新与较旧的计时器。事实上,目前的南桥芯片大多数也都同时支持传统的PIT、PIC、高级可编程中断控制器(APIC)和RTC设备,无论操作系统是否使用,从而有助于非常现代的PC运行旧款操作系统。
已知下列操作系统无法使用HPET:Windows XP SP2、Windows Server 2003及更早的Windows版本,Linux内核2.6以前。
已知下列操作系统可以使用HPET:Windows XP SP3,Windows Server 2008,Windows Server 2008 R2,Windows Vista,Windows 7, 基于x86的OS X、使用2.6或更高内核的Linux操作系统、FreeBSD以及OpenSolaris。
Linux内核也可以使用HPET作为其时钟源。Red Hat MRG第二版的文档指,TSC是首选时钟源——因为它的开销低很多,而HPET作为后备时钟源。一个千万次事件计数的基准测试显示,TSC花费约0.6秒,而HPET花费略微超过12秒,ACPI电源管理计时器花费约24秒。
本词条内容贡献者为:
张静 - 副教授 - 西南大学