Pertanyaan Proses 'kebaikan' vs. 'prioritas'


Saat berlari top, Saya dapat melihat contoh keluaran yang disingkat ini:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

Ada dua nilai yang saya minati: PR (Prioritas) dan NI (Kebaikan).

Jika saya mengerti apa yang sudah saya temukan dengan benar, keduanya menentukan berapa banyak waktu CPU yang akan mendapatkan proses kontras dengan proses lainnya. Tapi apa perbedaan antara nilai-nilai itu?

Bisakah Anda juga menjelaskan bagaimana memanipulasi nilai-nilai suatu proses dan dalam situasi apa ini mungkin berguna?


72
2017-08-05 09:17


asal




Jawaban:


nilai bagus adalah PR pengguna dan PR prioritas adalah prioritas aktual proses yang digunakan oleh kernel Linux. Dalam prioritas sistem linux adalah 0 hingga 139 di mana 0 hingga 99 untuk waktu nyata dan 100 hingga 139 untuk pengguna. rentang nilai bagus adalah -20 hingga +19 dengan -20 tertinggi, 0 default, dan +19 terendah. hubungan antara nilai bagus dan prioritas adalah:

PR = 20 + NI

jadi, nilai dari PR = 20 + (-20 to +19) adalah 0 hingga 39 yang memetakan 100 hingga 139.

Menurut top manual:

PR - Prioritas Prioritas penjadwalan tugas. Jika kamu melihat   'rt' di bidang ini, artinya tugas berjalan di bawah 'waktu nyata'   prioritas penjadwalan.

NI adalah nilai tugas yang bagus.

NI - Nilai Bagus Nilai bagus dari tugas. Negatif yang bagus   nilai berarti prioritas lebih tinggi, sedangkan nilai positif yang positif berarti lebih rendah   priority.Zero dalam bidang ini berarti prioritas tidak akan disesuaikan   dalam menentukan kemampuan pengiriman tugas

Edit: Secara default ketika sebuah program diluncurkan di Linux, ia diluncurkan dengan prioritas '0'. Namun Anda dapat mengubah prioritas program Anda dengan salah satu metode berikut.

  1. Anda dapat meluncurkan programe dengan prioritas yang Anda butuhkan menggunakan

    nice -n nice_value program_name
    
  2. Anda juga dapat mengubah prioritas dari proses yang sudah berjalan menggunakan

    renice -n nice_value -p process_id
    

72
2017-08-05 09:51



Apakah Anda mengatakan, mereka hampir hal yang sama secara terbalik (keduanya mewakili prioritas) NAMUN niceness dapat digunakan untuk memberikan prioritas negatif sehingga tugas dengan niceness keluar dari jalan tugas prioritas tinggi? (Yaitu sedang nice dan membiarkan sumber daya akses lainnya? Atau ini hanya membingungkan saya? - Mark Kirby
Contoh dari apa yang saya maksud, dua tugas, keduanya punya pr dari 20, jadi sama, tugas yang dimiliki seorang ni 0 dan tugas dua memiliki ni dari 20, jadi, ini berarti tugas dua akan menyerahkan sumber daya untuk tugas satu karena itu nicer - Mark Kirby
Seperti yang saya tahu, prioritas dihitung sebagai PR = 20 + NI. jadi tugas satu prioritas = 20 +0. nilai maksimum niat baik +19 - pl_rock
PR = 20 + NI nilai maksimum bisa 39. Sebenarnya dalam sistem linux ada 139 prioritas di mana 0 hingga 99 adalah prioritas waktu nyata dan untuk pengguna ada 100 hingga 139. jadi, NI bernilai -20 hingga +19 peta untuk prioritas 100 hingga 139. yang bisa Anda sesuaikan. tetapi masih kernel tidak yakin jika Anda mengubah nilai NI maka itu akan mengubah prioritas, nilai NI hanya saran untuk kernel. kernel beberapa waktu mengabaikannya - pl_rock
Jadi apakah PR dan NI sebenarnya setara, karena mereka hanya memiliki offset yang berbeda? Mengapa kita memiliki kedua nilai itu? Dan Anda bisa menambahkan bahwa pengaturan suatu proses yang bagus <0 membutuhkan hak root. - Byte Commander


Apa itu Prioritas dan Mengapa Harus Saya Peduli?

Ketika berbicara tentang prioritas proses adalah tentang mengelola waktu prosesor. Prosesor atau CPU mirip dengan banyak tugas yang dilakukan oleh manusia pada saat yang bersamaan. Terkadang kita dapat memiliki cukup ruang untuk mengerjakan beberapa proyek. Terkadang kita hanya bisa fokus pada satu hal pada satu waktu. Di lain waktu sesuatu yang penting muncul dan kita ingin mencurahkan seluruh energi kita untuk memecahkan masalah itu sambil meletakkan tugas-tugas yang kurang penting di bagian belakang kompor.

Di Linux kita dapat mengatur panduan untuk CPU untuk mengikuti ketika melihat semua tugas yang harus dilakukan. Pedoman ini disebut kebaikan atau nilai bagus. Skala kebaikan Linux berjalan dari -20 ke 19. Semakin rendah angka, semakin banyak prioritas yang didapatkan tugas. Jika nilai kebaikan adalah angka yang tinggi seperti 19 tugas akan diatur ke prioritas terendah dan CPU akan memprosesnya setiap kali mendapat peluang. Nilai default default adalah nol.

Dengan menggunakan skala ini, kami dapat mengalokasikan sumber daya CPU kami dengan lebih tepat. Program prioritas lebih rendah yang tidak penting dapat disetel ke nilai yang lebih tinggi, sementara program prioritas tinggi seperti daemon dan layanan dapat disetel untuk menerima lebih banyak fokus CPU. Anda bahkan dapat memberi pengguna tertentu nilai yang lebih rendah dan bagus untuk semua prosesnya sehingga Anda dapat membatasi kemampuannya untuk memperlambat layanan inti komputer.

Sumber

Setel prioritas untuk proses baru dengan nice, misalnya

nice -n 10 firefox

untuk proses yang ada

renice 10 -p $(pgrep firefox)

Untuk mengatur prioritas <0 yang Anda butuhkan sudo, misalnya:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

tetapi tidak untuk prioritas >=0


Contoh

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Contoh lainnya

Untuk mencabut semua proses yang berjalan untuk pengguna tertentu

renice 20 -u user_name

19
2017-08-05 11:06



Dalam contoh Anda, renice 10 juga akan bekerja tanpa sudobenar? Dan bisakah Anda menambahkan contoh untuk membuat semua proses dari pengguna tertentu menjadi lebih baik? Itu akan benar-benar sangat berguna jika orang lain login pada saat yang sama dan memiliki beberapa proses yang tidak perlu tetapi makan sumber daya berjalan (seperti flash-game yang berhenti di Firefox, saudara kecil melakukan hal-hal seperti ...: - /) - Byte Commander
@ByteCommander selesai dilakukan =) - A.B.
Bagaimana cara mengembalikan nilai-nilai kebaikan lama dari pengguna itu setelah beberapa saat? Mengaturnya kembali ke 0? Itu tidak akan memperhitungkan bahwa beberapa proses mungkin memiliki nilai kebaikan yang berbeda sebelumnya. Apakah ada kemungkinan sederhana untuk melakukan ini? - Byte Commander
@ByteCommander Tidak, itu tidak sederhana. Entah Anda gunakan 0 atau ... ada masalah;) - A.B.
@ByteCommander tapi saya bisa menulis skrip untuk itu;) - A.B.