Muhtemelen her Bazel kullanıcısı, beklenenden yavaş veya daha yavaş derlemelerle karşılaşmıştır. Ayrı ayrı derlemelerin performansını iyileştirmek, aşağıdakiler gibi önemli etkisi olan hedefler için özellikle değerlidir:
Sık sık tekrarlanan ve (yeniden) oluşturulan temel geliştirici hedefleri.
Başka hedeflerin büyük ölçüde bağımlı olduğu ortak kitaplıklar.
Bir hedef sınıfından (ör. özel kurallar) alınan ve tek bir derlemedeki sorunları teşhis edip düzelten temsili bir hedef, sorunları daha geniş ölçekte çözmenize yardımcı olabilir.
Derlemelerin performansını iyileştirmenin önemli adımlarından biri de nasıl harcanacağını belirler. Bu sayfada, toplayabileceğiniz farklı metrikler listelenir. Derleme performansının dökümünü alma vitrinleri derleme performansı sorunlarını tespit edip düzeltmek için bu metrikleri nasıl kullanabileceğinizi açıklayacağız.
Bazel derlemelerinizden metrik ayıklamak için birkaç temel yöntem vardır:
Derleme Etkinliği Protokolü (BEP)
Bazel, Build Event Protocol (BEP) aracılığıyla çeşitli protokol arabelleklerini build_event_stream.proto
çıkışına aktarır. Bu arabellekler, belirttiğiniz bir arka uç tarafından toplanabilir. Kullanım alanlarınıza bağlı olarak
Metrikleri çeşitli şekillerde toplamaya karar verebilirsiniz, ancak burada
bazı kavramlar ve proto alanları gibi değerlendirilebilir.
Bazel'in sorgusu / cquery / sorgu komutları
Bazel 3 farklı sorgu modu (sorgu, cquery ve aquery) içeren hedef grafiği, yapılandırılmış hedef grafiği ve işlem grafiğini sorgulamak için tıklayın. Sorgu dili, işlev paketi özellikleri de kullanabilirsiniz.
JSON İzleme Profilleri
Bazel, derleme benzeri her Bazel çağrısı için JSON biçiminde bir iz profili yazar biçimindedir. JSON izleme profili süreç boyunca Bazel'in neye zaman harcadığını ve çağrılır.
Yürütme Günlüğü
Yürütme günlüğü, makine ve ortam farklılıkları veya kesin olmayan işlemler nedeniyle eksik uzak önbellek isabetlerini gidermenize yardımcı olabilir. Bayrağı geçerseniz
--experimental_execution_log_spawn_metrics
(Bazel 5.2'den itibaren mevcuttur), hem
yerel olarak ve uzaktan gerçekleştirilen işlemlerdir. Bu metrikleri, örneğin yerel ve uzak makine performansı arasında karşılaştırma yapmak veya oluşturma işleminin hangi kısmının beklenenden daha yavaş olduğunu (ör. sıraya alma nedeniyle) öğrenmek için kullanabilirsiniz.
Yürütme Grafiği Günlüğü
JSON izleme profili, kritik yol bilgilerini içerse de
yürütülen işlemlerin bağımlılık grafiği hakkında ek bilgiye ihtiyacınız var.
Bazel 6.0 sürümünden itibaren,
--experimental_execution_graph_log
ve
hakkında bir günlük yazmak için --experimental_execution_graph_log_dep_type=all
ve bunların birbirine
bağımlılıklarını konuşacağız.
Bu bilgiler, bir düğüm tarafından eklenen sürüklemenin anlaşılması için ifade eder. Sürükleme, potansiyel olarak kaydedilebilecek süredir belirli bir düğümü yürütme grafiğinden kaldırarak değiştirebilirsiniz.
Veriler, derleme ve işlem grafiğindeki değişikliklerin etkisini tahmin etmenize yardımcı olur yardımcı olmanız gerekir.
bazel-bench ile karşılaştırma
Bazel bank bir geliştirme performansını karşılaştırmak için Git projelerinde bir şu durumlardan biridir:
Proje karşılaştırması: İki Git'in aynı anda birbiriyle karşılaştırılması tek Bazel sürümü olabilir. Derlemenizdeki regresyonları algılamak için kullanılır (genellikle (bağımlılıkların eklenmesi).
Bazel karşılaştırması: Bazel'in iki sürümünü şurada birbiriyle karşılaştırdık: tek bir Git kaydıdır. Bazel'in kendisinde gerileme tespit etmek için kullanılır (Bazel'i yönetiyorsanız/çatallıyorsanız).
Karşılaştırmalar; duvar süresini, CPU süresini, sistem saatini ve Bazel’in yığın boyutu kullanın.
Ayrıca, değişkenlik kaynaklarını azaltmak için Bazel karşılaştırmasını, diğer işlemler çalıştırmayan özel fiziksel makinelerde çalıştırmanız önerilir.