CPU sıcaklığını düzenlemek için sadece bir işlemi yavaşlatın


9
  1. Bir programım var. Çalışırken, CPU sıcaklığı 50'den 80 Celcius'a yükseliyor, ki bu benim en büyük endişem.

    CPU frekansını yavaşlatmak için kontrol edebilirim, ancak istemediğim diğer işlemler de yavaşlatılacak.

    CPU'yu serin tutmak için diğer işlemleri etkilemeden belirli bir işlemi yavaşlatmak mümkün müdür?

    İşletim sistemim Ubuntu 10.10.

  2. Sürecin önceliğini belirlemeye çalıştım nice -n 15 myprogramve bunun işe yarayıp yaramayacağından emin değilim. CPU 77 Celcius yüksekliğindedir.

    Does nicesadece diğer süreçler wrt bir sürecin göreceli önceliğini ayarlamak? Yani, diğer süreçler çalışmıyorsa, bu güzel süreç hızlı çalışır mı? Sürecin yavaş çalışmasını ayarlamak istiyorum.


1
Bu işlem ne işe yarar: ağır girdi / çıktı? Ana CPU'da ağır hesaplamalar? GPU'da (ekran kartı) ağır hesaplamalar (genellikle görüntüleri hesaplayan programlarla sınırlı değildir)?
Gilles 'SO- kötü olmayı kes'

Program pdf2djvu, pdf dosyasını djvu'ya dönüştürüyor. Ağır IO veya ağır CPU veya ağır GPU mu? Farklı durumlar için farklı yollarınız var mı?
Tim

4
80º çok çok yüksektir. İspanya'nın sıcak bir yerinde yaşıyorum ve işlemcimin maksimum sıcaklığı ~ 60º. Bilgisayarı açın, tüm parçaları temizleyin ve soğutucuları değiştirin. Bence CPU kullanımı değil.
Rufo El Magufo

Her ikisini de yapmayı deneyin.
stribika

80 ° aslında yüksektir, ancak CPU modeline bağlı olarak aşırı kabul edilmez. sorunsuz 90 ° C'ye kadar çoğu CPU desteği
Kiwy 22:18

Yanıtlar:


16

CPULimit tam olarak ihtiyacınız olan şey. Programı başlatın, sonra program adını veya PID karşı cpulimit çalıştırın, hangi yüzde sınırlı olmasını istediğinizi belirterek.

Aşağıdaki komut, PID 7777'deki işlemi% 5 CPU kullanımı ile sınırlar.

cpulimit -p 7777 -l 5

Alternatif olarak, yürütülebilir dosyanın adını kullanabilirsiniz:

cpulimit -e myprogram -l 5

Veya yürütülebilir dosyanın mutlak yolu:

cpulimit -P /path/to/myprogram -l 5

Yüzdenin tüm çekirdeklerde olduğuna dikkat edin; 4 çekirdeğiniz varsa,% 400 kullanabilirsiniz.


1
Teşekkürler! (1) CPULimit sadece zaten çalıştırılan işlem için mi kullanılıyor? Çalıştırılacak bir program gönderirken kullanılmıyor mu? (2) bir işlem tarafından CPU kullanım yüzdesini düzeltir mi, yoksa işlem için üst sınırı belirler mi ve kullanımının diğer işlemlere göre 0 ile bu sınır arasında dalgalanmasına izin verir mi? (3) CPULimit'i bir işlemde kullandıktan sonra, çalışmayı iptal etmek için Ctrl + C'nin bir yolu olmadığını buldum, çünkü yakında otomatik olarak çalışmaya geri dönecek. Neden acaba?
Tim

2
CPULimit hakkında küçük bir uyarı: bir işlem tarafından kullanılan CPU süresini sınırlamak için SIGSTOP / SIGCONT kullanır (hedef CPU kullanımını aşan işlemler durdurulur; yeterli zaman geçtiğinde, işlem bir SIGCONT gönderilir ve yürütmeye devam eder). Ancak, sinyallerin sistem çağrılarına müdahale edebileceği nadir durumlar vardır, ayrıntılar için GNU C kütüphane kılavuzuna bakın. CPULimit bu sinyalleri saniyede birçok kez gönderdiğinden, ara verme olasılığı oldukça yüksektir. Masaüstünde pdftk çalıştırmak için büyük bir sorun değil, tho.
Riccardo Murri

8

Sen edebilirsiniz renice vermek için çalışan bir süreci daha az ya da önceliği (sözde "güzel değer"). UNIX öncelik ölçeğinin bir şekilde karşı sezgisel olduğuna dikkat edin: negatif değerler, bir sürecin eşzamanlı süreçlere göre tercih edildiği anlamına gelir, yani "daha fazla" önceliğe sahiptir.

Böylece, PID verildiğinde sürecinizi "yavaşlatmaya" çalışabilirsiniz:

# lower priority of a process
renice +1 "PID"

Bunu her çalıştırdığınızda, "hoş değer" süreci 1 artar; +1elbette dışındaki tamsayı değerlerini kullanabilirsiniz .

Nice komutu , bir işlemi +10 nice değer ayarlamasıyla başlatmanıza izin verir (bunu seçenekle değiştirin -n). Örneğin:

# start a CPU-intensive task with low priority
nice ./cpu-hog

