[Python-checkins] bpo-41710: gc_collect_main() uses _PyTime_GetPerfCounter() (GH-28676)

vstinner webhook-mailer at python.org
Fri Oct 1 07:29:14 EDT 2021


https://github.com/python/cpython/commit/54957f16a63ecb6b15f77b01fa7c55ada892604a
commit: 54957f16a63ecb6b15f77b01fa7c55ada892604a
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2021-10-01T13:29:00+02:00
summary:

bpo-41710: gc_collect_main() uses _PyTime_GetPerfCounter() (GH-28676)

If the DEBUG_STATS debug flag is set, gc_collect_main() now uses
_PyTime_GetPerfCounter() instead of _PyTime_GetMonotonicClock() to
measure the elapsed time.

On Windows, _PyTime_GetMonotonicClock() only has a resolution of 15.6
ms, whereas _PyTime_GetPerfCounter() is closer to a resolution of 100
ns.

files:
M Modules/gcmodule.c

diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 2592c397cf2f7..7d1a45bcaeabf 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -1211,7 +1211,7 @@ gc_collect_main(PyThreadState *tstate, int generation,
     if (gcstate->debug & DEBUG_STATS) {
         PySys_WriteStderr("gc: collecting generation %d...\n", generation);
         show_stats_each_generations(gcstate);
-        t1 = _PyTime_GetMonotonicClock();
+        t1 = _PyTime_GetPerfCounter();
     }
 
     if (PyDTrace_GC_START_ENABLED())
@@ -1307,7 +1307,7 @@ gc_collect_main(PyThreadState *tstate, int generation,
             debug_cycle("uncollectable", FROM_GC(gc));
     }
     if (gcstate->debug & DEBUG_STATS) {
-        double d = _PyTime_AsSecondsDouble(_PyTime_GetMonotonicClock() - t1);
+        double d = _PyTime_AsSecondsDouble(_PyTime_GetPerfCounter() - t1);
         PySys_WriteStderr(
             "gc: done, %zd unreachable, %zd uncollectable, %.4fs elapsed\n",
             n+m, n, d);



More information about the Python-checkins mailing list