Wie kann die Festplatten-E / A-Priorität automatisch festgelegt werden?

8

Wenn ich eine E / A-intensive Anwendung verwende (wie Virtualbox, Steam-Datenüberprüfung oder sogar dd), reagiert mein System fast nicht mehr. Obwohl 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 beispielsweise die Priorität in Leerlauf zu ändern, aber im Fall von Virtualbox, die viele Prozesse hervorruft, wird es schwierig.

Kann ich dem System Hinweise geben, damit beim Starten bestimmter Anwendungen diese mit der geringsten E / A-Priorität gestartet werden?

Salem
quelle
Hast du meine Lösung ausprobiert? Macht es den Job?
sm4rk0

Antworten:

7

Hinweis: Diese Lösung funktioniert nur mit dem cfq-Scheduler, wie hier erläutert . Sie sollten überprüfen, welche verwendet wird, indem Sie ausstellen

cat /sys/block/sda/queue/scheduler

und ändern Sie es gegebenenfalls.

Wenn ich das richtig verstanden habe, möchten Sie, dass ionicejedes Mal, wenn Sie einen Befehl starten, eine Einstellung angewendet wird. Sie können es so machen:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

Der erste Befehl erstellt eine Datei VirtualBoxmit dem Text in einfachen Anführungszeichen als Inhalt. Dies sollte den vollständigen Pfad zum Programm haben, denn wenn man es nur angibt VirtualBox, kann es als die gerade erstellte Datei interpretiert und eine "Schleife" erstellt werden.

Der zweite Befehl macht es ausführbar und der dritte verschiebt diese neue Datei in einen Ordner, der sich vor dem Ordner "system" bin befindet /usr/bin, sodass unsere neue Datei anstelle des Originals ausgeführt wird. Der Teil "$ @" enthält alle Argumente, mit denen der Befehl aufgerufen wurde, sodass sie an den realen VirtualBox-Befehl weitergeleitet werden.

Entsprechend der Antwort ("Ja") auf diese Super-User-Frage erben Kinderprozesse Ionice-Prioritäten von ihren Eltern? Wie überprüfen Sie die E / A-Priorität eines laufenden Prozesses? sollte es für ioniceden übergeordneten Prozess wie folgt ausreichen :

ionice -c 3 VirtualBox

Auf der ionice Manpage stehen folgende Werte für E / A-Planungsklassen zur Verfügung:

  • 0 für keine
  • 1 für Echtzeit
  • 2 für Bestleistung
  • 3 für Leerlauf (im obigen Beispiel verwendet)

Ein Nummern- oder Klassenname kann verwendet werden.

Die -n levelOption gilt auch für Echtzeit- und Best-Effort-Klassen mit 0-7 als gültigen Daten (Prioritätsstufen).

sm4rk0
quelle
1
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Lucio
@ Lucio, danke für einen Hinweis, aber ist "es sollte für ioniceden übergeordneten Prozess ausreichen " nicht ein wesentlicher Teil?
sm4rk0
1
Ja du hast Recht. Aber wenn Sie können , nehmen Sie sich Zeit und fügen Sie dann weitere Informationen aus Ihrer eigenen Erfahrung über dieses Verfahren hinzu, um eine bessere Antwort zu erhalten :)
Lucio
@ Lucio, ich hoffe es ist jetzt gut genug. Vielen Dank für das Bestehen (:
sm4rk0
1
Zu Ihrer Information: ioniceKann cfqnur mit Scheduler arbeiten! Für weitere Details: unix.stackexchange.com/questions/136226/…
andras.tim
-1

Mit dem Befehl 'renice' können Sie Prozesse priorisieren:

renice -<priority> <application's pid>

Es kann auch sein, dass Ihr Laufwerk zu stark herunterfährt. Wenn Sie also eine Anwendung wie Virtualbox starten möchten, muss sie hochgefahren werden, bevor Sie mit der Arbeit beginnen können (dies kann eine Weile dauern).

aschfahl
quelle
Vielen Dank für den Tipp, aber ich suchte nach einer Möglichkeit, dies automatisch und systemweit zu machen. Beispiel: Wenn Sie Virtualbox starten, führen Sie es mit der niedrigstmöglichen E / A-Priorität aus ...
Salem,
normal nett und renice priorisieren IO nicht separat.
Jay _silly_evarlast_ Wren
Und das ist schön, nicht ionice. Der eine ist für die CPU, der andere für die E / A.
Dagelf