ACPI-fast default timecounter, but HPET 83% faster
    Pieter de Goeje 
    pieter at degoeje.nl
       
    Mon Apr 27 00:02:49 UTC 2009
    
    
  
Dear hackers,
While fiddling with the sysctl kern.timecounter.hardware, I found out that on 
my system HPET is significantly faster than ACPI-fast. Using the program 
below I measured the number of clock_gettime() calls the system can execute 
per second. I ran the program 10 times for each configuration and here are 
the results:
x ACPI-fast
+ HPET
+-------------------------------------------------------------------------+
|x                                                                       +|
|x                                                                       +|
|x                                                                      ++|
|x                                                                      ++|
|x                                                                      ++|
|x                                                                      ++|
|A                                                                      |A|
+-------------------------------------------------------------------------+
    N           Min           Max        Median           Avg        Stddev
x  10        822032        823752        823551      823397.8     509.43254
+  10       1498348       1506862       1502830     1503267.4     2842.9779
Difference at 95.0% confidence
	679870 +/- 1918.94
	82.5688% +/- 0.233052%
	(Student's t, pooled s = 2042.31)
System details: Intel(R) Core(TM)2 Duo CPU E6750  @ 2.66GHz (3200.02-MHz 
686-class CPU), Gigabyte P35-DS3R motherboard running i386 -CURRENT updated 
today.
Unfortunately I only have one system with a HPET timecounter, so I cannot 
verify these results on another system. If similar results are obtained on 
other machines, I think the HPET timecounter quality needs to be increased 
beyond that of ACPI-fast.
Regards,
Pieter de Goeje
----- 8< ----- clock_gettime.c ----- 8< ------
#include <sys/time.h>
#include <stdio.h>
#include <time.h>
#define COUNT 1000000
int main() {
        struct timespec ts_start, ts_stop, ts_read;
        double time;
        int i;
        clock_gettime(CLOCK_MONOTONIC, &ts_start);
        for(i = 0; i < COUNT; i++) {
                clock_gettime(CLOCK_MONOTONIC, &ts_read);
        }
        clock_gettime(CLOCK_MONOTONIC, &ts_stop);
        time = (ts_stop.tv_sec - ts_start.tv_sec) + (ts_stop.tv_nsec - 
ts_start.tv_nsec) * 1E-9;
        printf("%.0f\n", COUNT / time);
}
    
    
More information about the freebsd-performance
mailing list