Bu sayfada, önbellek isabet oranınızı nasıl kontrol edeceğiniz ve nasıl araştıracağınız açıklanmaktadır uzaktan yürütme bağlamında önbellekte yok.
Bu sayfada, başarılı bir şekilde tamamlanan bir derleme ve/veya testiniz olduğu varsayılır. uzaktan yürütme yöntemlerinden birini kullanıyorsanız ve elinizdeki karar verebilirsiniz.
Önbellek isabet oranınızı kontrol etme
Bazel çalıştırmanızın standart çıkışında, aşağıdaki listede yer alan INFO
satırına bakın:
süreçleri ve süreçleri oluşturmanız gerekir. Bu satırın ayrıntıları
işlemin yapıldığı yeri gösterir. Bir işlemi belirten remote
etiketini bulun
uzaktan gerçekleştirildi, yerel korumalı alanda yürütülen işlemler için linux-sandbox
,
ve diğer yürütme stratejileri için
diğer değerlere sahiptir. Sonucu gelen bir işlem
uzak bir önbellekten gelen remote cache hit
olarak gösterilir.
Örneğin:
INFO: 11 processes: 6 remote cache hit, 3 internal, 2 remote.
Bu örnekte 6 uzak önbellek isabeti vardı ve 2 işlemde
ve uzaktan çalıştırıldı. 3 dahili bölüm yoksayılabilir.
Genellikle, sembolik bağlantılar oluşturma gibi çok küçük dahili işlemlerdir. Yerel
önbellek isabetleri bu özete dahil değildir. Hiçbir işlem alıyorsanız
(veya beklenenden küçük bir sayı) çalıştırmak için bazel clean
komutunu çalıştırın ve ardından derleme/testinizi çalıştırın.
komutunu kullanın.
Önbellek isabetleriyle ilgili sorunları giderme
Beklediğiniz önbellek isabet oranını alamıyorsanız aşağıdakileri yapın:
Aynı derleme/test komutunu yeniden çalıştırmanın önbellek isabetleri ürettiğinden emin olun
Önbelleği doldurmasını beklediğiniz derlemeleri ve/veya testleri çalıştırın. İlgili içeriği oluşturmak için kullanılan yığında yeni bir derleme ilk kez çalıştırıldığında uzaktan kumanda emin olun. Uzaktan yürütmenin bir parçası olarak işlem sonuçları şurada saklanır: daha sonraki bir çalıştırma sonucunda otomatik olarak algılanır.
bazel clean
çalıştır. Bu komut, yerel önbelleğinizi temizler ve böylece uzak önbellek isabetlerini Google Ads'e aktarmadan yerel önbellek isabetleridir.İncelediğiniz derlemeleri ve testleri tekrar çalıştırın (aynı için kullanılabilir).
Önbellek isabet oranı için
INFO
satırını kontrol edin. Herhangi bir işlemremote cache hit
veinternal
, önbelleğiniz doğru şekilde dolduruluyor ve erişilebilir. Bu durumda, bir sonraki bölüme geçin.Muhtemelen tutarsızlık kaynağı, derlemede hermetik olmayan bir şeydir. iki çalıştırmada farklı işlem anahtarları alacak şekilde işlem yapar. Mevcut gerçekleştirdikten sonra, aşağıdakileri yapın:
a. Yürütme günlüklerini almak için söz konusu derlemeleri veya testleri yeniden çalıştırın:
bazel clean
bazel --optional-flags build //your:target --execution_log_binary_file=/tmp/exec1.log
b. iki koşu. İşlemlerin iki günlük dosyasında da aynı olduğundan emin olun. Tutarsızlıklar, bir tarih aralığı için koşar. Bu tutarsızlıkları ortadan kaldırmak için derlemenizi güncelleyin.
Önbelleğe alma sorunlarını çözebiliyorsanız ve artık tekrarlanan çalıştırma tüm önbellek isabetlerini oluşturduğundan sonraki bölüme geçin.
İşlem kimlikleriniz aynıysa ancak önbellek isabeti yoksa önbelleğine almayı engelliyor. Aşağıdaki işlemler için bu bölümden devam edin: kontrol edebilirsiniz.
Yürütme günlüğündeki tüm işlemlerde
cacheable
öğesinin doğru değerine ayarlandığından emin olun. Eğercacheable
, belirtilen bir işlem için yürütme günlüğünde görünmüyor. karşılık gelen kuralınno-cache
tanımıdır.BUILD
mnemonic
vetarget_label
bölümlerine bakın alanların nereye yerleştirileceğini belirlemeye yardımcı olmak için var.İşlemler aynıysa ve
cacheable
önbellek isabeti yoksa komut satırınızda--noremote_accept_cached
var olan derleme için önbellek aramalarını devre dışı bırakır.Gerçek komut satırını bulmak zorsa standart komut satırından Etkinlik Protokolü Oluşturma şu şekilde:
a. Aşağıdakileri almak için Bazel komutunuza
--build_event_text_file=/tmp/bep.txt
ekleyin: günlüğün metin sürümü.b. Günlüğün metin sürümünü açın ve
command_line_label: "canonical"
ilestructured_command_line
mesaj. Genişletme işleminden sonra tüm seçenekler listelenir.c.
remote_accept_cached
araması yapın vefalse
olarak ayarlanıp ayarlanmadığını kontrol edin.d.
remote_accept_cached
değerifalse
ise nerede olduğunu belirleyinfalse
olarak ayarlayın: komut satırında veya bazelrc dosyası olarak ayarlayın.
Makinelerde önbelleğe almayı sağlama
Önbellek isabetleri aynı makinede beklendiği gibi gerçekleştikten sonra farklı bir makinede aynı derleme/testler olmalıdır. Önbelleğe almanın yoksa aşağıdakileri yapın:
Mevcut önbelleklere ulaşmamak için derlemenizde küçük bir değişiklik yapın.
Derlemeyi ilk makinede çalıştırın:
bazel clean
bazel ... build ... --execution_log_binary_file=/tmp/exec1.log
1. adımdaki değişikliği kontrol ederek derlemeyi ikinci makinede çalıştırın şunları içerir:
bazel clean
bazel ... build ... --execution_log_binary_file=/tmp/exec2.log
İkisi için yürütme günlüklerini karşılaştırın koşar. Günlükler aynı değilse derleme yapılandırmalarınızı inceleyin hem de ana makine ortamı sızıntılarından gelen özellikler için devreye girer.
Yürütme günlüklerini karşılaştırma
Yürütme günlükleri, derleme sırasında yürütülen tüm işlemlerin kayıtlarını içerir. Örneğin, her işlemin bir SpawnExec anahtarındaki tüm bilgileri içeren bir öğedir. Dolayısıyla, günlükler de aynı şekilde işlem önbellek anahtarlarıdır.
Önbellek isabetlerini beklendiği gibi paylaşmayan iki derlemenin günlüklerini karşılaştırmak için: şunları yapın:
Her derlemeden yürütme günlüklerini alın ve bunları
/tmp/exec1.log
ve/tmp/exec2.log
.Bazel kaynak kodunu indirin ve şunu kullanarak Bazel klasörüne gidin: aşağıdaki komutu kullanın. execlog ayrıştırıcı'dır.
git clone https://github.com/bazelbuild/bazel.git cd bazel
Günlükleri metne dönüştürmek için yürütme günlüğü ayrıştırıcısını kullanın. Aşağıdakiler çağrısı, ikinci günlükteki işlemleri de işlem sırasına göre sıralar. ilk günlüğe eklemeniz gerekir.
bazel build src/tools/execlog:parser bazel-bin/src/tools/execlog/parser \ --log_path=/tmp/exec1.log \ --log_path=/tmp/exec2.log \ --output_path=/tmp/exec1.log.txt \ --output_path=/tmp/exec2.log.txt
/tmp/exec1.log.txt
ve/tmp/exec2.log.txt
.