Ancak, "güzel değer" sadece ne kadar etkilediğini sistemde diğerlerine göre belirli bir süreç çalışıyor zamanlayıcı iyilik: Bilgisayarınızın temelde edecek tek sürecin "güzel değeri" yükselterek rölantide ise değil % 100 almaktan bu süreci durdurmak İŞLEMCİ. Getpriority (2) manpageinden alıntı yapıyorum : (Vurgu ekledim.)

Göreceli hoş değerlerinin süreçlerin zamanlamasını etkileme derecesi Unix sistemlerinde ve Linux'ta çekirdek sürümlerinde değişir. Çekirdek 2.6.23'ten başlayarak, Linux güzel değerlerde göreli farklılıkların çok daha güçlü bir etkiye sahip olmasına neden olan bir algoritma benimsedi. Bu , sistemde başka herhangi bir yüksek öncelik yükü olduğunda işleme çok az CPU sağlamak için çok düşük hoş değerlerin (+19) oluşmasına neden olur .

Bunun nedeni, işlemlerin UNIX benzeri bir çekirdek üzerinde çalışma biçiminde yatmaktadır: çekirdek bir işlemi yürütmeye her karar verdiğinde, bu işlem belirli (sabit ve kısa) bir süre boyunca bir CPU çekirdeği üzerinde tam denetime sahiptir. "Güzel değer", çekirdek zamanlayıcısının bir sürece zaman aralığı vermek istediğini etkileyebilir, ancak bir kez zamanlandıktan sonra bir işlemin sabit bir süre boyunca bozulmadan çalıştığı gerçeğini değiştiremezsiniz.

Bu nedenle, CPU'nuzu yavaşlatmadan kısa bir süre, sistemde CPU erişimi için mücadele edebilecek başka bir işlem yoksa, bir işlemin daha yavaş çalışmasını sağlamanın bir yolu yoktur.


Teşekkürler! Bir süreci diğer süreçlerden bağımsız olarak baştan sona kadar yavaş yapmak mümkün müdür?
Tim

@ Zaman Sorduğun şeyin mümkün olduğunu düşünmüyorum; Cevabı daha ayrıntılı olarak güncelledim. Umarım bu daha net olur.
Riccardo Murri

1
Diğer cevap, imkansız olanı yapan CPULimit'i önerdi.
Tim

Ah, CPULimit'i bilmiyordum - kesinlikle UNIX araç setimdeki boşluğu dolduruyor.
Riccardo Murri

niceişlemcinizi serin tutmak için hiçbir şey yapmaz. Bu şekilde çalışmak için tasarlanmamıştır.
Ken Sharp

4

cgroups tam da bu nedenle yaratıldı.

http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm

Kendinizi tanımak biraz zaman alıyor ve bunları kurmak için root erişimine ihtiyacınız olduğuna inanıyorum, ancak hepsi komut dosyası olabilir. Yeni Ubuntus'un bir .conf dosyası vardır, böylece kendi komut dosyanızı yazmak zorunda kalmazsınız. 10.10'dan emin değilim.

Başlamak için güzel bir yer bu cevapta: https://askubuntu.com/a/94743/170177

Cgroups hala aktif geliştirme altında olduğunu unutmayın, bu nedenle bazı özellikler mevcut çekirdeğinizde mevcut olmayabilir.

Cgroups ' cpu.shares kullanmak güzel bir değerin yapmayacağı hiçbir şey yapmaz. Kesinlikle yapılabilecek süreçleri gerçekten kısmak istediğiniz gibi görünüyor.

İstediğiniz parametreleri tanımlamak için bir veya iki komut dosyası kullanmanız ve / veya /etc/cgconfig.conf dosyasını düzenlemeniz gerekir .

Özellikle, cpu.cfs_period_us ve cpu.cfs_quota_us değerlerini düzenlemek istiyorsunuz . İşlemin cpu.cfs_period_us mikrosaniye başına cpu.cfs_quota_us mikrosaniye için çalışmasına izin verilecektir .

Örneğin:

Eğer cpu.cfs_period_us = 50000 ve cpu.cfs_quota_us = 10000 ardından süreç olursa olsun oluyor başka ne CPU süresi maksimum% 20'sini alacak.

Bu ekran görüntüsünde CPU zamanının% 2'sini verdim:

% 2 CPU zamanı

Süreç söz konusu olduğunda% 100 çalışıyor.

Cpu.shares ayarları ise boş CPU zamanının% 100'ünü kullanabilir ve kullanmaya devam eder.

Bu benzer örnekte cpu.shares = 100 (1024) işlemini verdim :

cpu.shares

Gördüğünüz gibi işlem hala tüm boş CPU zamanını tüketiyor.

Referanslar:

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html


Not: systemdişleri biraz farklı yapar. Örneğin Ubuntu Trusty, cgroup'ları yönetmek için iki hizmetle geliyor gibi görünüyor. Daha fazlasını öğrendiğimde güncelleme yapacağım.
Ken Sharp

Ancak, işlem zaten başlatıldığında max cpu% değerini nasıl değiştirebilirim renice?
Marco Sulla

renicekullanılan CPU miktarını değiştirmez, sadece zamanlayıcıdaki işlemin önceliğini değiştirir. cgroups CPU limitini istediği zaman değiştirebilir. Bu cevap yayınlandığından beri gruplara her türlü ince ayar eklendi ve çok güçlü.
Ken Sharp

renice does not change the amount of CPU usesBiliyorum;) Sadece çalışma zamanında şeyleri değiştiren bir program örneği olarak yayınladım. Cevabınız için teşekkür ederim, grupları deneyeceğim.
Marco Sulla
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.