Perlambat hanya satu proses untuk mengatur suhu CPU

9
  1. Saya punya program. Saat dijalankan, suhu CPU naik dari 50 menjadi 80 Celcius, yang merupakan perhatian utama saya.

    Saya dapat mengontrol frekuensi CPU untuk memperlambatnya, tetapi proses lain akan melambat juga yang tidak saya inginkan.

    Apakah mungkin untuk memperlambat proses tertentu tanpa mempengaruhi proses lain untuk menjaga CPU tetap dingin?

    OS saya adalah Ubuntu 10.10.

  2. Saya mencoba mengatur prioritas proses nice -n 15 myprogram, dan saya tidak yakin apakah itu akan berhasil. CPU-nya 77 Celcius.

    Apakah nicehanya menetapkan prioritas relatif dari suatu proses dan proses lainnya? Yaitu, jika proses lain tidak berjalan, akankah proses es ini berjalan cepat? Saya ingin mengatur proses agar berjalan lambat semua.

Tim
sumber
1
Apa yang dilakukan proses ini: input / output berat? Perhitungan berat pada CPU utama? Perhitungan berat pada GPU (kartu video) (biasanya tetapi tidak terbatas pada program yang menghitung gambar)?
Gilles 'SANGAT berhenti menjadi jahat'
Program ini pdf2djvu, mengonversi file pdf ke djvu. Apakah IO berat atau CPU berat atau GPU berat? Apakah Anda memiliki cara berbeda untuk kasus yang berbeda?
Tim
4
80º sangat sangat tinggi. Saya tinggal di tempat yang panas di Spanyol dan suhu maksimal prosesor saya ~ 60º. Buka komputer, bersihkan semua bagian dan ganti pendingin. Saya pikir Anda bukan menggunakan CPU.
Rufo El Magufo
Coba lakukan keduanya.
stribika
80 ° sebenarnya tinggi tetapi tidak dianggap ekstrim tergantung dari model CPU. kebanyakan CPU mendukung hingga 90 ° C tanpa masalah
Kiwy

Jawaban:

16

CPULimit adalah persis apa yang Anda butuhkan. Anda memulai program, kemudian jalankan cpulimit terhadap nama program atau PID, tentukan berapa persentase yang Anda inginkan terbatas.

Perintah berikut membatasi proses pada PID 7777 hingga penggunaan CPU 5%.

cpulimit -p 7777 -l 5

Atau, Anda dapat menggunakan nama yang dapat dieksekusi:

cpulimit -e myprogram -l 5

Atau jalur absolut dari executable:

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

Perhatikan persentase semua inti; jadi jika Anda memiliki 4 core, Anda bisa menggunakan 400%.

laebshade
sumber
1
Terima kasih! (1) Apakah CPULimit hanya digunakan untuk proses yang sudah berjalan? Tidak digunakan saat mengirimkan program untuk dijalankan? (2) apakah ia memperbaiki persentase penggunaan CPU oleh suatu proses, atau menetapkan batas atas untuk proses dan memungkinkan penggunaannya berfluktuasi antara 0 dan batas itu menurut proses lain? (3) Saya juga menemukan bahwa setelah menggunakan CPULimit pada suatu proses, tidak ada cara untuk Ctrl + C untuk membatalkan proses, karena akan segera kembali untuk berjalan secara otomatis. Bertanya-tanya mengapa?
Tim
2
Peringatan kecil tentang CPULimit: ia menggunakan SIGSTOP / SIGCONT untuk membatasi jumlah waktu CPU yang digunakan oleh suatu proses (proses yang melebihi target penggunaan CPU dihentikan; ketika cukup waktu telah berlalu, proses tersebut mengirim SIGCONT dan melanjutkan eksekusi). Namun, ada beberapa kasus yang jarang terjadi di mana sinyal dapat mengganggu panggilan sistem, lihat manual pustaka GNU C untuk detailnya. Karena CPULimit mengirimkan sinyal-sinyal ini beberapa kali dalam satu detik, ada kemungkinan besar untuk menginterupsi. Bukan masalah besar untuk menjalankan pdftk di desktop, tho.
Riccardo Murri
8

Anda dapat mengubah proses yang berjalan untuk memberikan prioritas lebih atau kurang (yang disebut "nilai bagus"). Perhatikan bahwa skala prioritas UNIX agak kontra-intuitif: nilai negatif berarti proses lebih disukai daripada proses bersamaan, yaitu memiliki prioritas "lebih".

Dengan demikian Anda dapat mencoba "memperlambat" proses Anda dengan memberikan PID melalui:

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

Setiap kali Anda menjalankan ini, proses "nilai bagus" dinaikkan sebesar 1; Anda dapat menggunakan nilai integer selain +1tentu saja.

Perintah nice memungkinkan Anda untuk memulai proses dengan penyesuaian nilai bagus +10 (ubah ini dengan opsi -n). Sebagai contoh:

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

Namun, "nilai bagus" hanya mempengaruhi seberapa banyak penjadwal mendukung menjalankan proses tertentu di atas yang lain dalam sistem: jika komputer Anda pada dasarnya idle, menaikkan "nilai bagus" dari satu proses tunggal tidak akan menghentikan proses mengambil 100% CPU. Saya mengutip dari halaman getpriority (2) : (Penekanan ditambahkan oleh saya.)

