Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
schedutils ist die Abkürzung für "scheduler utilities". Diese umfassen die drei Kommandozeilen-Programme chrt, taskset und ionice, die eine fortgeschrittene Prozesskontrolle ermöglichen.
Alle drei Programme befinden sich im vorinstallierten Paket
util-linux
Man muss also nichts installieren, um diese Programme benutzen zu können.
Der Befehl chrt
ermöglicht es, die Echtzeit-Priorität von Prozessen zu ändern. Für "normale" Prozesspriorisierung ist nice zuständig.
Die Priorität liegt üblicherweise im Bereich bis 99. Letzteres ist die höchste Priorität. Es handelt sich letztlich um negative Werte (und so werden sie auch in Prozesslisten angezeigt), quasi in Fortsetzung der bis -19 reichenden normalen Prioritäten von nice. In chrt werden die Prioritäten aber vorzeichenlos angegeben.
chrt ermöglicht es, den Scheduler eines Prozesses zu ändern. Folgende Scheduler sind möglich:
Scheduler von chrt | |
Option | Beschreibung |
-o | Other: der Standardscheduler, für Prozesse ohne Echtzeitanforderung. Der Standard für normale / die meisten Prozesse |
-i | Idle: Scheduler für sehr lange Prozesse, die im Hintergrund laufen sollen (ab Lucid) |
-b | Batch: Prozess läuft "batch-ähnlich" (ab Lucid) |
-f | Fifo: eine simple Warteschleife ohne Zeitbegrenzung für die einzelnen Prozesse; kommt nur Realtime-Prozessen zum Einsatz |
-r | RoundRobin: Fifo mit Zeitbegrenzung für die einzelnen Prozesse. Der Standard für Realtime-Prozesse |
Detaillierte Informationen zu den verschiedenen Schedulern bietet die Manpage namens "sched_setscheduler".
Der Befehl chrt kann einem anderen Kommando vorausgestellt werden, um dieses mit entsprechender Priorität laufen zu lassen.
chrt PRIORITÄT BEFEHL ARGUMENTE
Für chrt sind in der Regel Root-Rechte notwendig. Ausserdem ist die Manipulation laufender Prozesse möglich:
sudo chrt SCHEDULER -p PRIORITÄT PID
Beispiel: Setzen des Prozesses, der bei Verwendung eines Echtzeitkernels für die Behandlung von Interrupt 8 zuständig ist, auf 80, und Umstellung auf den Scheduler "Fifo":
sudo chrt -f -p 80 `pidof "IRQ-8"`
Auch Auskunft über einen Prozess ist möglich:
sudo chrt -p PID
Beispiel, in dem Informationen zum Prozess mit der PID 1805 abgerufen werden:
sudo chrt 1805
pid 1805's current scheduling policy: SCHED_OTHER pid 1805's current scheduling priority: 0
Mit taskset
ist es möglich, auf Systemen mit mehreren Prozessoren oder Kernen Prozesse gezielt bestimmten Prozessoren/Kernen zuzuweisen. Der Linux-Kernel verteilt die Prozesse zwar auch automatisch auf die vorhandenen Prozessoren, jedoch kann es unter Umständen sinnvoll sein, dies zu beeinflussen.
Die allgemeine Syntax von taskset lautet:
taskset OPTION MASKE BEFEHL #alternativ: taskset OPTION MASKE PID
wobei Root-Rechte notwendig sind, wenn ein Prozess beeinflusst werden soll. Um den Status eines Prozesses abzufragen sind diese nicht notwendig.
MASKE
gibt dabei an, welcher Prozessor dem Befehl bzw. Prozess zugewiesen werden soll, wobei die Angaben standardmässig als Hexadezimalzahl erfolgt. Die Zählung der Prozessoren beginnt dabei bei 1 (und nicht bei 0, wie Linux das üblicherweise tut!). D.h. 01 entspricht dem 1. Prozessor, 02 dem zweiten, 03 dem 1.+2. usw.
taskset kennt nur drei Optionen:
Optionen von taskset | |
Option | Beschreibung |
-p ZAHL oder --pid ZAHL | ZAHL ist die PID des zu beeinflussenden Prozesses angeben |
-c ZAHL oder --cpu-list ZAHL | zu benutzende CPU(s)/Kerne im Listen-Format an- / ausgeben, die CPU-Nummern können durch Kommata getrennt werden |
-h | kurze Hilfe anzeigen |
Im folgenden drei Beispiele für taskset.
Der Befehl
taskset -p 123
gibt aus, welche CPU(s) vom Prozess mit der PID 123 genutzt werden.
Der Befehl
taskset -p 456 03
legt fest, dass der Prozess mit der PID 456 den 1. und 2. Prozessor nutzen soll. Die gleiche Funktion erfüllt der Befehl
taskset -p 456 -c 1,2
Im letzten Beispiel
taskset -c 2 PROGRAMM
wird "PROGRAMM" gestartet und via taskset angewiesen, dass "PROGRAMM" ausschliesslich auf der der 2. CPU laufen soll.
Mit Hilfe von ionice
kann die Priorität eines Prozesses, der das I/O Interface des Kernels nutzt, beeinflusst werden.
Die allgemeine Syntax von ionice lautet:
ionice OPTION BEFEHL
Wobei je nach Prozess Root-Rechte benötigt werden.
ionice kennt nur vier Optionen:
Optionen von ionice | |
Option | Beschreibung |
-cZAHL | Hiermit wird die "scheduling class" festgelegt, also wann der Befehl abgearbeitet werden soll. Es gibt drei "scheduling classes": 1 = Real-Time: Der I/O Vorgang wird sofort ausgeführt, dafür werden ggf. sogar andere (laufende) Prozesse abgebrochen; das Verhalten kann im Detail mit der Option -n weiter beeinflusst werden.2 = Best-Effort: Der I/O Vorgang wird "so bald wie möglich" durchgeführt, basierend auf der niceness des Prozesses. Auch hier kann das Verhalten mit der Option -n im Detail beeinflusst werden.3= Idle: Der I/O Vorgang wird nur ausgeführt, wenn kein anderer Prozess I/O Zeit benötigt. |
-nZAHL | Dient zur detaillierten Einstellung von -c1 und -c2 , indem es die Priorität innerhalb der gewählten "scheduling class" festlegt. ZAHL kann einen Wert zwischen 0 und 7 haben, 0 hat die höchste Priorität. |
-pPID | Hiermit wird die PID eines laufendes Prozesse an ionice übergeben, für den man die "scheduling class" ändern bzw. abfragen möchte. |
-t | Fehler beim Ändern der Priorität werden ignoriert. Diese Option kann in Skripten nützlich sein. |
-h | Zeigt eine kurze Hilfe an |
Im folgenden dazu drei kurze Beispiele:
Der Befehl
ionice -p8
zeigt die Priorität des Prozesse mit der PID 8 an. Lautet die Ausgabe
none: prio 0
so ist für diesen Prozess keine Priorität vergeben.
Der Befehl
ionice -c3 -p123
ändert die I/O Priorität der Prozesses mit der PID 123 auf 3
, d.h. es wird ein "Idle-Prozess".
Der Befehl
ionice -c2 -n0 Programm
startet "Programm" mit der scheduling class 2 = best effort, in dieser Klasse hat "Programm" aber die höchste Priorität (0).
Diese Revision wurde am 9. Januar 2016 02:53 von Sutter_Cain erstellt.