Derleme performansı metriklerini çıkarma

Sorun bildirin Kaynağı göster Gece · 7,4 , 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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:

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

  2. Başka hedeflerin büyük ölçüde bağımlı olduğu ortak kitaplıklar.

  3. 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.