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
Bazel çağrısı, etkileşimde bulunan birkaç parçayı içerir.
bazelkomut satırı arayüzü (KSA), kullanıcıya yönelik kullanıcı arabirimi aracıdır ve kullanıcıdan komut alır.
Bazel sunucusu, belirli bir komut (
build,
run,
cqueryvb.) için yükleme ve analiz adımlarını gerçekleştirir. Bu komutta yapı grafiğinin gerekli parçalarını bellekte oluşturur. Ortaya çıkan veri yapıları, analiz önbelleğinin bir parçası olarak Bazel sunucusunda tutulur.
Bazel sunucusu da işlem yürütmeyi gerçekleştirebilir veya bu şekilde ayarlanmışsa işlemleri uzaktan yürütme için gönderebilir. İşlem yürütmelerinin sonuçları ayrıca, yani eylem önbelleğinde (veya yerel ya da uzak olabilecek yürütme önbelleğinde) önbelleğe alınır ve Bazel sunucuları arasında paylaşılabilir.
Bazel çağrısının sonucu, çıkış ağacında sunulur.
Bazel'ı Tekrarlı Çalıştırma
Tipik bir geliştirici iş akışında, bir kod parçasının genellikle çok yüksek bir sıklıkta (ör. bazı derleme hatalarını çözümlemek veya başarısız bir testi incelemek) tekrarlanarak derlenmesi (veya çalıştırılması) yaygın bir durumdur. Bu durumda, tekrarlanan
bazel çağrılarının temeldeki tekrarlanan işleme (ör. derleyici çağırma veya test yürütme) göre mümkün olduğunca az ek yükü olması önemlidir.
Bunu göz önünde bulundurarak, Bazel'in çalışma zamanı durumuna bir kez daha bakalım:
Analiz önbelleği kritik bir veri parçasıdır. Yavaş bir çalıştırmanın (ör. Bazel sunucusu başlatıldıktan veya analiz önbelleğinin silindikten hemen sonra çalıştırılması) yalnızca yükleme ve analiz aşamalarında önemli bir zaman harcanabilir. Tek ve başarılı bir yeni derleme için (ör. üretim sürümü) bu maliyet karşılanabilirdir ancak aynı hedefi tekrar tekrar oluşturmak için bu maliyetin amorti edilmesi ve her çağrıda tekrarlanmaması önemlidir.
Analiz önbelleği oldukça değişkendir. Öncelikle, bu, Bazel sunucusunun işlem durumunun bir parçasıdır. Bu nedenle, sunucuyu kaybettiğinde önbelleği de kaybeder. Ancak önbellek çok kolay bir şekilde geçersiz kılınır: Örneğin, birçok
bazel komut satırı işareti önbelleğin silinmesine neden olur. Bunun nedeni, birçok işaretin yapı 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çeneklerinin değiştirilmesi).
İyi bir yürütme önbelleği, derleme performansı için de değerlidir. Yürütme önbelleği yerel olarak disk üzerinde veya uzaktan saklanabilir. Önbellek, Bazel sunucuları ve hatta geliştiriciler arasında paylaşılabilir.
Analiz önbelleğini silmekten kaçının
Analiz önbelleği silindiyse veya sunucu yeniden başlatıldıysa Bazel bir uyarı yazdırır. Yinelemeli kullanım sırasında aşağıdaki durumlardan kaçınılmalıdır:
Yinelemeli bir iş akışının ortasında
bazelişaretlerini değiştirmemeye dikkat edin. Örneğin, bir
bazel build -c optile
bazel cquerykarıştırıldığında her bir komut, diğerinin analiz önbelleğini siler. Genel olarak, belirli bir iş akışının süresi boyunca sabit bir işaret grubu kullanmaya çalışın.
Bazel sunucusu kaybedildiğinde analiz önbelleği de kaybolur. Bazel sunucusunun yapılandırılabilir bir boşta kalma süresi vardır. Bu süre geçtikten sonra sunucu kapanır. Bu süreyi Bazelrc dosyanız üzerinden ihtiyaçlarınıza göre yapılandırabilirsiniz. Başlatma işaretleri değiştiğinde sunucu da yeniden başlatılır. Bu nedenle, mümkünse bu işaretleri değiştirmeyin.
Bazel çalışırken Ctrl-C tuşlarına tekrar tekrar basarsanız Bazel sunucusunun sonlandırılacağına dikkat edin. Artık ihtiyaç duyulmayan çalışan bir derlemeyi kesintiye uğratarak zamandan tasarruf etmeye çalışmak cazip gelebilir, ancak mevcut çağrının kontrollü bir şekilde sonlandırılmasını istemek için yalnızca Ctrl-C tuşlarına bir kez basın.
Aynı çalışma alanından birden fazla işaret grubu kullanmak isterseniz
--output_baseişaretiyle değiştirilen birden fazla farklı çıkış tabanı kullanabilirsiniz. Her çıkış tabanının kendi Bazel sunucusu olur.
Bu durumu uyarı yerine hata olarak ayarlamak için
--noallow_analysis_cache_discard işaretini kullanabilirsiniz (Bazel 6.4.0'da kullanıma sunulmuştur)