Bir program sadece bir CPU çekirdeği ile nasıl çalıştırılır?


28

Terminator'da bir oyun sunucusuyla ilgili bir sürü senaryo çalıştırmaya çalışıyorum. Tek sorun, bunu yaptığımda Terminator tüm CPU çekirdeğimi algılıyor ve bilgisayar kapanıyor. Başlatmanın bir yolu var mı, ama sadece 1 CPU çekirdeğim olduğunu düşünerek kandırmak mı?


2
Merhaba, buradaki xy probleminden acı çekiyor gibi görünüyorsunuz, bazen elde etmek istediğiniz şeye geri dönmeye değer olabilir ve denemeniz gereken denemeye değil, ihtiyacınız olan bir programı yavaşlatmadan çalıştırmak gibi görünüyor. PC, sadece tek çekirdekli bir şeyi çalıştırmak için değil. Yok daha az, bu çok iyi bir soru. +1
Vality

Yanıtlar:


44

terminatorBelirli bir işlemin tüm işlemcisinde "yayılma" yapmak değildir . Linux kendisi (çekirdek) bunu yapıyor. Bir görev (işlem) tüm CPU'larda varsayılan olarak çalışacak şekilde zamanlanmış; iş parçacığı kullanıyorsa, bir kerede birden fazla CPU kullanabilir.

Bir işlemi belirli bir CPU ile sınırlamak için komutu kullanın taskset.

taskset --cpu-list 1,2 my_command 

Bu komut my_command'ı sadece # 1 veya # 2 CPU'larda çalışmaya zorlar.

Daha fazla bilgi man tasksetiçin, "linux CPU benzeşimi" yazın veya arayın ( burada ilk hit ).


2
Bu arada, zamanlama önceliğini düşürerek, sadece "kötü" süreçleri değiştirmeye de çalışabilirsiniz.
Matteo Italia

@MatteoItalia Ubuntu 13.10 ve 14.04'ün varsayılan olarak iyi bir düzeyi yoksaydığını tespit ettim. Sen eklemek zorunda kernel.sched_autogroup_enabled = 0için /etc/sysctl.confbu işi yapmak için. Bununla birlikte, eğer otomatik grup devre dışı bırakılmışsa, 13.10'un önyükleme sırasında sık sık panik olduğunu da buldum.
kasperd

Peki ya ana sürecin alt süreçleri? Ana süreçlerinin çekirdek / CPU ilgisini miras alıyorlar mı?
yildizabdullah

5

Başka bir cevap daha önce kelimenin tam anlamıyla cevap vermesine rağmen, bunun doğru şekilde yapılmaması ihtimalini keşfedeceğim. Bunun yerine, nicekomutu kullanarak bilgisayarı (etkileşimli olmayan komut dosyaları gibi) yavaşlatmak istemediğiniz bir komut dosyası çalıştırmalısınız .

Bunu yapmak için, örneğin nice ile çalıştırmak istediğiniz komutu önekleyin, örneğin: nice command_to_run Bu, programın diğer görevlerin altında öncelik sırasına indirilmesine neden olacak ve makinenizi yavaşlatmayacaktır. Bu tekniği sıklıkla bilgisayarımı yavaşlatmak için yavaşlatacak uzun bir derleme yaparken kullanıyorum, bu programın makine meşgul olmadığında tüm çekirdeği kullanmasına izin verme avantajına sahiptir, ancak bir şeyi çalıştırdığınızda bunları hızlı bir şekilde kullanmayı durdurur Başka.


"Güzel bir açık sonlandırıcı" gibi bir komut kullanırsam sonlandırıcı ne olursa olsun tüm CPU çekirdeği ile çalışacak mı?
user245115

Oh, bu arada, eğer faremi hareket ettirirsem ve hiçbir şey açılmıyorsa, tüm CPU'ları kullanır mı? Ve tüm CPU'ları kullanması için faremi hareket ettirmeyi bıraktıktan sonra ne kadar sürer? Bunu görev setiyle birlikte kullanabilir miyim? (Evet, ben Linux ile gerçek bir noob.)
user245115

@ user245115 Güzel yardımcı programı kullanıyorsanız, sonlandırıcının birden fazla CPU çekirdeği kullanması mümkündür, ancak başka bir program (güzel çalışmayan) bunları kullanmak isterse yavaşlama yaşamaması için hemen bu çekirdeği kullanmayı bırakacaktır, ancak tamamen ücretsiz ve kullanılmamışlarsa bunları kullanın. Bu, fare kullanımından veya programla başka bir etkileşimden etkilenmemelidir.
Vality

@ user245115 Bunu, taskset nice open terminatorher ikisini de kullanmak için yalnızca yazılı olarak görev kümesiyle kullanmak mümkün olmalıdır . Ancak, her ikisi de programın kaynak kullanımını azaltma etkisinin elde edilmesi için iki farklı program kullanacağınız için bu fazla bilinmeyecektir.
Vality

@ user245115 Başka bir işlem yaptığınız anda (fareyi hareket ettirmek gibi) sonlandırıcısına daha az CPU zamanı verilecek, bu etkin bir şekilde anında ve diğer bir etkinliği durdurduğunuzda tekrar kullanacaktır (ayrıca etkili bir şekilde anında)
Vality
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.