Je mehr Speicher genutzt wird, desto besser? —— Ein kurzer Überblick über den virtuellen Speicher von Android (Linux)

Originallink:https://www.coolapk.com/…

— In verschiedenen Beiträgen sehen wir oft Kommentare wie: "Es ist normal, mehr Speicher zu verbrauchen; Gedächtnis ist für den Gebrauch gedacht. Warum hast du noch so viel Speicher beim Streamlining?" Das ist seine Bemerkung. Diese Aussagen mangelt mehr oder weniger an Strenge. Im Folgenden versuche ich, eine einfachere Beschreibung zu verwenden, um dir ein Gefühl von dir selbst zu gebenMobiltelefoneSpeicherverwaltung(Hauptsächlich virtuelles Gedächtnis) Ich habe ein grundlegendes Verständnis, und es ist das erste Mal, dass ich für einen Neuling schreibePopulärwissenschaftliche WissenschaftFalls es Fehler gibt, weist sie bitte im Kommentarbereich darauf hin.

————— Trennlinie—————

Hinweis: Der in diesem Artikel erwähnte "Speicher" bezieht sich auf das, was viele gemeinhin als "laufenden Speicher" bezeichnen, also "RAM", nicht auf Speicherplatz!

————— Trennlinie—————

Zuerst lernen wir einige Konzepte und Fachbegriffe kennen

1. Virtueller Speicher:

Virtueller Speicher ist eine Art der Speicherverwaltung, die häufig in modernen Betriebssystemen verwendet wirdTechnologieDerzeit ist die gängige Methode das seitenbasierte virtuelle Speichermanagement, das auf Seiten basiert (meist4KB) Verwaltet Speicherzuweisung, Recycling und Swapping mit minimaler Granularität.

2.SWAP:

SWAP ist ein Teil der virtuellen Speichertechnologie, bei der Speicherplatz auf der Festplatte geteilt wird, um Speicherseiten auszutauschen – einfach gesagt: Daten vom Speicher auf die Festplatte zu verschieben, um physischen Speicher freizumachen. Windows hat auch eine ähnliche Funktion namens "Paginierte Datei". Aber im Gegensatz zu Linux ist Windows stark auf paginierte Dateien angewiesen, und das Ausschalten davon verursacht dasGroße ProblemeFür Details siehe das zusätzliche Kapitel am Ende dieses Artikels.

3.ZRAM:

ZRAM ist eine weitere Implementierung von SWAP. Anstatt Festplattenspeicher zu verwenden, partitioniert es den Speicherplatz direkt, um Speicherseiten zu tauschen, wobei Kompressionsalgorithmen wie LZ4/ZSTD verwendet werden, um Speicherdaten zu komprimieren und so physischen Speicher freizumachen.

4.ZRAM Writeback

ZRAM Writeback ist eine Erweiterung von ZRAM. Wie SWAP erstellt es Swap-Dateien auf dem Festplattenspeicher, um Speicherseiten zu swappen. Der Unterschied besteht darin, dass ZRAM Writeback komprimierte Speicherdaten austauscht. Schreibsteuerungslogik läuft auf der Benutzerschicht statt im Kernel, und die spezifische Strategie wird vom Systemanbieter bestimmt, daher wird dieser Artikel nicht darauf eingehen.

5. Direktes Recycling und asynchrones Recycling

Es gibt zwei Arten der Speicherwiederherstellung: Asynchrone Sammlung läuft auf dem Hintergrundthread und beeinflusst den aktuellen Prozess nicht, was wenig Einfluss auf Leistung und Flüssigkeit hat, aber die Sammelgeschwindigkeit ist langsam; Die direkte Rückgewinnung erfolgt schnell, blockiert jedoch den aktuellen Prozess, wodurch die Softwareoberfläche für kurze Zeit (meist sehr kurz) einfriert, was die Leistung und Flüssigkeit erheblich beeinträchtigt.

————— Trennlinie—————

Zuerst beantworten wir die Frage im Titel: "Je mehr Speicher du benutzt, desto besser?" Ist diese Aussage korrekt? Ja, aber nicht ganz.

Speicher wird tatsächlich genutzt, aber es ist wichtig zu wissen, dass Speicher nicht nur vom Betriebssystem und der Benutzersoftware genutzt wird; ein weiterer wichtiger Faktor ist das Cachen von Dateien. Fast alle Betriebssysteme verfügen über Dateispeichermechanismen. Dateien, die von Festplatten oder Flash-Speicher gelesen werden, werden im Speicher gespeichert, daher rufen Sie beim nächsten Mal den Dateicache direkt auf, ohne von der Festplatte/Flash zu lesen, um den Prozess zu beschleunigen. Wenn der Speicher unzureichend ist, können Dateicaches schnell zur Zuweisung freigegeben werden, sodass sowohl der schnell wiedergewonnene als auch der freie Speicher vom Kernel als "verfügbarer Speicher" behandelt werden. Aber was man in der System-Backend-Schnittstelle und verschiedenen Programmen (wie DEV Check) sieht, ist kein "freier Speicher", sondern "verfügbarer Speicher", berechnet vom Kernel oder den eigenen Algorithmen der Software.

