Dinamik yürütme Bazel'deki bir özelliktir 0.21 sürümünden itibaren paralel olarak aynı eylemin yerel ve uzaktan yürütülmeye başlandığı biten ilk daldaki çıktıyı kullanıp diğerini iptal ederek görebilirsiniz. Uzaktan kumandanın yürütme gücünü ve/veya geniş paylaşılan önbelleğini birleştirir yerel yürütmede düşük gecikmeyle bir sistem oluşturarak derlemeler için ideal.
Bu sayfada, dinamik yürütmenin nasıl etkinleştirileceği, ayarlanacağı ve hata ayıklama yapılacağı açıklanmaktadır. Şu durumda: hem yerel hem de uzaktan yürütme ayarlanmış olmalı ve Bazel'ı nasıl kullanacağınızı öğreneceksiniz. Bu sayfa tam size göre. Henüz bir uzaktan yürütme ayarlarını yapmak için Bazel'a Öncelikle Uzaktan Yürütmeye Genel Bakış'ı inceleyin.
Dinamik yürütme etkinleştirilsin mi?
Dinamik yürütme modülü Bazel'in bir parçasıdır, ancak dinamik çalıştırmadan hem yerel olarak hem de uzaktan derleyebilmeniz gerekir. emin olmanız gerekir.
Dinamik yürütme modülünü etkinleştirmek için --internal_spawn_scheduler
komutunu iletin
Bazel'a bildirin. Bu işlem, dynamic
adlı yeni bir yürütme stratejisi ekler. Artık şunları yapabilirsiniz:
Dinamik olarak çalıştırmak istediğiniz anımsatıcılar için stratejiniz olarak bunu kullanın.
--strategy=Javac=dynamic
Hangi anımsatıcıların nasıl seçileceğini öğrenmek için sonraki bölüme bakın.
dinamik yürütmeyi etkinleştirin.
Dinamik stratejiyi kullanan her anımsatıcı için uzaktan yürütme stratejileri,
--dynamic_remote_strategy
işaretinden ve yerel stratejilerden
--dynamic_local_strategy
işareti. Pas
--dynamic_local_strategy=worker,sandboxed
, yerel için varsayılanı ayarlar
veya korumalı alana alınmış yürütmeyle deneyebileceğiniz dinamik yürütme
sipariş. --dynamic_local_strategy=Javac=worker
geçildiğinde, şunun için varsayılan değer geçersiz kılınır:
yalnızca Javac anımsatıcısı. Uzak sürüm de aynı şekilde çalışır. Her iki işaret de
birden fazla kez belirtilmelidir. Bir işlem yerel olarak yürütülemiyorsa
normal şekilde uzaktan yürütülür veya bunun tersi de geçerlidir.
Uzak sisteminizde önbellek varsa --local_execution_delay
flag, uzak sistemden sonra yerel yürütmeye milisaniye cinsinden bir gecikme ekler
bir önbellek isabeti bildirdi. Bu işlem, daha fazla önbellek olduğunda yerel yürütmenin çalıştırılmasını önler
daha başarılı sonuçlar elde edebilir. Varsayılan değer 1000 ms'dir, ancak yalnızca
genelde önbellek isabetlerinin uyguladığından biraz daha uzun sürer. Gerçek süre hem
ve gidiş dönüşün ne kadar süreceği gibi. Genellikle değer
bazıları yeterli uzak olmadıkları sürece, belirli bir uzak sistemin tüm kullanıcıları için aynı
gecikme süresini dikkate alın. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için
Bazel profil çıkarma özellikleri
ne kadar sürdüğünü görebilirsiniz.
Dinamik yürütme, yerel korumalı alana alınmış stratejinin yanı sıra
kalıcı çalışanlar. Kalıcı çalışanlar
dinamik yürütmeyle kullanıldığında otomatik olarak korumalı alan ile çalışır ve
Multiplex çalışanları kullanın. Darwin ve Windows sistemlerinde
korumalı alan stratejisi yavaş olabilir. doğrudan
Bu sistemlerde korumalı alan oluşturma ek yükünü azaltmak için --reuse_sandbox_directories
.
Dinamik yürütme, standalone
stratejisiyle de çalıştırılabilir ancak
standalone
stratejisi, çalışmaya başladığında çıkış kilidini almalıdır.
etkili bir şekilde önce uzaktaki stratejinin
tamamlanmasını engeller. İlgili içeriği oluşturmak için kullanılan
--experimental_local_lockfree_output
işareti,
yerel yürütmenin doğrudan çıkışa yazmasına izin verir ancak
proje başlatma belgesini kullanacaksınız.
Dinamik yürütme dallarından biri ilk olarak biter ancak başarısız olursa başarısız olur. Bu, farklılıkları önlemek için bilinçli bir seçimdir arasındaki farkları konuşacağız.
Dinamik yürütme ve kilitlemenin nasıl çalıştığı hakkında daha fazla bilgi için bkz. Julio Merino'nun mükemmeli blog yayınları
Dinamik yürütmeyi ne zaman kullanmalıyım?
Dinamik yürütme uzaktan yürütme sistemiyle uyumlu olmasını sağlayın. Şu anda değil önbellekten uzak bir sistem kullanmak mümkün olduğundan, bu durum önbellekte başarısız bir eylemdir.
Tüm işlem türleri, uzaktan yürütme için uygun değildir. En iyi yerel olarak daha hızlı işlemler yapan adaylardır (örneğin, kalıcı çalışanların veya uzaktan yürütme ek yükünün yürütme süresine hükmedecek kadar hızlı olduğundan emin olun. Yerel olarak gerçekleştirilen her işlem bir miktar CPU ve belleği kilitlediğinden Ancak bu kategorilere girmeyen eylemlerin uygulanması, kaynak ve en iyi uygulamaları paylaşacağım.
Yayın tarihi itibarıyla
5.0.0-pre.20210708.4,
performans profili oluşturma
bir işi bitirmek için harcanan zaman da dahil olmak üzere çalışan yürütme hakkında veriler içerir
kaybedilmesinin ardından elde edilen gelir. Dinamik yürütme görürseniz
kaynak edinmek için ciddi miktarda zaman harcayan ya da çok fazla zaman harcayan işçi işlerinin iş parçacıkları
async-worker-finish
içinde gecikme yaşanmasına neden olan bazı yavaş yerel işlemleriniz olabilir
çalışan iş parçacıklarıdır.
8 Javac çalışanının kullanıldığı yukarıdaki profilde çok sayıda Javac çalışanının
yarışları kaybetmiş ve async-worker-finish
üzerinde çalışmasını tamamlamış olmalıdır.
ileti dizileri. Bunun nedeni, işçi dışı bir hafızada çalışmak için yeterli kaynak
gecikmeli olarak da
işçileri geciktirir.
Yalnızca Javac dinamik yürütmeyle çalıştırıldığında çalıştırılanların sadece yarısı işçiler işe başladıktan sonra yarışı kaybederler.
Daha önce önerilen --experimental_spawn_scheduler
işareti kullanımdan kaldırılmıştır.
Dinamik yürütmeyi etkinleştirir ve dynamic
tüm reklamverenler için varsayılan strateji olarak ayarlanır.
yol açabiliyor. Bu da genellikle bu tür sorunlara
Sorun giderme
Dinamik yürütmeyle ilgili sorunlar fark edilebilir düzeydedir ve hata ayıklaması zordur.
bazı yerel yürütme ve uzaktan yürütme kombinasyonlarında uygulanır.
--debug_spawn_scheduler
, dinamik reklamdan ekstra çıktı ekler
geliştirecek yeni bir yürütme sistemi
oluşturmuş olmalısınız. Ayrıca
--local_execution_delay
bayrağı ve uzaktan yapılan işlerle yerel işlerin sayısı
kullanıma sunuyoruz.
standalone
kullanarak dinamik yürütmeyle ilgili sorun yaşıyorsanız
stratejisi, --experimental_local_lockfree_output
olmadan çalıştırmayı deneyin veya
yerel işlemleriniz korumalı alana alındı. Bu, derlemenizi biraz yavaşlatabilir (daha fazla bilgi edinmek için
Mac veya Windows'daysanız) ancak hatanın olası bazı nedenlerini ortadan kaldırır.