Derleme performansı metriklerini çıkarma

Muhtemelen her Bazel kullanıcısı, yavaş veya beklenenden daha yavaş derlemelerle karşılaşmıştır. Tek tek derlemelerin performansını artırmak, özellikle aşağıdaki gibi önemli etkiye sahip hedefler için değerlidir:

  1. Sık sık tekrarlanan ve (yeniden) oluşturulan temel geliştirici hedefleri.

  2. Diğer hedefler tarafından yaygın olarak kullanılan ortak kitaplıklar.

  3. Bir hedef sınıfından (ör. özel kurallar) temsili bir hedef seçerek, bir derlemedeki sorunları teşhis edip düzeltmek, daha büyük ölçekteki sorunların çözülmesine yardımcı olabilir.

Derlemelerin performansını artırmanın önemli bir adımı, kaynakların nerede harcandığını anlamaktır. Bu sayfada, toplayabileceğiniz farklı metrikler listelenmiştir. Derleme performansını analiz etme, derleme performansıyla ilgili sorunları tespit edip düzeltmek için bu metrikleri nasıl kullanabileceğinizi gösterir.

Bazel derlemelerinizden metrikleri çıkarmanın birkaç temel yolu vardır:

Derleme Etkinliği Protokolü (BEP)

Bazel, build_event_stream.proto Build Event Protocol (BEP) aracılığıyla çeşitli protokol arabellekleri oluşturur. Bu arabellekler, sizin tarafınızdan belirtilen bir arka uç tarafından toplanabilir. Kullanım alanlarınıza bağlı olarak metrikleri çeşitli şekillerde toplamaya karar verebilirsiniz. Ancak burada, genel olarak dikkate alınması faydalı olacak bazı kavramları ve proto alanlarını ele alacağız.

Bazel'in query / cquery / aquery komutları

Bazel, kullanıcıların sırasıyla hedef grafiği, yapılandırılmış hedef grafiği ve işlem grafiğini sorgulamasına olanak tanıyan 3 farklı sorgu modu (query, cquery ve aquery) sunar. Sorgu dili, farklı sorgu modlarında kullanılabilen bir işlev paketi sunar. Bu işlevler, sorgularınızı ihtiyaçlarınıza göre özelleştirmenize olanak tanır.

JSON İzleme Profilleri

Bazel, her derleme benzeri Bazel çağrısı için JSON biçiminde bir izleme profili yazar. JSON izleme profili, Bazel'in çağırma sırasında ne kadar zaman harcadığını hızlıca anlamak için çok faydalı olabilir.

Yürütme Günlüğü

Yürütme günlüğü, makine ve ortam farklılıkları veya deterministik olmayan işlemler nedeniyle eksik olan uzak önbellek isabetlerini gidermenize ve düzeltmenize yardımcı olabilir. İşareti iletirseniz --experimental_execution_log_spawn_metrics (Bazel 5.2'den itibaren kullanılabilir) hem yerel olarak hem de uzaktan yürütülen işlemler için ayrıntılı oluşturma metrikleri de içerir. Örneğin, bu metrikleri kullanarak yerel ve uzak makine performansı arasında karşılaştırma yapabilir veya oluşturma yürütmesinin hangi bölümünün sürekli olarak beklenenden daha yavaş olduğunu (örneğin, sıraya alma nedeniyle) öğrenebilirsiniz.

Yürütme Grafiği Günlüğü

JSON izleme profili kritik yol bilgilerini içerse de bazen yürütülen işlemlerin bağımlılık grafiği hakkında ek bilgilere ihtiyacınız olabilir. Bazel 6.0'dan itibaren, yürütülen işlemler ve aralarındaki bağımlılıklar hakkında günlük yazmak için --experimental_execution_graph_log ve --experimental_execution_graph_log_dep_type=all işaretlerini iletebilirsiniz.

Bu bilgiler, kritik yoldaki bir düğümün eklediği sürüklenmeyi anlamak için kullanılabilir. Sürükleme, belirli bir düğümün yürütme grafiğinden kaldırılmasıyla potansiyel olarak tasarruf edilebilecek süreyi ifade eder.

Bu veriler, oluşturma ve işlem grafiğinde değişiklik yapmadan önce bu değişikliklerin etkisini tahmin etmenize yardımcı olur.

bazel-bench ile karşılaştırma

Bazel bench, aşağıdaki durumlarda derleme performansını karşılaştırmak için Git projelerine yönelik bir karşılaştırma aracıdır:

  • Proje karşılaştırması: Tek bir Bazel sürümünde iki Git taahhüdünü karşılaştırma. Derlemenizdeki gerilemeleri tespit etmek için kullanılır (genellikle bağımlılıklar eklenerek).

  • Bazel karşılaştırması: Tek bir git commit'inde iki Bazel sürümünü karşılaştırma. Bazel'in kendisinde gerilemeleri tespit etmek için kullanılır (Bazel'i koruyorsanız veya çatalladıysanız).

Karşılaştırmalar, duvar zamanını, CPU zamanını ve sistem zamanını ve Bazel'in tutulan yığın boyutunu izler.

Varyans kaynaklarını azaltmak için Bazel bench'i başka işlemlerin çalışmadığı özel, fiziksel makinelerde çalıştırmanız da önerilir.