Wie auf dem Bild zu sehen, befindet sich der Kernel im MemiIn NFOs ≠ "verfügbarer Speicher" "freier Speicher": "Freier Speicher" bezeichnet unzugeordneten Speicher, der tatsächlich von keinem Prozess oder Dateien belegt wird, während "verfügbarer Speicher" Speicher bezeichnet, der zugewiesen werden kann (seine Größe ist eine Schätzung, die hauptsächlich durch den Teil des Dateicaches und des freien Speichers oberhalb des Low-Wasserzeichens und anderer Speicherelemente bestimmt wird, die schnell wiederhergestellt werden können)

6688c8671d820c441abb2b04fb7b9daf0124e934

Datenquelle: /proc/meminfo

Selbst wenn im Systemhintergrund oder in verschiedenen Apps viel Speicher übrig ist, heißt das nicht, dass der Speicher voll ausgelastet wird. Stattdessen haben sie es gestrafftOptimierungFür diejenigen wie mich versuche ich, den eigenen Speicherverbrauch des Systems zu reduzieren, damit mehr Speicher für die Nutzer freigesetzt werden kannAnwendungDies steht nicht im Widerspruch zu der Auffassung, dass "mehr Speicher zu verwenden normal ist; Speicher ist für die Nutzung gedacht."

————— Trennlinie—————

VorwärtsTutorial— Steuerung von Speicherrecycling- und ZRAM-Initiativen:

BesitzROOTDu kannst die unten stehenden Kernel-Parameter ändern, um die Speicherwiederherstellung und ZRAM-Aktivitäten zu steuern.

1. vm.watermark_scale_factor:

Kontrollieren Sie das Intervall zwischen den Speicherwasserniveau-Leitungen mit einem Anpassungsbereich von 1~1000 (entsprechend 0,01 % bis 10 % der gesamten Speichergröße). Ist der Wert zu niedrig, führt das häufig zu direktem RecyclingVerzögerungIst der Wert zu groß, wird Speicher verschwendet. Es wird empfohlen, ihn auf 100 (1 % des gesamten Speichers) zu setzen.

Der Kernel definiert drei Wassermarkenzeilen: min/niedrig/hoch. Wenn freier Speicher (Anmerkung: "freier Speicher" statt "verfügbarer Speicher") unter den niedrigen Wasserwert fällt, weckt der Kernel kswapd auf, um asynchron Speicher zurückzugewinnen (Daten zu ZRAM/SWAP zu tauschen und Dateicaches zurückzugewinnen), bis freier Speicher die hohe Wassermarke überschreitet; Wenn der ungenutzte Speicher unter den Mindestwasserstand fällt, wird eine direkte Wiederherstellung ausgelöst. Der Wert der Min-Wasserstand-Linie wird vom Kernel basierend auf der Gesamtspeichergröße und vm.min_free_kbytes Berechnung berechnet. Es wird nicht empfohlen, diesen Parameter zu ändern und den Standardwert beizubehalten.

2. vm.extra_free_kbytes:

Zusätzlich reservierter Speicher hat einen festgelegten Wert zwischen Min- und Low-Wasserzeichen. Ist der Wert zu niedrig, löst dies häufig eine direkte Rückgewinnung aus und verursacht Verzögerungen; ist es zu groß, verschwendet er Speicher. Es wird empfohlen, ihn auf 1~2 % der Gesamtspeichergröße zu setzen, gemessen in KB.

3. vm.swappiness:

Wenn der Kernel-Speicher unzureichend ist (unterhalb des niedrigen Schwellenwerts), liegt die Vorspannung zwischen der Swap-Seite und ZRAM/SWAP sowie dem wiederhergestellten Dateicache von 0~200 und bei älteren Kerneln von 0~100. Je kleiner der Wert, desto wahrscheinlicher ist es, dass Dateicaches gesammelt werden; je größer der Wert, desto wahrscheinlicher ist es, ZRAM/SWAP zu verwenden.

Die oben genannten Kernelparameter sind verfügbarSceneSie können auch Root-Rechte nutzen, um folgende Befehle auszuführen, um sie zu ändern:

echo 100 >/proc/sys/vm/watermark_scale_factor

echo 131072 >/proc/sys/vm/extra_free_kbytes

echo 100 >/proc/sys/vm/swappiness

033b71c32ad792c6d350fc9a9eba667ccdba5b14

– Wenn du mehr Backend behalten möchtest, kannst du den Wert von extra_free_kbytes und watermark_scale_factor reduzieren und den Wert von Swappiness moderat erhöhen.

