Apa yang dimaksud dengan nilai kebaikan (-)?

19

Menurut halaman manual, dan wikipedia; niceberkisar dari -20 hingga 20.

Namun ketika saya menjalankan perintah berikut, saya menemukan beberapa proses memiliki nilai non numerik seperti (-). Lihat kolom keenam dari kiri dengan judul 'NI'.

Apa yang ditunjukkan dengan kebaikan (-)?

 ps axl 
 F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  20   0  19356  1548 poll_s Ss   ?          0:00 /sbin/init
1     0     2     0  20   0      0     0 kthrea S    ?          0:00 [kthreadd]
1     0     3     2 -100  -      0     0 migrat S    ?          0:03 [migration/0]
1     0     4     2  20   0      0     0 ksofti S    ?          0:51 [ksoftirqd/0]
1     0     5     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/0]
5     0     6     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/0]
1     0     7     2 -100  -      0     0 migrat S    ?          0:08 [migration/1]
1     0     8     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/1]
1     0     9     2  20   0      0     0 ksofti S    ?          1:03 [ksoftirqd/1]
5     0    10     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/1]
1     0    11     2 -100  -      0     0 migrat S    ?          0:05 [migration/2]

Saya telah memeriksa 3 server yang berjalan: Ubuntu 12.04 dan CentOs 6.5 dan Mac OsX 10.9. Hanya mesin Ubuntu dan CentOs yang memiliki nilai kebaikan non-digit.

spuder
sumber
FYI: Semua proses yang namanya [brackets]ada sebenarnya adalah kthreads (utas kernel).
Jonathon Reinhart

Jawaban:

18

Apa yang ditunjukkan dengan kebaikan (-)?

Perhatikan bahwa mereka juga memiliki skor PRI -100; ini menunjukkan proses dijadwalkan sebagai proses waktu nyata . Proses waktu nyata tidak menggunakan skor bagus dan selalu memiliki prioritas lebih tinggi dari yang normal, tetapi masih berbeda satu sama lain.

Anda dapat melihat detail per proses dengan chrtperintah (misalnya chrt -p 3). Salah satu dari -100 Anda kemungkinan akan melaporkan "prioritas penjadwalan saat ini" dari 99 - tidak seperti nice, di sini nilai-nilai tinggi adalah prioritas yang lebih tinggi, yang mungkin merupakan penyebab utama -100nomor tersebut dibuat . Proses non-realtime akan selalu menunjukkan "prioritas penjadwalan saat ini" dari 0 chrtterlepas dari nilai yang bagus, dan di linux "kebijakan penjadwalan saat ini" dari SCHED_OTHER.

Hanya mesin Ubuntu dan CentOs yang memiliki nilai kebaikan non-digit.

Beberapa versi toptampaknya melaporkan proses waktu nyata dengan di rtbawah PRI dan kemudian di 0bawah NI .

goldilocks
sumber
Jawaban yang bagus Saya tahu itu ada hubungannya dengan -100tetapi tidak bisa mengetahuinya :)
Ramesh
6

Jawaban @ Goldlilock mengarahkan saya untuk melakukan penelitian di jalan yang benar. Ini adalah detail penelitian saya.

Algoritma Penjadwalan tersedia untuk proses

Linux mendukung 3 kebijakan penjadwalan. SCHED_FIFO,, SCHED_RRdan SCHED_OTHER. SCHED_OTHERadalah kebijakan penjadwal pembagian waktu universal universal yang digunakan oleh sebagian besar proses; SCHED_FIFOdan SCHED_RRdimaksudkan untuk aplikasi khusus waktu kritis yang membutuhkan kontrol yang tepat atas cara proses runnable dipilih untuk dieksekusi.

Prioritas tersedia

Untuk memilih proses yang akan dijalankan, penjadwal Linux harus mempertimbangkan prioritas setiap proses. Sebenarnya ada dua macam prioritas.

Nilai prioritas statis diberikan untuk setiap proses dan penjadwalan tergantung pada prioritas statis ini. Proses yang dijadwalkan dengan SCHED_OTHERprioritas statis 0; proses dijadwalkan di bawah SCHED_FIFOatau SCHED_RRdapat memiliki prioritas statis dalam kisaran 1ke 99(99 adalah yang tertinggi).

The sys_sched_get_priority_max( )pengembalian rutin prioritas statis dari proses, ia mengembalikan 0untuk proses non-realtime.

Prioritas dinamis digunakan untuk aplikasi non-real time.

Semua proses real-time berada pada prioritas yang lebih tinggi daripada proses normal. Linux mengimplementasikan prioritas waktu nyata sesuai dengan POSIX. Grafik di bawah ini mungkin memberikan gambaran tentang bagaimana proses dijadwalkan dengan prioritasnya.

HIGH PRIORITY – - – - – > – - – - – > – - – - – > – - – - – > – - – – LEAST PRIORITY
……..real time priority (static priority)…….| …. nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19

Sekarang, kita dapat mengeluarkan perintah di bawah ini untuk memeriksa prioritas waktu nyata dari suatu proses. Di sini saya menggunakan anjing penjaga karena memiliki nilai bagus terdaftar sebagai -.

ps -e -o class,rtprio,pri,nice,cmd | grep watchdog

Ini adalah output perintah di atas. Seperti yang dapat kita lihat prioritas realtime adalah 99 yang merupakan prioritas setinggi mungkin.

FF      99 139   - [watchdog/0]
FF      99 139   - [watchdog/1]
TS       -  21   0 grep watchdog

Jadi sesuai pemahaman saya prioritas waktu nyata dapat mengambil nilai maksimum 99 dan tidak ada nilai bagus di atasnya. Itulah alasannya, kami mendapatkan hasil yang bagus - untuk pengawas dan proses sistem lainnya.

Referensi

http://oreilly.com/catalog/linuxkernel/chapter/ch10.html http://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/

Ramesh
sumber