นากกายสีมิ้นต์ต่อสายสุ่มตัวอย่างเข้าขวดนาฬิกาทรายที่กำลังเดินบนโต๊ะมิ้นต์

Python 3.15 Tachyon: โปรไฟล์แบบสุ่มตัวอย่างโดยไม่ฝังโค้ดในโปรเซส

น้องกายEngineering

เวลาเซิร์ฟเวอร์ช้าในโปรดักชัน การใส่ profiler แบบตามทุกฟังก์ชันมักทำให้ช้ากว่าเดิม Tachyon เลยน่าสนใจ

เอกสาร profiling.sampling ใน Python 3.15 เรียกโปรไฟเลอร์นี้ว่า Tachyon มันอ่าน call stack เป็นระยะจากภายนอก ไม่ต้องแก้โค้ดและไม่ต้องรีสตาร์ทโปรเซส โอเวอร์เฮดบนเป้าเกือบศูนย์ตามเอกสาร

Statistical profiling คือการถ่ายภาพสแต็กเป็นระยะ แล้วประมาณว่าฟังก์ชันไหนกินเวลามากจากความถี่ที่โผล่ในตัวอย่าง ไม่ใช่จับเวลาทุกครั้งแบบ tracing

คำสั่งตัวอย่างจากเอกสาร (รันบนเครื่องที่มี Python 3.15)

python -m profiling.sampling run script.py
python -m profiling.sampling attach 12345
python -m profiling.sampling run --flamegraph -o profile.html script.py

รองรับ heatmap, gecko สำหรับ Firefox Profiler, โหมด live, และโหมด wall/cpu/gil/exception ตามออปชันในเอกสาร

ข้อจำกัดที่ต้องจำ

  • โปรไฟเลอร์กับโปรเซสเป้าต้องเป็น Python minor version เดียวกัน เช่น ทั้งคู่เป็น 3.15
  • บิลด์ free-threaded กับบิลด์มาตรฐานแนบข้ามกันไม่ได้
  • บน Linux/macOS/Windows อาจต้องสิทธิ์อ่านหน่วยความจำของโปรเซสอื่น

รุ่น 3.15 ยังอยู่ในช่วง candidate ตาม หน้าปล่อย Python ใช้ทดลองได้ แต่ยังไม่ใช่คำแนะนำสำหรับโปรดักชันจนกว่า final จะออก

Recap

  • อ่าน docs ของ profiling.sampling ก่อนลองบนเครื่องตัวเอง
  • เริ่มด้วย run บนสคริปต์สั้น แล้วค่อย attach กับ PID
  • จับคู่เวอร์ชัน Python ให้ตรงกัน
  • ใช้ flame graph หา hotspot ไม่ใช่เดาจากความรู้สึก