Göreviniz belirli bir CPU'da zaman isteyen tek işlemse, görevler arasında bağlam anahtarı olmayacaktır :-). Ancak CPU hala kesintiye uğrayabilir, bu da içeriğe çekirdeğe ve geriye dönüşe neden olabilir. Ve olası nedenlerden biri, bu CPU'da çalıştırılacak başka bir görev olup olmadığını kontrol eden ön hazırlık zamanlayıcısıdır ...
Linux , bunu yapmak için bir neden olmadığında işlemci üzerinde herhangi bir ön hazırlık zamanlayıcı kesintisi üretmekten kaçınabilir. Bkz CONFIG_NO_HZ_FULL
. Bu özelliği kullanmak için, çekirdek oluşturulduğunda etkinleştirilmeli ve bir önyükleme seçeneği kullanılarak etkinleştirilmelidir.
Varsayılan olarak, hiçbir CPU adaptif keneler CPU olmayacaktır. "Nohz_full =" önyükleme parametresi, uyarlamalı keneler CPU'larını belirtir. Örneğin, "nohz_full = 1,6-8" CPU 1, 6, 7 ve 8'in uyarlamalı keneler CPU olması gerektiğini söylüyor. Tüm CPU'ları adaptif-kene CPU olarak işaretlemenizin yasak olduğunu unutmayın [...]
LWN.net, uyarlanabilir keneler CPU'lar için "Ingo Molnar'a göre, CPU zamanının% 1'i kadar tasarruf edilecek" diyor. Çekirdek belgede bunun altı farklı maliyeti olduğu belirtiliyor ve ayrıca "BİLİNEN SORUNLAR" listesi de var.
Bu kazanç, özellikle bu cevapta atıfta bulunulan gibi, birden fazla görev arasındaki bağlam anahtarlarının sıklığını azaltma potansiyel verim kazanımlarına kıyasla nispeten küçüktür: Linux CPU zamanlayıcısı tarafından kullanılan zaman dilimlerinin uzunluğu nasıl değiştirilir?
Küçük baskı: bu ölçümler tarih öncesi Spectre, Meltdown, KPTI ve x86 ASID desteği :-( Ve sanırım biraz daha eski donanımlar için de geçerli. çekirdek sürümünüzde ve donanımınızda değişti ... PTI, çekirdeği çok sık çağıran yazılımlar dışında, asıl örnek veritabanları olan ASID tarafından hafifletilecekti. .
Molnar'ın orijinal RFC yamasındaki umudu, zamanla "çoğu Linux dağıtımı tarafından etkinleştirilecek" idi. Fedora 28'in NO_HZ_FULL
destekle oluşturulmuş varsayılan bir çekirdek sağladığını fark ettim . Ancak Debian 9 bunu yapmaz.
Daha yakın zamanlarda, Linux v4.17 kaldırır bir artık 1 Hz Saat ilerleme gelen nohz_full
CPU'lar . Verim üzerindeki etkinin oldukça küçük olduğunu hayal ediyorum :-), ancak NO_HZ_FULL
bir CPU'da birden fazla çalıştırılabilir süreç olduğunda faydaların durumunu izlemeye çalışıyorum -
0 Hz'e ulaştığımızda, periyodik kene varsayımını nr_running> = 2'den de kaldırabiliriz, ayrıca meşgul görevleri yalnızca sched_latency kısıtlamalarının yapmamızı gerektirdiği sıklıkta keserek - nr_running'a bağlı olarak her 4-40 ms'de bir .
Bu v2.6.25-rc1, 8f4d37ec073c, "sched: yüksek çözünürlüklü preemption tick" , ayrı, daha kesin bir kene kullanarak pre-emption zaten başladı biraz kafa karıştırıcı . Aynı LWN.net makalesinde bu yorum aracılığıyla bulundu: https://lwn.net/Articles/549754/ ).