8 điểm bởi GN⁺ 2025-03-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • Strobelight là bộ điều phối profiling của Meta, kết hợp nhiều công nghệ mã nguồn mở để hỗ trợ kỹ sư cải thiện hiệu năng và mức độ sử dụng tài nguyên
    • Sau khi triển khai, hệ thống đã đạt được hiệu quả tiết kiệm dung lượng hằng năm tương đương khoảng 15.000 máy chủ

Cách Strobelight hoạt động

  • Strobelight không phải là một profiler đơn lẻ mà là một bộ điều phối nhiều profiler
  • Hệ thống chạy trên tất cả các host production của Meta và thu thập các chỉ số hiệu năng như sau
    • Mức sử dụng CPU
    • Cấp phát bộ nhớ
    • Các metric hiệu năng khác
  • Nhờ đó, các kỹ sư có thể xác định nút thắt hiệu năng và các vấn đề lãng phí tài nguyên để tối ưu mã nguồn

Vai trò và sự cần thiết của profiler

  • Profiler là công cụ phân tích thống kê dựa trên lấy mẫu
  • Ví dụ: có thể phân tích call stack của hàm từ các sự kiện chu kỳ CPU và thời gian hàm chạy trên CPU
  • Việc này giúp nắm bắt chi tiết trạng thái thực thi của mã và góp phần cải thiện hiệu năng

Các profiler đa dạng của Strobelight

  • Strobelight bao gồm tổng cộng 42 profiler
    • Profiler bộ nhớ dựa trên jemalloc
    • Profiler số lần gọi hàm
    • Profiler dựa trên sự kiện theo từng ngôn ngữ như Python, Java, Erlang
    • Profiler AI/GPU
    • Profiler theo dõi thời gian off-CPU
    • Profiler theo dõi độ trễ của request dịch vụ
  • Các công cụ profiling có thể được chạy từ công cụ dòng lệnh hoặc web UI
  • Có thể thiết lập continuous profiling và profiling dựa trên trigger khi xảy ra điều kiện cụ thể

Hỗ trợ profiler ad-hoc

  • Nếu kỹ sư muốn thêm profiler mới thì cần sửa nhiều phần mã và triển khai
  • Có thể viết script bpftrace để thêm profiler nhanh chóng
  • Nhờ đó kỹ sư có thể nhanh chóng truy vết và phân tích vấn đề hiệu năng của một hàm cụ thể

Ngăn xung đột giữa các profiler

  • Strobelight tích hợp sẵn hệ thống ngăn xung đột tài nguyên giữa các profiler
  • Áp dụng các quy tắc như cấm sử dụng bộ đếm PMU khác trong khi đang theo dõi chu kỳ CPU
  • Thông qua hệ thống quản lý chạy đồng thời và hàng đợi, hệ thống giảm thiểu xung đột tài nguyên

Profiling tự động và lấy mẫu động

  • Strobelight tự động chạy profiling trên tất cả các dịch vụ của Meta
  • Tần suất và thời lượng lấy mẫu được tự động điều chỉnh theo workload của từng dịch vụ
  • Xác suất lấy mẫu và tần suất thu thập cũng được tự động hiệu chỉnh để cung cấp dữ liệu nhất quán

Các trường hợp tối ưu hiệu năng và tiết kiệm dung lượng

LBR profiler

  • Hỗ trợ lấy mẫu Last Branch Record (LBR), một tính năng phần cứng của Intel
  • Được dùng trong FDO (Feedback Directed Optimization) để cải thiện hiệu năng binary
  • Trên 200 dịch vụ hàng đầu của Meta, hệ thống giúp giảm tối đa 20% mức sử dụng chu kỳ CPU

Event profiler

  • Cung cấp chức năng tương tự công cụ perf của Linux
  • Lấy mẫu và trực quan hóa các sự kiện hiệu năng như chu kỳ CPU, lỗi trượt cache L3, v.v.
  • Có thể phát hiện và khắc phục trước các vấn đề phát sinh trên đường đi của mã

