Perf Maps 支援¶
在支援的平臺上(截至撰寫本文時,僅限 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
,建立/開啟 perf map 檔案失敗返回-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 map 檔案尚未開啟,則在寫入條目之前呼叫
PyUnstable_PerfMapState_Init()
。成功返回0
,失敗返回與PyUnstable_PerfMapState_Init()
相同的錯誤程式碼。
-
void PyUnstable_PerfMapState_Fini(void)¶
- 這是 不穩定 API。它可能會在次要版本中更改,恕不另行通知。
關閉由
PyUnstable_PerfMapState_Init()
開啟的 perf map 檔案。這由執行時本身在直譯器關閉期間呼叫。通常,除了處理諸如 fork 之類的特定場景外,沒有理由顯式呼叫此函式。