Yineleme Hızını Optimize Edin

Sorun bildirin Kaynağı göster

Bu sayfada, Bazel'i tekrar tekrar çalıştırırken Bazel'in derleme performansının nasıl optimize edileceği açıklanmaktadır.

Bazel'in Çalışma Zamanı Durumu

Bazel çağrısı, birbiriyle etkileşimde bulunan birkaç parçayı kapsar.

  • bazel komut satırı arayüzü (KSA), kullanıcıya yönelik kullanıcı arabirimi aracıdır ve kullanıcıdan komut alır.

  • CLI aracı, her ayrı çıkış tabanı için bir Bazel sunucusu başlatır. Bazel sunucusu genellikle kalıcıdır ancak kaynakları israf etmemek için bir süre boşta kaldığında kapanı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 bölümlerini bellekte oluşturur. Ortaya çıkan veri yapıları, analiz önbelleğinin bir parçası olarak Bazel sunucusunda tutulur.

  • Bazel sunucusu aynı zamanda işlem yürütmeyi de gerçekleştirebilir veya uzaktan yürütme için ayarlanmışsa işlemleri uzaktan yürütmeye gönderebilir. İşlem yürütmelerinin sonuçları da önbelleğe alınır, yani eylem önbelleğinde (veya yerel ya da uzak olabilen yürütme önbelleğinde) ve Bazel sunucuları arasında paylaşılabilir.

  • Bazel çağrısının sonucu, çıkış ağacında sunulur.

Bazel'i İterasyonlu Olarak Çalıştırma

Tipik bir geliştirici iş akışında, bir kod parçasının genellikle çok yüksek sıklıkta (ör. bazı derleme hatalarını çözmek veya başarısız bir testi incelemek için) tekrar tekrar oluşturulması (veya çalıştırması) yaygın bir uygulamadır. Bu durumda, yinelenen 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üke sahip olması önemlidir.

Bunu göz önünde bulundurarak Bazel'in çalışma zamanı durumunu tekrar inceleyelim:

Analiz önbelleği, kritik bir veri parçasıdır. Soğuk çalıştırmanın yalnızca yükleme ve analiz aşamalarına (Bazel sunucusu başlatıldıktan hemen sonra veya analiz önbelleği silindikten hemen sonra yapılan çalıştırma) önemli miktarda zaman harcanabilir. Tek ve başarılı bir soğuk derleme için (ör. üretim sürümü için) bu maliyete katlanabilir ancak aynı hedefi tekrar tekrar oluşturmak için bu maliyetin amorti edilmesi ve her çağrıda tekrarlanmaması önemlidir.

Analiz önbelleği nispeten değişkendir. Öncelikle, bu Bazel sunucusunun işlem içi durumunun bir parçasıdır. Dolayısıyla sunucuyu kaybetmek, önbelleği kaybetmektedir. Ancak önbellek de ç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 derleme grafiğini etkilemesidir (ör. yapılandırılabilir özellikler). Bazı işaret değişiklikleri, Bazel sunucusunun yeniden başlatılmasına da 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ı arasında ve hatta geliştiriciler arasında paylaşılabilir.

Analiz önbelleğini silmekten kaçının

Analiz önbelleği silinirse veya sunucu yeniden başlatılırsa Bazel bir uyarı yazdırır. Yinelemeli kullanım sırasında aşağıdakilerden birinden kaçınılmalıdır:

  • Yinelemeli bir iş akışının ortasında bazel işaretlerini değiştirmeye dikkat edin. Örneğin, bazel build -c opt ile bazel cquery karıştırıldığında her komut, diğerinin analiz önbelleğinin silinmesine neden olur. 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 kaybedilir. Bazel sunucusunun yapılandırılabilir bir boşta kalma süresi vardır. Bu süreden sonra sunucu kapatılır. Bu zamanı, bazelrc dosyanızı kullanarak ihtiyaçlarınıza uygun şekilde yapılandırabilirsiniz. Ayrıca, başlangıç işaretleri değiştiğinde sunucu 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şlarına arka arkaya basarsanız Bazel sunucusunun kapatılacağını dikkat edin. Artık ihtiyaç duyulmayan çalışan bir derlemeyi kesintiye uğratarak zaman kazanmayı deneyebilirsiniz. Ancak, mevcut çağrının kontrollü bir sonlandırılması 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ının kendi Bazel sunucusu olur.