Programme und Hintergrundprozesse müssen sich die verfügbaren Systemressourcen teilen. Sind diese belegt, warten die laufenden Prozesse aufeinander. Wie diese Warteschlange aufgebaut ist und nach welcher Logik die laufenden Prozesse bei CPU und I/O-Operationen zum Zug kommen, entscheidet die Scheduler des Linux-Kernels. In universellen Linux-Distributionen, Debian und Ubuntu beispielsweise, arbeiten die Scheduler auf eine ausgeglichene Verteilung der Ressourcen hin. Nur wenige Dienste wie die Soundserver Pulse Audio und Pipewire erhalten von Hause aus eine höhere Priorität bei der Zuweisung von CPU-Zyklen.
Nachjustierung für den Desktop
Den Ansatz, vordefinierten Programmen und Prozessen eine höhere oder auch niedrigere CPU- und I/O-Priorität zu geben, greift das hier vorgestellte Tool Ananicy auf. Es schaltet eine automatische Vergabe von Prioritäten ab und arbeitet mit einer Datenbank bekannter Programme und Spiele, um diesen den Vorzug zu geben. Das Ziel ist dabei, typischen Vordergrundprozessen den Vorrang und länger laufenden Prozesse wie beispielsweise Packern eine geringere Priorität zu geben, damit der Desktop reaktionsfreudig bleibt. Am meisten profitieren Desktopsysteme mit bescheidener Hardwareausstattung von Ananicy. Für Server ist diese Optimierung nicht geeignet, zumal sich bei der typischen Arbeitslast dieser Systeme keine Verbesserung der Gesamtperformance durch diese Priorisierung feststellen lässt. Der Name von Ananicy steht kurz als Abkürzung für „Another Auto Nice Daemon“, was sich von der Funktionsweise ableitet. Denn es greift über die Systemtools „nice“ und „ionice“ in die Priorisierung ein.
CPU-Priorität: Diese wird unter allen Unixähnlichen Systemen vom Nice-Wert festgelegt. „Nice“ bedeutet dabei tatsächlich „nett“, denn der Wert bestimmt, wie nett ein Programm zu den anderen laufenden Prozessen ist. Je höher die Dringlichkeit, desto geringer und weniger „nett“ ist folglich der Nice-Wert. Der Wert kann zwischen –20 bis +19 liegen, wobei –20 die höchste Priorität angibt und 19 die niedrigste.
Ist ein Programm schon gestartet, so kann das Kommandozeilentool nice den Nice-Wert nachjustieren. Anwender ohne root-Berechtigung dürfen nur Nice-Werte in eine Richtung zwischen 0 und 19 setzen und damit nur die eigenen Prozesse im Rang zurückstufen. Mit root-Recht darf man mit negativen Nice-Werten die Priorität auch hochstufen. Damit dieser Rang vom Linux-Kernel beachtet wird, muss die Funktion „Autogroup“ (siehe Kasten) von aktuellen Linux-Distributionen deaktiviert sein, was Ananicy selbständig übernimmt.
I/O-Priorität: Das Pendant zu nice ist ionice für den Vorrang bei Datenträgerzugriffen. Dieser Wert folgt in der Logik dem Nice-Wert für CPU-Prioritäten und wirkt sich auf den I/O-Scheduler „CFG“ des Kernels aus, der diese Rangliste berücksichtigt. Der Kernel kann mit verschiedenen I/O-Planern arbeiten und es ist davon abhängig, welcher aktiviert ist. Die Scheduler „noop“ und „deadline“, die aktuelle Linux-Distributionen für SSD- und NVME-Laufwerke automatisch wählen, ignorieren diese Rangfolge und überlassen die Abarbeitung der geplanten I/O-Operationen den Controllern dieser Laufwerke. Auch die Nutzung der Schedulers CFQ und BFQ würde bei diesen Datenträgern keine merklichen Verbesserungen durch ionice bringen.
Ananicy als Systemdienst einrichten

