Multiplex Çalışanları (Deneysel Özellik)

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

Bu sayfada Multiplex çalışanları, Multiplex uyumlu yazma ile ilgili bilgiler açıklanmaktadır kuralları ve belirli sınırlamalara yönelik geçici çözümleri inceleyin.

Multiplex çalışanları, Bazel'in tek bir çalışanla birden fazla isteği ele almasına olanak tanır. bahsedeceğim. Bazel, çok iş parçacıklı çalışanlarda aşağıdakileri yapmak için daha az kaynak kullanabilir: elde edebiliyorlar. Örneğin, ekip arkadaşlarınızdan çalışan başına düştüğünü varsayalım. Bazel'in aynı anda birden çok çalışanla daha sonra istekleri paralel olarak ele alabilecek. Örneğin, bu da JVM ısınma süresinden ve JIT derlemesinden tasarruf sağlar. ve genel olarak aynı alanın tüm çalışanları arasında paylaşılan tek bir önbellek kullanılmasına aynı türdedir.

Genel Bakış

Bazel sunucusu ve çalışan işlemi arasında iki katman vardır. Belirli işlemleri paralel olarak yürütebilen anımsatıcılar, Bazel’ın WorkerProxy havuzda yer alır. WorkerProxy, istekleri çalışan işlemine yönlendirir çalışan süreç, isteği request_id ile birlikte sırayla işler. ve yanıtları WorkerMultiplexer adlı kullanıcıya gönderir. WorkerMultiplexer bir yanıt aldığında request_id öğesini ayrıştırır ve ardından yanıtları iletir. WorkerProxy konumuna döndürmeniz gerekir. Multiplex özelliği olmayan çalışanlarda olduğu gibi, standart giriş/çıkış yoluyla yapılır, ancak araç yalnızca Kullanıcının görebildiği çıkış için stderr (aşağıya bakın).

Her çalışanın bir anahtarı vardır. Bazel, anahtarın karma kodunu ( değişkenleri, yürütme kökü ve anımsatıcı) kullanarak hangi Kullanmak için WorkerMultiplexer. WorkerProxy'ler aynı Aynı karma koduna sahiplerse WorkerMultiplexer. Dolayısıyla, ortam değişkenleri ve yürütme kökü tek bir Bazel'de aynıdır her benzersiz anımsatıcı, yalnızca bir WorkerMultiplexer ve bir çalışma sürecidir. Normal çalışanlar ve düzenli çalışanlar dahil olmak üzere toplam çalışan sayısı WorkerProxy, hâlâ --worker_max_instances ile sınırlı.

Multiplex ile uyumlu kurallar yazma

Kuralın çalışan işlemi, multiplex çalışanları. Protobuf, bir kural kümesinin tek bir isteği Ancak akışta birikmiş birden fazla istek olabilir. Her çalışan işlemi, isteği akıştan ayrıştırır. İsteği şurada işlemesi gerekir: açın. Çünkü farklı ileti dizileri tamamlanabilir ve şu adresteki akışa yazılabilir: aynı zamanda, çalışan süreci, yanıtların yazıldığından otomatik olarak (mesajlar çakışmaz). Yanıtlar şunu içermelidir: İşledikleri isteğin request_id kadarı.

Multiplex çıkışını işleme

Multiplex çalışanlarının, çıktılarını nasıl kullandıkları konusunda tek yönlü çalışanları olarak. stderr alanına gönderilen her şey tek bir günlük dosyasına kaydedilir aynı türdeki tüm WorkerProxy'lar arasında paylaşıldı yapılan en iyi uygulamaları paylaşacağız. stdout yönlendirirken stderr eklemek iyi bir fikirdir, bu çıktıyı output alanını WorkResponse içine alın. Aracınız stdout veya stderr iş ortaklarına yalnızca kullanıcı odaklı çıktılar gönderiyorsa Multiplex çalışanları etkinleştirmeden önce bu davranışı değiştirmeniz gerekir.

Multiplex çalışanlarını etkinleştirme

Multiplex çalışanları varsayılan olarak etkin değildir. Bir kural grubu Multiplex'i etkinleştirebilir supports-multiplex-workers etiketini kullanarak İşlemin execution_requirements kadarı (supports-workers etiketinde olduğu gibi) normal çalışanları etkinleştirir. Normal çalışanlarda olduğu gibi strateji, kural grubu düzeyinde (örneğin, --strategy=[some_mnemonic]=worker) veya genel olarak strateji düzeyinde ( örnek, --dynamic_local_strategy=worker,standalone.) Ek işaret yok gerekli ve supports-multiplex-workers önceliklidir Her ikisi de ayarlanmışsa supports-workers. Multiplex çalışanlarını devre dışı bırakabilirsiniz dünya genelinde --noworker_multiplex geçti.

Belleği azaltmak için mümkünse bir kural kümesinin Multiplex çalışanları kullanması önerilir ve performansı artıracaktır. Ancak Multiplex çalışanları şu anda dinamik yürütme ile uyumlu olmadığı sürece Multiplex korumalı alanı uygulanır. Korumalı alanda olmayan Multiplex çalıştırılmaya çalışılıyor dinamik yürütmeye sahip çalışanlar korumalı alana alınan uygulamaları sessizce kullanır. tek yönlü çalışanları olmalıdır.

Multiplex korumalı alanı

Multiplex çalışanları, üzerine konuşalım. Tek yönlü çalışan korumalı alan oluşturma işlemi her çalışan işlemi kendi korumalı alanında çalıştırırken, Multiplex çalışanları, çalışma dizinini oluşturabilirsiniz. İzin vermek için Multiplex çalışanlarının korumalı alana alınması için çalışan, yerine her istekte belirtilen bir alt dizine yazmak yerine doğrudan dizine ekleyeceksiniz.

Çalışanın, Multiplex korumalı alan kullanımını desteklemek için sandbox_dir alanını kullanması gerekir kodunu WorkRequest ekleyin ve bunu tüm dosya okuma ve yazma işlemleri için önek olarak kullanın. arguments ve inputs alanları, korumalı alana alınmadan değişmeden kalır. isteğinde bulunduğunda, gerçek girişler sandbox_dir değerine göre belirlenir. Çalışan, Bundan okumak için arguments ve inputs içinde bulunan dosya yollarını çevirin ve sandbox_dir ile göreli tüm çıkışları yazmalıdır. "." gibi yolların yanı sıra belirtilen dosyalarda bulunan yollar da buna dahildir bağımsız değişkenlerde ("argfile" bağımsız değişkenleri gibi) yer almalıdır.

Bir çalışan, Multiplex korumalı alan kullanımını desteklediğinde kural grubu bunu bildirebilir supports-multiplex-sandboxing öğesini Bir işlemin execution_requirements. Ardından Bazel, Multiplex korumalı alanı kullanacaktır --experimental_worker_multiplex_sandboxing işareti geçilirse veya dinamik yürütme ile kullanılır.

Korumalı alana sahip bir Multiplex çalışanının çalışan dosyaları hâlâ çalışma dizinini oluşturur. Dolayısıyla, bir dosya hem çalışanın çalıştırılması için hem de giriş olarak kullanılıyorsa bu değer, hem çalışan hem de giriş olarak belirtilmelidir. işaret dosyası bağımsız değişkeninde, tools, executable veya runfiles.