빌드 성능 측정항목 추출

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

아마도 모든 Bazel 사용자가 느리거나 느린 빌드를 경험했을 것입니다. 있습니다. 개별 빌드의 성능 향상에 특별한 가치 부여 다음과 같이 영향력이 큰 표적:

  1. 자주 반복되고 (재)빌드되는 핵심 개발자 타겟.

  2. 공통 라이브러리는 다른 타겟에 의해 널리 의존하고 있습니다.

  3. 타겟 클래스의 대표 타겟 (예: 맞춤 규칙), 한 빌드에서 문제를 진단하고 수정하는 것이 더 큰 규모입니다

빌드 성능을 향상하기 위한 중요한 단계는 빌드의 리소스를 소비하지 않습니다 이 페이지에는 수집할 수 있는 다양한 측정항목이 나와 있습니다. 빌드 성능 분석 시연 빌드 성능 문제를 감지하고 해결하는 방법

Bazel 빌드에서 측정항목을 추출하는 몇 가지 주요 방법은 다음과 같습니다.

빌드 이벤트 프로토콜 (BEP)

Bazel은 다양한 프로토콜 버퍼를 출력 build_event_stream.proto 드림 빌드 이벤트 프로토콜 (BEP)을 통해 사용자가 지정한 백엔드에서 집계될 수 있습니다. 사용 사례에 따라 다양한 방법으로 측정항목을 집계할 수 있지만 여기서는 몇 가지 개념과 proto 필드에 대해 알아보겠습니다.

Bazel의 query / cquery / aquery 명령어

Bazel은 3가지 쿼리 모드 (query, cqueryaquery)를 제공합니다. 대상 그래프 쿼리, 구성된 대상 그래프 및 작업 그래프 각각 1개의 값으로 사용합니다. 쿼리 언어는 다양한 플랫폼에서 사용할 수 있는 기능 모음 쿼리 모드를 사용하여 니즈에 따라 쿼리를 맞춤설정할 수 있습니다.

JSON Trace 프로필

빌드와 유사한 모든 Bazel 호출에 대해 Bazel은 JSON으로 트레이스 프로필을 작성합니다. 형식으로 입력합니다. JSON 트레이스 프로필은 이 기간 동안 Bazel이 무엇에 시간을 할애했는지 신속하게 파악하는 데 있습니다.

실행 로그

실행 로그는 문제 해결에 도움이 될 수 있습니다. 시스템 및 환경 차이로 인해 원격 캐시 적중 누락 또는 실행할 수 있습니다 이 플래그를 --experimental_execution_log_spawn_metrics 드림 (Bazel 5.2에서 사용 가능) 여기에는 작업을 수행할 수 있습니다 예를 들어 이러한 측정항목을 사용하여 로컬 및 원격 머신 성능을 비교하거나 생성 실행의 어떤 부분이 예상보다 지속적으로 느리게 실행되는지 사용할 수 없습니다.

실행 그래프 로그

JSON trace 프로필에는 주요 경로 정보가 포함되어 있지만 실행된 작업의 종속 항목 그래프에 관한 추가 정보가 필요합니다. Bazel 6.0부터 --experimental_execution_graph_log--experimental_execution_graph_log_dep_type=all: 상호 종속 항목을 구별할 수 있습니다

이 정보는 중요한 경로입니다. 드래그는 이를 위해 실행 그래프에서 특정 노드를 제거합니다.

데이터를 통해 빌드 및 작업 그래프에 대한 변경사항의 영향을 예측할 수 있음 해야 합니다.

bazel-bench를 사용한 벤치마킹

Bazel 벤치는 빌드 성능을 벤치마킹할 수 있는 Git 프로젝트용 벤치마킹 도구입니다. 다음과 같습니다.

  • 프로젝트 벤치마크: 한 번에 두 개의 git 커밋을 벤치마킹합니다. 단일 Bazel 버전 빌드에서 회귀를 감지하는 데 사용됩니다 (일반적으로 종속 항목 추가).

  • Bazel 벤치마크: 다음 위치에서 두 버전의 Bazel을 벤치마킹합니다. 커밋할 수 있습니다 Bazel 자체 내에서 회귀를 감지하는 데 사용됩니다( Bazel을 유지 / 포크할 수 있습니다.)

벤치마크에서 실제 경과 시간, CPU 시간, 시스템 시간 및 Bazel 유지 시간 모니터링 힙 크기.

또한 개별 가상 머신이 아닌 다른 프로세스를 실행하지 않고 가변성의 원인을 줄입니다.