PEP 418: another benchmark on FreeBSD

Add also more info on FreeBSD timecounters
This commit is contained in:
Victor Stinner 2012-04-12 00:19:16 +02:00
parent a7be2f184d
commit a15d634866
1 changed files with 63 additions and 5 deletions

View File

@ -333,6 +333,33 @@ Each function was called 10,000,000 times and CLOCK_MONOTONIC was used to get
the time before and after. The benchmark was run 5 times to keep the minimum the time before and after. The benchmark was run 5 times to keep the minimum
time. time.
FreeBSD 8.0 in kvm with hardware virtualization:
======================== ====== ========= ======= =======
Function TSC ACPI-Safe HPET i8254
======================== ====== ========= ======= =======
time() 191 ns 188 ns 189 ns 188 ns
CLOCK_SECOND 187 ns 184 ns 187 ns 183 ns
CLOCK_REALTIME_FAST 189 ns 180 ns 187 ns 190 ns
CLOCK_UPTIME_FAST 191 ns 185 ns 186 ns 196 ns
CLOCK_MONOTONIC_FAST 188 ns 187 ns 188 ns 189 ns
CLOCK_THREAD_CPUTIME_ID 208 ns 206 ns 207 ns 220 ns
CLOCK_VIRTUAL 280 ns 279 ns 283 ns 296 ns
CLOCK_PROF 289 ns 280 ns 282 ns 286 ns
clock() 342 ns 340 ns 337 ns 344 ns
CLOCK_UPTIME_PRECISE 197 ns 10380 ns 4402 ns 4097 ns
CLOCK_REALTIME 196 ns 10376 ns 4337 ns 4054 ns
CLOCK_MONOTONIC_PRECISE 198 ns 10493 ns 4413 ns 3958 ns
CLOCK_UPTIME 197 ns 10523 ns 4458 ns 4058 ns
gettimeofday() 202 ns 10524 ns 4186 ns 3962 ns
CLOCK_REALTIME_PRECISE 197 ns 10599 ns 4394 ns 4060 ns
CLOCK_MONOTONIC 201 ns 10766 ns 4498 ns 3943 ns
======================== ====== ========= ======= =======
Each function was called 100,000 times and CLOCK_MONOTONIC was used to get
the time before and after. The benchmark was run 5 times to keep the minimum
time.
NTP adjustment NTP adjustment
@ -827,16 +854,17 @@ source to decide which one will be used.
so usually higher than 1 GHz. Its priority is 300 by default, but so usually higher than 1 GHz. Its priority is 300 by default, but
falls to 0 if the processor frequency changes and the counter falls to 0 if the processor frequency changes and the counter
becomes unstable. becomes unstable.
* HPET: An HPET chip consists of a 64-bit up-counter (main counter) * HPET: An High Precision Event Timer (HPET) chip consists of a 64-bit
counting at least at 10 MHz and a set of up to 256 comparators (at up-counter (main counter) counting at least at 10 MHz and a set of up to 256
least 3). Each HPET can have up to 32 timers. comparators (at least 3). Each HPET can have up to 32 timers. HPET can
cause around 3 seconds of drift per day.
* PIT (programmable interrupt timer): Intel 8253/8254 chipsets with a * PIT (programmable interrupt timer): Intel 8253/8254 chipsets with a
configurable frequency in range 18.2 Hz - 1.2 MHz. Linux uses the configurable frequency in range 18.2 Hz - 1.2 MHz. Linux uses the
frequency 1,193,181.8 Hz. It is a 16-bit counter. frequency 1,193,181.8 Hz. It is a 16-bit counter.
* PMTMR (power management timer): ACPI 24-bit timer with a frequency * PMTMR (power management timer): ACPI 24-bit timer with a frequency
of 3.5 MHz (3,579,545 Hz). Its priority is 200 by default, but of 3.5 MHz (3,579,545 Hz). Its priority is 200 by default, but
changes to 110 if the chipset is broken and need a software changes to 110 if the chipset is broken and need a software
workaround. HPET can cause around 3 seconds of drift per day. workaround.
* Cyclone: The Cyclone timer uses a 32-bit counter on IBM Extended * Cyclone: The Cyclone timer uses a 32-bit counter on IBM Extended
X-Architecture (EXA) chipsets which include computers that use the X-Architecture (EXA) chipsets which include computers that use the
IBM "Summit" series chipsets (ex: x440). This is available in IA32 IBM "Summit" series chipsets (ex: x440). This is available in IA32
@ -859,11 +887,38 @@ Read also the `time(7) manual page
FreeBSD timers FreeBSD timers
-------------- --------------
The sysctl program can be used to change the timecounter. For example:: kern.timecounter.choice list available hardward clocks with their priority.
The sysctl program can be used to change the timecounter. Example::
# dmesg|grep Timecounter
Timecounter "i8254" frequency 1193182 Hz quality 0
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
Timecounter "HPET" frequency 100000000 Hz quality 900
Timecounter "TSC" frequency 3411154800 Hz quality 800
Timecounters tick every 10.000 msec
# sysctl kern.timecounter.choice
kern.timecounter.choice: TSC(800) HPET(900) ACPI-safe(850) i8254(0) dummy(-1000000)
# sysctl kern.timecounter.hardware="ACPI-fast" # sysctl kern.timecounter.hardware="ACPI-fast"
kern.timecounter.hardware: HPET -> ACPI-fast kern.timecounter.hardware: HPET -> ACPI-fast
Available clocks:
* "TSC": Time Stamp Counter of the procesor
* "HPET": High Precision Event Timer
* "ACPI-fast": ACPI Power Management timer (fast mode)
* "ACPI-safe": ACPI Power Management timer (safe mode)
* "i8254": PIT with Intel 8254 chipset
The `commit 222222
<http://svnweb.freebsd.org/base?view=revision&revision=222222>`_ (May 2011)
decreased ACPI-fast timecounter quality to 900 and increased HPET timecounter
quality to 950: "HPET on modern platforms usually have better resolution and
lower latency than ACPI timer".
Read `Timecounters: Efficient and precise timekeeping in SMP kernels
<http://phk.freebsd.dk/pubs/timecounter.pdf`_ by Poul-Henning Kamp (2002) for
the FreeBSD Project.
Sleep, suspend and monotonic time Sleep, suspend and monotonic time
================================= =================================
@ -1247,6 +1302,9 @@ Time:
bits of time bits of time
* `Win32 Performance Measurement Options * `Win32 Performance Measurement Options
<http://drdobbs.com/windows/184416651>`_ by Matthew Wilson, May 01, 2003 <http://drdobbs.com/windows/184416651>`_ by Matthew Wilson, May 01, 2003
* `Counter Availability and Characteristics for Feed-forward Based Synchronization
<http://www.cubinlab.ee.unimelb.edu.au/~jrid/Publications/ridoux_ispcs09.pdf>`_
by Timothy Broomhead, Julien Ridoux, Darryl Veitch (2009)
* System Management Interrupt (SMI) issues: * System Management Interrupt (SMI) issues:
* `System Management Interrupt Free Hardware * `System Management Interrupt Free Hardware