Der Entwickler hinter Ananicy hat die Prozesspriorisierung als Systemd-Dienst umgesetzt und in Python 3 geschrieben. Es gibt damit wenige Abhängigkeiten von zusätzlich benötigten Bibliotheken und ein Kompilieren des Tools ist auch nicht nötig. Auf https://github.com/Nefelim4ag/Ananicy gibt es eine universelle Anleitung zur Einrichtung und ein handliches Installations-Script für Debian/Ubuntu. Ananicy ist damit unkompliziert eingerichtet und falls sich keine merkliche Verbesserung auf einem Desktopsystem einstellt, ist diese Prozessoptimierung auch schnell wieder abgeschaltet und sauber deinstalliert. Auch für Arch Linux und Manjaro findet sich ein fertiges Paket im Arch User Repository. Das Tool lädt also auf diesen Distributionen zum Experimentieren ein.
In Debian und Ubuntu installiert der Befehl
sudo apt install git schedtool
im Terminal Git und ein weiteres Systemwerkzeug, das die gegenwärtige Priorität von Prozessen ausliest. Dann holt das Kommando
git clone https://github.com/Nefelim4ag/Ananicy.git
die Dateien von Github und
./Ananicy/package.sh debian
erstellt passend zum System ein DEB-Paket, das auch in Raspberry-Pi-OS funktioniert. Die Eingabe
sudo dpkg -i ./Ananicy/ananicy-*.deb
installiert das erzeugte Paket. Danach ist noch der Befehl
sudo systemctl enable --now ananicy
erforderlich, um den Ananicy-Dienst zu aktiveren. Der Aufruf zeigt, welche Nice-Werte Ananicy dynamisch anpasst. Ein laufender Firefox würde beispielsweise gleich die Priorität –3 zugewiesen bekommen. Diese Optimierungen bezieht Ananicy aus fertigen Konfigurationssets im Verzeichnis „/etc/ananicy.d“, die optimale Erfahrungswerte für bekannte Programme enthalten. Diese werden anhand ihres Prozessnamens identifiziert.

Der Dienst überwacht nun, welche Prozesse neu hinzukommen, und wendet die Regeln zur Optimierung auf diese gleich nach deren Start an. Wird beispielsweise unter Gnome die ressourcenhungrige Grafikbearbeitung Inkscape aufgerufen, zeigt der Prozessmonitor htop, sofern die Spalte „NI“ (für den Nice-Wert) aktiviert ist, dass dessen Nice-Rang bereits auf –10 angepasst wurde. Aktuell verfügt Ananicy über 200 Regelsets für verschiedene Prozesse und auch für Programme unter Wine. Das Systemd-Dienst kann mit
sudo systemctl stop ananicy
jederzeit angehalten und mit
sudo systemctl disable ananicy
auch wieder permanent deaktiviert werden. Stellt sich auf dem Desktop aufgrund der Hardwarevoraussetzungen keine merkliche Verbesserung von Reaktionszeiten ein, so deinstalliert
sudo apt remove ananicy
die Prozessoptimierung wieder komplett vom System.
Autogroup: Die automatische Rangliste
Die meisten Linux-Distributionen für den Desktopeinsatz wie Ubuntu, Debian, Manjaro und Fedora verfügen über eine eigene Prozessoptimierung – genannt Autogroup. Diese behält die Prozesshierarchie im Blick und setzt die Priorität einzelner Prozesse nach einer Gruppenzugehörigkeit. Beispielsweise behandelt Autogroup alle Programme, die in einer grafischen Session gestartet wurden, also auf dem Desktop, mit einer höheren Priorität. Eine Anpassung des Nice-Werts von einzelnen Programmen hat dann keine Auswirkung. Deshalb wird Autogroup von Ananicy über Systemd abgeschaltet, um die manuelle Priorisierung zu ermöglichen.
Weitere Lesetipps: