Bu sayfada, Bazel'i tekrar tekrar çalıştırırken Bazel'in derleme performansını nasıl optimize edeceğiniz açıklanmaktadır.
Bazel'in Çalışma Zamanı Durumu
Bazel çağrısı, etkileşimli birkaç parçadan oluşur.
bazel
komut satırı arayüzü (KSA), kullanıcılara yönelik ön uç araçtır ve kullanıcıdan komut alır.KSA aracı, her farklı çıktı tabanı için bir Bazel sunucusu başlatır. Bazel sunucusu genellikle devamlı çalışır ancak kaynak israfını önlemek için bir süre kullanılmadığında kapanır.
Bazel sunucusu, belirli bir komutun (
build
,run
,cquery
vb.) yükleme ve analiz adımlarını gerçekleştirir. Bu adımlarda, derleme grafiğinin gerekli bölümlerini bellekte oluşturur. Elde edilen veri yapıları, analiz önbelleği kapsamında Bazel sunucusunda saklanır.Bazel sunucusu, işlem yürütmeyi de gerçekleştirebilir veya bu şekilde ayarlanmışsa işlemleri uzaktan yürütmek için gönderebilir. İşlem yürütme işlemlerinin sonuçları da önbelleğe alınır. Bu önbelleğe alma işlemi işlem önbelleği (veya yerel ya da uzak olabilir ve Bazel sunucuları arasında paylaşılabilir olan yürütme önbelleği) olarak adlandırılır.
Bazel çağrısının sonucu, çıkış ağacında kullanılabilir hale getirilir.
Bazel'i yinelemeli olarak çalıştırma
Tipik bir geliştirici iş akışında, bir kod parçasını genellikle çok yüksek bir sıklıkta tekrar tekrar derlemek (veya çalıştırmak) yaygındır (ör. bazı derleme hatalarını çözmek veya başarısız bir testi incelemek için). Bu durumda, bazel
'ün tekrarlanan çağrılarının, temel alınan tekrarlanan işleme (ör. bir derleyiciyi çağırma veya bir testi yürütme) kıyasla mümkün olduğunca az ek yüke sahip olması önemlidir.
Bu nedenle, Bazel'in çalışma zamanı durumuna tekrar göz atıyoruz:
Analiz önbelleği, kritik bir veri parçasıdır. Sıfırdan çalıştırma işleminin (ör. Bazel sunucusunun başlatılmasından hemen sonra veya analiz önbelleği atıldığında yapılan çalıştırma) yalnızca yükleme ve analiz aşamalarında önemli miktarda zaman harcanabilir. Tek bir başarılı soğuk derleme (ör. üretim sürümü) için bu maliyeti karşılayabilirsiniz ancak aynı hedefin tekrar tekrar derlenmesi için bu maliyetin amortismana tabi tutulması ve her çağrıda tekrarlanmaması önemlidir.
Analiz önbelleği oldukça değişkendir. Öncelikle, Bazel sunucusunun işlemdeki durumunun bir parçası olduğu için sunucu kaybedildiğinde önbellek de kaybedilir. Ancak önbellek çok kolay bir şekilde geçersiz kılınabilir: Ö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çeneklerinin değiştirilmesi).
İyi bir yürütme önbelleği, derleme performansı için de değerlidir. Bir yürütme önbelleği yerel olarak diskte veya uzaktan tutulabilir. Önbellek, Bazel sunucuları ve geliştiriciler arasında paylaşılabilir.
Analiz önbelleğini atlamaktan kaçının
Analiz önbelleği atlanırsa veya sunucu yeniden başlatılırsa Bazel bir uyarı yazdırır. Yinelenen kullanım sırasında aşağıdakilerden kaçınılmalıdır:
Yinelenen bir iş akışı sırasında
bazel
işaretlerini değiştirmemeye dikkat edin. Örneğin, birbazel build -c opt
ilebazel cquery
'ü karıştırmak, her komutun diğerinin analiz önbelleğini atmasına neden olur. Genel olarak, belirli bir iş akışı boyunca sabit bir işaret grubu kullanmaya çalışın.Bazel sunucusu kaybedildiğinde analiz önbelleği de kaybedilir. Bazel sunucusunun yapılandırılabilir bir boşta kalma süresi vardır. Bu sürenin sonunda sunucu kapanır. Bu süreyi bazelrc dosyanız üzerinden ihtiyaçlarınıza göre yapılandırabilirsiniz. Sunucu, başlangıç işaretleri değiştiğinde de yeniden başlatılır. Bu nedenle, mümkünse bu işaretleri değiştirmekten kaçının.
Bazel çalışırken Ctrl-C tuşuna tekrar tekrar basarsanız Bazel sunucusunun kapatıldığını unutmayın. Artık ihtiyaç duyulmayan bir derlemeyi kesintiye uğratarak zaman kazanmaya çalışmak cazip gelebilir. Ancak mevcut çağrının sorunsuz bir şekilde sonlandırılmasını istemek için yalnızca bir kez Ctrl-C tuşlarına basmanız yeterlidir.
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ı için ayrı bir Bazel sunucusu oluşturulur.