Giới thiệu các công cụ truy vết
- Giới thiệu nhiều phương pháp truy vết khác nhau dựa trên đam mê và kinh nghiệm về tracing
- Bao gồm 2 công cụ truy vết mới và thú vị
- Cốt lõi của tracing: thu thập dữ liệu dấu thời gian phát sinh trong hệ thống và trực quan hóa bằng giao diện dòng thời gian
Dễ dàng trực quan hóa dữ liệu trên giao diện dòng thời gian
- Trực quan hóa dữ liệu sự kiện ở định dạng JSON đơn giản bằng Chromium Event JSON Format
- Kiểm tra tệp truy vết bằng trình xem của Google Perfetto hoặc Catapult
- Dùng tiện ích Python để chuyển tệp trace thành liên kết có thể nhấp và chia sẻ
Định dạng nâng cao: Fuchsia Trace Format và Perfetto Protobuf
- Fuchsia Trace Format (FTF): định dạng nhị phân đơn giản và gọn nhẹ cho các tệp trace dung lượng lớn
- Perfetto Protobuf: định dạng gọn nhẹ hỗ trợ nhiều tính năng hơn, có thể tạo bằng thư viện Protobuf
Nhiều công cụ truy vết khác nhau
- Giới thiệu nhiều công cụ trực quan hóa trace như Speedscope, pprof, Rerun
- Đề cập đến các trình xem profiler như Trace Compass, Firefox Profiler
Phương pháp truy vết
- Giới thiệu các phương pháp tracing mức thấp như hardware breakpoint, perf, scripting với GDB
- Theo dõi việc thực thi chương trình bằng Intel Processor Trace
- magic-trace: công cụ tạo tệp trace để trực quan hóa lời gọi hàm
Profiler truy vết dựa trên instrumentation
- So sánh các profiler truy vết dựa trên instrumentation như Tracy, Optick, Perfetto
- Nhấn mạnh tầm quan trọng của dữ liệu sự kiện có kèm thêm thông tin
eBPF
- Giới thiệu subsystem eBPF để tracing bằng nhân Linux
- Giới thiệu các công cụ tracing eBPF như BCC, bpftrace, ply
Ví dụ eBPF: truy vết gói tin và sự kiện người dùng dựa trên Perfetto của Anthropic
- Kết hợp BCC với trực quan hóa Perfetto để phân tích tail latency trong mã mạng
- Truy vết sự kiện user-space bằng eBPF và tối ưu xử lý sự kiện thông qua helper viết bằng C
Binary instrumentation
- Giới thiệu phương pháp binary instrumentation dùng khi không thể truy cập mã nguồn
- Mô tả các công cụ như bpftime, E9Patch, Frida
Distributed tracing
- Đề cập các giải pháp như OpenTelemetry, Zipkin, Odigos để truy vết giữa các dịch vụ
Sampling profiler
- Giới thiệu profiler lấy mẫu định kỳ toàn bộ call stack của chương trình
- Sử dụng giao diện có trục thời gian như Speedscope, Samply
Instrumentation với QEMU
- Giới thiệu cơ chế mô phỏng toàn phần và hook của QEMU khi mọi công cụ truy vết khác đều thất bại
- Giới thiệu các công cụ như Cannoli, QEMU TCG Plugins, usercorn
Ý kiến của GN⁺
Điểm quan trọng nhất của bài viết này là nó cung cấp một danh mục rất rộng các phương pháp truy vết có thể dùng để giải quyết nhiều loại vấn đề khác nhau. Bài viết giới thiệu đa dạng công cụ và phương pháp tracing ở mức đủ dễ hiểu ngay cả với kỹ sư phần mềm mới vào nghề, nên rất hữu ích và hấp dẫn với những ai quan tâm đến tracing. Đặc biệt, ví dụ kết hợp truy vết eBPF với trực quan hóa Perfetto thông qua các tình huống thực tế cho thấy khả năng ứng dụng trong công việc và có thể mang lại những góc nhìn mới cho độc giả.
1 bình luận
Ý kiến trên Hacker News
Ý kiến từ nhà phát triển Spall:
Khuyến nghị ETW cho người làm ứng dụng Windows:
Tổng quan về các giải pháp mã nguồn mở:
Cách tuyển dụng tại Anthropic:
Kỹ thuật tương quan giữa chương trình Python và packet:
Kinh nghiệm của nhóm phát triển plugin IDE:
Nhu cầu của ngành về profiling chi phí thực thi JavaScript:
Nhắc đến dtrace và bài rant của bcantrill:
Lời cảm ơn dành cho các công cụ hữu ích: