
PEP 831: CPython 3.15 เปิด frame pointers เป็นค่าเริ่มต้น
รัน perf แล้วเห็นแค่ _PyEval_EvalFrameDefault ก้อนเดียว ไม่รู้ว่าฟังก์ชันไหนร้อน — มักเพราะไม่มี frame pointer chain ครับ
PEP 831 สถานะ Final สำหรับ Python 3.15 ให้ build CPython ด้วย -fno-omit-frame-pointer และ -mno-omit-leaf-frame-pointer เป็นค่าเริ่มต้น และส่งค่าเหล่านี้ผ่าน sysconfig ไปยังส่วนขยาย C ที่ build ทับ Python นี้
ทำไมถึงสำคัญ
Frame pointer ช่วยให้โปรไฟเลอร์และเครื่องมือ eBPF เดินสแต็กได้เร็วและครบ โดยไม่ต้องพึ่ง DWARF แบบหนัก ตามที่ PEP อธิบาย overhead เฉลี่ยที่วัดได้ราวต่ำกว่าร้อยละสองในหลายเครื่อง และมีทางถอย --without-frame-pointers สำหรับเวิร์กโหลดที่วัดแล้วทนไม่ได้
Recap
- อ่าน PEP 831 ก่อนอัป build ขององค์กร
- ลอง
perf/ เครื่องมือโปรไฟล์บน 3.15 แล้วเทียบความครบของสแต็ก - ถ้าวัด regression จริง ค่อยใช้
--without-frame-pointers