Có lẽ mọi người dùng Bazel đều gặp phải các bản dựng bị 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 biệt cho các mục tiêu có tác động đáng kể, chẳng hạn như:
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.
Thư viện phổ biến bị phụ thuộc rộng rãi bởi các mục tiêu khác.
Mục tiêu đại diện từ một loại mục tiêu (ví dụ: quy tắc tùy 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 bản dựng là nắm được vị trí đã tiêu tốn hết tài nguyên. Trang này liệt kê các chỉ số khác nhau mà bạn có thể thu thập. Phân tích hiệu suất của bản dựng quảng cáo hiển thị 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 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ó 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 khác nhau, nhưng ở đây chúng ta sẽ
về một số khái niệm và trường proto nói chung 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 khác nhau (query, cquery và aquery) cho phép người dùng để truy vấn biểu đồ mục tiêu, biểu đồ mục tiêu được định cấu hình và biểu đồ hành động . Ngôn ngữ truy vấn cung cấp bộ hàm hữu dụng trên các 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 trong JSON . Hồ sơ theo dõi JSON có thể rất hữu ích để nhanh chóng hiểu Bazel đã dành thời gian cho việc gì trong lời 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
thiếu lượt truy cập bộ nhớ đệm từ xa do sự khác biệt giữa máy và môi trường hoặc
hành động không tất định. Nếu bạn vượt qua cờ này
--experimental_execution_log_spawn_metrics
(có sẵn trong Bazel 5.2), lớp này cũng chứa các chỉ số sinh chi tiết, cả hai cho
được thực thi cục bộ và thực thi 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
phần nào của quá trình thực thi sinh ra luôn chậm hơn dự kiến (đối với
do 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 đườ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 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
và
--experimental_execution_graph_log_dep_type=all
để ghi nhật ký về
các hành động được thực thi và phần phụ thuộc lẫn nhau của chú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 lộ trình quan trọng. Mức kéo 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à biểu đồ hành động trước khi thực sự thực hiện chúng.
Đo điểm chuẩn với bazel-bench
Bazel bench là công cụ đo điểm chuẩn 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 hai git xác nhận với nhau tại một một phiên bản Bazel. Dùng để phát hiện các lỗi hồi quy trong bản dựng (thường thông qua thêm các phần phụ thuộc).
Điểm chuẩn Bazel: Đo điểm chuẩn của hai phiên bản Bazel với nhau ở mức một git cam kết. Dùng để phát hiện sự hồi quy trong chính Bazel (nếu bạn xảy ra việc duy trì / phát triển nhánh Bazel).
Điểm chuẩn sẽ giám sát thời gian treo tường, thời gian của CPU và thời gian hệ thống, cũng như dữ liệu mà Bazel giữ lại kích thước vùng nhớ khối xếp.
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 quá trình khác để giảm các nguồn biến đổi.