top domyślnie wyświetla obie kolumny. Jestem ciekawy, jaka jest różnica. Sprawdziłem strony podręcznika i nie mogę tego rozgryźć:
Priorytet:
h: PR -- Priority
The priority of the task.
Dobra wartość:
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.
Rozumiem, że wartość Nicea jest związana z kolejką harmonogramu CPU jądra; to co oznacza priorytet ? Być może coś dotyczy wejścia / wyjścia?
Różnica polega na tym, że PR jest w tej chwili prawdziwym priorytetem procesu w jądrze, a NI jest jedynie wskazówką dla jądra, jaki priorytet powinien mieć proces.
W większości przypadków wartość PR można obliczyć według następującego wzoru: PR = 20 + NI . Zatem proces z nicością 3 ma priorytet 23 (20 + 3), a proces z nicią -7 ma priorytet 13 (20 - 7). Możesz sprawdzić pierwszy, uruchamiając polecenie
nice -n 3 top
. Pokaże, że najwyższy proces ma NI 3 i PR 23 . Ale do działanianice -n -7 top
w większości systemów Linux musisz mieć uprawnienia roota, ponieważ w rzeczywistości niższa wartość PR jest tym wyższym priorytetem. Zatem proces z PR 13 ma wyższy priorytet niż procesy ze standardowym priorytetem PR 20. Dlatego musisz być rootem. Ale minimalną dopuszczalną wartość dla procesu innego niż root można skonfigurować w /etc/security/limits.conf .Teoretycznie jądro może samo zmieniać wartość PR (ale nie NI ). Na przykład może zmniejszyć priorytet procesu, jeśli zużywa zbyt dużo procesora, lub może zwiększyć priorytet procesu, jeśli proces ten nie miał szansy działać przez długi czas z powodu innych procesów o wyższym priorytecie. W takich przypadkach wartość PR zostanie zmieniona przez jądro, a NI pozostanie taki sam, dlatego formuła „PR = 20 + NI” nie będzie poprawna. Tak więc wartość NI może być interpretowana jako wskazówka dla jądra, jaki priorytet powinien mieć proces, ale jądro może samodzielnie wybrać rzeczywisty priorytet ( wartość PR ) w zależności od sytuacji. Ale zwykle formuła„PR = 20 + NI” jest poprawne.
Dokładne zasady zmiany priorytetu jądra nie są jasne. Instrukcja setpriority (funkcja, która zmienia niezłą wartość) mówi:
Podręcznik Pthread mówi:
Wydaje się, że wartość PR odpowiada dynamicznemu priorytetowi.
Zakres wartości NI wynosi -20..19 . Zatem wartość PR może mieć wartości od 0 (20-20) do 39 (20 + 19). Ale jest to poprawne tylko dla procesów z domyślną polityką planowania ( SHED_OTHER ). Mogą istnieć również procesy z tak zwanymi zasadami planowania w „czasie rzeczywistym” . Te zasady to SCHED_RR i SCHED_FIFO . Takie procesy mają wartość PR mniejszą niż 0. Możesz to sprawdzić, uruchamiając
chrt -r 1 top
polecenie (musisz być rootem). Góry proces ma PR -2 . Możesz nawet uruchomićchrt -r 90 top
w takim przypadku góręproces będzie miał PR -91 .Wydaje się, że dla procesów SCHED_RR wartość PR można obliczyć ze wzoru:
PR = - 1 - schedule_rr_priority .
Zatem proces SCHED_RR ma przynajmniej PR -1, co oznacza, że każdy proces SCHED_RR ma wyższy priorytet niż jakikolwiek SCHED_OTHER . Odpowiada to instrukcji pthread:
Priorytet procesów w czasie rzeczywistym nazywany jest priorytetem statycznym, którego jądro nie może zmienić. Tak pozytywne PR wartości mogą być traktowane jako priorytet dynamiczny dla non-realtime ( SCHED_OTHER , SCHED_BATCH ) procesy i negatywnym PR wartości jako statyczny priorytet dla procesów w czasie rzeczywistym ( SCHED_RR , SCHED_FIFO ).
Próbowałem także uruchomić
nice -n 10 chrt -r 50 top
(ichrt -r 50 nice -n 10 top
). Wartość NI wynosiła 10, ale PR nadal wynosił -51 . Wygląda więc na to, że wartość NI nie wpływa na priorytet procesów SCHED_RR . Odpowiada to instrukcji setpriority :Jedna zabawna notatka. Jeśli uruchomisz
chrt -r 99 top
, zobaczysz wartość RT zamiast liczby w kolumnie PR .Nie sądzę, że oznacza to, że proces ten jest teraz wyjątkowy. Myślę, że to oznacza, że top po prostu nie drukuje -100, ponieważ wydruk wymagałby 4 znaków.
Możesz również użyć htop zamiast góry we wszystkich przykładach, które mogą być wygodniejsze.
ps -l
może być również użyty, ale punktem bazowym oddzielającym priorytety w czasie rzeczywistym i nie w czasie rzeczywistym nie jest 0, ale 60, więcnice -n -20 ps -l
zostanie wydrukowanyźródło
Krótka odpowiedź
PR jest poziomem priorytetowym. Im niższy PR, tym wyższy będzie priorytet procesu.
PR oblicza się w następujący sposób:
Długa odpowiedź
Istnieją 2 rodzaje procesów, normalny i rzeczywisty. W przypadku normalnych (i tylko tych) nice stosuje się w następujący sposób:
Miły
Skala „łagodności” wynosi od -20 do 19, podczas gdy -20 to najwyższy priorytet, a 19 najniższy. Poziom priorytetu jest obliczany w następujący sposób:
PR = 20 + NI
Gdzie NI to niezły poziom, a PR to poziom priorytetowy. Jak widać, -20 faktycznie odwzorowuje na 0, a 19 na 39.
Domyślnie wartość nice programu wynosi 0 bitów. Użytkownik root może uruchamiać programy z określoną wartością nice za pomocą następującego polecenia:
Czas rzeczywisty
Możemy pójść jeszcze dalej. Dobry priorytet jest faktycznie używany w programach użytkownika. Podczas gdy ogólny priorytet UNIX / LINUX ma zakres 140 wartości, ładna wartość umożliwia procesowi mapowania do ostatniej części zakresu (od 100 do 139). To równanie pozostawia wartości od 0 do 99 nieosiągalne, co odpowiada ujemnemu poziomowi PR (od -100 do -1). Aby mieć dostęp do tych wartości, proces należy określić jako „w czasie rzeczywistym”.
Istnieje 5 zasad planowania w środowisku LINUX, które można wyświetlić za pomocą następującego polecenia:
Który pokaże następującą listę:
Procesy szeregowania można podzielić na 2 grupy, normalne zasady szeregowania (1 do 3) i zasady szeregowania w czasie rzeczywistym (4 i 5). Procesy w czasie rzeczywistym zawsze będą miały pierwszeństwo przed normalnymi procesami. Proces w czasie rzeczywistym można wywołać za pomocą następującego polecenia (na przykład, jak zadeklarować zasadę SCHED_RR):
Aby uzyskać wartość PR dla procesu w czasie rzeczywistym, stosuje się następujące równanie:
PR = -1 - rt_prior
Gdzie rt_prior odpowiada priorytetowi między 1 a 99. Z tego powodu proces, który będzie miał wyższy priorytet niż inne procesy, będzie wywoływany z liczbą 99.
Należy zauważyć, że w procesach w czasie rzeczywistym wartość nice nie jest używana.
Aby zobaczyć bieżącą „wartość” i wartość PR procesu, można wykonać następujące polecenie:
Warto zauważyć, że procesy o wartości PR -51 na przykład odpowiadają wartości w czasie rzeczywistym. Istnieją również procesy, których wartość PR jest określona jako „rt”. Ta wartość faktycznie odpowiada wartości PR -100.
(PS: Umieściłbym zdjęcie pokazujące najlepszy wynik, ale nie mam na to reputacji)
źródło