top listet standardmäßig beide Spalten auf. Ich bin gespannt, was der Unterschied ist. Ich habe die Manpages ausgecheckt und kann es nicht herausfinden:
Priorität:
h: PR -- Priority
The priority of the task.
Schöner Wert:
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.
Ich verstehe, dass der nette Wert mit der CPU-Scheduler-Warteschlange des Kernels zusammenhängt. Was zeigt dann die Priorität an? Etwas in Bezug auf I / O vielleicht?
Der Unterschied besteht darin, dass PR im Moment innerhalb des Kernels eine echte Priorität eines Prozesses ist und NI nur ein Hinweis für den Kernel ist, welche Priorität der Prozess haben sollte.
In den meisten Fällen kann der PR- Wert nach folgender Formel berechnet werden: PR = 20 + NI . Somit hat der Prozess mit der Schönheit 3 die Priorität 23 (20 + 3) und der Prozess mit der Schönheit -7 hat die Priorität 13 (20 - 7). Sie können die erste überprüfen, indem Sie den Befehl ausführen
nice -n 3 top
. Es wird gezeigt, dass der Top- Prozess NI 3 und PR 23 hat . Für die Ausführungnice -n -7 top
auf den meisten Linux-Systemen benötigen Sie jedoch Root-Rechte, da der niedrigere PR- Wert die höhere tatsächliche Priorität ist. Somit hat der Prozess mit PR 13 eine höhere Priorität als Prozesse mit Standardpriorität PR 20. Deshalb musst du root sein. Der für Nicht-Root-Prozesse zulässige Mindestwert für die Freundlichkeit kann jedoch in /etc/security/limits.conf konfiguriert werden .Theoretisch kann der Kernel den PR- Wert (aber nicht NI ) selbst ändern . Beispielsweise kann es die Priorität eines Prozesses verringern, wenn es zu viel CPU verbraucht, oder es kann die Priorität eines Prozesses erhöhen, wenn dieser Prozess aufgrund anderer Prozesse mit höherer Priorität längere Zeit keine Chance hatte, ausgeführt zu werden. In diesen Fällen wird der PR- Wert vom Kernel geändert und NI bleibt gleich, daher ist die Formel "PR = 20 + NI" nicht korrekt. Der NI- Wert kann also als Hinweis für den Kernel interpretiert werden, welche Priorität der Prozess haben sollte, aber der Kernel kann je nach Situation selbst die tatsächliche Priorität ( PR- Wert) auswählen . Aber normalerweise die Formel"PR = 20 + NI" ist korrekt.
Genaue Regeln, wie der Kernel die Priorität ändert, sind nicht klar. Das Handbuch setpriority (die Funktion, die den netten Wert ändert) sagt:
Das Pthread-Handbuch sagt Folgendes aus:
Es scheint, dass der PR- Wert der dynamischen Priorität entspricht.
Der Bereich des NI- Werts liegt bei -20..19 . Somit kann der PR- Wert die Werte von 0 (20 - 20) bis 39 (20 + 19) haben. Dies gilt jedoch nur für Prozesse mit Standardplanungsrichtlinie ( SHED_OTHER ). Es kann auch Prozesse mit sogenannten "Echtzeit" -Planungsrichtlinien geben. Diese Richtlinien sind SCHED_RR und SCHED_FIFO . Solche Prozesse haben einen PR- Wert von weniger als 0. Sie können dies überprüfen, indem Sie den
chrt -r 1 top
Befehl ausführen (muss root sein). Der oberste Prozess wird PR -2 haben . Sie können sogarchrt -r 90 top
die Spitze laufen lassenProzess wird PR-91 haben .Es scheint, dass für SCHED_RR- Prozesse der PR- Wert nach folgender Formel berechnet werden kann:
PR = - 1 - sched_rr_priority .
Somit hat ein SCHED_RR- Prozess mindestens PR -1, was bedeutet, dass jeder SCHED_RR- Prozess eine höhere Priorität hat als jeder SCHED_OTHER . Dies entspricht dem pthread-Handbuch:
Die Priorität von Echtzeitprozessen wird als statische Priorität bezeichnet, die vom Kernel nicht geändert werden kann. So können positive PR- Werte als dynamische Priorität für Nicht-Echtzeit- Prozesse ( SCHED_OTHER , SCHED_BATCH ) und negative PR- Werte als statische Priorität für Echtzeit-Prozesse ( SCHED_RR , SCHED_FIFO ) behandelt werden.
Ich habe auch versucht zu rennen
nice -n 10 chrt -r 50 top
(undchrt -r 50 nice -n 10 top
). Der NI- Wert betrug 10, aber der PR betrug immer noch -51 . Es scheint also, dass der NI- Wert die Priorität von SCHED_RR- Prozessen nicht beeinflusst . Dies entspricht dem Setpriority- Handbuch:Eine lustige Notiz. Wenn Sie ausführen
chrt -r 99 top
, wird der RT- Wert anstelle einer Zahl in der PR- Spalte angezeigt .Ich denke nicht, dass dies bedeutet, dass der Prozess jetzt etwas Besonderes ist. Ich denke, dass dies bedeutet, dass oben einfach nicht -100 druckt, da zum Drucken 4 Zeichen erforderlich sind .
Sie können in allen Beispielen auch htop anstelle von top verwenden, was bequemer sein kann.
ps -l
kann auch verwendet werden, aber der Basispunkt, der Echtzeit- und Nicht-Echtzeit-Prioritäten trennt, ist nicht 0, sondern 60,nice -n -20 ps -l
wird also gedrucktquelle
Kurze Antwort
PR ist die Prioritätsstufe. Je niedriger die PR, desto höher ist die Priorität des Prozesses.
PR wird wie folgt berechnet:
Lange Antwort
Es gibt zwei Arten von Prozessen, die normalen und die Echtzeitprozesse. Für die normalen (und nur für diese) wird nice wie folgt angewendet:
nett
Die "Nizza" -Skala reicht von -20 bis 19, während -20 die höchste Priorität und 19 die niedrigste Priorität ist. Die Prioritätsstufe wird wie folgt berechnet:
PR = 20 + NI
Wobei NI das nette Niveau und PR das Prioritätsniveau ist. Wie wir sehen können, ist die -20 tatsächlich auf 0 abgebildet, während die 19 auf 39 abgebildet ist.
Standardmäßig ist ein Programm-Nizza-Wert 0 Bit. Ein Root-Benutzer kann Programme mit einem bestimmten Nizza-Wert mithilfe des folgenden Befehls zu Mittag essen:
Echtzeit
Wir könnten noch weiter gehen. Die nette Priorität wird eigentlich für Anwenderprogramme verwendet. Während die UNIX / LINUX-Gesamtpriorität einen Bereich von 140 Werten hat, ermöglicht der schöne Wert dem Prozess, den letzten Teil des Bereichs (von 100 bis 139) abzubilden. Diese Gleichung lässt die Werte von 0 bis 99 nicht erreichbar, was einem negativen PR-Wert (von -100 bis -1) entspricht. Um auf diese Werte zugreifen zu können, sollte der Prozess als "Echtzeit" angegeben werden.
In einer LINUX-Umgebung gibt es 5 Planungsrichtlinien, die mit dem folgenden Befehl angezeigt werden können:
Welches wird die folgende Liste zeigen:
Die Planungsprozesse können in zwei Gruppen unterteilt werden, die normalen Planungsrichtlinien (1 bis 3) und die Echtzeit-Planungsrichtlinien (4 und 5). Die Echtzeitprozesse haben immer Vorrang vor normalen Prozessen. Ein Echtzeitprozess kann mit dem folgenden Befehl aufgerufen werden (Beispiel: Deklarieren einer SCHED_RR-Richtlinie):
Um den PR-Wert für einen Echtzeitprozess zu erhalten, wird die folgende Gleichung angewendet:
PR = -1 - rt_prior
Wobei rt_prior der Priorität zwischen 1 und 99 entspricht. Aus diesem Grund wird der Prozess, der gegenüber anderen Prozessen die höhere Priorität hat, mit der Nummer 99 aufgerufen.
Es ist wichtig zu beachten, dass für Echtzeitprozesse der schöne Wert nicht verwendet wird.
Um die aktuelle "Schönheit" und den PR-Wert eines Prozesses anzuzeigen, kann der folgende Befehl ausgeführt werden:
Es ist gut zu beachten, dass Prozesse mit dem PR-Wert -51 beispielsweise einem Echtzeitwert entsprechen. Es gibt auch einige Prozesse, deren PR-Wert als "rt" angegeben wird. Dieser Wert entspricht tatsächlich einem PR-Wert von -100.
(PS: Ich hätte ein Bild gepostet, das das beste Ergebnis zeigt, aber ich habe nicht den Ruf, das zu tun.)
quelle