Trích xuất các chỉ số hiệu suất bản dựng

Báo cáo vấn đề Xem nguồn Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Có lẽ mọi người dùng Bazel đều đã từng gặp phải các bản dựng chậm hoặc chậm hơn dự kiến. Việc cải thiện hiệu suất của từng bản dựng có giá trị đặc biệt đối với những mục tiêu có tác động đáng kể, chẳng hạn như:

  1. Các mục tiêu chính của nhà phát triển thường được lặp lại và (xây dựng lại).

  2. Các thư viện phổ biến mà các mục tiêu khác phụ thuộc vào.

  3. Một mục tiêu đại diện từ một lớp mục tiêu (ví dụ: quy tắc tuỳ chỉnh), việc chẩn đoán và khắc phục các vấn đề trong một bản dựng có thể giúp giải quyết các vấn đề ở quy mô lớn hơn.

Một bước quan trọng để cải thiện hiệu suất của các bản dựng là hiểu rõ nơi tiêu tốn tài nguyên. Trang này liệt kê các chỉ số mà bạn có thể thu thập. Phân tích hiệu suất bản dựng cho thấy cách bạn có thể sử dụng các chỉ số này để phát hiện và khắc phục các vấn đề về hiệu suất bản dựng.

Có một số cách chính để trích xuất chỉ số từ các bản dựng Bazel, cụ thể là:

Giao thức sự kiện bản dựng (BEP)

Bazel xuất nhiều vùng đệm giao thức build_event_stream.proto thông qua Giao thức sự kiện xây dựng (BEP). Vùng đệm này có thể được tổng hợp bởi một phần phụ trợ do bạn chỉ định. Tuỳ thuộc vào trường hợp sử dụng, bạn có thể quyết định tổng hợp các chỉ số theo nhiều cách, nhưng ở đây, chúng ta sẽ xem xét một số khái niệm và trường proto thường hữu ích để cân nhắc.

Các lệnh truy vấn / cquery / aquery của Bazel

Bazel cung cấp 3 chế độ truy vấn (query, cqueryaquery) cho phép người dùng truy vấn đồ thị mục tiêu, đồ thị mục tiêu đã định cấu hình và đồ thị hành động tương ứng. Ngôn ngữ truy vấn cung cấp một bộ hàm có thể dùng trong các chế độ truy vấn khác nhau, cho phép bạn tuỳ chỉnh truy vấn theo nhu cầu của mình.

Hồ sơ theo dõi JSON

Đối với mọi lệnh gọi Bazel giống như bản dựng, Bazel sẽ ghi một hồ sơ theo dõi ở định dạng JSON. Hồ sơ dấu vết JSON có thể rất hữu ích để nhanh chóng nắm được thời gian Bazel đã dành cho việc gì trong quá trình gọi.

Nhật ký thực thi

Nhật ký thực thi có thể giúp bạn khắc phục sự cố và sửa các lượt truy cập bộ nhớ đệm từ xa bị thiếu do sự khác biệt về máy và môi trường hoặc các hành động không xác định. Nếu bạn truyền cờ --experimental_execution_log_spawn_metrics (có trong Bazel 5.2), thì cờ này cũng sẽ chứa các chỉ số chi tiết về quy trình tạo, cho cả các thao tác được thực thi cục bộ và từ xa. Ví dụ: bạn có thể sử dụng các chỉ số này để so sánh hiệu suất của máy cục bộ và máy từ xa hoặc để tìm ra phần nào của quá trình thực thi sinh sản luôn chậm hơn dự kiến (ví dụ: do xếp hàng).

Nhật ký biểu đồ thực thi

Mặc dù hồ sơ dấu vết JSON chứa thông tin về đường dẫn quan trọng, nhưng đôi khi bạn cần thêm thông tin về biểu đồ phần phụ thuộc của các thao tác đã thực thi. Kể từ Bazel 6.0, bạn có thể truyền các cờ --experimental_execution_graph_log--experimental_execution_graph_log_dep_type=all để ghi nhật ký về các thao tác đã thực thi và các mối quan hệ phụ thuộc lẫn nhau của chúng.

Bạn có thể sử dụng thông tin này để hiểu rõ lực cản do một nút tạo ra trên đường dẫn quan trọng. Độ trễ là khoảng thời gian có thể tiết kiệm được bằng cách xoá một nút cụ thể khỏi biểu đồ thực thi.

Dữ liệu này giúp bạn dự đoán tác động của các thay đổi đối với biểu đồ bản dựng và hành động trước khi bạn thực sự thực hiện các thay đổi đó.

Đo điểm chuẩn bằng bazel-bench

Bazel bench là một công cụ đo điểm chuẩn cho các dự án Git nhằm đo điểm chuẩn hiệu suất bản dựng trong các trường hợp sau:

  • Điểm chuẩn dự án: Đo điểm chuẩn hai cam kết git với nhau ở một phiên bản Bazel duy nhất. Được dùng để phát hiện các lỗi hồi quy trong bản dựng (thường là do thêm các phần phụ thuộc).

  • Điểm chuẩn Bazel: Đo điểm chuẩn hai phiên bản Bazel với nhau tại một lần xác nhận git duy nhất. Được dùng để phát hiện các lỗi hồi quy trong chính Bazel (nếu bạn duy trì / phân nhánh Bazel).

Các điểm chuẩn theo dõi thời gian thực, thời gian CPU và thời gian hệ thống cũng như kích thước vùng nhớ heap được Bazel giữ lại.

Bạn cũng nên chạy Bazel bench trên các máy vật lý chuyên dụng không chạy các quy trình khác để giảm các nguồn biến động.