对 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
将在写入�目之�调用
PyUnstable_PerfMapState_Init(),如果 perf map 文件尚未打开。 æˆ�功时返回0,或者在失败时返回与PyUnstable_PerfMapState_Init()相å�Œçš„错误代ç �。
-
void PyUnstable_PerfMapState_Fini(void)¶
- 这是 ä¸�稳定 API。 它å�¯èƒ½åœ¨å¾®å�‘布版ä¸ä¸�带è¦å‘Šåœ°æ”¹å�˜ã€‚
å…³é—
PyUnstable_PerfMapState_Init()所打开的 perf map 文件。 æ¤å‡½æ•°ä¼šåœ¨è§£é‡Šå™¨å…³é—期间由è¿�行时本身调用。 通常,应该没有ç�†ç”±æ˜¾å¼�地调用æ¤å‡½æ•°ï¼Œé™¤äº†å¤„ç�†ç‰¹æ®Šåœºæ™¯ä¾‹å¦‚分å�‰æ“�作。