- 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
Ý kiến Hacker News