HPET
HPET is the High Precision Event Timer. HPET was designed by Microsoft and AMD to replace old timers like Time Stamp Counter (TSC)Time Stamp Counter (TSC) and be the main timer for high-precision measurements. However, HPET didn’t become the main timer mainly because of the huge access time. On modern hardware and operating systems, HPET is usually disabled (the invariant TSC is used as the primary timestamp source), but it’s usually possible to enable it (if you want it for some reason).
According to IA-PC HPET (High Precision Event Timers) Specification (Version 1.0a)
·
2004hpet-specifications, section 2.2, the minimum HPET clock frequency is 10 MHz
,
but the actual HPET frequency is always 14.31818 MHz
(see 14.31818 MHz
A note by Andrey Akinshin14.31818 MHz).
Enabling/Disabling HPET on Windows
On Windows, you can enable or disable HPET with the help of the bcdeditbcdedit (see BCDEdit Command-Line Options and BCDEdit /set).
To enable HPET, you should run it with /set useplatformclock true
arguments and reboot your computer.
:: Enable HPET (reboot is required):
bcdedit /set useplatformclock true
It sets the useplatformclock
value in Boot Manager which requires HPET instead of TSC.
If you don’t want to use it anymore, you should delete this value by /deletevalue
and reboot:
:: Disable HPET (reboot is required):
bcdedit /deletevalue useplatformclock
If you want to check, is HPETHPET enabled or not, you should look for useplatformclock
in the output of the following command:
bcdedit /enum
Enabling/Disabling HPET on Linux
On Linux, all the files related to time sources are typically placed in
/sys/devices/system/clocksource/clocksource0/
.
You can look at the full list of available clock sources in available_clocksource
.
Here is an example of a machine that has Time Stamp Counter (TSC)Time Stamp Counter (TSC), HPETHPET, and ACPI PMACPI PM:
## Get available clocksource:
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
The current clock source can be found in `current_clocksource``:
## Get current clocksource:
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
This value can be easily changed.
For example, to enable HPET
, you should run:
## Set current clocksource:
$ sudo /bin/sh -c \
'echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource'
Usually, HPET
is disabled, but you shouldn’t assume that TSC
is always the default.
For example, you can encounter enabled HPET
on many legacy servers (which didn’t have OS reinstallation for several years).
It can be also enabled manually for some specific scenarios or because of the bugs.
For example, there was a firmware bug in CentOS 7: “available_clocksource” contained only hpet acpi_pm
without tsc
(see stackoverflow-45803565
).