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/3}

Có thể mọi người dùng Bazel đều 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 riêng lẻ có giá trị cụ thể đối với các mục tiêu có tác động đáng kể, chẳng hạn như:

  1. Mục tiêu của nhà phát triển cốt lõi thường xuyên được lặp lại và xây dựng lại.

  2. Thư viện phổ biến bị phụ thuộc rộng rãi bởi các mục tiêu khác.

  3. 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 vấn đề trong một bản dựng có thể giúp giải quyết 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à nắm rõ tài nguyên được sử dụng ở đâu. Trang này liệt kê các chỉ số khác nhau mà bạn có thể thu thập. Bài viết Phân tích hiệu suất của bản dựng trình bày cách bạn có thể sử dụng những chỉ số này để phát hiện và khắc phục các vấn đề về hiệu suất của 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ủa bạn, cụ thể là:

Xây dựng giao thức sự kiện (BEP)

Bazel xuất ra nhiều vùng đệm giao thức build_event_stream.proto thông qua Giao thức sự kiện tạo (BEP). Các vùng đệm này có thể được tổng hợp bằng 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. Tuy nhiên, ở đây, chúng ta sẽ tìm hiểu một số khái niệm và trường proto hữu ích nói chung để bạn 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 biểu đồ mục tiêu, định cấu hình biểu đồ mục tiêu và biểu đồ hành động tương ứng. Ngôn ngữ truy vấn cung cấp một bộ hàm có thể sử dụng được trong nhiều chế độ truy vấn, 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ẽ viết một hồ sơ theo dõi ở định dạng JSON. Hồ sơ theo dõi JSON có thể rất hữu ích để nhanh chóng hiểu được Bazel đã dành thời gian để làm gì trong lệ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à khắc phục việc thiếu lượt truy cập bộ nhớ đệm từ xa 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), cờ này cũng sẽ chứa các chỉ số "spawn" chi tiết, cho cả các hành động đượ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 giữa hiệu suất cục bộ và hiệu suất của máy từ xa, hoặc để tìm hiểu xem phần nào của quá trình thực thi sinh ra luôn chậm hơn dự kiến (ví dụ: do đang xếp hàng).

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

Mặc dù hồ sơ theo dõi 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 trên biểu đồ phần phụ thuộc của các hành động đượ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 hành động đã thực hiện cũng như các phần phụ thuộc lẫn nhau của các hành động đó.

Bạn có thể dùng thông tin này để nắm được thao tác kéo do một nút thêm vào trên đường dẫn quan trọng. Thời gian kéo là khoảng thời gian mà bạn 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 bản dựng và biểu đồ hành động trước khi bạn thực sự thực hiện các thay đổi đó.

Đo điểm chuẩn với bazel-bench

Bazel bench là một công cụ đo điểm chuẩn dành cho các dự án Git để đ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 của dự án: Đo điểm chuẩn 2 git xác nhận với nhau trong một phiên bản Bazel duy nhất. Dùng để phát hiện số lần hồi quy trong bản dựng (thường bằng cách 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 trong một git cam kết duy nhất. Dùng để phát hiện sự hồi quy trong chính Bazel (nếu bạn muốn duy trì / phân nhánh Bazel).

Điểm chuẩn sẽ theo dõi thời gian lưu trữ, thời gian của CPU và thời gian hệ thống, cũng như kích thước vùng nhớ khối xếp được giữ lại của Bazel.

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 đổi.