Rechenleistung für Prozesse priorisieren

Die Bearbeitungszeit von Prozessen wird nicht nur von der zur Verfügung stehenden Hardware beeinflusst, sondern auch davon, wie viel von der vorhandenen Rechenleistung tatsächlich dem jeweiligen Prozess zugewiesen wird.
Der folgende Beitrag beschreibt die Möglichkeit, zu startende und bereits laufende Prozesse in ihrer Priorität der Bearbeitung anzupassen.

nice / renice

Prozesse unter Linux werden mit einem sogenannten nice-Level versehen. Dieser gibt an, mit welcher Priorität ein Prozess abgearbeitet wird. Je höher die Priorität, desto mehr Rechenleistung wird zugewiesen. Dieser nice-Level liegt im Bereich von 19 bis -20, wobei -20 die höchste und 19 die niedrigste Priorität darstellt. Die Standardpriorität neu gestarteter Prozesse liegt bei 0. Dieser Wert kann jedoch auch angepasst werden, später mehr dazu. Der nice-Level von 0 bis 19 kann jeder Benutzer anpassen. Wird ein niedrigerer Wert im minus-Bereich gewählt, sind root-Berechtigungen notwendig.
Um Programme mit einem, vom Standard, abweichenden nice-Wert zu starten, wird das Tool nice benötigt. Um den nice-Wert bereits laufender Programme bzw. Prozesse zu ändern wiederum das Tool renice.

Installation

Die beiden Tools nice und renice sollten bereits in einer handelsüblichen Linux Installation vorhanden sein. Sollte dies nicht der Fall sein, können sie folgendermaßen nachinstalliert werden. Für APT-Paketmanager basierte Betriebssysteme …

sudo apt-get install coreutils bsdutils

… und für jene mit YUM-Paketmanager:

sudo yum install coreutils bsdutils

Programme priorisiert starten

Um Prozesse mit einer eigens gesetzten Priorität zu starten, bedarf es lediglich den Aufruf nice gefolgt von dem Parameter -n, dem jeweiligen nice-Wert uns der Applikation, welche gestartet werden soll:

nice -n 10 dd if=/dev/zero of=/usr/share/testfile bs=1M count=8000 &

Der obige Befehl würde das dd-Kommando mitsamt Zusatz mit einer niedrigeren Priorität von 10 starten. Ein ähnliches Spiel gilt beispielsweise für eine höhere Priorität von -10. Hier ist jedoch (wie eingangs erwähnt) darauf zu achten, dass der Bereich von -1 bis -20 lediglich dem Benutzer root vorbehalten ist:

sudo nice -n -10 dd if=/dev/zero of=/usr/share/testfile bs=1M count=8000 &

Eine Möglichkeit, ein Befehl mit einer erhöhten Priorität als nicht root-Benutzer auszuführen, stellt folgender Befehl dar:

sudo nice -n -10 sudo -u urmel dd if=/dev/zero of=/usr/share/testfile bs=1M count=8000 &

Somit würde der dd-Prozess als Benutzer urmel gestartet.

Gestartete Programme priorisieren

Auch bereits gestartete Programme bzw. Prozesse lassen sich in ihrer Priorität anpassen. Hierfür benötigen wir lediglich die PID (Prozess-ID). Herausfinden lässt sich diese beispielsweise mit ps oder top.

Anschließend reicht der folgende Befehl (bedenkt, dass die letzte Zahlenfolge die PID darstellt und von Prozess zu Prozess variiert):

sudo renice -n -10 543590

In der Kommandozeile wird die Änderung direkt ersichtlich:

Ein erneuter Blick in top zeigt auch schon das Ergebnis:

Natürlich gilt auch hier die Einschränkung, dass nur der root-Benutzer den Prioritäten-Bereich von -1 bis -20 anwenden darf.

Standarpriorität anpassen

Um den Standardwert der Prioritäten eines bestimmten Benutzers anzupassen, öffnen wir die folgende Datei …

sudo nano /etc/security/limits.conf

… und fügen am Ende beispielsweise die folgende Zeile ein:

urmel soft priority -10

Somit würde zukünftig jeder gestartete Prozess des Benutzers urmel einen nice-Level von -10 und somit eine erhöhte Priorität erhalten. Auf eine ähnliche Art und Weise lässt sich mit Gruppen verfahren. Der Unterschied besteht lediglich in der Syntax, sodass die angegebene Gruppe mit einem vorangestellten @ versehen werden muss:

@urmel soft priority -10

Nun würden sämtliche zukünftig gestarteten Programme der Mitglieder der Gruppe urmel ebenfalls von einer höheren Priorität in der Prozessbearbeitung profitieren.

Prozesspriorität anzeigen

Um die gesetzten Konfigurationen zu überprüfen, helfen diverse Tools. Beispielsweise top:

top

Dort ist die Spalte NI zu finden, die den nice-Level anzeigt. Gleiches Ergebnis lässt sich mit ps erzielen:

ps ax -o pid,ni,cmd

In der zweiten Spalte wird auch hier der nice-Level angezeigt.

Fazit

nice und renice sind hilfreiche Werkzeuge, um die vorhandenen Rechenleistung zu priorisieren. Jedoch sollte man auch stets ein wachsames Auge auf die erzielte Wirkung legen, da mit zu einseitig verwendeten Ressourcen im Zweifelsfall das gesamte System lahmer werden kann.

Bildquellen:
“Tachometer Geschwindigkeitsmesser” von OpenClipart-Vectors auf Pixabay
“Pinguin Linux Klempner” von OpenClipart-Vectors auf Pixabay

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen