
Wenn ich eine IO-intensive Anwendung verwende (wie Virtualbox, Steam-Datenüberprüfung oder sogar dd
), reagiert mein System fast nicht mehr. Obwohl sie alle mit normaler Priorität gestartet werden, machen sie den Desktop sehr träge und verzögern den Start anderer Anwendungen erheblich.
Ich weiß, dass ich so etwas verwenden kann, ionice
um die Priorität beispielsweise auf Leerlauf zu ändern, aber im Fall von Virtualbox, wo viele Prozesse entstehen, wird es schwierig.
Kann ich dem System Hinweise geben, sodass beim Starten bestimmter Anwendungen diese mit der niedrigsten IO-Priorität gestartet werden?
Antwort1
Hinweis: Diese Lösung funktioniert nur mit dem cfq-Scheduler, wie erklärtHierSie sollten überprüfen, welches verwendet wird, indem Sie
cat /sys/block/sda/queue/scheduler
Undändernes, wenn nötig.
Wenn ich das richtig verstanden habe, soll ionice
bei jedem Start eines Befehls eine bestimmte Einstellung angewendet werden. Das geht folgendermaßen:
echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/
Der erste Befehl erstellt eine Datei VirtualBox
mit dem in einfache Anführungszeichen gesetzten Text als Inhalt. Diese sollte den vollständigen Pfad zum Programm enthalten, denn wenn man nur diesen angibt, VirtualBox
kann es als die gerade erstellte Datei interpretiert werden und eine „Schleife“ erzeugen.
Der zweite Befehl macht es ausführbar und der dritte verschiebt diese neue Datei in einen Ordner, der sich vor dem Bin-Ordner „System“ befindet /usr/bin
, sodass unsere neue Datei anstelle der ursprünglichen ausgeführt wird. Der Teil „$@“ enthält alle Argumente, mit denen der Befehl aufgerufen wurde, sodass sie an den eigentlichen VirtualBox-Befehl weitergeleitet werden.
Laut Antwort ("ja") auf diese Super User FrageErben untergeordnete Prozesse die IO-Prioritäten ihrer Eltern? Wie überprüfen Sie die IO-Priorität eines laufenden Prozesses?, es sollte ausreichen, ionice
den übergeordneten Prozess wie folgt anzuzeigen:
ionice -c 3 VirtualBox
Ausionice
manpagesind die folgenden Werte für die E/A-Planungsklasse verfügbar:
- 0 für keine
- 1 für Echtzeit
- 2 für Best Effort
- 3 für Leerlauf (wird im obigen Beispiel verwendet)
Es kann eine Nummer oder ein Klassenname verwendet werden.
Die Option ist außerdem -n level
auf Echtzeit- und Best-Effort-Klassen anwendbar, wobei 0-7 die gültigen Daten (Prioritätsstufen) sind.
Antwort2
Mit dem Befehl „renice“ können Sie Prozesse priorisieren:
renice -<priority> <application's pid>
Es kann auch sein, dass Ihr Laufwerk zu weit herunterfährt, so dass es beim Starten einer Anwendung wie Virtualbox erst hochfahren muss, bevor Sie mit der Problemumgehung beginnen können (das kann eine Weile dauern).