Dinamik yürütme Bazel'de bulunan ve yerel ve uzaktan İlk daldaki çıktı kullanılarak aynı eylem paralel olarak başlatılır. diğer şube iptal edilir. Uygulama gücünü birleştirir düşük gecikmeli yerel derleme ile uzak derleme sisteminin büyük paylaşılan önbelleği Böylece hem temiz hem de artımlı derlemeler için iki tarafın da en iyisini sunar. kullanabilirsiniz.
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 kurulumunu öğrenmek için Bazel Uzaktan Yürütme Önce 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 --dynamic_local_execution_delay
işareti
uzak sistem tarafından çalıştırıldıktan sonra yerel yürütmeye milisaniye cinsinden
olduğunu göstermiştir. Bu, daha fazla önbellek isabeti olduğunda yerel yürütmenin çalıştırılmasını önler
daha iyidir. Varsayılan değer 1000 ms'dir, ancak bunun için biraz daha ayarlanması gerekir
daha uzun sürdüğünü görebilirsiniz. Gerçek süre hem uzaktan kumandaya bağlıdır
ne kadar sürdüğünü kontrol edin. Değer genellikle
bazıları yeterince uzakta değilse, belirli bir uzak sistemin tüm kullanıcıları için
ekleyin. Google Ads'deki Bazel profili çıkarma
özellikleri kullanarak standart bir
aldığına dikkat edin.
Dinamik yürütme, yerel korumalı alana alınmış stratejinin yanı sıra
kalıcı çalışanlar. Kalıcı çalışanlar otomatik olarak
dinamik yürütmeyle birlikte kullanıldığında korumalı alan ile çalışmalı ve Multiplex kullanamaz
sağlar. Darwin ve Windows sistemlerinde, korumalı alana alınan
strateji yavaş olabilir. azaltmak için --reuse_sandbox_directories
bu sistemlerde korumalı alan oluşturma
zorlukları ortadan kalkar.
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ükemmel blog'u yayın
Dinamik yürütmeyi ne zaman kullanmalıyım?
Dinamik yürütme bir tür uzaktan yürütme sistemi gerektirir. Önbellekte bulunmama nedeniyle yalnızca önbelleklerden oluşan uzak bir sistem şu anda kullanılamaz bir başarısız işlem olarak değerlendirilir.
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 hızlı çalışan yürütme süresi boyunca uzaktan yürütmenin ek yükünün önüne geçecek kadar önemlidir. Başlangıç yerel olarak yürütülen her işlem bir miktar CPU ve bellek kaynağını kilitler. Bu kategorilere girmeyen işlemlerin yapılması, yalnızca uygulamanın yürütülmesini geciktirir. teşvik edebilirsiniz.
Yayın tarihi itibarıyla
5.0.0-pre.20210708.4,
performans profili oluşturma özelliği veri içerir
hakkında bilgi edinin. Buna, iş talebini bitirdikten sonra harcanan süre de dahildir.
kaybetmeyi başardık. Dinamik yürütme çalışan iş parçacıkları görüyorsanız
kaynak edinmek için çok fazla zaman harcamanıza
async-worker-finish
, çalışanın gecikmesine neden olan bazı yerel işlemleriniz yavaş olabilir
ileti dizileri.
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
Performans
Dinamik yürütme yaklaşımında, yeterli düzeyde kaynak olduğunu varsayar yerel olarak ve uzaktan, hizmeti geliştirmek için ekstra kaynak harcamaya değeceğini yardımcı olabilir. Ancak aşırı kaynak kullanımı Bazel'in kendisini yavaşlatabilir veya veya uzaktaki bir sisteme beklenmedik bir baskı uygulayarak. Her biri 100'den az gösterim alan dinamik yürütme davranışını değiştirmek için çeşitli seçenekler vardır:
--dynamic_local_execution_delay
, yerel şubenin başlangıcını bir sayı kadar geciktirir
milisaniye cinsinden ayarlanır, ancak yalnızca
uzak bir önbellek isabeti olabilir. Bu sayede, dönüşüm hunisinin
uzaktan önbelleğe almanın
yerel kaynakları boşa harcamasını önler.
çıktıları önbellekte bulabilirsiniz. Önbelleğin kalitesine bağlı olarak
Bunun azaltılması derleme hızlarını artırabilir ve daha yerel
kaynaklar.
--experimental_dynamic_local_load_factor
, deneysel, gelişmiş bir kaynaktır
yönetim seçeneği sunar. Bu özellik devre dışı bırakıldığında 0 ile 1, 0 arasında bir değer alır.
0'dan büyük bir değere ayarlandığında, Bazel
bekleyen birçok işlem olduğunda yerel olarak planlanmış işlemler
planlayabilirsiniz. Seçeneği 1 olarak ayarlamak, tüm işlemlerin planlanmasına olanak tanır
kullanılabilir CPU'lardır (--local_cpu_resources
uyarınca). Küçük değerler sayıyı belirler
işlem sayısı daha yüksek olduğundan, bu sayıya karşılık gelen şekilde daha az olacak şekilde programlanan işlem yüzdesi:
çalıştırılabilir. Kulağa klişe gelebilir ama iyi bir uzaktan kumandalı
birçok işlem gerçekleşiyorken yerel yürütmenin
pek bir yardımı olmaz ve
yerel CPU, uzaktan işlemleri yönetmek için daha iyi harcanır.
--experimental_dynamic_slow_remote_time
, yerel şube kurmaya öncelik verir
uzak dal en az bu kadar süredir çalışıyorsa. Normalde
en son planlanan işleme öncelik verilir çünkü
yarışı kazanmasına rağmen uzaktaki sistem bazen kilitlenir ya da çok uzun sürerse
Bu sayede ilerleyecek bir yapı oluşturabilirsiniz. Bu özellik, varsayılan olarak etkin değildir.
uzak sistemle ilgili çözülmesi gereken sorunları gizleyebilir. Şunlardan emin olun:
uzaktan sisteminizin performansını izleyebilirsiniz.
--experimental_dynamic_ignore_local_signals
, uzaktan kumandanın şunları yapmasını sağlamak için kullanılabilir:
belirli bir sinyal nedeniyle bir yerel yumurtanın ortaya çıktığında dalı devralması. Bu
genellikle çalışan kaynak sınırlarıyla birlikte yararlıdır (bkz.
--experimental_worker_memory_limit_mb
--experimental_worker_sandbox_hardening
,
ve
--experimental_sandbox_memory_limit_mb
)),
işçi süreçleri çok fazla kaynak kullandığında sonlandırılabilir.
JSON izleme profili şunu içerir: geliştirme yöntemlerini belirlemenize yardımcı olabilecek performansla ilgili grafik sayısı ödün vermek zorunda kalmazsınız.
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 yürütmeden ekstra çıkış ekler
yardımcı olabilecek yeni bir sistem geliştirebilirsiniz. Ayrıca
--dynamic_local_execution_delay
flag'lerini ve sayısını uzaktan ve yerel işlerde
bu da sorunların yeniden üretilmesini kolaylaştırır.
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.