[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