Das Austauschen geschah anscheinend, als die inaktiven RAM-Seiten tatsächlich aktiv waren.
( Update: Wie in einem Kommentar klargestellt, ist dies nicht der Fall. Daher können Personen mit demselben Problem mit der horizontalen Regel fortfahren .)
Dh es liefen viele Programme und der Kernel hat einige Seiten ausgetauscht. Dann haben Sie einige Programme beendet. Der Kernel markiert seine RAM-Seiten als inaktiv. Es werden jedoch erst Seiten in den Arbeitsspeicher zurückgeschrieben, wenn diese Seiten benötigt werden. Dies führt dazu, dass sowohl inaktive als auch ausgelagerte Seiten vorhanden sind.
Warum nicht präventiv Seiten einlagern? Denn das wäre Wetten gegen die Gewinnchancen: Langfristig verlierst du. Stellen wir uns ein vereinfachtes Beispiel vor: Zwei Programme A und B, die nicht gleichzeitig in den Arbeitsspeicher passen. Programm A wird noch ausgeführt und alle ausgelagerten Seiten gehören zu A. Programm B wurde beendet und alle inaktiven Seiten gehören zu B.
Wenn der Kernel die Seiten von A präventiv einlagert und sofort danach:
- Programm A muss auf seine Seiten zugreifen -> Sie gewinnen - die Seiten befinden sich bereits im RAM.
- Sie starten B erneut -> Sie verlieren - Sie haben die Kosten für das Bringen der Seiten in den RAM "bezahlt" und müssen sie jetzt zurückschicken.
- Sie starten ein anderes Programm C -> Sie verlieren, wenn A und C nicht gleichzeitig in den Arbeitsspeicher passen. Wenn sie passen, bist du gerade.
Berücksichtigen Sie auch, dass das Auslagern (Schreiben auf die Festplatte) teurer ist als das Einlagern (Lesen von der Festplatte). Das macht diese "Wette" noch unattraktiver.
Kurz gesagt: Vertraue deinem Kernel und versuche nicht, ihn auszutricksen.
Update: Es hat
sich herausgestellt, dass inaktiver Speicher nicht funktioniert, da der Artikel Verwenden der Aktivitätsüberwachung zum Lesen des Systemspeichers viele Leute zu der Annahme veranlasst hat, dass er funktioniert. Die im Artikel angegebene Definition für inaktiven Speicher ist korrekt:
Diese Informationen befinden sich im RAM, werden jedoch nicht aktiv verwendet. Sie wurden kürzlich verwendet.
Das folgende Beispiel ist jedoch völlig irreführend und zu stark vereinfacht (wie mein Beispiel, um ehrlich zu sein):
Wenn Sie beispielsweise Mail verwendet und dann beendet haben, wird der von Mail verwendete RAM als inaktiver Speicher markiert. Inaktiver Speicher kann wie freier Speicher von einer anderen Anwendung verwendet werden. Wenn Sie jedoch Mail öffnen, bevor der inaktive Speicher von einer anderen Anwendung verwendet wird, wird Mail schneller geöffnet, da der inaktive Speicher in aktiven Speicher konvertiert wird, anstatt ihn vom langsameren Laufwerk zu laden.
Ich habe nach weiteren Online-Ressourcen gesucht und bin zu diesem Thread in der Darwin-Kernel-Mailingliste gelangt, der ziemlich informativ ist. Zitat von Jim Magee (aus dem Darwin-Team - glaube ich):
Kurz gesagt, das Kernel-VM-System durchsucht beim Umgang mit dem Speicherdruck die verwendeten Seiten und versucht, ein Gleichgewicht zwischen aktiven und inaktiven Markierungen herzustellen. Die inaktiven Seiten werden auf Wiederverwendung geprüft, während sie als inaktiv markiert sind. Wenn sie wiederverwendet wurden, werden sie als aktiv markiert und eine andere Seite muss von aktiv in inaktiv versetzt werden, um festzustellen, ob sie aktiv verwendet wird. Inaktiv ist also eine falsche Bezeichnung. Es ist eine Abkürzung für "Möglicherweise inaktiv, versuchen wir das zu überprüfen."
Wie Sie festgestellt haben, ist das interne Gleichgewicht, das wir (derzeit) anstreben, ungefähr 2/3 aktiv gegenüber 1/3 inaktiv ...
Dies erklärt das beobachtete Verhalten. Dh die inaktiven Seiten, die Sie sehen, gehören zu laufenden Programmen, die in letzter Zeit nicht benutzt wurden. Wenn Sie also ein neues Programm starten, werden inaktive Seiten ausgetauscht. Gleichzeitig werden Seiten aus anderen Programmen als inaktiv markiert, um das 2/1-Verhältnis von aktiv zu inaktiv beizubehalten.
Der Thread enthält auch einige Vorschläge, um mehr über die Darwin-Interna zu erfahren. Es gibt auch einige Vorschläge für den Fall, dass Sie aufgrund von Beachball-Problemen mit der Untersuchung der Speichernutzung begonnen haben (die normalerweise wenig damit zu tun haben).
Die Schlussfolgerung bleibt die gleiche: Vertrauen Sie Ihrem Kernel und versuchen Sie nicht, ihn auszutricksen. :-)