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

Báo cáo sự cố Xem nguồn

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

  1. Mục tiêu chính của nhà phát triển thường xuyên được lặp lại và (được) tạo lại.

  2. Các thư viện phổ biến phụ thuộc rất nhiều vào 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 tùy chỉnh), 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à tìm hiểu nơi tài nguyên được sử dụng. 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 giới thiệu 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, đó 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 xây dựng (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 của mình, 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 tôi sẽ đề cập đến một số khái niệm và trường proto sẽ hữu ích nói chung.

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

Bazel cung cấp 3 chế độ truy vấn (query, cqueryaquery) khác nhau, cho phép người dùng truy vấn biểu đồ mục tiêu, biểu đồ mục tiêu đã định cấu hình 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 trên nhiều chế độ truy vấn, cho phép bạn tuỳ chỉnh các truy vấn theo nhu cầu.

Cấu hình 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 những gì Bazel đã dành thời gian 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 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), cờ này cũng sẽ chứa các chỉ số spawn (chi tiết) sinh sản 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ủa máy cục bộ và từ xa, hoặc tìm ra phần nào của quá trình thực thi sinh sản liên tục chậm hơn dự kiến (chẳng hạn như do quá trình 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ể chuyể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 đã được thực thi và các phần phụ thuộc của chúng.

Bạn có thể sử dụng thông tin này để hiểu về phương thức kéo mà một nút thêm vào trên đường dẫn quan trọng. Kéo là khoảng thời gian có thể lưu được bằng cách xoá một nút cụ thể khỏi biểu đồ thực thi.

Dữ liệu 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 thực sự thực hiện những 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 để đ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 git cam kết với nhau tại một phiên bản Bazel. Dùng để phát hiện lỗi hồi quy trong bản dựng (thường là thông qua việc 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 tại một cam kết git duy nhất. Dùng để phát hiện lỗi hồi quy trong chính Bazel (nếu bạn muốn duy trì / Fork Bazel).

Các phép đo điểm chuẩn theo dõi thời gian treo tường, thời gian CPU và thời gian hệ thống cũng như kích thước vùng nhớ khối xếp của Bazel.

Bạn cũng nên chạy băng ghế dài Bazel 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 bớt nguồn thay đổi.