[Python-checkins] gh-96143: Add some comments and minor fixes missed in the original PR (#96433)

pablogsal webhook-mailer at python.org
Tue Aug 30 14:37:35 EDT 2022


https://github.com/python/cpython/commit/f49dd54b72ec3fe6dbdcd2476a810929382bc196
commit: f49dd54b72ec3fe6dbdcd2476a810929382bc196
branch: main
author: Pablo Galindo Salgado <Pablogsal at gmail.com>
committer: pablogsal <Pablogsal at gmail.com>
date: 2022-08-30T19:37:22+01:00
summary:

gh-96143: Add some comments and minor fixes missed in the original PR (#96433)

* gh-96132: Add some comments and minor fixes missed in the original PR

* Update Doc/using/cmdline.rst

Co-authored-by: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>

Co-authored-by: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>

files:
M Doc/howto/perf_profiling.rst
M Doc/using/cmdline.rst
M Lib/test/test_perf_profiler.py
M Objects/perf_trampoline.c

diff --git a/Doc/howto/perf_profiling.rst b/Doc/howto/perf_profiling.rst
index 2e1bb48af8c8..ed8de888b3bc 100644
--- a/Doc/howto/perf_profiling.rst
+++ b/Doc/howto/perf_profiling.rst
@@ -155,6 +155,9 @@ active since the start of the Python interpreter, you can use the `-Xperf` optio
 
     $ python -Xperf my_script.py
 
+You can also set the :envvar:`PYTHONPERFSUPPORT` to a nonzero value to actiavate perf
+profiling mode globally.
+
 There is also support for dynamically activating and deactivating the perf
 profiling mode by using the APIs in the :mod:`sys` module:
 
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index 5ecc882d818f..fa2b07e468b3 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -582,6 +582,8 @@ Miscellaneous options
    .. versionadded:: 3.11
       The ``-X frozen_modules`` option.
 
+   .. versionadded:: 3.12
+      The ``-X perf`` option.
 
 
 Options you shouldn't use
diff --git a/Lib/test/test_perf_profiler.py b/Lib/test/test_perf_profiler.py
index c2aad85b652e..f587995b008f 100644
--- a/Lib/test/test_perf_profiler.py
+++ b/Lib/test/test_perf_profiler.py
@@ -58,7 +58,7 @@ def baz():
             script = make_script(script_dir, "perftest", code)
             with subprocess.Popen(
                 [sys.executable, "-Xperf", script],
-                universal_newlines=True,
+                text=True,
                 stderr=subprocess.PIPE,
                 stdout=subprocess.PIPE,
             ) as process:
diff --git a/Objects/perf_trampoline.c b/Objects/perf_trampoline.c
index 02206b2786c8..2cbe3741f26f 100644
--- a/Objects/perf_trampoline.c
+++ b/Objects/perf_trampoline.c
@@ -284,12 +284,23 @@ new_code_arena(void)
     void *start = &_Py_trampoline_func_start;
     void *end = &_Py_trampoline_func_end;
     size_t code_size = end - start;
+    // TODO: Check the effect of alignment of the code chunks. Initial investigation
+    // showed that this has no effect on performance in x86-64 or aarch64 and the current
+    // version has the advantage that the unwinder in GDB can unwind across JIT-ed code.
+    //
+    // We should check the values in the future and see if there is a
+    // measurable performance improvement by rounding trampolines up to 32-bit
+    // or 64-bit alignment.
 
     size_t n_copies = mem_size / code_size;
     for (size_t i = 0; i < n_copies; i++) {
         memcpy(memory + i * code_size, start, code_size * sizeof(char));
     }
     // Some systems may prevent us from creating executable code on the fly.
+    // TODO: Call icache invalidation intrinsics if available:
+    // __builtin___clear_cache/__clear_cache (depending if clang/gcc). This is
+    // technically not necessary but we could be missing something so better be
+    // safe.
     int res = mprotect(memory, mem_size, PROT_READ | PROT_EXEC);
     if (res == -1) {
         PyErr_SetFromErrno(PyExc_OSError);



More information about the Python-checkins mailing list