nice aynı Linux kullanılmadığı sürece Linux'ta etkisizdir


3

İki farklı kök terminaline girersem:

nice -n 19 burnK7 &

ve

nice -n -19 burnK7 &

Ardından her iki işlem de kullanılabilir CPU zamanının yaklaşık% 50'sini alır - beklenmez ve kesinlikle istenmez.

Aynı kök terminalde çalışırsam :

 nice -n 19 burnK7 &
 nice -n -19 burnK7 &

İlk işlem% 0 civarında, ikincisi ise beklendiği gibi mevcut CPU zamanının yaklaşık% 100'ünü alıyor.

Bu bir hata veya özellik mi?

Arch Linux'u çekirdeğin 3.16 sürümüyle çalıştırıyorum, tek bir çekirdekli makinede, buna değer.


1
Yani, aynı kabuk, aynı kullanıcı tarafından başlatılan işlemlerden bahsetmediğiniz sürece önceliklendirme anlamsızdır. Bu korsanları geliyor.
Fela Maslen

Yanıtlar:


8

Yani, aslında bundan sonra, işte bazı bilgiler. Gördüğünüz davranış, Linux 2.6.38’de (2010’da) eklenen otomatik grup özelliği nedeniyledir. İşte gördüğünüz şeyi açıklayan sched(7)kılavuz sayfasına eklemek üzere olduğum bir metnin düzenlenmiş bir versiyonu .

Çekirdek, Linux çekirdeğini çok sayıda paralel derleme işlemi (yani make(1) -jbayrak) ile oluşturmak gibi çok işlemli, CPU yoğun iş yükleri karşısında etkileşimli masaüstü performansını geliştirmek için otomatik gruplama olarak bilinen bir özellik sunar .

Yeni bir oturum aracılığıyla oluşturulduğunda yeni bir otomatik grup oluşturulur setsid(2); bu, örneğin yeni bir terminal penceresi başlatıldığında olur. Tarafından oluşturulan yeni bir işlem fork(2), ebeveyninin otomatik grup üyeliğini miras alır. Dolayısıyla, bir oturumdaki tüm işlemler aynı otomatik grubun üyeleridir.

Otomatik gruplama etkinleştirildiğinde, bir otomatik grubun tüm üyeleri aynı görev zamanlayıcısı "görev grubu" na yerleştirilir. Linux çekirdek zamanlayıcısı, CPU çevrimlerinin görev grupları arasındaki dağılımını eşitleyen bir algoritma kullanır. Bunun etkileşimli masaüstü performansı için sağladığı avantajlar aşağıdaki örnekle açıklanabilir.

Aynı CPU için rekabet eden iki otomatik grup bulunduğunu varsayalım (yani, tek bir CPU sistemi veya taskset(1) tüm işlemlerin bir SMP sistemindeki aynı CPU ile sınırlandırılmasının kullanıldığını varsayalım ). İlk grup, ile başlayan bir çekirdek yapısından on CPU'ya bağlı süreç içerir.make -j10. Diğer bir CPU bağlı tek bir işlem içerir: bir video oynatıcı. Otomatik gruplamanın etkisi, iki grubun her birinin CPU döngüsünün yarısını alacağıdır. Diğer bir deyişle, video oynatıcı, döngülerin sadece% 9'undan ziyade CPU döngülerinin% 50'sini alır ve bu da muhtemelen bozulmuş video oynatmasına neden olur. Bir SMP sistemindeki durum daha karmaşık olmakla birlikte, genel etki aynıdır: Zamanlayıcı, çok sayıda CPU'ya bağlı işlem içeren bir otomatik grubun pahasına CPU döngülerini durduramayacağı şekilde CPU döngülerini görev gruplarına dağıtır sistemdeki diğer işlerin.

Güzel değer ve grup çizelgeleme

Gerçek zamanlı olmayan işlemleri planlarken (örneğin, varsayılan SCHED_OTHERpolitikaya göre planlananlar), zamanlayıcı, iş parçacıklarının "görev grupları" altında programlandığı "grup zamanlaması" olarak bilinen bir teknik kullanır. Görev grupları, çeşitli durumlarda oluşturulmaktadır, burada ilgili vaka otomatik gruplamadır.

