[Python-checkins] peps: PEP 418: split resolution/accuracy in the able; add a section on Linux timers

victor.stinner python-checkins at python.org
Fri Mar 30 13:53:12 CEST 2012


http://hg.python.org/peps/rev/9c08fc65b371
changeset:   4174:9c08fc65b371
user:        Victor Stinner <vstinner at wyplay.com>
date:        Fri Mar 30 13:53:40 2012 +0200
summary:
  PEP 418: split resolution/accuracy in the able; add a section on Linux timers

files:
  pep-0418.txt |  83 +++++++++++++++++++++++++++++++++------
  1 files changed, 70 insertions(+), 13 deletions(-)


diff --git a/pep-0418.txt b/pep-0418.txt
--- a/pep-0418.txt
+++ b/pep-0418.txt
@@ -186,18 +186,29 @@
 Table summarizing all monotonic clocks:
 
 
-=========================  ===============  ================  ====================
-Name                       Resolution       Adjusted by NTP?  Action on suspend
-=========================  ===============  ================  ====================
-CLOCK_MONOTONIC_RAW        1 ns             No                Stopped
-gethrtime                  1 ns             No                Not stopped
-mach_absolute_time()       1 ns             No                ?
-CLOCK_HIGHRES              1 ns             No                ?
-CLOCK_MONOTONIC            1 ns             Yes on Linux      Stopped on Linux
-QueryPerformanceCounter()  0.3 ns - 5 ns    No                Accuracy issue
-GetTickCount[64]()         1 ms - 15 ms     No                Include suspend time
-timeGetTime()              1 ms - 15 ms     No                ?
-=========================  ===============  ================  ====================
+========================= =============== =============== ================ ====================
+Name                      Resolution      Accuracy        Adjusted by NTP? Action on suspend
+========================= =============== =============== ================ ====================
+CLOCK_MONOTONIC_RAW       1 ns            ?               No               Stopped
+gethrtime                 1 ns            ?               No               Not stopped
+mach_absolute_time()      1 ns            ?               No               ?
+CLOCK_HIGHRES             1 ns            ?               No               ?
+CLOCK_MONOTONIC           1 ns            ?               Yes on Linux     Stopped on Linux
+QueryPerformanceCounter() \-              0.3 ns - 5 ns   No               Accuracy issue
+GetTickCount[64]()        1 ms            1 ms - 15 ms    No               Include suspend time
+timeGetTime()             1 ms            1 ms - 15 ms    No               ?
+========================= =============== =============== ================ ====================
+
+The resolution is the smallest difference between two timestamps supported by
+the format used by the clock. For example, clock_gettime() uses a timespec
+structure which has two integer fileds, tv_sec and tv_nsec, so the resolution
+is 1 nanosecond.
+
+The accuracy is the effective smallest difference of two timestamps of the
+clock. It does not reflect the stability the clock rate.  For example,
+QueryPerformanceCounter() has a good accuracy but is known to not have a steady
+rate.
+
 
 mach_absolute_time
 ^^^^^^^^^^^^^^^^^^
@@ -351,7 +362,7 @@
 more, depending on the machine.
 
 timeBeginPeriod() can be used to increase the precision of timeGetTime() up to
-1 millisecond.
+1 millisecond, but it negatively affects power consumption.
 
 .. note::
    timeGetTime() and timeBeginPeriod() are part the Windows multimedia library
@@ -477,6 +488,50 @@
 
 QueryUnbiasedInterruptTime() was introduced in Windows 7.
 
+Linux timers
+------------
+
+There were 4 implementations of the time in the Linux kernel: UTIME (1996),
+timer wheel (1997), HRT (2001) and hrtimers (2007). The later is the result of
+the "high-res-timers" project started by George Anzinger in 2001, contributed
+by Thomas Gleixner and Douglas Niehaus. hrtimers implementation was merged into
+Linux 2.6.21 released in 2007.
+
+hrtimers supports various clock sources. It sets a priority to each source to
+decide which one will be used.
+
+ * TSC (Time Stamp Counter): Internal processor clock incremented at each
+   processor cycle. Its frequency is the processor frequency and so usually
+   higher than 1 GHz. Its priority is 300 by default, but falls to 0 if the
+   processor frequency changes and the counter becomes unstable.
+ * HPET: An HPET chip consists of a 64-bit up-counter (main counter) counting
+   at least at 10 MHz and a set of up to 256 comparators (at least 3). Each
+   HPET can have up to 32 timers.
+ * PIT (programmable interrupt timer): Intel 8253/8254 chipsets with a
+   configurable frequecency in range 18.2 Hz - 1.2 MHz. Linux uses the
+   frequency: 1,193,181.8 Hz. It is a 16-bit counter.
+ * 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 changes to 110 if
+   the chipset is broken and need a software workaround. HPET can cause around
+   3 seconds of drift per day.
+ * Cyclone: The Cyclone timer uses a 32-bit counter on IBM Extended
+   X-Architecture (EXA) chipsets which include computers that use the IBM
+   "Summit" series chipsets (ex: x440). This is available in IA32 and IA64
+   architectures.
+
+High-resolution timers are not supported on all hardware architectures. They
+are at least provided on x86/x86_64, ARM and PowerPC.
+
+The list of available clock sources can be read in
+/sys/devices/system/clocksource/clocksource0/available_clocksource. It is
+possible to force a clocksource at runtime by writing its name into
+/sys/devices/system/clocksource/clocksource0/current_clocksource.
+/proc/timer_list contains the list of all hardware timers.
+
+Read also the `time(7) manual page
+<http://www.kernel.org/doc/man-pages/online/pages/man7/time.7.html>`_:
+"overview of time and timers".
+
 
 Alternatives: API design
 ========================
@@ -584,6 +639,8 @@
 
 Time:
 
+ * `hrtimers - subsystem for high-resolution kernel timers
+   <http://www.kernel.org/doc/Documentation/timers/hrtimers.txt>`_
  * `C++ Timeout Specification
    <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3128.html>`_
  * `Windows: Game Timing and Multicore Processors

-- 
Repository URL: http://hg.python.org/peps


More information about the Python-checkins mailing list