Поддержка Perf Map
На поддерживаемых платформах (на данный момент только Linux) среда выполнения может использовать файлы perf map, чтобы сделать функции Python видимыми для внешнего профилирующего инструмента (такого как perf). Запущенный процесс может создать файл в каталоге /tmp, который содержит записи, позволяющие сопоставить раздел исполняемого кода с именем. Этот интерфейс описан в документации инструмента Linux Perf.
В Python эти вспомогательные API могут использоваться библиотеками и функциями, которые полагаются на динамическое генерирование машинного кода.
Обратите внимание, что для этих API не требуется удерживать глобальную блокировку интерпретатора (GIL).
-
int PyUnstable_PerfMapState_Init(void) -
Это Нестабильный API. Он может измениться без предупреждения в незначительных выпусках.
Открыть файл
/tmp/perf-$pid.map, если он ещё не открыт, и создать блокировку, чтобы обеспечить потокобезопасность записи в файл (при условии, что записи выполняются черезPyUnstable_WritePerfMapEntry()). Обычно нет необходимости вызывать это явно; просто используйтеPyUnstable_WritePerfMapEntry(), и он инициализирует состояние при первом вызове.Возвращает
0при успехе,-1при ошибке создания/открытия файла perf map или-2при ошибке создания блокировки. Проверьтеerrnoдля получения дополнительной информации о причине ошибки.
-
int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name) -
Это Нестабильный API. Он может измениться без предупреждения в незначительных выпусках.
Записать одну запись в файл
/tmp/perf-$pid.map. Эта функция потокобезопасна. Вот пример записи:# address size name 7f3529fcf759 b py::bar:/run/t.py
Вызовет
PyUnstable_PerfMapState_Init()перед записью записи, если файл perf map ещё не открыт. Возвращает0при успехе или те же коды ошибок, что иPyUnstable_PerfMapState_Init(), при ошибке.
-
void PyUnstable_PerfMapState_Fini(void) -
Это Нестабильный API. Он может измениться без предупреждения в незначительных выпусках.
Закрыть файл perf map, открытый
PyUnstable_PerfMapState_Init(). Это вызывается самой средой выполнения во время завершения интерпретатора. В общем случае нет причин для явного вызова, за исключением обработки специфических сценариев, таких как форкинг.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/perfmaps.html