Eğer otomatik gruplama etkinse, o zaman bir otomatik gruba (yani yaratıldığı gibi aynı oturum) yerleştirilen bütün başlıklar ( setsid(2)bir görev grubu) bir görev grubu oluşturur. Her yeni otomatik grup böylece ayrı bir görev grubudur.

Grup planlaması altında, bir iş parçacığının iyi değeri, aynı görev grubundaki diğer iş parçacıklarına göre kararları zamanlamak için etkilidir . Bunun, UNIX sistemlerindeki iyi değerin geleneksel anlambilimi açısından bazı şaşırtıcı sonuçları vardır. Özellikle, otomatik gruplama etkinse (çeşitli dağıtımlarda varsayılandır), o zaman nice(1)bir işlem üzerinde çalışmak yalnızca aynı oturumda yürütülen diğer işlemlere göre programlama yapmak için bir etkiye sahiptir (genellikle: aynı terminal penceresi).

Tersine, farklı işlemlerde (örneğin, her biri işleri farklı otomatik gruplara bağlı olan farklı terminal pencereleri gibi) tek CPU işlemli işlemler olan iki işlem için, oturumların birindeki işlemin değerini değiştirir Programın diğer oturumdaki sürece ilişkin kararları açısından etkisi yoktur.

Otomatik gruplamanın niceburada açıklanan geleneksel davranışa müdahale etmesini önlemek istiyorsanız , özelliği devre dışı bırakabilirsiniz.

echo 0 > /proc/sys/kernel/sched_autogroup_enabled

Bunun, otomatik grup özelliğinin sağlaması amaçlanan masaüstü etkileşimi için yararları devre dışı bırakma etkisinin de olacağına dikkat edin (yukarıya bakın).

Autogroup güzel değeri

Bir işlemin otomatik grup üyeliği dosya aracılığıyla görüntülenebilir /proc/[pid]/autogroup:

$ cat /proc/1/autogroup
/autogroup-1 nice 0

Bu dosya aynı zamanda bir otomatik gruba tahsis edilen CPU bant genişliğini değiştirmek için de kullanılabilir. Bu, autogroup'un nice değerini ayarlamak için dosyaya "nice" aralığında bir sayı yazarak yapılır. İzin verilen aralık +19 (düşük öncelikli) ile -20 (yüksek öncelikli) arasındadır.

Otomatik grup güzel ayarı, işlem güzel değeri ile aynı anlama gelir, ancak diğer otomatik grupların göreli değerlerine bağlı olarak CPU döngülerinin otomatik gruba bir bütün olarak dağıtılması için de geçerlidir. Bir otomatik grubun içindeki bir işlem için, aldığı CPU çevrimleri, otomatik grubun iyi değerinin (diğer otomatik gruplarla karşılaştırıldığında) ve işlemin iyi değerinin (aynı otomatik gruptaki diğer işlemlerle karşılaştırıldığında) bir ürünü olacaktır.


1
@Burgi Fuarı yeterince. Şimdi daha kullanışlı bir form olabileceğini düşündüğüm şekilde düzenlenmiş durumdayım.
mtk

Çok yararlı cevap, ancak bir insan otomatik grupları nasıl iyi bir değere çevirir? "Bu dosya aynı zamanda bir otomatik gruba tahsis edilen CPU bant genişliğini değiştirmek için de kullanılabilir". PID'yi bulduktan sonra (bu durumda 30218) Ben yazdığım autogroup nice değerini değiştirmek istiyorum cat /proc/30218/autogroupdöndürdüm /autogroup-187 nice 0ve sonra da yazdım echo "/autogroup-187 nice 10" | sudo tee /proc/30218/autogroupama geçersiz bir argüman hatası veriyor.
Falk,

@Falk: sadeceecho 10 > /proc/30218/autogroup
mtk

Denerim, zavallı dizüstü bilgisayarımı kurtardın, teşekkür ederim.
Falk,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.