Kann verhindert werden, dass ein bestimmtes Programm (dh Rhythmusbox und ihre Abhängigkeiten) jemals auf die Festplatte wechselt?
Ich frage, weil ich ein Problem habe, wenn ein Musikplayer Schluckauf macht, wenn Chromium zu viel Speicher beansprucht. Gibt es eine Möglichkeit, dies zu umgehen? Dies ist kein Problem mehr in Windows, vermutlich gibt es einen Weg.
ps
oder umtop
zu sehen, ob die Rhytmbox wirklich getauscht ist, indem du dasRSS
/RES
-Feld prüfst ? Ich denke, dass Ihr Problem hauptsächlich durch eine falsche Planung verursacht wird. Sie sollten versuchen,renice
den Rhytmbox-Prozess auszuführen oder einige seiner Einstellungen zu ändern, z. B. die Größe des Audiopuffers.Antworten:
Ich denke, dass das Problem mit dem Schluckauf nicht unbedingt durch das Tauschen verursacht wird. Wenn ein Programm etwas abspielt, sollte Linux dies bemerken und nicht austauschen. Programme, die nicht viel bewirken, werden zuerst ausgetauscht. Sie können überprüfen, ob das Programm wirklich ausgetauscht wird, indem Sie das Feld
RSS
/RES
von ps oder von oben betrachten .RSS
ist die residente Satzgröße, der nicht ausgelagerte physische Speicher, den eine Task verwendet (in Kilobyte).Ich denke, dass Ihr Problem höchstwahrscheinlich durch eine falsche CPU- und E / A-Planung und ein bisschen Ineffizienz der Rhythmbox verursacht wird, wodurch sie empfindlich auf hohe Systemlasten reagiert. Die CPU-Priorität kann mit den Befehlen nice und renice geändert werden . Die E / A-Priorität kann mit dem Befehl ionice geändert werden . Nur der Superuser kann hohe Prioritäten verwenden. Sie sollten auch wissen, dass Linux-Kernel-Leute versuchen, die Reaktionsfähigkeit von Desktopsystemen mit verschiedenen Patches mit geringer Latenz zu verbessern. Sie sollten daher in Betracht ziehen, sie zu verwenden. Eines davon ist ein ~ 200 Zeilen langer Patch von Mike Galbraith, der sogar Linus beeindruckt hat. Die Alternative zu diesem Patch ist Lennart Poetterings Gruppentrick was ich denke, wird die Standardeinstellung in Fedora 15 sein.
Auf jeden Fall gibt es ohne diese Patches zwei Möglichkeiten: Starten Sie das Programm mit hoher Priorität oder ändern Sie es anschließend. Für die erste Option können Sie ein Wrapper-Skript um Rhythmbox verwenden:
Sie müssen es als root ausführen. Wenn Sie sich nicht als root anmelden möchten, um dies zu starten, können Sie entweder
su
oder verwendensudo
.Wenn Sie die Priorität danach ändern
rhythmbox
möchten und sich nicht als root anmelden möchten , können Sie versuchen, einen Cron-Job zu verwenden, der alle 5 Minuten ausgeführt wird und die Priorität des Prozesses festlegt. Ich würde dies jedoch nicht empfehlen:quelle
Kurze Antwort: Sie können und sollten nicht.
Vor langer Zeit haben ausführbare Dateien das Sticky-Bit gewürdigt, das
+t
den Kernel veranlasste, nicht zu tauschen, aber heute wird es ignoriert.Wenn der Kernel entscheidet, dass er tauschen muss, hat er sicher einen gültigen Grund. Linux geht sehr aggressiv mit der Speichernutzung um, da inaktivierter RAM eine verschwendete Ressource ist.
Wenn Sie wirklich nicht tauschen möchten, mehr RAM erhalten oder einfach
# swapoff -a
(nicht empfohlen, kann Ihr System unbrauchbar werden, wenn Sie bereits Probleme haben).Shouldn't
geht, wenn Sie eine App entwickeln und nicht möchten, dass sie überhaupt ausgetauscht wird. Schauen Sie sich diesen Beitrag auf stackoverflow an .quelle
Dies scheint hier bereits beantwortet worden zu sein:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Obwohl der Konsens ist, dass Sie wahrscheinlich nicht: /
quelle
Dafür gibt es verschiedene Möglichkeiten. Sie können versuchen, zu versuchen, ist "sagt", dass Linux weniger mit Swap arbeitet (im Allgemeinen):
Von : https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Eine andere Option ist die Verwendung des cgroups-Kernel-Managers. Dies ist prozessspezifisch, Sie müssen jedoch einige "Arbeiten" ausführen: Beantwortet hier: /unix/10214/per-process-swapiness-for -linux # 10227
quelle
Sie können
mlockall()
Syscall verwenden. mlockall () erzwingt, dass der Speicherprozess resident ist (= kein Swap, kein Overcommit, etc ...). AFAIK, es gibt keinen Shell-Befehl, aber es ist einfach, einen zu erstellen. Es würde so aussehen:Beachten Sie, dass Sie root sein müssen, um anrufen zu können
mlockall()
.Wie in einer anderen Antwort gesagt, denke ich jedoch nicht, dass es wirklich das ist, was Sie wollen.
quelle