Der Befehl ionice
In diesem Beitrag lernen Sie den Befehl ionice kennen, welcher unter Linux- / UNIX-Betriebssystemen eingesetzt wird, um die Priorität eines Prozesses, der das I/O-Interface des Kernels nutzt, festzulegen. Konkret ist es möglich, die I/O-Scheduling-Klasse und -Priorität eines Prozesses auszulesen und festzulegen. Auf diesem Weg kann beispielsweise die Priorität eines Kopierprozesses herabgesetzt werden, um die Auslastung des Systems durch diesen Prozess zu mindern.
Installation
Der Befehl ist Teil des Pakets util-linux und damit auf den meisten Systemen bereits vorinstalliert. Eine manuelle Installation mithilfe von apt ist jedoch mit dem folgenden Befehl möglich:
apt-get install util-linux
Allgemeine Syntax
Die allgemeine Syntax von ionice lautet:
ionice [Optionen] [Befehl [Argumente]]
Bei Ausführung von ionice ohne Argumente wird die aktuelle I/O-Scheduling-Klasse und -Priorität des laufenden Prozesses abgefragt. Werden dagegen keine Optionen, aber ein Befehl angegeben, so führt ionice den Befehl mit den ihm übergebenen Argumenten aus. Dabei werden standardmäßig die sogenannte "Best-Effort"-Scheduling-Klasse sowie die vorgegebene Priorität 4 verwendet. Die verfügbaren Scheduling-Klassen sind der folgenden Tabelle zu entnehmen (siehe Option -c für Festlegung der Scheduling-Klasse):
Klasse | Beschreibung |
---|---|
Idle | Einem Prozess mit der I/O-Prioritätsklasse "Idle" wird nur dann Zeit für Festplattenzugriffe zugewiesen, wenn kein anderer Prozess diese für einen bestimmten Zeitraum angefordert hat. Daher sollte ein solcher Prozess keinen Einfluss auf die normalen Systemaktivitäten nehmen. Diese Scheduling-Klasse akzeptiert kein Scheduling-Klassendaten-Argument (Priorität). |
Best-Effort | Die effektive Scheduling-Klasse für jeden Prozess, der keine spezifische I/O-Priorität angefordert hat, ist "Best-Effort". Ein Prioritäts-Argument mit der Wertigkeit 0-7 kann bei dieser Klasse spezifiziert werden. Solche Prozesse, die mit der gleichen Best-Effort-Priorität laufen, werden nach dem Round-Robin-Verfahren bedient. |
Realtime | Unabhängig anderer Vorgänge im System haben Prozesse mit der Scheduling-Klasse "Realtime" stets Vorrang vor anderen Prozessen bei Festplattenzugriffen. Diese Klasse sollte mit Vorsicht verwendet werden, da sie zur Starvation (Verhungern) anderer Prozesse führen kann. Die Prioritätsstufen 0-7 erlauben auch hier Einflussnahme auf die Größe der Zeitscheibe, die der jeweilige Prozess in jedem Scheduling-Zeitfenster erhält. Für die Verwendung dieser Scheduling-Klasse sind root-Berechtigungen erforderlich. |
Für die Scheduling-Klassen "Realtime" und "Best-Effort" ist die Festlegung von Scheduling-Klassendaten im Wertebereich 0-7 erlaubt, wobei 0 die höchste Prioritätsstufe ist (siehe Option -n für Festlegung der Scheduling-Klassendaten). Scheduling-Klassen können neben ihren Namen auch mit Nummern angesprochen werden: Keine / "None" (0), "Realtime" (1), "Best-Effort" (2), "Idle" (3).
Beispiel: ionice ohne Optionen
Dieses Beispiel zeigt die Verwendung von ionice ohne Optionen.
Eingabe:
ionice
Ausgabe:
Es werden Scheduling-Klasse und -Priorität des aktuellen Prozesses ausgegeben. In diesem Fall ist die Scheduling-Klasse "none" und die Priorität 4.
none: prio 4
Beispiel: ionice mit Befehl
In diesem Beispiel wird gezeigt, wie ionice ohne Optionen, aber unter Übergabe eines Befehls, ausgeführt wird.
Eingabe:
ionice wird ein Befehl übergeben, welcher eine größere Datei von einem externen Speichermedium in das Home-Verzeichnis /home/hellberg/ kopiert. An das Ende des Befehls wird ein "&" angehängt, um den Befehl im Hintergrund auszuführen.
ionice cp /tausch/debian-10.5.0-amd64-DVD-1.iso /home/hellberg/ &
Ausgabe:
Die PID des im Hintergrund gestarteten Prozesses wird ausgegeben. In diesem Fall 2719.
[1] 2719
Eingabe:
Um die für den mit ionice gestarteten Prozess gesetzten Scheduling-Parameter zu überprüfen, wird nun ionice mit der Option -p aufgerufen. Die zuvor erhaltene PID wird dabei angegeben.
ionice -p 2719
Ausgabe:
Der Prozess hat die Scheduling-Klasse "Best-Effort" und die Priorität 4 - dies entspricht den erwarteten Standardwerten.
best-effort: prio 4
Wichtige Optionen
Die wichtigsten Optionen des Befehls ionice werden im Folgenden vorgestellt.
-c - Scheduling-Klasse spezifizieren
Mit der Option -c kann die Scheduling-Klasse anhand ihres Namens oder ihrer Nummer festgelegt werden.
ionice -c [Klasse] [Befehl [Argumente]]
-n - Scheduling-Klassendaten spezifizieren
Die Scheduling-Klassendaten werden mit der Option -n spezifiziert, wobei zu beachten ist, dass dies nur dann wirksam ist, wenn die Klasse an dieser Stelle ein Argument (bzw. eine Priorität) akzeptiert.
ionice -c [Klasse] -n [Klassendaten] [Befehl [Argumente]]
-p - Prozess-ID spezifizieren
Mithilfe der Option -p kann eine Prozess-ID (PID) angegeben werden. Dies ist einerseits nützlich, um die Scheduling-Parameter für einen laufenden Prozess mit einer bestimmten PID zu setzen. Ein Befehl kann hierbei nicht angegeben werden.
ionice -p [PID] [Optionen]
Andererseits kann die Option jedoch auch verwendet werden, um die Scheduling-Parameter eines laufenden Prozesses auszugeben, ohne jegliche Änderungen vorzunehmen. Es werden dazu keine weiteren Optionen (zum Setzen von Scheduling-Parametern) angegeben.
ionice -p [PID]
-P - Prozessgruppen-ID spezifizieren
Die Prozessgruppen-ID (PGID) von laufenden Prozessen, deren Scheduling-Parameter gesetzt werden sollen, kann mit der Option -P angegeben werden. Ähnlich wie auch bei der Option -p kann kein Befehl spezifiziert werden.
ionice -P [PGID] [Optionen]
Werden keine Optionen zum Setzen von Scheduling-Parametern verwendet, so gibt die Option -P die Scheduling-Parameter der Prozesse mit der angegebenen PGID aus.
ionice -P [PGID]
-t - Fehlschlag ignorieren
Wurde die Option -t angegeben, so ignoriert ionice ein fehlgeschlagenes Setzen der anforderten Priorität. Bei Angabe eines Befehls wird dieser auch dann ausgeführt, wenn das Setzen der gewünschten Scheduling-Priorität nicht möglich war. Auftreten können diese Fehler etwa bei unzureichenden Zugriffsrechten oder alten Kernel-Versionen.
ionice -t [Befehl [Argumente]]
-u - Benutzer-ID spezifizieren
Die Option -u erlaubt die Angabe der Benutzer-ID (UID) der laufenden Prozesse, für die die Scheduling-Parameter gesetzt werden sollen. Auch hier kann kein Befehl spezifiziert werden.
ionice -u [UID] [Optionen]
Wenn keine Optionen zum Setzen der Scheduling-Parameter angegeben werden, dann führt die Option -u zur Ausgabe der aktuellen Werte für Prozesse mit der angegebenen UID.
ionice -u [UID]
Abonniere JETZT unseren Newsletter!
Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!