atas , secara default, mencantumkan kedua kolom. Saya ingin tahu apa bedanya. Saya memeriksa halaman manual dan tidak dapat menemukannya:
Prioritas:
h: PR -- Priority
The priority of the task.
Nilai bagus:
i: NI -- Nice value
The nice value of the task. A negative nice value means higher priority,
whereas a positive nice value means lower priority. Zero in this field
simply means priority will not be adjusted in determining a task’s dis-
patchability.
Saya mengerti bahwa nilai Nice terkait dengan antrian scheduler CPU Kernel; lalu apa yang ditunjukkan Prioritas ? Sesuatu tentang I / O mungkin?
Perbedaannya adalah bahwa PR adalah prioritas nyata dari suatu proses pada saat di dalam kernel dan NI hanyalah sebuah petunjuk untuk kernel apa prioritas dari proses tersebut.
Dalam kebanyakan kasus, nilai PR dapat dihitung dengan rumus berikut: PR = 20 + NI . Jadi proses dengan kebaikan 3 memiliki prioritas 23 (20 + 3) dan proses dengan kebaikan -7 memiliki prioritas 13 (20 - 7). Anda dapat memeriksa yang pertama dengan menjalankan perintah
nice -n 3 top
. Ini akan menunjukkan bahwa proses teratas memiliki NI 3 dan PR 23 . Tetapi untuk menjalankannice -n -7 top
di sebagian besar sistem Linux Anda perlu memiliki hak akses root karena sebenarnya nilai PR yang lebih rendah adalah prioritas aktual yang lebih tinggi. Dengan demikian proses dengan PR 13 memiliki prioritas lebih tinggi daripada proses dengan prioritas standar PR 20. Itu sebabnya Anda harus menjadi root. Tetapi nilai kebaikan minimum yang diizinkan untuk proses non-root dapat dikonfigurasi di /etc/security/limits.conf .Secara teoritis kernel dapat mengubah nilai PR (tetapi tidak NI ) dengan sendirinya. Misalnya ia dapat mengurangi prioritas suatu proses jika terlalu banyak mengkonsumsi CPU, atau dapat meningkatkan prioritas suatu proses jika proses itu tidak memiliki kesempatan untuk berjalan untuk waktu yang lama karena proses prioritas yang lebih tinggi lainnya. Dalam kasus ini nilai PR akan diubah oleh kernel dan NI akan tetap sama, sehingga rumus "PR = 20 + NI" tidak akan benar. Jadi nilai NI dapat diartikan sebagai petunjuk untuk kernel apa prioritas proses yang seharusnya, tetapi kernel dapat memilih prioritas nyata ( nilai PR ) sendiri tergantung pada situasinya. Tapi biasanya formulanya"PR = 20 + NI" benar.
Aturan yang tepat bagaimana prioritas perubahan kernel tidak jelas. manual setpriority (fungsi yang mengubah nilai bagus) mengatakan:
Manual Pthread mengatakan yang berikut:
Tampaknya nilai PR sesuai dengan prioritas dinamis.
Kisaran nilai NI adalah -20..19 . Dengan demikian nilai PR dapat memiliki nilai dari 0 (20 - 20) hingga 39 (20 + 19). Tapi itu benar hanya untuk proses dengan kebijakan penjadwalan default ( SHED_OTHER ). Mungkin ada juga proses dengan apa yang disebut kebijakan penjadwalan "waktu nyata" . Kebijakan ini adalah SCHED_RR dan SCHED_FIFO . Proses tersebut memiliki nilai PR kurang dari 0. Anda dapat memeriksa ini dengan menjalankan
chrt -r 1 top
perintah (harus di-root). Proses teratas akan memiliki PR -2 . Anda bahkan dapat menjalankanchrt -r 90 top
dalam hal ini bagian atasproses akan memiliki PR -91 .Tampaknya untuk proses SCHED_RR nilai PR dapat dihitung dengan rumus:
PR = - 1 - sched_rr_priority .
Jadi proses SCHED_RR memiliki setidaknya PR -1 yang berarti bahwa setiap proses SCHED_RR memiliki prioritas lebih tinggi daripada SCHED_OTHER . Ini sesuai dengan manual pthread:
Prioritas proses waktu nyata disebut sebagai prioritas statis yang tidak dapat diubah oleh kernel. Jadi nilai PR positif dapat diperlakukan sebagai prioritas dinamis untuk proses non-realtime ( SCHED_OTHER , SCHED_BATCH ) dan nilai PR negatif sebagai prioritas statis untuk proses realtime ( SCHED_RR , SCHED_FIFO ).
Saya juga mencoba menjalankan
nice -n 10 chrt -r 50 top
(danchrt -r 50 nice -n 10 top
). Nilai NI adalah 10, tetapi PR masih -51 . Jadi sepertinya nilai NI tidak mempengaruhi prioritas proses SCHED_RR . Ini sesuai dengan manual setpriority :Satu catatan lucu. Jika Anda menjalankan
chrt -r 99 top
, Anda akan melihat nilai RT alih-alih angka di kolom PR .Saya tidak berpikir ini berarti bahwa prosesnya sekarang istimewa. Saya pikir ini berarti top itu tidak mencetak -100 karena akan butuh 4 karakter untuk dicetak.
Anda juga dapat menggunakan htop daripada atas dalam semua contoh yang bisa lebih mudah.
ps -l
dapat digunakan juga, tapi itu titik dasar yang memisahkan prioritas realtime dan non-realtime bukanlah 0, tetapi 60, sehingganice -n -20 ps -l
akan mencetaksumber
Jawaban singkat
PR adalah level prioritas. Semakin rendah PR, semakin tinggi prioritas proses.
PR dihitung sebagai berikut:
Jawaban panjang
Ada 2 jenis proses, yang normal dan waktu nyata Untuk yang normal (dan hanya untuk itu), bagus diterapkan sebagai berikut:
Bagus
Skala "kebaikan" berubah dari -20 ke 19, sedangkan -20 itu adalah prioritas tertinggi dan 19 prioritas terendah. Tingkat prioritas dihitung sebagai berikut:
PR = 20 + NI
Di mana NI adalah level yang bagus dan PR adalah level prioritas. Jadi seperti yang bisa kita lihat, -20 sebenarnya memetakan ke 0, sedangkan 19 memetakan ke 39.
Secara default, nilai program bagus adalah 0 bit. Hal ini memungkinkan bagi pengguna root untuk program makan siang dengan nilai bagus yang ditentukan dengan menggunakan perintah berikut:
Waktu sebenarnya
Kita bisa melangkah lebih jauh. Prioritas yang bagus sebenarnya digunakan untuk program pengguna. Sedangkan prioritas keseluruhan UNIX / LINUX memiliki kisaran 140 nilai, nilai bagus memungkinkan proses untuk memetakan ke bagian terakhir dari rentang (dari 100 hingga 139). Persamaan ini membuat nilai dari 0 hingga 99 tidak dapat dijangkau yang akan sesuai dengan level PR negatif (dari -100 ke -1). Untuk dapat mengakses nilai-nilai itu, proses harus dinyatakan sebagai "waktu nyata".
Ada 5 kebijakan penjadwalan di lingkungan LINUX yang dapat ditampilkan dengan perintah berikut:
Yang akan menampilkan daftar berikut:
Proses penjadwalan dapat dibagi menjadi 2 kelompok, kebijakan penjadwalan normal (1 hingga 3) dan kebijakan penjadwalan waktu nyata (4 dan 5). Proses waktu nyata akan selalu memiliki prioritas di atas proses normal. Proses waktu nyata dapat dipanggil menggunakan perintah berikut (Contohnya adalah bagaimana mendeklarasikan kebijakan SCHED_RR):
Untuk mendapatkan nilai PR untuk proses waktu nyata, persamaan berikut ini diterapkan:
PR = -1 - rt_prior
Dimana rt_prior sesuai dengan prioritas antara 1 dan 99. Untuk alasan itu proses yang akan memiliki prioritas lebih tinggi daripada proses lain adalah yang disebut dengan nomor 99.
Penting untuk dicatat bahwa untuk proses waktu nyata, nilai yang bagus tidak digunakan.
Untuk melihat "kebaikan" saat ini dan nilai PR dari suatu proses, perintah berikut ini dapat dijalankan:
Adalah baik untuk mencatat bahwa proses dengan nilai PR -51 misalnya sesuai dengan nilai waktu nyata. Ada juga beberapa proses yang nilai PR-nya dinyatakan sebagai "rt". Nilai ini sebenarnya sesuai dengan nilai PR -100.
(PS: Saya akan memposting gambar yang menunjukkan hasil teratas tetapi saya tidak memiliki reputasi untuk melakukan itu)
sumber