แนะนำ Tachyon โปรไฟเลอร์แบบ sampling ใหม่ใน Python 3.15
(blog.changs.co.uk)กรณีศึกษาเกี่ยวกับ Tachyon โปรไฟเลอร์แบบ sampling ที่เพิ่มเข้ามาใน Python 3.15 สำหรับการทำให้มองเห็นคอขวดของมัลติเธรดและจับกับดักด้านประสิทธิภาพของ abstraction แบบ OOP
Tachyon คืออะไร?
โปรไฟเลอร์แบบ sampling ที่จะถูกเพิ่มเข้าไปใน standard library ของ Python 3.15
จุดสำคัญคือ รองรับสภาพแวดล้อม free-threading (GIL-free) ได้แบบเนทีฟ ซึ่งเป็นสิ่งที่โปรไฟเลอร์เดิม ๆ มองข้ามไป
คุณสมบัติหลัก
- ใช้วิธี sampling ทำให้มี overhead ต่ำ
- รองรับ การโปรไฟล์ทุกเธรดพร้อมกัน (
-aoption) - สามารถ เชื่อมต่อระยะไกล (attach) เข้ากับโปรเซสที่กำลังทำงานอยู่ได้
- รองรับ รูปแบบเอาต์พุตหลากหลาย เช่น flamegraph
- รับรู้ async — ใช้กับโปรแกรม asyncio ได้
วิธีรัน
sudo -E uv run -p 3.15.0a6t python -m profiling.sampling run \
-a --flamegraph -o profile.html -r 20khz your_script.py
# -a : โปรไฟล์ทุกเธรดนอกเหนือจาก main thread
# -r 20khz : sampling 20,000 ครั้งต่อวินาที (ปรับความละเอียดได้)
# ผลลัพธ์ : flamegraph HTML — คอลัมน์สีแดงคือ hot path
กรณีใช้งานจริง — ตรวจจับคอขวดของ free-threading
ก่อนปรับแต่ง — การเข้าถึง Grid ผ่าน __getitem__ กินเวลาในการทำงานทั้งหมด 75%
https://blog.changs.co.uk/images/unoptimised-bench.png
หลังปรับแต่ง — เปลี่ยนเป็นเข้าถึง tuple ภายในโดยตรงแล้วลดลงเหลือ 5.32%
https://blog.changs.co.uk/images/optimised-bench.png
ทำไมสิ่งนี้จึงสำคัญ
- ก่อนหน้านี้ ปัญหาประสิทธิภาพของ free-threading แทบทำได้แค่ "เดาเอา" ตอนค้นหา
- Tachyon เป็นเครื่องมือทางการตัวแรกที่แสดงให้เห็น ด้วยภาพว่าเธรดติดคอขวดอยู่ตรงไหน
- เปิดทางให้นักพัฒนา Python ทั่วไปสามารถวัดและปรับปรุงประสิทธิภาพของ free-threading ได้ด้วยตัวเอง
ยังไม่มีความคิดเห็น