Derleme performansı metriklerini çıkarma

Sorun bildirin Kaynağı göster

Muhtemelen her Bazel kullanıcısı tahmin edilenden yavaş veya daha yavaş derlemelerle karşılaşmıştır. Tek tek yapıların performansını iyileştirmek, önemli etkiye sahip hedefler için özel bir değer taşır. Örneğin:

  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ındaki temsili bir hedef (ör. özel kurallar), tek bir derlemedeki sorunları teşhis edip düzeltmek, sorunların daha geniş ölçekte çözülmesine yardımcı olabilir.

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

Bazel derlemelerinizden metrikleri ayıklamanın birkaç temel yöntemi vardır. Örneğin:

Derleme Etkinliği Protokolü (BEP)

Bazel, belirlediğiniz bir arka uç tarafından toplanabilen Etkinlik Derleme Protokolü (BEP) aracılığıyla çeşitli protokol arabellekleri build_event_stream.proto oluşturur. Kullanım alanlarınıza bağlı olarak metrikleri çeşitli şekillerde toplamaya karar verebilirsiniz. Burada, genel olarak üzerinde durulması yararlı olan bazı kavramlar ve proto alanları üzerinden çalışacağız.

Bazel'in sorgusu / cquery / sorgu komutları

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

JSON İzleme Profilleri

Bazel, derleme benzeri her Bazel çağrısı için JSON biçiminde bir izleme profili yazar. JSON izleme profili, çağrı sırasında Bazel'in neyle zaman geçirdiğini hızlı bir şekilde anlamak için son derece 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 isabetlerini gidermenize ve düzeltmenize yardımcı olabilir. İşareti --experimental_execution_log_spawn_metrics (Bazel 5.2'den edinilebilir) iletirseniz hem yerel olarak hem de uzaktan gerçekleştirilen işlemler için ayrıntılı üretim metrikleri de içerir. Bu metrikleri örneğin, yerel ve uzak makine performansı arasında karşılaştırmalar yapmak veya üretim yürütmenin hangi bölümünün sürekli olarak beklenenden daha yavaş olduğunu (örneğin sıraya ekleme 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 ihtiyaç duyabilirsiniz. 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 sürüklemenin anlaşılması için kullanılabilir. Sürükleme, yürütme grafiğinden belirli bir düğümün çıkarılmasıyla potansiyel olarak kazanılabilecek süredir.

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

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

Bazel bench, Git projelerinde 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 birbirleriyle 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ı: Tek bir git kaydında Bazel'in iki sürümünü birbiriyle karşılaştırma. Bazel'in kendi içindeki regresyonları tespit etmek için kullanılır (Bazel'in bakımını / çatalını yapıyorsanız).

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

Ayrıca, değişkenlik kaynaklarını azaltmak için Bazel tezgahını başka işlemler çalıştırmayan özel fiziksel makinelerde çalıştırmanız önerilir.