Saya memiliki proses reguler yang tidak begitu penting tetapi akan menghabiskan banyak daya CPU, dan saya memiliki proses lain yang sangat penting, tetapi menghabiskan sebagian besar waktu idle, tetapi ketika mendapat pekerjaan itu benar-benar membutuhkan daya komputasi yang tinggi
Saya mencoba menjalankan dengan nice -20 ./low_priority_process
dan nice --20 ./high_priority_process
tetapi tetap saja prioritas yang lebih rendah mengkonsumsi jumlah CPU yang signifikan ketika proses dengan prioritas tinggi diperlukan, bagaimana saya dapat menjalankan proses yang benar-benar akan menghasilkan atau bahkan menangguhkan secara otomatis ketika proses lain menggunakan daya CPU
RR
penjadwalan untuk proses prioritas tinggi.Jawaban:
Lihatlah cgroups , itu harus menyediakan apa yang Anda butuhkan - reservasi CPU (dan banyak lagi). Saya sarankan membaca mengendalikan prioritas aplikasi menggunakan cgroup .
Yang mengatakan, menempatkan proses penting namun sering menganggur ke dalam kelompok dengan mengalokasikan 95% dari CPU dan aplikasi Anda yang lain ke dalam yang lain dengan alokasi 5% - Anda akan mendapatkan (hampir) semua daya untuk pekerjaan Anda saat dibutuhkan, sementara terus-menerus proses haus daya hanya akan mendapatkan 5% paling banyak pada saat itu. Ketika lonjakan komputasi menghilang, semua kinerja CPU akan dilemparkan ke proses yang tersisa. Sebagai manfaat, jika Anda membuat cgroup khusus (dengan persyaratan kinerja minimal) untuk proses seperti
sshd
, Anda akan dapat masuk tidak peduli apa pun yang berusaha mendapatkan semua CPU yang bisa - sebagian waktu CPU akan dicadangkan untuk itusshd
.sumber
cpulimit
ataunice
untuk memodifikasi kelompok proses? karena saya jika cgroup adalah panggilan API, saya dalam posisi tidak dapat mengkompilasi ulang salah satu aplikasi tersebut untuk menggunakan cgroupsystemd
, setidaknya dalam beberapa kasus) "mencuri" antarmuka cgroup dari pengguna yang harus menggunakan antarmuka sistem init (biasanya perintah khusus). Baca jawaban wikipedia dan artikel wikipedia. Betulkah. :)libcgroup
paket, yang dilengkapi dengan utilitas untuk bekerja dengan cgroup termasuk daemon (cgrulesengd
) yang sebenarnya dapat mengurutkan proses menjadi kelompok tergantung pada beberapa kondisi.Jika prioritas proses (nilai bagus) rendah maka tidak akan mengganggu proses prioritas yang lebih tinggi. Alasan Anda melihat proses dengan prioritas rendah masih mengkonsumsi CPU dalam jumlah yang signifikan ketika proses dengan prioritas lebih tinggi dijalankan karena proses dengan prioritas lebih tinggi tidak terlalu sibuk. Mungkin menunggu di IO. Gunakan
chrt -p -i 0 $PID
untuk menjalankan proses pada prioritas yang bahkan lebih rendah daripadanice 19 -p $PID
(dengan asumsi kita berbicara tentang Linux di sini).chrt -p -i 0 $PID
menempatkan proses ke dalam penjadwalan siaga "benar".http://linux.die.net/man/1/chrt
sumber
Coba contoh ini untuk menjalankan proses sebagai proses rendah.
Jika pekerjaan Anda bagus tar xvf asets.zip
Menggunakan
nice tar xvf assets.zip
Setelah itu, terbitkan
atas untuk memantau proses unzip dengan
ps aux | grep "tar"
Coba sesuatu yang spesifik dengan cpulimit
cpulimit -l 50 python 0 9999999999> / dev / null &
sumber
-20
adalah "prioritas rendah" dan--20
"prioritas tinggi" lihat di tanda hubung ganda untuknice
perintah. dan ya saya benar-benar mengerti tentang nilai bagus, tetapi pertanyaan saya adalah, adakah cara untuk memberitahu scheduler selain menggunakan nilai bagus-n -20
,-n 20
dll.htop
atautop
ataups
atau apa punUntuk masa depan-pendatang, di sini adalah contoh penuh
nice
dengan stres .stress
:apt-get install stress
nice -20 stress --cpu 2
top
:Ini menunjukkan bahwa kedua CPU terisi penuh.
nice --20 stress --cpu 1
top
Ini menunjukkan bahwa proses stres inti tunggal mendapatkan CPU penuh, sedangkan proses dengan prioritas lebih rendah sama-sama berbagi 1 cpu yang tersisa
stress
panggilan di atas dan hanya memicu proses 3 tunggalstress --cpu 3
akan memberikan CPU 66% untuk masing-masingsumber