Yineleme Hızını Optimize Edin

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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, bir bazel build -c opt ile bazel 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.

Bu koşulu uyarı yerine hata olarak yapmak için --noallow_analysis_cache_discard işaretini (Bazel 6.4.0'da kullanıma sunulmuştur) kullanabilirsiniz.