3 คะแนน โดย GN⁺ 2023-12-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

แนะนำเครื่องมือติดตาม

  • แนะนำวิธีการติดตามหลากหลายแบบจากความหลงใหลและประสบการณ์ด้าน 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 ความคิดเห็น

 
GN⁺ 2023-12-08
ความคิดเห็นจาก Hacker News
  • ความเห็นจากนักพัฒนา Spall:

    • Spall เป็นหนึ่งในโปรไฟเลอร์น้ำหนักเบาที่กล่าวถึงในบทความ
    • โพสต์บล็อกของผู้เขียนเกี่ยวกับ "implicit order tree" น่าประทับใจมาก และเป็นเรื่องดีที่ได้เห็นมุมมองของคนอื่นต่อโครงสร้างต้นไม้สำหรับเทรซขนาดใหญ่
    • ต้นไม้ 4-ary แบบ eytzinger-ordered ไม่มีปัญหาในการจัดการฟังก์ชันมากกว่า 3 พันล้านรายการแม้ที่ความเร็วเกิน 165fps
    • ตอนนี้กำลังทำงานกับการบีบอัดค่าเดลตาของ timestamp เพื่อบันทึกอีเวนต์ให้ใช้พื้นที่น้อยลง
    • หวังว่าใน native build ของ Spall จะสามารถจัดการอีเวนต์ได้ 1 หมื่นล้านรายการด้วย RAM 128GB
  • คำแนะนำ ETW สำหรับผู้ที่ทำงานกับแอปพลิเคชัน Windows:

    • ขอแนะนำ Event Tracing for Windows (ETW) สำหรับผู้ที่ทำงานกับแอปพลิเคชันบน Windows
    • บล็อกของ Bruce Dawson เป็นจุดเริ่มต้นที่ดีที่สุดสำหรับ ETW
  • ภาพรวมของโซลูชันโอเพนซอร์ส:

    • นี่เป็นภาพรวมของโซลูชันโอเพนซอร์สในพื้นที่นี้ที่ค่อนข้างดีมาก
    • แต่ยังขาดด้านสำคัญของการเทรซอย่าง time travel debugging
    • มีโซลูชันที่น่าสนใจซึ่งใช้ hardware trace, instrumentation และ deterministic replay
    • จะดียิ่งขึ้นหากมีการผสานระบบแสดงผลที่ทำให้สามารถย้อนกลับไปยังจุดใดจุดหนึ่งของโปรแกรมและสร้างหน่วยความจำขึ้นมาใหม่ทั้งหมดเพื่อดีบักได้
  • วิธีการจ้างงานที่ Anthropic:

    • ข้อเสนอท้ายบทความเกี่ยวกับโอกาสร่วมงานกับ Tristan ที่ Anthropic น่าสนใจมาก
    • Tristan อธิบายได้ดีว่าจะได้ทำงานเกี่ยวกับอะไร
    • คิดว่าน่าจะดีหากในโพสต์บล็อกมีภาพหน้าจอของเทรซมากกว่านี้
  • เทคนิคการหาความสัมพันธ์ระหว่างโปรแกรม Python กับแพ็กเก็ต:

    • ทึ่งกับเทคนิคการติดตาม system call ที่มีอาร์กิวเมนต์เฉพาะ เพื่อหาความสัมพันธ์ระหว่างอีเวนต์ใน user space ของโปรแกรม Python กับแพ็กเก็ต
  • ประสบการณ์ของทีมพัฒนาปลั๊กอิน IDE:

    • กำลังพัฒนาปลั๊กอิน IDE ที่เพิ่มความสามารถแบบดีบักเกอร์ดั้งเดิมให้กับแอปที่กำลังรันอยู่ใน production
    • ช่วยให้ผู้ใช้วิเคราะห์ตัวแปรใดก็ได้ระหว่างรันไทม์ เพื่อทำความเข้าใจว่าเกิดอะไรขึ้นในโค้ด
    • ปลั๊กอินนี้ใช้ฟรี
  • ความต้องการของอุตสาหกรรมด้านการโปรไฟล์ต้นทุนการรัน JavaScript:

    • ยังต้องการวิธีที่ดีกว่านี้ในการโปรไฟล์ต้นทุนการรันของ JavaScript แบบ deterministic
    • เคยมีความพยายามใช้ Linux perf ใน Chromium แต่การเปลี่ยนแปลงนั้นถูกลบออกไปแล้ว
    • อยากได้คำแนะนำเกี่ยวกับวิธีวัดต้นทุนของ JavaScript แบบ deterministic ใน CI
  • การกล่าวถึง dtrace และคำบ่นของ bcantrill:

    • ผู้เขียนกล่าวถึง dtrace แบบสั้น ๆ
    • แนะนำให้ไปดูคำบ่นล่าสุดของ bcantrill เกี่ยวกับปัญหาที่ bpftrace ทำอีเวนต์หายแบบเงียบ ๆ และเหตุผลที่ dtrace ไม่เป็นแบบนั้น
  • ขอบคุณสำหรับเครื่องมือที่มีประโยชน์:

    • แสดงความขอบคุณต่อเครื่องมือที่มีประโยชน์ที่กล่าวถึงในบทความ