對 Perf Maps 的支援¶
在受支援的平臺上(截至本文撰寫時,僅限 Linux),執行時可以利用 perf 對映檔案 使 Python 函式對外部分析工具(例如 perf)可見。執行中的程序可以在 /tmp
目錄中建立一個檔案,其中包含可以將可執行程式碼段對映到名稱的條目。此介面在 Linux Perf 工具的文件中進行了描述。
在 Python 中,這些輔助 API 可以被依賴於即時生成機器程式碼的庫和功能使用。
請注意,這些 API 不需要持有附加執行緒狀態。
-
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 對映檔案。此函式在直譯器關閉期間由執行時本身呼叫。通常,除了處理分叉等特定場景外,沒有理由顯式呼叫此函式。