แนะนำเครื่องมือติดตาม
- แนะนำวิธีการติดตามหลากหลายแบบจากความหลงใหลและประสบการณ์ด้าน tracing
- รวมเครื่องมือ tracing ใหม่และน่าสนใจ 2 ตัว
- หัวใจสำคัญของ tracing: การเก็บข้อมูล timestamp ที่เกิดขึ้นในระบบและการแสดงผลผ่าน UI แบบไทม์ไลน์
การแสดงข้อมูลบน UI แบบไทม์ไลน์ได้อย่างง่ายดาย
- แสดงผลข้อมูลเหตุการณ์ในรูปแบบ JSON อย่างง่ายด้วย Chromium Event JSON Format
- ตรวจสอบไฟล์ tracing ผ่านตัวดูของ Google อย่าง Perfetto หรือ Catapult
- ใช้ยูทิลิตี Python เพื่อแปลงไฟล์ trace ให้เป็นลิงก์ที่คลิกได้และแชร์ต่อได้
ฟอร์แมตขั้นสูง: Fuchsia Trace Format และ Perfetto Protobuf
- Fuchsia Trace Format (FTF): ฟอร์แมตไบนารีที่เรียบง่ายและกะทัดรัดสำหรับไฟล์ trace ขนาดใหญ่
- Perfetto Protobuf: ฟอร์แมตแบบกะทัดรัดที่รองรับความสามารถได้มากกว่า และสามารถสร้างผ่านไลบรารี Protobuf
เครื่องมือติดตามหลากหลายประเภท
- แนะนำเครื่องมือแสดงผล trace หลายแบบ เช่น Speedscope, pprof, Rerun
- กล่าวถึงโปรไฟเลอร์วิวเวอร์อย่าง Trace Compass และ Firefox Profiler
วิธีการติดตาม
- แนะนำวิธี tracing ระดับล่าง เช่น hardware breakpoint, perf, และการสคริปต์ด้วย GDB
- ติดตามการทำงานของโปรแกรมด้วย Intel Processor Trace
- magic-trace: เครื่องมือสร้างไฟล์ trace สำหรับทำให้การเรียกใช้ฟังก์ชันมองเห็นได้
โปรไฟเลอร์แบบ tracing ที่อาศัยการทำ instrumentation
- เปรียบเทียบโปรไฟเลอร์แบบ instrumentation-based อย่าง Tracy, Optick, และ Perfetto
- เน้นความสำคัญของข้อมูลเหตุการณ์ที่มีข้อมูลเพิ่มเติมประกอบ
eBPF
- แนะนำซับซิสเต็ม eBPF สำหรับการ tracing โดยอาศัยลินุกซ์เคอร์เนล
- แนะนำเครื่องมือ tracing บน eBPF เช่น BCC, bpftrace, ply
ตัวอย่าง eBPF: การ tracing แพ็กเก็ตและ user event ด้วย Perfetto ของ Anthropic
- ผสาน BCC กับการแสดงผลด้วย Perfetto เพื่อวิเคราะห์ tail latency ของโค้ดเครือข่าย
- tracing เหตุการณ์ใน user space ด้วย eBPF และปรับแต่งประสิทธิภาพการประมวลผลเหตุการณ์ผ่าน C helper
การทำ binary instrumentation
- แนะนำวิธี binary instrumentation ที่ใช้เมื่อไม่สามารถเข้าถึงซอร์สโค้ดได้
- อธิบายเครื่องมืออย่าง bpftime, E9Patch, Frida
distributed tracing
- กล่าวถึงโซลูชันอย่าง OpenTelemetry, Zipkin, Odigos สำหรับ tracing ระหว่างบริการ
sampling profiler
- แนะนำโปรไฟเลอร์ที่สุ่มเก็บตัวอย่าง call stack ทั้งหมดของโปรแกรมเป็นระยะ
- ใช้ UI ที่มีแกนเวลา เช่น Speedscope, Samply
การทำ instrumentation กับ QEMU
- ใช้การ emulation แบบเต็มรูปแบบและการ hook ของ QEMU เมื่อเครื่องมือ tracing อื่นใช้ไม่ได้ผล
- แนะนำเครื่องมืออย่าง Cannoli, QEMU TCG Plugins, usercorn
ความเห็นของ GN⁺
สิ่งสำคัญที่สุดของบทความนี้คือการนำเสนอแค็ตตาล็อกวิธี tracing ที่กว้างขวาง ซึ่งสามารถนำไปใช้แก้ปัญหาหลากหลายประเภทได้ นอกจากนี้ยังอธิบายเครื่องมือและวิธี tracing หลายรูปแบบในระดับที่แม้แต่วิศวกรซอฟต์แวร์มือใหม่ก็เข้าใจได้ง่าย ทำให้เนื้อหานี้ทั้งมีประโยชน์และน่าสนใจมากสำหรับผู้ที่สนใจเรื่อง tracing โดยเฉพาะอย่างยิ่ง ตัวอย่างที่ผสาน eBPF tracing เข้ากับการแสดงผลด้วย Perfetto จากกรณีใช้งานจริง แสดงให้เห็นถึงความเป็นไปได้ในการนำไปใช้ในงานจริง และอาจมอบมุมมองใหม่ ๆ ให้กับผู้อ่านได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ความเห็นจากนักพัฒนา Spall:
คำแนะนำ ETW สำหรับผู้ที่ทำงานกับแอปพลิเคชัน Windows:
ภาพรวมของโซลูชันโอเพนซอร์ส:
วิธีการจ้างงานที่ Anthropic:
เทคนิคการหาความสัมพันธ์ระหว่างโปรแกรม Python กับแพ็กเก็ต:
ประสบการณ์ของทีมพัฒนาปลั๊กอิน IDE:
ความต้องการของอุตสาหกรรมด้านการโปรไฟล์ต้นทุนการรัน JavaScript:
การกล่าวถึง dtrace และคำบ่นของ bcantrill:
ขอบคุณสำหรับเครื่องมือที่มีประโยชน์: