Jalankan proses linux dengan prioritas yang sangat rendah?

12

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_processdan nice --20 ./high_priority_processtetapi 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

uray
sumber
Bagaimana Anda menentukan bahwa proses prioritas tinggi sebenarnya membutuhkan?
muru
itu akan menelurkan banyak utas, atau proses memakan cpu lebih dari 50% kapasitas cpu
uray
Gunakan RRpenjadwalan untuk proses prioritas tinggi.
Ramesh
@ Ramesh Apa perbedaan yang mungkin akan terjadi?
Ken Sharp

Jawaban:

10

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 itu sshd.

peterph
sumber
1
apakah ada perintah seperti cpulimitatau niceuntuk memodifikasi kelompok proses? karena saya jika cgroup adalah panggilan API, saya dalam posisi tidak dapat mengkompilasi ulang salah satu aplikasi tersebut untuk menggunakan cgroup
uray
Tidak, Anda hanya memasang hierarki cgroup di suatu tempat, membuat direktori per-grup dan menulis PID proses ke beberapa file. Semua ini harus dilakukan sebagai root (atau, lebih tepatnya dengan hak istimewa yang sesuai). Beberapa sistem init (yaitu systemd, 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. :)
peterph
Oh, dan ada juga libcgrouppaket, yang dilengkapi dengan utilitas untuk bekerja dengan cgroup termasuk daemon ( cgrulesengd) yang sebenarnya dapat mengurutkan proses menjadi kelompok tergantung pada beberapa kondisi.
peterph
7

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 $PIDuntuk menjalankan proses pada prioritas yang bahkan lebih rendah daripada nice 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

Ken Sharp
sumber
2
chrt -p -i 0 $ PID
Robert Foss
chrt masih belum cukup. Apa yang saya coba lakukan adalah menonton video sambil memasukkan kembali video lain di latar belakang. Menggunakan chrt membantu dengan video youtube tetapi mkv yang berkualitas sangat tinggi masih melompati. Apa yang saya inginkan adalah memutar video saya secara normal tetapi gunakan setiap bit daya CPU yang tersisa untuk reencoding karena saya memiliki banyak sekali yang harus dilakukan.
soger
0

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

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null &

unixmiah
sumber
yeah -20adalah "prioritas rendah" dan --20"prioritas tinggi" lihat di tanda hubung ganda untuk niceperintah. dan ya saya benar-benar mengerti tentang nilai bagus, tetapi pertanyaan saya adalah, adakah cara untuk memberitahu scheduler selain menggunakan nilai bagus
uray
2
@ user77710 Anda yakin? Baik halaman manual Ubuntu maupun POSIX manualnya menentukan sintaks ini. Keduanya digunakan -n -20, -n 20dll.
muru
ya terserah, sintaksinya tidak penting, maksud saya adalah menetapkan nilai bagus sangat rendah dan sangat tinggi untuk kedua proses tidak memberikan hasil dari apa yang saya inginkan
uray
2
@ user77710 APA? "Sintaksnya tidak penting"? Bagaimana Anda bisa yakin bahwa Anda menetapkan nilai-nilai kebaikan itu?
muru
karena saya dapat melihat proses nilai bagus pada htopatau topatau psatau apa pun
Uray
-1

Untuk masa depan-pendatang, di sini adalah contoh penuh nicedengan stres .

  1. Mesin uji memiliki 2 CPU
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. Pasang stress:apt-get install stress
  2. Buat 2 CPU sibuk dengan panggilan prioritas rendah ke stres: nice -20 stress --cpu 2
  3. Periksa penggunaan CPU dengan top:
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

Ini menunjukkan bahwa kedua CPU terisi penuh.

  1. Luncurkan proses stres cpu tunggal dengan prioritas tinggi: nice --20 stress --cpu 1
  2. Periksa penggunaan cpu lagi dengan top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

Ini menunjukkan bahwa proses stres inti tunggal mendapatkan CPU penuh, sedangkan proses dengan prioritas lebih rendah sama-sama berbagi 1 cpu yang tersisa

  1. Di sisi lain, membunuh semua stresspanggilan di atas dan hanya memicu proses 3 tunggal stress --cpu 3akan memberikan CPU 66% untuk masing-masing
shadi
sumber