Perf 地图支持¶
在支持的平台上(截至撰写本文时,仅限 Linux),运行时可以利用 *perf 地图文件* 使 Python 函数对外部性能分析工具(如 perf)可见。正在运行的进程可以在 /tmp
目录中创建一个文件,其中包含可以将可执行代码段映射到名称的条目。此接口在 Linux Perf 工具文档 中进行了描述。
在 Python 中,这些辅助 API 可以被依赖于动态生成机器代码的库和功能使用。
请注意,这些 API 不需要持有全局解释器锁 (GIL)。
-
int PyUnstable_PerfMapState_Init(void)¶
- 这是 不稳定 API。它可能会在次要版本中发生更改,恕不另行通知。
打开
/tmp/perf-$pid.map
文件(除非它已经打开),并创建一个锁以确保对文件的线程安全写入(前提是写入是通过PyUnstable_WritePerfMapEntry()
完成的)。通常,无需显式调用此函数;只需使用PyUnstable_WritePerfMapEntry()
,它将在第一次调用时初始化状态。成功返回
0
,创建/打开 perf 地图文件失败返回-1
,创建锁失败返回-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
如果 perf 地图文件尚未打开,则在写入条目之前会调用
PyUnstable_PerfMapState_Init()
。成功返回0
,失败返回与PyUnstable_PerfMapState_Init()
相同的错误代码。
-
void PyUnstable_PerfMapState_Fini(void)¶
- 这是 不稳定 API。它可能会在次要版本中发生更改,恕不另行通知。
关闭由
PyUnstable_PerfMapState_Init()
打开的 perf 地图文件。这将在解释器关闭期间由运行时本身调用。通常,没有理由显式调用此函数,除非处理特定情况,例如分叉。