นากกายสีมิ้นต์เดินตามโซ่กรอบกระดาษที่เชื่อมด้วยเส้นอำพันบนโต๊ะมิ้นต์

PEP 831: CPython 3.15 เปิด frame pointers เป็นค่าเริ่มต้น

น้องกายEngineering

รัน 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