Derleme performansı metriklerini çıkarma

Sorun bildirin Kaynağı göster

Muhtemelen her Bazel kullanıcısı, beklenenden daha yavaş veya daha yavaş derlemeler yaşamıştır. Her bir derlemenin performansını artırmak, önemli ölçüde etki sahibi olan hedefler için belirli bir değer sunar. Örneğin:

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

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

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

Yapıların performansını artırmanın önemli bir adımı, kaynakların nerede harcandığını anlamaktır. Bu sayfada toplayabileceğiniz farklı metrikler listelenir. Derleme performansını ayırma, bu metrikleri bina performansı sorunlarını tespit etmek ve düzeltmek için nasıl kullanabileceğinizi gösterir.

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

Derleme Etkinliği Protokolü (BEP)

Bazel, sizin belirttiğiniz bir arka uç ile toplanabilecek Derleme Etkinliği Protokolü (BEP) aracılığıyla çeşitli protokol arabellekleri oluştururbuild_event_stream.proto. Kullanım alanlarınıza bağlı olarak, metrikleri çeşitli şekillerde toplamaya karar verebilirsiniz, ancak genel olarak dikkate alınması gereken bazı kavramlar ve proto alanları üzerinde duracağız.

Bazel'ın sorgusu / cquery / aquery komutları

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

JSON İz Profilleri

Derlemeye benzer her Bazel çağrısı için Bazel, JSON biçiminde bir iz profili yazar. JSON iz profili, Bazel'ın çağrı sırasında ne kadar 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 uzak önbellek isabetlerini gidermenize yardımcı olabilir. Bayrak --experimental_execution_log_spawn_metrics (Bael 5.2'de kullanılabilir) işaretini geçerseniz hem yerel olarak hem de uzaktan gerçekleştirilen işlemler için ayrıntılı oluşturma metriklerini de içerir. Bu metrikleri, örneğin yerel ve uzak makine performansı arasında karşılaştırma yapmak veya oluşturma işleminin hangi bölümünün tutarlı olarak beklenenden daha yavaş olduğunu (örneğin, sıraya girme) öğrenmek için kullanabilirsiniz.

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

JSON izleme profili kritik yol bilgilerini içerir ancak bazen yürütülen işlemlerin bağımlılık grafiği hakkında ek bilgilere ihtiyacınız olur. Bazel 6.0 sürümünden itibaren, yürütülen işlemler ve bunların bağımlıları hakkında bir günlük yazmak için --experimental_execution_graph_log ve --experimental_execution_graph_log_dep_type=all işaretlerini iletebilirsiniz.

Bu bilgi, kritik yoldaki bir düğüm tarafından eklenen sürüklemeyi anlamak için kullanılabilir. Sürükleme, belirli bir düğümü yürütme grafiğinden kaldırarak kaydedilebilecek zaman sayısıdır.

Veriler, derleme ve işlem grafiğinde yaptığınız değişikliklerin etkisini, bunları yapmadan önce tahmin etmenize yardımcı olur.

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

Bazel bench, Git projelerinin aşağıdaki durumlarda derleme performansını karşılaştırmasını sağlayan 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ırmak. Yapınızdaki regresyonları algılamak için kullanılır (genellikle bağımlılık eklenmesiyle).

  • Bazel karşılaştırması: Bazel'ın iki sürümünü tek bir git taahhüdünde karşılaştırmak. Bazel içerisindeki regresyonları tespit etmek için kullanılır (Bazel'ın bakımını yapmaya / çatallamaya başladıysanız).

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

Değişkenlik kaynaklarını azaltmak için Bazel bankın başka işlemler yapmayan özel, fiziksel makinelerde de çalıştırılması önerilir.