Derleme performansı metriklerini çıkarma

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 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, önemli etkisi olan hedefler için özellikle değerlidir. Örneğin:

  1. Sık sık iterasyon yapılan 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) 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 bir adımı, kaynakların nerelerde harcandığını anlamaktır. Bu sayfada, toplayabileceğiniz farklı metrikler listelenir. Derleme performansını inceleme, derleme performansı sorunlarını tespit etmek ve düzeltmek için bu metrikleri nasıl kullanabileceğinizi gösterir.

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 toplama kararı alabilirsiniz. Ancak burada, genel olarak dikkate almanız yararlı 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) sağlar. 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 grubu sağlar.

JSON izleme profilleri

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

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. --experimental_execution_log_spawn_metrics işaretini (Bazel 5.2'den itibaren kullanılabilir) iletirseniz hem yerel hem de uzaktan yürütülen işlemler için ayrıntılı başlatma metrikleri de sağlanır. 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çerir ancak 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 bunların birbirine 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 iletebilirsiniz.

Bu bilgiler, kritik yoldaki bir düğüm tarafından eklenen gecikmeyi anlamak için kullanılabilir. Gecikme, belirli bir düğümün yürütme grafiğinden kaldırılmasıyla potansiyel olarak tasarruf edilebilecek süredir.

Bu veriler, derleme ve işlem grafiğindeki değişikliklerin etkisini, değişiklikleri yapmadan önce 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 commit'ini birbiriyle karşılaştırma. Derlemenizdeki gerilemelerin algılanması için kullanılır (genellikle bağımlılıkların eklenmesi yoluyla).

  • Bazel karşılaştırması: Tek bir git kaydında Bazel'in iki sürümünü birbiriyle karşılaştırma. Bazel'in kendisinde gerileme tespit etmek için kullanılır (Bazel'i yönetiyorsanız / çatallıyorsanız).

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

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.