Der Linux-Kernel tauscht die meisten Seiten aus dem Speicher aus, wenn ich eine Anwendung ausführe, die den größten Teil des physischen Speichers von 16 GB verwendet. Nach Abschluss der Anwendung dauert jede Aktion (Eingeben von Befehlen, Wechseln von Arbeitsbereichen, Öffnen einer neuen Webseite usw.) sehr lange, da die relevanten Seiten erst vom Swap wieder eingelesen werden müssen.
Gibt es eine Möglichkeit, den Linux-Kernel anzuweisen, Seiten aus dem Auslagerungsspeicher zurück in den physischen Speicher zu kopieren, ohne jede Anwendung manuell zu berühren (und auf sie zu warten)? Ich führe viele Anwendungen aus, so dass das Warten immer schmerzhaft ist.
Ich verwende oft swapoff -a && swapon -a
, um das System wieder reaktionsfähig zu machen, aber dies löscht die Seiten aus dem Swap, so dass sie beim nächsten Ausführen des Skripts erneut geschrieben werden müssen.
Gibt es eine Kernel-Schnittstelle, die möglicherweise sysfs verwendet, um den Kernel anzuweisen, alle Seiten von Swap zu lesen?
Edit: Ich suche in der Tat einen Weg, um alle Swap Swap-fähig zu machen. (Danke derobert!)
[PS serverfault.com/questions/153946/… und serverfault.com/questions/100448/… sind verwandte Themen, beschäftigen sich jedoch nicht mit der Frage, wie der Linux-Kernel Seiten aus dem Swap zurück in den Speicher kopieren kann, ohne den Swap zu löschen.]
Antworten:
Basierend auf dem Memdump-Programm, das ursprünglich hier gefunden wurde , habe ich ein Skript erstellt, um bestimmte Anwendungen selektiv zurück in den Speicher zu lesen.
remember
:Verbrauch: so etwas wie
Es überspringt schnell nicht ausgelagerten Speicher (Gigabyte pro Sekunde) und verlangsamt sich, wenn ein Auslagerungsvorgang erforderlich ist.
quelle
Es könnte helfen, aufzusteigen
/proc/sys/vm/page-cluster
(Standard: 3).Aus der Kerneldokumentation (
sysctl/vm.txt
):In der Dokumentation wird kein Limit erwähnt, daher könnten Sie dieses absurd hoch setzen, damit der gesamte Swap sehr bald wieder eingelesen wird. Und natürlich danach wieder auf einen vernünftigen Wert einstellen.
quelle
page-cluster
Werts die Leistung verbessern.Sie können versuchen, die Programme, die Sie am meisten interessieren , einer C-Gruppe hinzuzufügen und swappiness so zu optimieren , dass es weniger wahrscheinlich ist, dass die Programme, die Sie hinzufügen, beim nächsten Ausführen der Anwendung als Kandidaten für den Austausch in Frage kommen.
Einige ihrer Seiten werden wahrscheinlich noch ausgetauscht, aber es kann zu Problemen mit der Leistung kommen. Ein großer Teil davon ist wahrscheinlich nur das "Stop and Start" -Verhalten, wenn viele Seiten eines Programms ausgetauscht werden und das Programm ständig pausieren muss, um seine Seiten in RAM zu tauschen, jedoch nur in 4-KB-Schritten.
Alternativ können Sie die ausgeführte Anwendung einer cgroup hinzufügen und swappiness so einstellen, dass die Anwendung die am häufigsten verwendete Auslagerungsdatei ist. Die Anwendung wird verlangsamt, aber der Rest des Systems wird geschont.
quelle
Mir scheint, dass Sie das System nicht auf magische Weise "wieder reaktionsfähig machen" können. Sie müssen entweder die Strafe zahlen oder Seiten aus dem Auslagerungsspeicher in den Speicher zurücklesen, oder Sie müssen sie später bezahlen, aber auf die eine oder andere Weise müssen Sie sie bezahlen. In der Tat, wenn Sie so etwas tun,
swapoff -a && swapon -a
verspüren Sie möglicherweise mehr Schmerzen als weniger, weil Sie erzwingen, dass einige Seiten zurück in den Speicher kopiert werden, die andernfalls nie wieder benötigt worden wären und schließlich gelöscht würden, ohne gelesen zu werden (denken Sie: Sie beenden eine Anwendung, während ein Großteil des Heaps ist ausgelagert, diese Seiten können gänzlich verworfen werden, ohne jemals in den Speicher zurückgelesen zu werden.Nun, so ziemlich jede Seite, die vom Auslagern in den Hauptspeicher zurückkopiert wird, wird sowieso geändert. Wenn sie also in Zukunft zum erneuten Auslagern zurückgezogen werden müsste, müsste sie sowieso neu im Auslagerungsmodus geschrieben werden. Denken Sie daran, dass Swap hauptsächlich aus Heapspeicher und nicht aus schreibgeschützten Seiten besteht (die normalerweise dateibasiert sind).
Ich denke, Ihr
swapoff -a && swapon -a
Trick ist so gut wie alles, was Sie sich vorstellen können.quelle
swapoff -a && swapon -a
wird nicht gut für Sie sein. In diesem Fall benötigen Sie wahrscheinlich etwas,/proc/<each-process>/mem
das jede Seite des Speichers scannt und liest, um sicherzustellen, dass sie im RAM vorhanden ist. Ich weiß nicht, ob das existiert.Es gibt eine sehr nette Diskussion hier http://rudd-o.com/de/linux-und-freie-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that Dies läuft darauf hinaus, die Reaktionsfähigkeit des Systems zu verringern und das Auslagern des Codes zu verhindern (und genau das passiert). Dies ist keine wirkliche Antwort auf Ihre Frage, aber dies kann das Auftreten des Problems verhindern (Ihre Anwendungen werden einfach nicht ausgetauscht, nur nicht verwendete Daten und Seiten-Cache).
quelle