– Wenn du eine höhere Glattigkeit möchtest, kannst du die extra_free_kbytes- und watermark_scale_factor-Werte erhöhen und gleichzeitig die Wechselwirkung auf einen ausgewogeneren Wert anpassen.

– Wenn du beides willst, dann besorg dir ein Handy mit größerem Speicher

————— Trennlinie—————

LMK und Backstage-Töten:

Ab Android 9 begann Google, den integrierten LMK-Kernel zugunsten von LMKD aufzugeben, das als Daemon für das System läuft. Daher haben das Killing von Hintergrund-Apps und der Kernel selbst wenig mit der Herangehensweise der jeweiligen Hersteller zu tunKonfigurationLMKD/Führte weitere Mechanismen zur Hintergrundentfernung ein. Bezüglich diesesMIUINeben der Konfiguration von LMKD gibt es Hintergrund-Killing-Code sowohl in "Battery and Performance" als auch in "Framework System Framework". Wenn du den vom Hersteller eingeführten zusätzlichen Hintergrund-Kill-Mechanismus nicht nutzen möchtest und LMKD selbst konfigurieren möchtest, ist das eine gute OptionLSPosedDas Modul "AppRetention" blockiert den Mechanismus zur Eliminierung von Hintergrundenden des Anbieters.

9d81077744f85a683960c178d78a3f3519e465b8

Dann konfigurieren Sie LMKD gemäß der Google-Dokumentation:Sehen Sie sich den Link an

0051b630293a33fa77802e7e31a72ca679f1a637

————— Trennlinie—————

Zusätzlicher Abschnitt — Zusätzliches Wissen über die Pagefile.sys von Windows-Paging-Dateien und die Zuweisung virtueller Speicheradressen:

Windows verwendet eine zweistufige Speicherzuweisung (reserviert + Commit), und während der Commit-Phase ist es unerlässlich, die Abbildung physischer Adressen (physischer Speicher oder Paging-Dateien) sicherzustellen. Paging-Dateien sind Teil der Systemabgabegrenzen und bestimmen direkt die Gesamtmenge des virtuellen Speichers, die das System unterstützen kann (auf der Windows-Task-Manager-Speicherkartenseite gibt es ein Datenelement namens "Committed"; die linke Seite des Schrägstrichs ist die Summe aller angeforderten Programmspeichergrößen, die rechte Seite ist die gesamte virtuelle Speichergröße, mit Werten = physischer Speichergröße + Paging-Dateigröße, wobei die Paging-Datei dynamisch vom System partitioniert wird).

55fbb2ccf8dcaa9b5eacde40d4500ea06489ae2e

Speicherinformationen für den Windows-Task-Manager

Man kann sich einfach vorstellen, dass das System, wenn ein Programm eine bestimmte Speichermenge auf Windows zulässt, die entsprechende physische Adressgröße dem Programm zuweist. Nach der Zuweisung können andere Programme diesen Speicherplatz nicht mehr nutzen, und der vom Programm zugewiesene Speicher ist in der Regel höher als das, was es tatsächlich benötigt. Daher kann es beim Schließen von Paging-Dateien Fälle geben, in denen noch viel physischer Speicher übrig ist, aber beim Öffnen eines neuen Programms trotzdem der Speicher unzureichend ist. Linux hat dieses Problem jedoch nicht. Linux verwendet eine verzögerte Allokationsstrategie, bei der physische Speicheradressen nur dann zugewiesen werden, wenn Prozesse tatsächlich auf den Speicher zugreifen. Was den vom Programm angeforderten Speicher betrifft, so hat Linux "reale" virtuelle Adressen zugewiesen, und die Grenzen der virtuellen Speicheradressen werden durch die "vm.overcommit_memory"-Kernelparameter bestimmt. Bei Android-Handys, die wir verwenden, beträgt das Limit für die virtuelle Speicherzuweisung "overcommit_memory". Der Standardwert ist 1, was virtuelle Speicherbeschränkungen ignoriert und die Zuweisung aller physischen Speichers ermöglicht.

Auf der SWAP-Management-Seite von Scene sieht man, dass alle Prozesse auf meinem Handy bis zu 208 GB Speicher angefordert haben! Aber der physische Speicher war nicht verbraucht, sodass ich trotzdem neue Software öffnen konnte.

54adfd909d6eaf857d40dca9428b9f075a4a65ed

Warum Windows nicht auf denselben oder einen ähnlichen Mechanismus wie Linux umstellt, weiß ich nicht; ich denke nur, dass es daran liegt, dass Windows zu viel historische Belastung trägt (entsprechend der legendären Kompatibilität von WIN).

#HyperOS##HyperOS2##玩机技巧 #

© Urheberrechtshinweis
THE END
Wenn es dir gefällt, zeige bitte deine Unterstützung
Daumen hoch1 Teilen
Kommentar Kampf um das Sofa

Bitte melden Sie sich an und hinterlassen Sie einen Kommentar

    Noch keine Kommentare