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.
Saya mencoba mengatur prioritas proses
nice -n 15 myprogram
, dan saya tidak yakin apakah itu akan berhasil. CPU-nya 77 Celcius.Apakah
nice
hanya 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.
9
Jawaban:
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%.
Atau, Anda dapat menggunakan nama yang dapat dieksekusi:
Atau jalur absolut dari executable:
Perhatikan persentase semua inti; jadi jika Anda memiliki 4 core, Anda bisa menggunakan 400%.
sumber
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:
Setiap kali Anda menjalankan ini, proses "nilai bagus" dinaikkan sebesar 1; Anda dapat menggunakan nilai integer selain
+1
tentu saja.Perintah nice memungkinkan Anda untuk memulai proses dengan penyesuaian nilai bagus +10 (ubah ini dengan opsi
-n
). Sebagai contoh: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.)
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.
sumber
nice
tidak akan melakukan apa pun untuk menjaga prosesor Anda tetap dingin. Itu tidak dirancang untuk bekerja seperti itu.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:
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):
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
sumber
systemd
melakukan hal yang sedikit berbeda. Ubuntu Trusty, misalnya, tampaknya datang dengan dua layanan untuk mengelola cgroup. Saya akan memperbarui ketika saya tahu lebih banyak.renice
?renice
tidak 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.renice does not change the amount of CPU uses
Saya tahu;) Saya baru memposting sebagai contoh program yang mengubah hal-hal saat runtime. Terima kasih atas balasan Anda, saya akan mencoba cgroup.