Erhöhen Sie die Reaktionsfähigkeit des Desktops unter Linux, während Sie tauschen

15

Alle GNU / Linux-Distributionen, die ich bisher getestet habe, haben das Problem, dass jedes Mal, wenn der RAM voll ist und das System zu tauschen beginnt, der gesamte Desktop und die grafische Benutzeroberfläche so schnell nicht mehr reagieren, dass ich manchmal etwa 5-10 Sekunden warten muss die physische Maus bewegt haben, bis sich der Mauszeiger tatsächlich bewegt.

Dies ist eine Art ärgerliches Verhalten, insbesondere bei Systemen mit niedrigem RAM.

Gibt es eine Möglichkeit, einigen Anwendungen / Jobs, wie der Desktop-Umgebung usw., eine höhere Priorität als anderen Anwendungen zuzuweisen, damit die Anwendung, die den gesamten Speicher beansprucht, vor der Desktop-Umgebung usw. ausgetauscht wird?

BEARBEITEN: Ich spreche von dem Fall, dass der gesamte Arbeitsspeicher verwendet wird, sodass er immer ausgetauscht wird, wenn er nicht deaktiviert ist (ich möchte nicht, dass Prozesse zufällig abgebrochen werden). Ich hatte dieses Problem nicht nur in Umgebungen mit niedrigem RAM-Speicher, sondern auch mit 8 GB RAM auf meinem Desktop-Computer, teilweise aufgrund vieler VMs, teilweise aufgrund von Speicherverlusten. ZRAM ist auch keine Lösung, da es das Problem nur verzögert. Die einzige Lösung, die ich mir für dieses Problem vorstellen kann, ist ein Userspace-Dienstprogramm oder eine Kernel-API, mit der das Auslagern bestimmter Jobs verhindert oder zumindest sehr unwahrscheinlich gemacht werden kann. Kennt jemand eine andere Lösung oder weiß etwas über ein solches Tool oder eine solche API, die es gibt oder die geplant ist?

2. BEARBEITUNG : ulatencyd scheint laut https://aur.archlinux.org/packages/ulatencyd-git/ und https://wiki.archlinux.org/index.php/Ulatencyd nicht mit neueren Versionen von systemd zu funktionieren . Dies kann daran liegen, dass systemd die vollständige Kontrolle über cgroups aus Sicht des Userspace übernommen hat, wenn ich das richtig verstehe.

FSMaxB
quelle
3
cgroups, wenn Sie die Speicher-cgroup aktiviert und die Auslagerungsabrechnung aktiviert haben ( cgroup_enable=memory swapaccount=1in der Kernel-Befehlszeile; beachten Sie, dass dies geringfügige Leistungskosten verursacht). Beispielimplementierung: ulatencyd .
Derobert
@derobert Großartig, das scheint genau das zu sein, wonach ich gesucht habe. Ich werde damit experimentieren, sobald ich Zeit habe.
FSMaxB
Toll, ulatencyd hat sogar ein AUR-Paket, ich schätze, ich bin glücklich, Archlinux-Benutzer zu sein.
FSMaxB
Es gibt sogar einen Wiki-Artikel wiki.archlinux.org/index.php/Ulatencyd
FSMaxB
Wenn ich dieses Q höher bewerten könnte, würde ich! Gibt es wirklich keine direkte Möglichkeit, der GUI und einigen wichtigen Programmen mitzuteilen, dass sie im RAM bleiben sollen, damit sie weiterhin reagieren? Ich meine, was ist der schlimmste Fall, wenn man Linux-Benutzern diese Option bietet? Der Computer stürzt ab? WER HAT DAS NICHT VORHER GEMACHT? :) Ich meine, manchmal starte ich versehentlich zu viele VMs, weil ich (RAM-Nummern) nicht richtig hinzufügen konnte und es dann FÜR IMMER dauert, um die Dinge wieder unter Kontrolle zu bringen. Wenn Sie der GUI und dem Terminal sagen, dass sie im RAM bleiben sollen, ist das nicht richtig ?! Bitte, jemand antwortet darauf!
Damon

