Hỗ trợ cho Bản đồ hoàn hảo¶
Trên các nền tảng được hỗ trợ (tính đến thời điểm viết bài này, chỉ có Linux), thời gian chạy có thể tận dụng perf map files để hiển thị các hàm Python cho một công cụ định hình bên ngoài (chẳng hạn như perf). Một quy trình đang chạy có thể tạo một tệp trong thư mục /tmp, chứa các mục có thể ánh xạ một phần mã thực thi thành tên. Giao diện này được mô tả trong documentation of the Linux Perf tool.
Trong Python, các API trợ giúp này có thể được sử dụng bởi các thư viện và tính năng dựa vào việc tạo mã máy một cách nhanh chóng.
Lưu ý rằng việc giữ attached thread state là không bắt buộc đối với các API này.
-
int PyUnstable_PerfMapState_Init(void)¶
- Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.
Mở tệp
/tmp/perf-$pid.map, trừ khi nó đã được mở và tạo một khóa để đảm bảo ghi an toàn theo luồng vào tệp (miễn là việc ghi được thực hiện thông quaPyUnstable_WritePerfMapEntry()). Thông thường, không cần phải gọi điều này một cách rõ ràng; chỉ cần sử dụngPyUnstable_WritePerfMapEntry()và nó sẽ khởi tạo trạng thái trong cuộc gọi đầu tiên.Trả về
0nếu thành công,-1khi không tạo/mở tệp bản đồ hoàn hảo hoặc-2khi không tạo được khóa. Kiểm traerrnođể biết thêm thông tin về nguyên nhân lỗi.
-
int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name)¶
- Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.
Viết một mục duy nhất vào tệp
/tmp/perf-$pid.map. Chức năng này là chủ đề an toàn. Đây là giao diện của một mục ví dụ:tên kích thước # address 7f3529fcf759 b py::bar:/run/t.py
Sẽ gọi
PyUnstable_PerfMapState_Init()trước khi viết mục, nếu tệp bản đồ hoàn hảo chưa được mở. Trả về0nếu thành công hoặc trả về mã lỗi tương tự nhưPyUnstable_PerfMapState_Init()nếu thất bại.
-
void PyUnstable_PerfMapState_Fini(void)¶
- Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.
Đóng tệp bản đồ hoàn hảo được mở bởi
PyUnstable_PerfMapState_Init(). Điều này được gọi bởi chính thời gian chạy trong khi tắt trình thông dịch. Nói chung, không có lý do gì để gọi điều này một cách rõ ràng, ngoại trừ để xử lý các tình huống cụ thể như phân nhánh.