schedutils

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Bearbeiten von Paketquellen

  3. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. chrt
  3. taskset
  4. ionice
  5. Links

Wiki/Icons/terminal.png 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.

Installation

Alle drei Programme befinden sich im vorinstallierten Paket

Paketliste zum Kopieren:

sudo apt-get install util-linux 

Oder mit apturl installieren, Link: apt://util-linux

Man muss also nichts installieren, um diese Programme benutzen zu können.

chrt

Der Befehl chrt ermöglicht es, die Echtzeit-Priorität von Prozessen zu ändern. Für "normale" Prozesspriorisierung ist nice zuständig.

Priorität

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.

Scheduler

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
-b Batch: Prozess läuft "batch-ähnlich"
-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".

Benutzung

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

taskset

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.

Nutzung

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 

Für Ubuntu 18.04 hat sich die Syntax geändert. Der Befehl lautet nun:

taskset -cp 1,2 456 

Im letzten Beispiel

taskset -c 2 PROGRAMM 

wird "PROGRAMM" gestartet und via taskset angewiesen, dass "PROGRAMM" ausschliesslich auf der der 2. CPU laufen soll.

ionice

Mit Hilfe von ionice kann die Priorität eines Prozesses, der das I/O Interface des Kernels nutzt, beeinflusst werden.

Nutzung

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).