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) -j
bayrak) 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_OTHER
politikaya 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 nice
burada 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.