PEP 418: Add precision in Python of FreeBSD clocks

This commit is contained in:
Victor Stinner 2012-04-13 23:24:44 +02:00
parent 5837b185c5
commit 165038702e
2 changed files with 22 additions and 19 deletions

View File

@ -678,8 +678,8 @@ NTP has different methods to adjust a clock:
* "slewing": change the clock frequency to be slightly faster or
slower (which is done with ``adjtime()``). Since the slew rate is
limited to 0.5 ms/s, each second of adjustment requires an
amortization interval of 2000 s. Thus, an adjustment of many
limited to 0.5 millisecond per second, each second of adjustment requires an
amortization interval of 2000 seconds. Thus, an adjustment of many
seconds can take hours or days to amortize.
* "stepping": jump by a large amount in a single discrete step (which
is done with ``settimeofday()``)
@ -713,6 +713,7 @@ CLOCK_HIGHRES 1 ns No Yes ?
CLOCK_MONOTONIC 1 ns Slewed on Linux Yes No
CLOCK_MONOTONIC_RAW 1 ns No Yes No
CLOCK_BOOTTIME 1 ns ? Yes Yes
CLOCK_UPTIME 1 ns No Yes ?
mach_absolute_time() 1 ns No Yes No
QueryPerformanceCounter() \- No Yes ?
GetTickCount[64]() 1 ms No Yes Yes
@ -724,14 +725,15 @@ Examples of clock precision on x86_64:
========================= ================ ========= ===================
Name Operating system Precision Precision in Python
========================= ================ ========= ===================
CLOCK_MONOTONIC_RAW Linux 3.2 1 ns 3.0 µs
CLOCK_MONOTONIC Linux 3.2 1 ns 1.6 µs
CLOCK_MONOTONIC_RAW Linux 3.2 1 ns 3 µs
CLOCK_MONOTONIC Linux 3.2 1 ns 2 µs
CLOCK_HIGHRES SunOS 5.11 2 ns ?
CLOCK_MONOTONIC SunOS 5.11 2 ns ?
QueryPerformanceCounter Windows Seven 10 ns ?
CLOCK_MONOTONIC FreeBSD 8.2 11 ns ?
CLOCK_UPTIME FreeBSD 8.2 11 ns 9 µs
CLOCK_MONOTONIC FreeBSD 8.2 11 ns 7 µs
CLOCK_MONOTONIC OpenBSD 5.0 10 ms ?
GetTickCount Windows Seven 15.6 ms ?
GetTickCount Windows Seven 16 ms ?
========================= ================ ========= ===================
For CLOCK_xxx clocks, the precision of this table is the result of
@ -974,11 +976,11 @@ Examples of clock precision on x86_64:
========================= ================ ========= ===================
Name Operating system Precision Precision in Python
========================= ================ ========= ===================
CLOCK_REALTIME Linux 3.2 1 ns 1.9 µs
CLOCK_REALTIME FreeBSD 8.2 11 ns ?
CLOCK_REALTIME Linux 3.2 1 ns 2 µs
CLOCK_REALTIME FreeBSD 8.2 11 ns 7 µs
CLOCK_REALTIME SunOS 5.11 10 ms ?
CLOCK_REALTIME OpenBSD 5.0 10 ms ?
GetSystemTimeAsFileTime Windows Seven 15.6 ms ?
GetSystemTimeAsFileTime Windows Seven 16 ms ?
========================= ================ ========= ===================
For CLOCK_REALTIME, the precision of this table is the result of
@ -1042,14 +1044,15 @@ Examples of clock precision on x86_64:
========================= ================ ========= ===================
Name Operating system Precision Precision in Python
========================= ================ ========= ===================
CLOCK_PROCESS_CPUTIME_ID Linux 3.2 1 ns 3.3 µs
CLOCK_PROCESS_CPUTIME_ID Linux 3.2 1 ns 3 µs
clock() SunOS 5.11 1 µs ?
getrusage() Linux 3.0 4 ms 4 ms
clock() FreeBSD 8.2 7.8 ms ?
getrusage() FreeBSD 8.2 - 1 µs
clock() FreeBSD 8.2 8 ms 8 ms
clock() Linux 3.2 1 µs 10 ms
times() Linux 3.0 10 ms 10 ms
clock() OpenBSD 5.0 10 ms ?
GetProcessTimes() Windows Seven 15.6 ms ?
GetProcessTimes() Windows Seven 16 ms ?
========================= ================ ========= ===================
The precision of clock() in this table is the result of 1 /
@ -1102,9 +1105,9 @@ Examples of clock precision on x86_64:
========================= ================ =============== ===================
Name Operating system Precision Precision in Python
========================= ================ =============== ===================
CLOCK_THREAD_CPUTIME_ID Linux 3.2 1 ns ?
CLOCK_THREAD_CPUTIME_ID FreeBSD 8.2 1 µs ?
GetThreadTimes() Windows Seven 15.6 ms ?
CLOCK_THREAD_CPUTIME_ID Linux 3.2 1 ns 6 µs
CLOCK_THREAD_CPUTIME_ID FreeBSD 8.2 1 µs 1 µs
GetThreadTimes() Windows Seven 16 ms ?
========================= ================ =============== ===================
For CLOCK_THREAD_CPUTIME_ID, the precision of this table is the result

View File

@ -24,11 +24,11 @@ def compute_precision(func):
def format_duration(dt):
if dt >= 1e-3:
return "%.1f ms" % (dt * 1e3)
return "%.0f ms" % (dt * 1e3)
if dt >= 1e-6:
return "%.1f µs" % (dt * 1e6)
return "%.0f µs" % (dt * 1e6)
else:
return "%.1f ns" % (dt * 1e9)
return "%.0f ns" % (dt * 1e9)
def test_clock(name, func):
precision = compute_precision(func)
@ -42,7 +42,7 @@ for name in ('clock', 'perf_counter', 'process_time', 'monotonic', 'time'):
info = time.get_clock_info(name)
if 'precision' in info:
print("- announced precision: %s" % format_duration(info['precision']))
print("- function: %s" % info['function'])
print("- implementation: %s" % info['implementation'])
print("- resolution: %s" % format_duration(info['resolution']))
clock_ids = [name for name in dir(time) if name.startswith("CLOCK_")]