Sejauh mana nilai bagus relatifnya mempengaruhi penjadwalan proses bervariasi di seluruh sistem Unix, dan, di Linux, lintas versi kernel. Dimulai dengan kernel 2.6.23, Linux mengadopsi sebuah algoritma yang menyebabkan perbedaan relatif pada nilai bagus memiliki efek yang jauh lebih kuat. Hal ini menyebabkan nilai-nilai bagus yang sangat rendah (+19) benar-benar memberikan sedikit CPU untuk suatu proses setiap kali ada beban prioritas lain yang lebih tinggi pada sistem.

Alasan untuk ini terletak pada cara proses dijalankan pada kernel seperti UNIX: setiap kali kernel memutuskan untuk menjalankan suatu proses, proses itu memiliki kontrol penuh terhadap inti CPU untuk rentang waktu tertentu (tetap dan pendek). "Nilai bagus" dapat memengaruhi seberapa sering penjadwal kernel bersedia memberikan slot waktu untuk suatu proses, tetapi Anda tidak dapat mengubah fakta bahwa, setelah dijadwalkan, suatu proses berjalan tanpa gangguan untuk waktu yang tetap.

Oleh karena itu, singkat memperlambat CPU Anda, tidak ada cara untuk membuat proses berjalan lebih lambat jika tidak ada proses lain dalam sistem yang dapat bersaing untuk akses CPU.

Riccardo Murri
sumber
Terima kasih! Apakah mungkin untuk membuat proses berjalan lambat dari awal hingga akhir, terlepas dari proses lain?
Tim
@Tim Saya tidak berpikir apa yang Anda minta itu mungkin; Saya telah memperbarui jawabannya dengan lebih detail. Harapan itu membuatnya lebih jelas.
Riccardo Murri
1
Balasan lain menyarankan CPULimit, yang tampaknya melakukan hal yang mustahil.
Tim
Ah, saya tidak tahu tentang CPULimit - itu pasti mengisi celah di set alat UNIX saya.
Riccardo Murri
nicetidak akan melakukan apa pun untuk menjaga prosesor Anda tetap dingin. Itu tidak dirancang untuk bekerja seperti itu.
Ken Sharp
4

cgroup dibuat untuk alasan ini.

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

Butuh beberapa saat untuk membiasakan diri dengan mereka, dan saya percaya Anda perlu akses root untuk mengaturnya, tetapi semuanya bisa dituliskan. Ubuntus yang lebih baru memiliki file .conf sehingga Anda tidak perlu menulis skrip Anda sendiri. Saya tidak yakin tentang 10,10.

Tempat yang bagus untuk memulai adalah dalam jawaban ini: https://askubuntu.com/a/94743/170177

Perhatikan bahwa cgroup masih dalam pengembangan aktif sehingga beberapa fitur mungkin tidak tersedia di kernel Anda saat ini.

Menggunakan cpu.shares cgroup tidak melakukan apa pun yang nilai bagus tidak akan lakukan. Sepertinya Anda ingin benar-benar mencekik proses, yang pasti bisa dilakukan.

Anda perlu menggunakan satu atau dua skrip, dan / atau mengedit /etc/cgconfig.conf untuk menentukan parameter yang Anda inginkan.

Secara khusus, Anda ingin mengedit nilai cpu.cfs_ Period_us dan cpu.cfs_quota_us . Prosesnya kemudian akan dibiarkan berjalan untuk cpu.cfs_quota_us microseconds per cpu.cfs_ Period_us microseconds.

Sebagai contoh:

Jika cpu.cfs_ Period_us = 50000 dan cpu.cfs_quota_us = 10000 maka proses akan menerima 20% dari maksimum waktu CPU, tidak peduli apa pun yang terjadi.

Dalam tangkapan layar ini saya telah memberikan proses 2% dari waktu CPU:

Waktu CPU 2%

Sejauh menyangkut proses itu berjalan pada 100%.

Pengaturan cpu.shares di sisi lain dapat dan masih akan menggunakan 100% dari waktu CPU idle.

Dalam contoh serupa ini saya telah memberikan proses cpu.shares = 100 (dari 1024):

cpu.shares

Seperti yang Anda lihat prosesnya masih menghabiskan semua waktu CPU idle.

Referensi:

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

Ken Sharp
sumber
Catatan: systemdmelakukan hal yang sedikit berbeda. Ubuntu Trusty, misalnya, tampaknya datang dengan dua layanan untuk mengelola cgroup. Saya akan memperbarui ketika saya tahu lebih banyak.
Ken Sharp
Tetapi Anda dapat mengubah maks cpu% saat proses sudah dimulai, seperti renice?
Marco Sulla
renicetidak mengubah jumlah CPU yang digunakan, itu hanya mengubah prioritas proses dalam penjadwal. cgroups dapat mengubah batas CPU kapan saja. Sejak jawaban ini diposting, cgroup telah menambahkan semua jenis tweak dan sangat kuat.
Ken Sharp
renice does not change the amount of CPU usesSaya tahu;) Saya baru memposting sebagai contoh program yang mengubah hal-hal saat runtime. Terima kasih atas balasan Anda, saya akan mencoba cgroup.
Marco Sulla