Mengekstrak metrik performa build

Laporkan masalah Lihat sumber {/18/}{/1/}

Mungkin setiap pengguna Bazel mengalami build yang lambat atau lebih lambat dari yang diperkirakan. Meningkatkan performa setiap 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 class target (misalnya, aturan kustom), mendiagnosis dan memperbaiki masalah dalam satu build dapat membantu menyelesaikan masalah pada skala yang lebih besar.

Salah satu langkah penting untuk meningkatkan performa build adalah memahami di mana resource dibelanjakan. Halaman ini mencantumkan berbagai metrik yang dapat Anda kumpulkan. Mengelompokkan performa build menunjukkan 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 buffering protokol build_event_stream.proto melalui Build Event Protocol (BEP), yang dapat digabungkan oleh backend yang Anda tentukan. Bergantung pada kasus penggunaan, Anda mungkin memutuskan untuk menggabungkan metrik dengan berbagai cara. Namun, di sini kita akan membahas beberapa konsep dan kolom proto yang secara umum akan berguna untuk dipertimbangkan.

Perintah kueri / kueri / kueri Bazel

Bazel menyediakan 3 mode kueri berbeda (query, cquery, dan aquery) yang memungkinkan pengguna membuat kueri grafik target, grafik target yang dikonfigurasi, dan grafik tindakan masing-masing. Bahasa kueri menyediakan rangkaian fungsi yang dapat digunakan di berbagai mode kueri, sehingga Anda dapat menyesuaikan kueri sesuai kebutuhan.

Profil Pelacakan JSON

Untuk setiap pemanggilan Bazel yang mirip build, Bazel menulis profil rekaman aktivitas dalam format JSON. Profil rekaman aktivitas JSON dapat sangat berguna untuk memahami dengan cepat waktu penggunaan Bazel selama pemanggilan.

Log Eksekusi

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

Log Grafik Eksekusi

Meskipun profil rekaman aktivitas JSON berisi informasi jalur penting, terkadang Anda memerlukan informasi tambahan tentang grafik dependensi tindakan yang dijalankan. Mulai Bazel 6.0, Anda dapat meneruskan flag --experimental_execution_graph_log dan --experimental_execution_graph_log_dep_type=all untuk menulis log tentang tindakan yang dijalankan dan inter-dependensinya.

Informasi ini dapat digunakan untuk memahami tarikan yang ditambahkan oleh node pada jalur penting. Tarik adalah jumlah waktu yang berpotensi dapat dihemat dengan menghapus node 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 alat tolok ukur untuk project Git guna menjalankan benchmark performa build dalam kasus berikut:

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

  • Tolok ukur Bazel: Melakukan benchmark dua versi Bazel terhadap satu sama lain pada satu git commit. Digunakan untuk mendeteksi regresi dalam Bazel itu sendiri (jika Anda kebetulan mempertahankan/mempertahankan/memproses Bazel).

Benchmark memantau waktu dinding, waktu CPU, dan waktu sistem, serta ukuran heap yang dipertahankan Bazel.

Sebaiknya jalankan Bazel bench pada mesin fisik khusus yang tidak menjalankan proses lain untuk mengurangi sumber variabilitas.