]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-96143: Add some comments and minor fixes missed in the original PR (#96433)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Tue, 30 Aug 2022 18:37:22 +0000 (19:37 +0100)
committerGitHub <noreply@github.com>
Tue, 30 Aug 2022 18:37:22 +0000 (19:37 +0100)
* 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@users.noreply.github.com>
Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Doc/howto/perf_profiling.rst
Doc/using/cmdline.rst
Lib/test/test_perf_profiler.py
Objects/perf_trampoline.c

index 2e1bb48af8c88e0bce1805bc2be13622928e2186..ed8de888b3bc21a59d8c0ebb12f067481e4addef 100644 (file)
@@ -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:
 
index 5ecc882d818fce75d26d60366efeba09a27297b0..fa2b07e468b3b54c2c84824d949cd46be90adfa9 100644 (file)
@@ -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
index c2aad85b652e3523f7e3debdbd0bbca07c13d320..f587995b008f68a7820531d1e0e0614f1bef6010 100644 (file)
@@ -58,7 +58,7 @@ class TestPerfTrampoline(unittest.TestCase):
             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:
index 02206b2786c87f98f8e9c98669488188ebea41dd..2cbe3741f26fbc712967c8fe506091b074f28b53 100644 (file)
@@ -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);