Derleme performansı metriklerini çıkarma

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Muhtemelen her Bazel kullanıcısı, yavaş veya beklenenden daha yavaş derlemelerle karşılaşmıştır. Tek tek derlemelerin performansını artırmak, özellikle aşağıdaki gibi önemli etkiye sahip hedefler için değerlidir:

  1. Sık sık tekrarlanan 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) temsili bir hedef seçerek, bir derlemedeki sorunları teşhis edip düzeltmek, daha büyük ölçekteki sorunların çözülmesine yardımcı olabilir.

Derlemelerin performansını artırmanın önemli bir adımı, kaynakların nerede kullanıldığını anlamaktır. Bu sayfada, toplayabileceğiniz farklı metrikler listelenir. Derleme performansını ayrıntılı olarak inceleme, derleme performansıyla ilgili sorunları tespit etmek ve düzeltmek için bu metrikleri nasıl kullanabileceğinizi gösterir.

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

Derleme Etkinliği Protokolü (BEP)

Bazel, build_event_stream.proto Build Event Protocol (BEP) aracılığıyla çeşitli protokol arabellekleri çıkarır. Bu arabellekler, sizin tarafınızdan belirtilen bir arka uç tarafından toplanabilir. Kullanım alanlarınıza bağlı olarak metrikleri çeşitli şekillerde toplamaya karar verebilirsiniz. Ancak burada, genel olarak dikkate almanın faydalı olacağı 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) sunar. Sorgu dili, farklı sorgu modlarında kullanılabilen bir işlev paketi sunar. Bu işlevler, sorgularınızı ihtiyaçlarınıza göre özelleştirmenize olanak tanır.

JSON İzleme Profilleri

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

Yürütme Günlüğü

Yürütme günlüğü, makine ve ortam farklılıkları veya deterministik olmayan işlemler nedeniyle eksik olan uzak önbellek isabetlerini gidermenize ve düzeltmenize yardımcı olabilir. İşareti iletirseniz --experimental_execution_log_spawn_metrics (Bazel 5.2'den itibaren kullanılabilir) hem yerel olarak hem de uzaktan yürütülen işlemler için ayrıntılı oluşturma metrikleri de içerir. Bu metrikleri örneğin yerel ve uzak makine performansı arasında karşılaştırma yapmak veya oluşturma yürütmesinin hangi bölümünün sürekli olarak beklenenden daha yavaş olduğunu (örneğin, 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 bilgilere ihtiyacınız olabilir. Bazel 6.0'dan itibaren, yürütülen işlemler ve aralarındaki bağımlılıklar hakkında 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ün eklediği gecikmeyi anlamak için kullanılabilir. Sürükleme, belirli bir düğümün yürütme grafiğinden kaldırılmasıyla potansiyel olarak tasarruf edilebilecek süreyi ifade eder.

Bu veriler, derleme ve işlem grafiğinde yapacağınız değişikliklerin etkisini önceden 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ı: İki Git taahhüdünü tek bir Bazel sürümünde karşılaştırma. Derlemenizdeki gerilemeleri (genellikle bağımlılıklar eklenerek) tespit etmek için kullanılır.

  • Bazel karşılaştırması: Tek bir Git taahhüdünde iki Bazel sürümünü karşılaştırma. Bazel'in kendisinde gerilemeleri tespit etmek için kullanılır (Bazel'i koruyorsanız veya çatalladıysanız).

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

Varyans kaynaklarını azaltmak için Bazel bench'i başka işlemlerin çalışmadığı özel, fiziksel makinelerde çalıştırmanız da önerilir.