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 之類的特定場景外,沒有理由顯式呼叫此函式。