Stack Schemas và Strobemeta

Stack Schemas

  • Tăng khả năng quan sát bằng cách thêm tag vào call stack của hàm
  • Có thể loại bỏ các hàm không cần thiết khi lọc và trực quan hóa

Strobemeta

  • Thêm metadata động vào call stack tại runtime
  • Cung cấp thông tin chi tiết liên quan đến endpoint dịch vụ, độ trễ, v.v.

Xử lý symbolization

  • Chuyển đổi địa chỉ ảo của binary thành tên hàm và thông tin mã nguồn
  • Dựa trên các công nghệ mã nguồn mở như DWARF, ELF, gsym, blazesym
  • Việc symbolization được thực hiện sau profiling để tránh làm giảm hiệu năng

Công cụ trực quan hóa dữ liệu Strobelight

Scuba

  • Công cụ truy vấn và trực quan hóa dựa trên SQL
  • Cung cấp chuỗi thời gian, phân phối, flame graph, v.v. cho dữ liệu profiling

Tracery

  • Công cụ trực quan hóa dữ liệu profiling tổng hợp theo thời gian
  • Có thể trực quan hóa tích hợp service request span, chu kỳ CPU và dữ liệu off-CPU

Trường hợp "Biggest Ampersand"

  • Kỹ sư đã phát hiện vấn đề sao chép std::vector thông qua dữ liệu Strobelight
  • Thêm & sau từ khóa auto → ngăn sao chép không cần thiết
  • Kết quả là tiết kiệm được khoảng 15.000 máy chủ mỗi năm

Mã nguồn mở

1 bình luận

 
GN⁺ 2025-03-11
Ý kiến Hacker News
  • Khuyến nghị dùng Pyroscope của Grafana cho continuous profiling, đang dùng với Go và hoạt động tốt
    • Hỗ trợ nhiều ngôn ngữ và dựa trên eBPF
  • Mã C++ của Meta/FB dễ đọc hơn so với mã của các công ty công nghệ lớn lâu đời khác
  • Strobelight là cứu cánh, đặc biệt ở các dịch vụ có qps cao, vì giúp dễ dàng thấy phần nào đáng để tối ưu
  • Các binary không gian người dùng của Meta có bao gồm frame pointer nên có thể walk stack
    • Nếu không thì đã phải dùng các phương pháp phức tạp và kém hiệu quả
  • Họ nói có event profiler cho các ngôn ngữ không native (ví dụ: Python)
    • Không rõ họ đọc trạng thái Python bằng cách nào
  • Kho lưu trữ GitHub của Strobelight hiện vẫn còn khá sơ khai, có người thắc mắc khi nào sẽ được cập nhật
  • Có vẻ cái tên này tham chiếu đến việc dùng đèn strobe để kiểm tra chuyển động tuần hoàn tốc độ cao
  • Mong dự án mã nguồn mở này được tích hợp theo cách như vậy
    • UI nội bộ của Facebook trông khá ổn
  • Việc mô hình hóa chi phí tính toán là khó
    • Sẽ thú vị nếu áp dụng động lực học chất lỏng vào nhu cầu tính toán
  • Nghĩ rằng các đối thủ lớn của AWS/Azure/GCP đang gặp khó vì thiếu những công cụ như thế này
    • Ở Microsoft từng có người tạo công cụ theo dõi lưu lượng mạng và nó rất hữu ích cho việc debug
    • Tiếp cận mọi thứ của Meta với sự hoài nghi
  • Đây là profiling hiệu năng
    • Nhìn tiêu đề và domain cứ tưởng là profiling người dùng
  • Đang nỗ lực đưa Strobelight đến với mọi người thông qua Parca và Polar Signals
    • Một số phần đã có rồi và sẽ còn nhiều hơn trong năm nay