3 điểm bởi GN⁺ 2023-12-08 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2023-12-08
Ý kiến trên Hacker News
  • Ý kiến từ nhà phát triển Spall:

    • Spall là một trong những profiler gọn nhẹ được nhắc đến trong bài.
    • Bài viết trên blog của tác giả về “cây thứ tự ngầm” rất ấn tượng, và thật tuyệt khi được thấy góc nhìn của người khác về cây dành cho các trace lớn.
    • Cây 4 nhánh sắp xếp theo kiểu eytzinger không gặp vấn đề gì trong việc xử lý hơn 3 tỷ hàm ngay cả ở mức trên 165fps.
    • Hiện đang làm việc trên cơ chế nén delta timestamp để đưa các sự kiện vào không gian nhỏ hơn.
    • Hy vọng bản build native của Spall có thể xử lý 10 tỷ sự kiện với 128GB RAM.
  • Khuyến nghị ETW cho người làm ứng dụng Windows:

    • Khuyến nghị Event Tracing for Windows (ETW) cho những ai làm ứng dụng Windows.
    • Blog của Bruce Dawson là điểm khởi đầu tốt nhất để tìm hiểu ETW.
  • Tổng quan về các giải pháp mã nguồn mở:

    • Đây là một bản tổng quan khá tốt về các giải pháp mã nguồn mở trong lĩnh vực này.
    • Tuy nhiên lại thiếu một mảng tracing quan trọng là gỡ lỗi du hành thời gian.
    • Có những giải pháp thú vị tận dụng hardware trace, instrumentation và deterministic replay.
    • Sẽ còn tốt hơn nữa nếu có tích hợp trực quan hóa để có thể quay lại một thời điểm cụ thể của chương trình và tái dựng toàn bộ bộ nhớ nhằm phục vụ việc gỡ lỗi.
  • Cách tuyển dụng tại Anthropic:

    • Lời mời cuối bài về cơ hội làm việc cùng Tristan tại Anthropic rất hấp dẫn.
    • Tristan giải thích rất rõ về những gì mình sẽ làm.
    • Có lẽ bài blog sẽ còn hay hơn nếu có thêm ảnh chụp màn hình của các trace.
  • Kỹ thuật tương quan giữa chương trình Python và packet:

    • Rất ấn tượng với kỹ thuật tìm tương quan giữa các sự kiện trong user space của chương trình Python và packet bằng cách truy vết các system call có đối số cụ thể.
  • Kinh nghiệm của nhóm phát triển plugin IDE:

    • Đang phát triển một plugin IDE bổ sung khả năng của debugger truyền thống vào ứng dụng đang chạy thực tế.
    • Nó cho phép người dùng phân tích các biến tùy ý trong lúc runtime để hiểu điều gì đang xảy ra trong mã.
    • Plugin này là miễn phí.
  • Nhu cầu của ngành về profiling chi phí thực thi JavaScript:

    • Cần có một cách tốt hơn để profiling chi phí thực thi của JavaScript theo hướng deterministic.
    • Từng có nỗ lực dùng Linux perf trong Chromium, nhưng thay đổi đó đã bị gỡ bỏ.
    • Muốn biết có mẹo nào để đo chi phí của JavaScript theo cách deterministic trong CI hay không.
  • Nhắc đến dtrace và bài rant của bcantrill:

    • Tác giả có nhắc ngắn gọn đến dtrace.
    • Khuyến nghị xem bài rant gần đây của bcantrill về việc vì sao bpftrace âm thầm làm mất sự kiện còn dtrace thì không.
  • Lời cảm ơn dành cho các công cụ hữu ích:

    • Bày tỏ sự cảm ơn đối với những công cụ hữu ích được nhắc đến trong bài.