Mengekstrak metrik performa build

Laporkan masalah Lihat sumber Per Malam · 7,2 · 7,1 · 7,0 · 6,5 · 6,4

Mungkin setiap pengguna Bazel pernah mengalami {i> build<i} yang lambat atau lebih lambat dari diantisipasi. Meningkatkan performa masing-masing build memiliki nilai tertentu untuk target dengan dampak yang signifikan, seperti:

  1. Target developer inti yang sering diiterasi dan dibuat ulang.

  2. {i>Library<i} umum sangat diandalkan oleh target lain.

  3. Target representatif dari kelas target (mis. aturan khusus), mendiagnosis dan memperbaiki masalah dalam satu build dapat membantu skala yang lebih besar.

Langkah penting untuk meningkatkan performa build adalah memahami di mana resource digunakan. Halaman ini mencantumkan berbagai metrik yang dapat Anda kumpulkan. Mengelompokkan performa build cara menggunakan metrik ini untuk mendeteksi dan memperbaiki masalah performa build.

Ada beberapa cara utama untuk mengekstrak metrik dari build Bazel Anda, yaitu:

Protokol Peristiwa Build (BEP)

Bazel menghasilkan berbagai {i>buffer<i} protokol build_event_stream.proto melalui Build Event Protocol (BEP), yang akan dapat digabungkan oleh backend yang Anda tentukan. Tergantung pada kasus penggunaan, Anda mungkin memutuskan untuk menggabungkan metrik dengan berbagai cara, tapi di sini kita akan konsep dan isian proto yang umumnya akan berguna untuk dipertimbangkan.

Perintah kueri / kueri / kueri Bazel

Bazel menyediakan 3 mode kueri yang berbeda (kueri, kueri dan kueri) yang memungkinkan pengguna untuk melakukan kueri grafik target, grafik target yang dikonfigurasi, dan grafik tindakan secara berurutan. Bahasa kueri menyediakan rangkaian fungsi yang dapat digunakan di berbagai mode kueri, yang memungkinkan Anda untuk menyesuaikan kueri sesuai kebutuhan.

Profil Pelacakan JSON

Untuk setiap pemanggilan Bazel yang mirip build, Bazel akan menulis profil trace di JSON format font. Profil rekaman aktivitas JSON dapat akan sangat berguna untuk memahami dengan cepat berapa waktu Bazel menghabiskan waktu pemanggilan.

Log Eksekusi

Log eksekusi dapat membantu Anda memecahkan masalah dan memperbaiki tidak ditemukannya cache jarak jauh karena perbedaan komputer dan lingkungan atau tindakan non-deterministik. Jika Anda meneruskan flag --experimental_execution_log_spawn_metrics (tersedia dari Bazel 5.2) juga akan berisi metrik spawn terperinci, baik untuk tindakan yang dijalankan secara lokal dan dari jarak jauh. Anda dapat menggunakan metrik ini, misalnya membuat perbandingan antara kinerja mesin lokal dan jarak jauh atau untuk mengetahui bagian mana dari eksekusi spawn yang secara konsisten lebih lambat dari yang diharapkan (untuk misalnya karena antrean).

Log Grafik Eksekusi

Meskipun profil pelacakan JSON berisi informasi jalur penting, terkadang Anda memerlukan informasi tambahan tentang grafik dependensi dari tindakan yang dijalankan. Mulai dari Bazel 6.0, Anda dapat meneruskan penanda --experimental_execution_graph_log dan --experimental_execution_graph_log_dep_type=all untuk menulis log tentang tindakan yang dieksekusi dan saling dependensinya.

Informasi ini dapat digunakan untuk memahami {i>drag<i} yang ditambahkan oleh {i>node<i} pada jalur kritis. Seret adalah jumlah waktu yang berpotensi dihemat dengan menghapus {i>node<i} tertentu dari grafik eksekusi.

Data ini membantu Anda memprediksi dampak perubahan pada grafik build dan tindakan sebelum Anda benar-benar melakukannya.

Benchmark dengan bazel-bench

Bazel bench adalah untuk project Git guna melakukan tolok ukur performa build kasus berikut:

  • Tolok ukur project: Melakukan benchmark dua commit git terhadap satu sama lain secara sekaligus versi Bazel tunggal. Digunakan untuk mendeteksi regresi dalam build Anda (sering kali melalui penambahan dependensi).

  • Tolok ukur Bazel: Membuat tolok ukur dua versi Bazel terhadap satu sama lain di dengan satu git commit. Digunakan untuk mendeteksi regresi dalam Bazel itu sendiri (jika Anda untuk mempertahankan / fork Bazel).

Benchmark memantau waktu dinding, waktu CPU, dan waktu sistem, serta mempertahankan ukuran heap.

Disarankan juga untuk menjalankan bench Bazel pada komputer fisik khusus yang tidak menjalankan proses lain untuk mengurangi sumber variabilitas.