Antworten:

1

Soweit ich weiß, ist dies kein Linux-spezifisches Problem, sondern die Funktionsweise von SWAP (oder virtuellem Speicher). Wenn das Betriebssystem Daten auf der Festplatte und nicht auf dem RAM nachschlagen muss, wird es langsamer. Nichts, was Sie dagegen tun können, der Zugriff auf die Festplatte ist viel langsamer als der Zugriff auf den Arbeitsspeicher.

Sie werden nicht in der Lage sein, die Priorität festzulegen, mit der Prozesse ausgetauscht werden. Dies wird vom Kernel bestimmt, der versucht, die Effizienz zu maximieren. Sie werden es nicht besser machen können. Was du kannst die CPU-Priorität eines Prozesses festlegen, was möglicherweise hilfreich ist. Ihr System wird aufgrund der Zeit, die zum Lesen von / nach SWAP benötigt wird, heruntergefahren. Dies bedeutet, dass die CPU warten muss, bis die relevanten Daten von dem Prozess, der sie anfordert, abgerufen wurden, bevor sie fortfahren können. Wenn Sie für Ihr DE eine höhere Priorität für den CPU-Zugriff festlegen, sollte dies die Operationen nach oben schieben und die Dinge etwas beschleunigen.

Die CPU-Priorität wird also mit den Befehlen niceund festgelegt renice:

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

Die Prioritäten reichen von -20 (höchste Priorität) bis 20 (niedrigste Priorität). Um die Priorität eines laufenden Prozesses zu ändern, können Sie Folgendes tun:

renice -15 $PID

wo $PIDist die PID des Prozesses, dessen Priorität Sie erhöhen möchten. Mit können Sie pgrepherausfinden, was das ist. Beispielsweise:

renice -15 $(pgrep gnome-session)

Die andere Option wäre, die "Austauschbarkeit" des Systems festzulegen, die bestimmt, wann es mit dem Austausch beginnt. Ein Swap-Wert von 1 bedeutet, dass nur der Swap ausgeführt wird, um Speicherfehler zu vermeiden. Höhere Werte bedeuten, dass der Austausch gestartet wird, auch wenn noch physischer Speicher verfügbar ist. Sie können dies auf einen relativ niedrigen Wert einstellen, um den Systemaustausch so gering wie möglich zu halten. Diese Zeile hinzufügen zu /etc/sysctl.conf:

vm.swappiness=1

ACHTUNG: Das ist keine gute Idee, wenn Sie nicht viel RAM haben. Tauschen ist im Allgemeinen eine gute Sache. Sie müssen ein wenig mit den Werten herumspielen, um die richtige Balance für Ihr System zu finden.

terdon
quelle
Wie Sie sagen, kann dies im Kernelraum gelöst werden, was bedeutet, dass es sehr gut linuxspezifisch wäre. Das Ändern der Swap-Funktion ändert nichts, da das System bei voller RAM-Auslastung sowieso austauscht. Die Priorität eines Prozesses ändert nichts an seiner Speicherverwaltung, aber nur das Verhalten des CPU-Schedulers und die CPU-Zeit sind nicht wirklich hilfreich, um den Festplattenzugriff zu beschleunigen.
FSMaxB
Die @FSMaxB-CPU-Priorität kann hilfreich sein, da sie dem DE Priorität einräumt. Sie hilft nicht, wenn das DE selbst ausgetauscht wird, aber wenn etwas anderes die CPU aufhält und daher den Computer verlangsamt.
Terdon
Wenn der DE für einige Zeit inaktiv ist, wird er meiner Erfahrung nach immer ausgetauscht, wenn der Speicher voll ist.
FSMaxB
@FSMaxB Ja, das macht Sinn, da DEs Speicherfresser sind. Eine Erhöhung der Priorität kann jedoch hilfreich sein, da der Scheduler sie nicht zurückhält.
Terdon