PEP 418: More QueryPerformanceCounter bugs
This commit is contained in:
parent
9b27cd2bb7
commit
2e4b34df42
31
pep-0418.txt
31
pep-0418.txt
|
@ -237,21 +237,31 @@ Windows: QueryPerformanceCounter
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
High-resolution performance counter. It is monotonic.
|
High-resolution performance counter. It is monotonic.
|
||||||
QueryPerformanceFrequency() gives its frequency.
|
QueryPerformanceFrequency() gives its frequency. Hardward clocks used
|
||||||
|
by QueryPerformanceCounter:
|
||||||
|
|
||||||
On Windows XP, QueryPerformanceFrequency() is the processor frequency and
|
* Windows XP: RDTSC instruction of Intel processors, the clock frequency is
|
||||||
QueryPerformanceCounter() is the TSC of the current processor.
|
the frequency of the processor
|
||||||
|
* Windows 2000: ACPI power management timer, frequency = 3,549,545 Hz
|
||||||
The performance counter value may unexpectedly leap forward because of a
|
* Windows 95/98: 8245 PIT chipset, frequency = 1,193,181 Hz
|
||||||
hardware bug, see the `KB274323`_.
|
|
||||||
|
|
||||||
Windows XP had a bug (see `KB896256`_): on a multiprocessor computer,
|
|
||||||
QueryPerformanceCounter() returned a different value for each processor.
|
|
||||||
|
|
||||||
QueryPerformanceFrequency() should only be called once: the frequency will not
|
QueryPerformanceFrequency() should only be called once: the frequency will not
|
||||||
change while the system is running. It fails if the installed hardware does not
|
change while the system is running. It fails if the installed hardware does not
|
||||||
support a high-resolution performance counter.
|
support a high-resolution performance counter.
|
||||||
|
|
||||||
|
Bugs:
|
||||||
|
|
||||||
|
* The performance counter value may unexpectedly leap forward because of a
|
||||||
|
hardware bug, see the `KB274323`_.
|
||||||
|
* On VirtualBox, QueryPerformanceCounter() does not increment the high part
|
||||||
|
every time the low part overflows, see `Monotonic timers
|
||||||
|
<http://code-factor.blogspot.fr/2009/11/monotonic-timers.html>`_ (2009).
|
||||||
|
* VirtualBox had a bug in its HPET virtualized device:
|
||||||
|
QueryPerformanceCounter() did jump forward by approx. 42 seconds (`issue
|
||||||
|
#8707 <https://www.virtualbox.org/ticket/8707>`_).
|
||||||
|
* Windows XP had a bug (see `KB896256`_): on a multiprocessor computer,
|
||||||
|
QueryPerformanceCounter() returned a different value for each processor.
|
||||||
|
|
||||||
.. _KB896256: http://support.microsoft.com/?id=896256
|
.. _KB896256: http://support.microsoft.com/?id=896256
|
||||||
.. _KB274323: http://support.microsoft.com/?id=274323
|
.. _KB274323: http://support.microsoft.com/?id=274323
|
||||||
|
|
||||||
|
@ -434,8 +444,7 @@ static variable, it might be interesting to use this to make sure that the
|
||||||
values returned are indeed monotonic.
|
values returned are indeed monotonic.
|
||||||
|
|
||||||
* Virtual machines provide less reliable clocks.
|
* Virtual machines provide less reliable clocks.
|
||||||
* QueryPerformanceCounter() has two known bugs:
|
* QueryPerformanceCounter() has known bugs (only one is not fixed yet)
|
||||||
`KB896256`_ (fixed) and `KB274323`_
|
|
||||||
|
|
||||||
Python may only workaround a specific known operating system bug: `KB274323`_
|
Python may only workaround a specific known operating system bug: `KB274323`_
|
||||||
contains a code example to workaround the bug (use GetTickCount() to detect
|
contains a code example to workaround the bug (use GetTickCount() to detect
|
||||||
|
|
Loading…
Reference in New Issue