HPET vs other timers

Nate Lawson nate at root.org
Sat Jun 2 19:53:17 UTC 2007

Kris Kennaway wrote:
> On Mon, May 21, 2007 at 11:27:16AM -0700, Nate Lawson wrote:
>> Dag-Erling Sm??rgrav wrote:
>>> "Poul-Henning Kamp" <phk at phk.freebsd.dk> writes:
>>>> Dag-Erling Sm??rgrav <des at des.no> writes:
>>>>> "Poul-Henning Kamp" <phk at phk.freebsd.dk> writes:
>>>>>> I can't rememember who raised the quality of it recently, CVS will
>>>>>> know.  I was sceptical, because I also have systems where HPET is
>>>>>> slow.
>>>>> I did, with your approval, almost a year ago.
>>>> Yes, I said "try it" or something of the sort.
>>> For the record, I ran with HPET timers the entire time from HPET support
>>> was first committed until I finally committed that patch - about ten
>>> months - so I did test it to the best of my ability.
>>> DES
>> Let's keep this technical.  I'm fine with bumping HPET to below ACPI
>> timer if the hw turns out to be this much slower.
>> Anyone able to speculate why though?  HPET only reads 32 bits from a
>> memory mapped region.  No locking or other requirements.  ACPI_timer
>> does multiple IO ops, which according to bde@ are much slower than
>> memory reads.  So unless something from the chipset is stopping the
>> processor (SMI?) when it reads from this region, I have a hard time
>> seeing why it's slower.
> I don't know what the cause is, only that it is empirically the
> slowest of all the timers in this workload.  Can you provide
> supporting evidence that it is fact faster than all the alternatives
> in other workloads?

It's not the workload, it's the system.  These timers are provided by
the chipset and enabled by the BIOS and so the behavior is
system-dependent.  Of course, it shouldn't be that way and this should
always be the fastest timer but when it comes to the BIOS, major
mistakes and weird behavior are always expected.

HPET will be the main timer for Vista and is faster on at least one
system according to this study.

More info:

Perhaps we should implement profiling of all timecounters instead of a
hard-coded quality value?


More information about the freebsd-current mailing list