Bu sayfada, Bazel'ı tekrar tekrar çalıştırırken Bazel'ın derleme performansının nasıl optimize edileceği açıklanmaktadır.
Bazel'in Çalışma Zamanı Durumu
Bir Bazel çağrısı, etkileşimde bulunan çeşitli bölümlerden oluşur.
bazel
komut satırı arayüzü (KSA), kullanıcıya yönelik ön uç aracıdır ve kullanıcıdan komut alır.KSA aracı, her farklı çıkış tabanı için bir Bazel sunucusu başlatır. Bazel sunucusu genellikle kalıcıdır ancak kaynak israfını önlemek için belirli bir süre boşta kaldıktan sonra kapatılır.
Bazel sunucusu, belirli bir komut (
build
,run
,cquery
vb.) için yükleme ve analiz adımlarını gerçekleştirir. Bu adımlarda, derleme grafiğinin gerekli kısımlarını bellekte oluşturur. Elde edilen veri yapıları, analiz önbelleğinin bir parçası olarak Bazel sunucusunda saklanır.Bazel sunucusu, işlem yürütme işlemini de gerçekleştirebilir veya bu şekilde ayarlanmışsa işlemleri uzaktan yürütme için gönderebilir. İşlem yürütmelerinin sonuçları da işlem önbelleğinde (veya yerel ya da uzak olabilen ve Bazel sunucuları arasında paylaşılabilen yürütme önbelleğinde) önbelleğe alınır.
Bazel çağrısının sonucu, çıkış ağacında kullanılabilir.
Bazel'i Aşamalı Olarak Çalıştırma
Tipik bir geliştirici iş akışında, bir kod parçasını tekrar tekrar oluşturmak (veya çalıştırmak) yaygın bir uygulamadır.Bu işlem genellikle çok yüksek bir sıklıkta yapılır (ör. derleme hatasını çözmek veya başarısız olan bir testi incelemek için). Bu durumda, bazel
öğesinin tekrarlanan çağrılarının, temel alınan tekrarlanan işleme (ör. derleyici çağırma veya test yürütme) kıyasla mümkün olduğunca az ek yük oluşturması önemlidir.
Bu durumu göz önünde bulundurarak Bazel'in çalışma zamanı durumuna tekrar bakalım:
Analiz önbelleği, kritik bir veri parçasıdır. Sıfırdan çalıştırmanın (ör. Bazel sunucusu başlatıldıktan hemen sonra veya analiz önbelleği atıldığında yapılan çalıştırma) yalnızca yükleme ve analiz aşamaları önemli ölçüde zaman alabilir. Tek bir başarılı soğuk derleme (ör. üretim sürümü için) söz konusu olduğunda bu maliyet kabul edilebilir ancak aynı hedefi tekrar tekrar derlerken bu maliyetin amortize edilmesi ve her çağrıda tekrarlanmaması önemlidir.
Analiz önbelleği oldukça değişkendir. Öncelikle, Bazel sunucusunun devam eden durumunun bir parçasıdır. Bu nedenle, sunucunun kaybolması önbelleğin kaybolmasına neden olur. Ancak önbellek çok kolay bir şekilde geçersiz kılınır. Örneğin, birçok bazel
komut satırı işareti
önbelleğin atılmasına neden olur. Bunun nedeni, birçok işaretin derleme grafiğini etkilemesidir (ör. yapılandırılabilir özellikler nedeniyle). Bazı işaret değişiklikleri de Bazel sunucusunun yeniden başlatılmasına neden olabilir (ör. başlangıç seçeneklerini değiştirme).
İyi bir yürütme önbelleği, derleme performansı için de değerlidir. Yürütme önbelleği disk üzerinde yerel olarak veya uzaktan saklanabilir. Önbellek, Bazel sunucuları ve geliştiriciler arasında paylaşılabilir.
Analiz önbelleğini silmekten kaçının
Bazel, analiz önbelleği atılırsa veya sunucu yeniden başlatılırsa uyarı yazdırır. Tekrarlı kullanım sırasında aşağıdakilerden biri kullanılmamalıdır:
Yinelemeli bir iş akışının ortasında
bazel
işaretlerini değiştirmemeye dikkat edin. Örneğin,bazel build -c opt
ilebazel cquery
karıştırıldığında her komut, diğerinin analiz önbelleğini siler. Genel olarak, belirli bir iş akışı süresince sabit bir işaret grubu kullanmaya çalışın.Bazel sunucusunun kaybolması, analiz önbelleğinin kaybolmasına neden olur. Bazel sunucusunun yapılandırılabilir bir boşta kalma süresi vardır. Bu sürenin sonunda sunucu kapatılır. Bu süreyi, ihtiyaçlarınıza uygun şekilde bazelrc dosyanız üzerinden yapılandırabilirsiniz. Başlangıç işaretleri değiştiğinde de sunucu yeniden başlatılır. Bu nedenle, mümkünse bu işaretleri değiştirmeyin.
Bazel çalışırken Ctrl-C tuşlarına art arda basarsanız Bazel sunucusunun kapatılacağını unutmayın. Artık gerekli olmayan çalışan bir derlemeyi keserek zamandan tasarruf etmeye çalışmak cazip gelebilir ancak mevcut çağırmanın düzgün bir şekilde sonlandırılmasını istemek için Ctrl-C tuşlarına yalnızca bir kez basın.
Aynı çalışma alanından birden fazla işaret grubu kullanmak istiyorsanız
--output_base
işaretiyle değiştirilen birden fazla farklı çıkış tabanı kullanabilirsiniz. Her çıkış tabanı kendi Bazel sunucusunu alır.
Bu koşulu uyarı yerine hata olarak değerlendirmek için --noallow_analysis_cache_discard
işaretini (Bazel 6.4.0'da kullanıma sunulmuştur) kullanabilirsiniz.