Derleme performansı metriklerini çıkarma

Sorun bildir Kaynağı göster

Muhtemelen her Bazel kullanıcısı beklenenden yavaş veya daha yavaş derlemelerle karşılaşmıştır. Bağımsız derlemelerin performansını artırmak, aşağıdakiler gibi önemli etkiye sahip hedefler için belirli bir değer sağlar:

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

  2. Diğer hedeflerin büyük ölçüde bağımlı olduğu yaygın kitaplıklar.

  3. Bir hedef sınıfındaki (ör. özel kurallar) temsili bir hedef, tek bir derlemedeki sorunların teşhis edilmesi ve düzeltilmesi, sorunların daha geniş ölçekte çözülmesine yardımcı olabilir.

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

Bazel derlemelerinizden metrikleri almanın birkaç temel yolu vardır. Örneğin:

Derleme Etkinliği Protokolü (BEP)

Bazel, sizin belirlediğiniz bir arka uç tarafından toplanabilen Etkinlik Derleme Protokolü (BEP) aracılığıyla çeşitli protokol arabellekleri build_event_stream.proto üretir. Kullanım alanlarınıza bağlı olarak, metrikleri çeşitli şekillerde toplamaya karar verebilirsiniz ancak burada genel olarak göz önünde bulundurulması gereken bazı kavramlara ve proto alanlarına değineceğiz.

Bazel'ın sorgusu / sorgu / aquery komutları

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

JSON İzleme Profilleri

Bazel, derleme benzeri her Bazel çağrısı için JSON biçiminde bir iz profili yazar. JSON izleme profili, Bazel'ın çağrı sırasında neye zaman geçirdiğini hızlı bir şekilde anlamak için çok yararlı olabilir.

Yürütme Günlüğü

Yürütme günlüğü, makine ve ortam farklılıkları veya belirleyici olmayan işlemler nedeniyle eksik olan uzak önbellek isabetleriyle ilgili sorunları gidermenize ve düzeltmenize yardımcı olabilir. --experimental_execution_log_spawn_metrics işaretini geçerseniz (Bazel 5.2'de kullanılabilir), hem yerel olarak hem de uzaktan gerçekleştirilen işlemler için ayrıntılı oluşturma metrikleri içerir. Bu metrikleri, örneğin yerel ve uzak makine performansı arasında karşılaştırmalar yapmak veya ortaya çıkan yürütme işleminin hangi bölümünün sürekli olarak 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 bazen yürütülen işlemlerin bağımlılık grafiği hakkında ek bilgiye ihtiyacınız olabilir. Bazel 6.0'dan başlayarak, yürütülen işlemler ve bunların karşılıklı bağımlılıkları hakkında bir günlük yazmak için --experimental_execution_graph_log ve --experimental_execution_graph_log_dep_type=all işaretlerini aktarabilirsiniz.

Bu bilgiler, kritik yoldaki bir düğüm tarafından eklenen sürüklemeyi anlamak için kullanılabilir. Sürükleme, belirli bir düğümün yürütme grafiğinden kaldırılmasıyla kazanılabilecek süredir.

Veriler, derleme ve işlem grafiğindeki değişikliklerin etkisini siz bunları uygulamadan önce tahmin etmenize yardımcı olur.

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

Bazel karşılaştırma, Git projelerinin aşağıdaki durumlarda derleme performansını karşılaştırmak için kullanılan bir karşılaştırma aracıdır:

  • Proje karşılaştırması: İki git kaydetme işleminin tek bir Bazel sürümünde birbiriyle karşılaştırılması. Derlemenizdeki regresyonları tespit etmek için kullanılır (genellikle bağımlılıkların eklenmesi yoluyla).

  • Bazel karşılaştırması: Bazel'ın iki sürümünün tek bir git kaydetmesinde birbirleriyle karşılaştırılması. Bazel'in kendi içindeki regresyonları algılamak için kullanılır (Bazel'ı korursanız / çatallarsanız).

Karşılaştırmalar duvar süresini, CPU süresini ve sistem saatini ve Bazel'ın saklanan yığın boyutunu izler.

Değişkenlik kaynaklarını azaltmak amacıyla, başka işlemleri çalıştırmayan özel fiziksel makinelerde Bazel bench'in çalıştırılması da önerilir.