Dinamik Yürütme

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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.

Dinamik yürütme performansı zayıf olan verilerin profil oluşturma

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.

Daha iyi dinamik yürütme performansıyla verilerin profilini oluşturma

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.