Co oznacza wartość nessess (-)?


19

Według strony man i wikipedia; nicewynosi od -20 do 20.

Jednak po uruchomieniu następującego polecenia stwierdzam, że niektóre procesy mają wartości nienumeryczne, takie jak (-). Zobacz szóstą kolumnę od lewej z tytułem „NI”.

Co wskazuje na uprzejmość (-)?

 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]

Sprawdziłem 3 serwery: Ubuntu 12.04 i CentOs 6.5 oraz Mac OsX 10.9. Tylko maszyny Ubuntu i CentOs mają niecyfrowe wartości liczbowe.


FYI: Wszystkie procesy, których nazwy są w [brackets]rzeczywistości, to kthreads (wątki jądra).
Jonathon Reinhart

Odpowiedzi:


18

Co wskazuje na uprzejmość (-)?

Zauważ, że te mają również wynik PRI -100; oznacza to, że proces jest zaplanowany jako proces w czasie rzeczywistym . Procesy w czasie rzeczywistym nie wykorzystują dobrych wyników i zawsze mają wyższy priorytet niż normalne, ale nadal różnią się między sobą.

Możesz wyświetlić szczegóły według procesu za pomocą chrtpolecenia (np chrt -p 3.). Jeden z twoich -100 najprawdopodobniej zgłosi „bieżący priorytet planowania” wynoszący 99 - w przeciwieństwie do tego nice, wysokie wartości mają wyższy priorytet, z którego prawdopodobnie najwyższy -100numer utworzył . Procesy nie działające w czasie rzeczywistym zawsze będą miały „bieżący priorytet planowania” równy 0, chrtniezależnie od niezłej wartości, a pod linuksem „bieżąca polityka planowania” SCHED_OTHER.

Tylko maszyny Ubuntu i CentOs mają niecyfrowe wartości liczbowe.

Niektóre wersje topwydają się zgłosić z procesów w czasie rzeczywistym rtpod PRI a następnie 0pod NI .


Cudowna odpowiedź. Wiedziałem, że ma to coś wspólnego, -100ale nie mogłem tego zrozumieć :)
Ramesh

6

Odpowiedź Goldlilocka skłoniła mnie do przeprowadzenia badań właściwą ścieżką. To są szczegóły moich badań.

Algorytmy planowania dostępne dla procesów

Linux obsługuje 3 zasady planowania. SCHED_FIFO, SCHED_RRi SCHED_OTHER. SCHED_OTHERjest domyślną uniwersalną polityką harmonogramu współdzielenia czasu stosowaną przez większość procesów; SCHED_FIFOi SCHED_RRsą przeznaczone do specjalnych aplikacji o krytycznym czasie, wymagających precyzyjnej kontroli nad sposobem wybierania uruchomionych procesów do wykonania.

Dostępne priorytety

Aby wybrać proces do uruchomienia, program planujący Linux musi wziąć pod uwagę priorytet każdego procesu. W rzeczywistości istnieją dwa rodzaje priorytetów.

Statyczny priorytet wartość jest przypisany do każdego procesu planowania i zależy od tego priorytetu statycznego. Zaplanowane procesy SCHED_OTHERmają priorytet statyczny 0; procesy zaplanowane poniżej SCHED_FIFOlub SCHED_RRmogą mieć statyczny priorytet w zakresie 1od 99(99 jest najwyższym).

Procedura sys_sched_get_priority_max( )zwraca statyczny priorytet procesu, zwraca 0dla procesów nie działających w czasie rzeczywistym.

Dynamiczny priorytet stosowany jest w aplikacjach nie działających w czasie rzeczywistym.

Wszystkie procesy w czasie rzeczywistym mają wyższy priorytet niż zwykłe procesy. Linux implementuje priorytety w czasie rzeczywistym zgodnie z POSIX. Poniższy wykres może dać przegląd sposobu planowania procesów z ich priorytetami.

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

Teraz możemy wydać poniższe polecenie, aby sprawdzić priorytet procesu w czasie rzeczywistym. Tutaj używam watchdoga, ponieważ miał dobrą wartość wymienioną jako -.

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

To jest wynik powyższego polecenia. Jak widzimy, priorytetem w czasie rzeczywistym jest 99, co jest najwyższym możliwym priorytetem.

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

Tak więc, zgodnie z moim zrozumieniem, priorytet w czasie rzeczywistym może przyjąć maksymalną wartość 99, więc nie może być nad nim żadnej ładnej wartości. Z tego powodu otrzymujemy niezłą wydajność - jako watchdog i inne procesy systemowe.

Bibliografia

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.