Yineleme Hızını Optimize Edin

Sorun bildir Kaynağı göster

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şimli birkaç parça içerir.

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

  • CLI aracı, her bir farklı çıkış tabanı için bir Bazel sunucusu başlatır. Bazel sunucusu genellikle kalıcıdır ancak kaynakları boşa harcamamak için bir süre boşta kaldığında kapanır.

  • Bazel sunucusu, belirli bir komuta (build, run, cquery vb.) yönelik yükleme ve analiz adımlarını gerçekleştirir. Bu komutta derleme grafiğinin gerekli parçalarını bellekte oluşturur. Ortaya çıkan veri yapıları, analiz önbelleğinin bir parçası olarak Bazel sunucusunda saklanır.

  • Bazel sunucusu, işlemi yürütmeyi de gerçekleştirebilir veya işlem yürütmenin sonuçları, uzaktan yürütme için ayarlanmışsa bu sonuçları uzaktan yürütme için gönderebilir. İşlem yürütme sonuçları, aynı zamanda işlem ö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'i Tekrarlı Olarak Ç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 araştırmak için) tekrar tekrar derlemek (veya çalıştırmak) yaygın bir uygulamadır. 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ün olması önemlidir.

Bunu göz önünde bulundurarak, Bazel'in çalışma zamanı durumunu bir kez daha inceleriz:

Analiz önbelleği kritik bir veri parçasıdır. Sıfırdan çalıştırmanın yalnızca yükleme ve analiz aşamalarında önemli miktarda zaman harcanabilir (ör. Bazel sunucusu başlatıldıktan hemen sonra veya analiz önbelleği silindikten hemen sonra çalıştırma). Tek ve başarılı bir baştan derleme için (ör. üretim sürümü için) bu maliyet katlanabilirdir 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ı olduğundan sunucuyu kaybettiğinde önbellek kaybolur. 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 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 tutulabilir. Ö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 esnasında şunlardan kaçınılmalıdır:

  • Yinelemeli bir iş akışının ortasında bazel işaretlerini değiştirmeye dikkat edin. Örneğin, bir bazel build -c opt ile bazel cquery karıştırıldığında her 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 kaybedilir. Bazel sunucusunun yapılandırılabilir bir boşta kalma süresi vardır ve bu süre geçtikten sonra kapatılır. Bu zamanı, Bazelrc dosyanızla ihtiyaçlarınıza uygun şekilde 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 art arda 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 sorunsuz 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 isterseniz --output_base işaretiyle değiştirilip birbirinden farklı birden fazla çıkış tabanı kullanabilirsiniz. Her çıkış tabanının kendi Bazel sunucusu olur.