Warum führt teilweise voller RAM zu Verzögerungen?

53

Warum ist der Arbeitsspeicher teilweise voll (sagen wir mal 80%), wodurch das Gerät stark verzögert wird, obwohl etwas Platz zum Speichern weiterer Daten zur Verfügung steht? Was ich erwarte ist, dass es bis zu 99% gut funktioniert.

Ich bemerke, dass auf dem Handy mehr als auf dem PC, da es einen kleineren Arbeitsspeicher hat, z. B. mein Handy 2 GB RAM hat; Wenn ich weniger als 1 GB RAM frei habe, bleibt es viel zurück! Warum passiert das, obwohl noch ~ 1 GB zu verwenden sind?

Mohammed Noureldin
quelle
28
Ich habe vermutet, dass Sie davon ausgehen, dass der verfügbare Arbeitsspeicher nicht verwendet wird. Sie sehen also 20% des verfügbaren Arbeitsspeichers und glauben, dass nur 80% des Arbeitsspeichers verwendet werden. Dies ist falsch, RAM kann sowohl verwendet werden als auch verfügbar sein. (Zum Beispiel hat der Computer, den ich verwende, jetzt 32 GB RAM und 21,1 GB sind verfügbar, aber nur 1,8 GB sind frei.)
David Schwartz
2
Du meinst, meine Festplatte hat freien Speicherplatz mit meinem RAM? mürrisch nicht.
Mohammed Noureldin
3
Sie können natürlich ersetzt werden. Dies wird sich jedoch sehr negativ auf die Leistung auswirken - genau wie Sie sehen. Wenn der Arbeitsspeicher den Arbeitsspeicher überschreitet, ist die Leistung schrecklich, unabhängig davon, wie viel Arbeitsspeicher verfügbar ist.
David Schwartz
3
Was lässt Sie denken, dass es der RAM-Prozentsatz ist, der das Gerät verzögert?
Enkryptor
4
@ MohammedNoureldin Ich denke, es muss einen Grund geben, warum Ihr RAM ausgelastet ist (eine Reihe von Prozessen arbeiten und tun etwas). Dies könnte der gleiche Grund sein, warum das Gerät zurückliegt. Das Laden des Arbeitsspeichers ist möglicherweise nur ein Symptom und nicht der eigentliche Grund.
Enkryptor

Antworten:

71

Es ist viel damit zu tun, aber ich werde versuchen, es so einfach wie möglich und auf eine Weise zu erklären, die auf nahezu jedes Betriebssystem anwendbar ist.

Hier gibt es zwei Grundprinzipien:

  1. Die Gesamtsumme von allem, was sich im RAM befinden muss und was davon profitieren würde, ist fast immer größer als die Größe des RAM. Zu den Dingen, die davon profitieren würden, im RAM zu sein, gehören Prozessarbeitssätze und die Standby-Liste. Letzteres enthält Daten und Code, die einmal aktiv verwendet wurden, seitdem jedoch inaktiv sind. Ein Großteil davon wird wieder verwendet, ein Teil davon ziemlich bald. Daher ist es vorteilhaft, dies im RAM zu belassen. Dieser Speicher fungiert als eine Art Cache, ist jedoch nicht unbedingt erforderlich, gehört also zur Kategorie des verfügbaren Speichers. Wie der freie Speicher kann er schnell jedem Programm zugewiesen werden, das ihn benötigt. Im Interesse der Leistung sollte der Standby-Speicher groß sein.

  2. Die Verwendungshäufigkeit von Speicherblöcken ist alles andere als zufällig, kann jedoch mit beträchtlicher Genauigkeit vorhergesagt werden. Der Speicher ist in Blöcke unterteilt, häufig 4 KB. Auf einige Blöcke wird mehrmals pro Sekunde zugegriffen, während auf andere für viele Minuten, Stunden, Tage oder sogar Wochen nicht zugegriffen wurde, wenn das System lange genug in Betrieb war. Zwischen diesen beiden Extremen besteht ein breiter Anwendungsbereich. Der Speichermanager weiß, auf welche Blöcke in letzter Zeit zugegriffen wurde und auf welche nicht. Es ist eine vernünftige Annahme, dass ein Speicherblock, auf den kürzlich zugegriffen wurde, bald wieder benötigt wird. Speicher, auf den in letzter Zeit nicht zugegriffen wurde, wird wahrscheinlich in Kürze nicht mehr benötigt. Langjährige Erfahrung hat gezeigt, dass dies ein gültiges Prinzip ist.

Der Speichermanager nutzt das zweite Prinzip, um die unerwünschten Folgen des ersten Prinzips weitgehend zu mildern. Zu diesem Zweck wird ein Balanceakt ausgeführt, bei dem die Daten, auf die kürzlich zugegriffen wurde, im RAM gespeichert werden, während die selten verwendeten Daten in den Originaldateien oder in der Auslagerungsdatei beibehalten werden.

Wenn genügend RAM vorhanden ist, ist dieser Spagat einfach. Ein Großteil der nicht so kürzlich verwendeten Daten kann im RAM aufbewahrt werden. Das ist eine gute Situation.

Die Dinge werden komplizierter, wenn die Arbeitsbelastung zunimmt. Die Gesamtsumme der verwendeten Daten und des verwendeten Codes ist größer, die RAM-Größe bleibt jedoch gleich. Dies bedeutet, dass eine kleinere Teilmenge davon im RAM aufbewahrt werden kann. Einige der zuletzt verwendeten Daten befinden sich nicht mehr im RAM, sondern müssen auf der Festplatte belassen werden. Der Speichermanager ist sehr bemüht, ein ausgewogenes Verhältnis zwischen aktivem Speicher und verfügbarem Speicher aufrechtzuerhalten. Mit zunehmender Arbeitsbelastung muss der Speichermanager jedoch den laufenden Prozessen mehr verfügbaren Speicher zur Verfügung stellen. Dies ist keine gute Situation, aber der Speichermanager hat keine andere Wahl.

Das Problem ist, dass das Verschieben von Daten in und aus dem RAM während der Ausführung von Programmen einige Zeit in Anspruch nimmt. Wenn genügend RAM vorhanden ist, kommt es nicht sehr oft vor und wird nicht einmal bemerkt. Wenn die RAM-Auslastung jedoch einen hohen Wert erreicht, kommt dies viel häufiger vor. Die Situation kann so schlimm werden, dass mehr Zeit für das Verschieben von Daten in den und aus dem RAM aufgewendet wird, als für deren tatsächliche Verwendung. Dies ist ein Problem, das der Speichermanager nur sehr schwer zu vermeiden versucht, bei einer hohen Arbeitsbelastung jedoch häufig nicht zu vermeiden ist.

Der Memory Manager ist auf Ihrer Seite und bemüht sich stets, auch unter widrigen Bedingungen eine optimale Leistung zu erzielen. Aber wenn die Arbeitslast groß ist und der verfügbare Speicher knapp wird, muss er schlechte Dinge tun, um weiterhin zu funktionieren. Das ist in der Tat das Wichtigste. Die Priorität ist es, zuerst die Dinge am Laufen zu halten und dann so schnell wie möglich zu machen.

LMiller7
quelle
1
Ihre Antwort hat mir sehr geholfen, danke! Das memory mangergehört zu meinem OSRecht? Wenn ich mich also mit Zeigern und diesen Dingen auf sehr niedriger Ebene befasse, wird es dann immer noch in der Lage sein, zu pagen?
Mohammed Noureldin
7
Der Speichermanager ist Teil des Betriebssystems. Paging ist eine Grundfunktion des Speichermanagers und für den Betrieb genauso wichtig wie die Atmung für Sie und mich. Es kann nicht gestoppt werden.
LMiller7
2
@MohammedNoureldin: Wenn Sie User-Space-Anwendungen schreiben (deren Speicheransichten von denen des Kernels und anderer Prozesse isoliert sind), können Sie nicht direkt auf den physischen Speicher zugreifen . Alles, worauf Sie zugreifen können, ist eine Speicheransicht, die vom - wie Sie es erraten haben - Speichermanager mit all seinen Funktionen (wahrscheinlich) einschließlich Paging verwaltet wird. Speicherzeiger beziehen sich nur auf Punkte in den Adressräumen einer Speicheransicht. Sie sind ein Sprachkonzept, das sowohl im Kernel- als auch im User-Space-Code verwendet wird. Dies bedeutet jedoch nicht, dass die beiden Speicheransichten identisch sind. Verwechseln Sie die Prozessspeicherverwaltung nicht mit Kernel MM!
David Foerster
6
Es ist "offensichtlich" oder "gut bekannt", sollte aber dennoch in dieser Antwort hinzugefügt werden: Speicher (RAM) ist in der Größenordnung von 1000x schneller als eine Festplatte (na ja, abhängig von vielen Dingen, z. B. ssd / ide) / sata, etc). Das Betriebssystem führt Code vom RAM (+ Cache) aus, nicht von der Festplatte. Wenn der Arbeitsspeicher knapp wird und das Betriebssystem Teile des ("unbenutzten") Codes vom Arbeitsspeicher auf die Festplatte "tauschen" muss, um RAM freizugeben, um etwas anderes auszuführen, dauert dies "viel" (das Tauschen) und Wenn dies häufig vorkommt (z. B .: Sie haben viele Programme, für die jeweils ein Swap erforderlich ist, damit der Code in den Speicher geladen wird), wird dies die Arbeit erheblich verlangsamen.
Olivier Dulac
3
Wir verwenden den Begriff "Swap" normalerweise nicht, um den Code in den Speicher zu laden. Das wird normalerweise als "Fehler" bezeichnet. Normalerweise wird der Begriff "Auslagerung" nur für Informationen verwendet, die auf die Festplatte geschrieben werden müssen, bevor sie aus dem RAM ausgeworfen werden können.
David Schwartz
30

Alle modernen Betriebssysteme verwenden ansonsten ungenutzten Speicher zum Zwischenspeichern von Daten, sodass auf diese über den schnellen Arbeitsspeicher zugegriffen werden kann, anstatt dass der Speicher langsamer wird. In der Regel wird dies als freier Speicher gemeldet, da Anwendungen den Cache löschen und bei Bedarf verwenden können, er jedoch weiterhin verwendet wird. Je weniger davon vorhanden ist, desto weniger Daten können zwischengespeichert werden und desto langsamer wird der Computer.

Mike Scott
quelle
11
Tatsächlich müssen Anwendungen den Cache nicht "leeren". Sie fordern nur RAM vom Betriebssystem an. Das Betriebssystem löscht einen Teil des Dateicaches und gibt den jetzt auf Null gesetzten Arbeitsspeicher an die Anwendung weiter, da es über keinen nicht verwendeten Arbeitsspeicher verfügt. Die Anwendung kann nicht feststellen, woher der RAM stammt.
MSalters
5
@MSalters Ja, ich stimme zu, die Anwendung fragt nach RAM und das Betriebssystem löscht den Cache, falls erforderlich. Ich habe versucht, es einfach zu halten.
Mike Scott
Das war ein bisschen so klar, aber ich bin mir ein bisschen mehr der Details bewusst, daher habe ich das Gefühl, dass etwas fehlt und ich brauche mehr Details Informationen darin.
Mohammed Noureldin
4

Diese Antwort wurde größtenteils umgeschrieben, um die Struktur zu reorganisieren und die Nachricht klarer zu machen. Ich habe es auch als Community-Wiki-Antwort geöffnet. Fühlen Sie sich frei zu bearbeiten.

Paging ist ein Speicherverwaltungsschema, mit dem Speicherblöcken mit fester Größe Prozesse zugewiesen werden. Wenn die Speichernutzung auf ein hohes Niveau ansteigt (dh 80% Kapazität), beginnt sich das Paging vom RAM in den vRAM (virtueller RAM) auszudehnen.

vRAM befindet sich im Systemspeicher, normalerweise auf einer Festplatte oder an einem anderen größeren Speicherort.

Prozessen wird ein Teil Ihrer Festplatte als Arbeitsspeicher zugewiesen, und ihr Abschnitt wird als RAM behandelt. Dies ist ein ganz normaler Vorgang. Wenn jedoch die Zeit für die Datenübertragung zum und vom vRAM zunimmt, sinkt die Systemleistung.

Während auf den dedizierten RAM direkt über die Hauptplatine von der CPU aus zugegriffen wird, wodurch eine schnelle Verbindung hergestellt wird, muss der virtuelle RAM die Verkabelung zwischen der Platine und dem Speicherort des vRAM überbrücken.

Dies führt jedoch nur zu geringen Leistungseinbußen. Wenn die Rate, mit der ein Paging zum vRAM stattfindet, drastisch ansteigt (wenn sich der dedizierte RAM der Kapazität nähert), findet ein Thrashing statt.

Thrashing ist das schnelle und schnelle Übertragen von Speicherseiten in Ihren virtuellen Speicher. Dies beeinträchtigt die Leistung erheblich, da mehr Zeit für das Abrufen und Adressieren von Daten aufgewendet werden muss.

Nehmen wir an, Sie möchten eine 30-stellige Zahl aufschreiben. Sie könnten entweder mit Ihrem Notizblock neben Ihrem Bildschirm sitzen und ihn schreiben (mit dem dedizierten Speicher), oder Sie erinnern sich an Stücke von 5, rennen in den nächsten Raum und schreiben ihn dort auf Ihren Notizblock (mit virtuellem Speicher). Beide erledigen den Job, aber was geht schneller?

Hier erfahren Sie mehr über Thashing !

Ein großes Dankeschön an die Mitwirkenden dieser Antwort, einschließlich Daniel B. , Xenoid und Jon Bentley .

Will
quelle
3
Es ist nicht so, als wäre das Schlagen beabsichtigt. Es ist nur ein Nebeneffekt von Paging und Konkurrenz um das physische Gedächtnis. Außerdem wird der virtuelle Speicher nicht durch Verschieben von Seiten auf die Festplatte "erstellt".
Daniel B
Thrashing ist zwar ein Nebenprodukt, aber in Zeiten, in denen Prozesse überlaufen, ist es äußerst nützlich, um einen Stillstand zu verhindern. Und ja, virtueller Speicher wird eher belegt als erstellt. Ich werde das in bearbeiten.
Wird
8
Nein, Sie verwechseln Müll und Paging. Müll ist nur Paging, das pathologisch wird.
Xenoid
@xenoid Paging ist ein Speicherverwaltungsschema. Es ist so, als würde ich sagen, dass ich einen Hirsch mit meinem Auto und dem Straßennetz verwechsle. Thrashing ist der Prozess, der diesen Leistungseinbruch verursacht. Ich stimme Ihnen jedoch zu, dass dies auf das Paging-System zurückzuführen ist.
Wird
1
Kommentare, die in die Wiki-Antwort eingefügt wurden, können jederzeit bearbeitet werden.
Wird
1

Dies liegt daran, dass das Betriebssystem viel paging (Laden von Teilen aktiver Programme) und swappen (Verschieben von Daten im RAM auf HD und umgekehrt) muss, um Ihre Software am Laufen zu halten. Wenn neue Seiten geladen werden müssen, die möglicherweise mehr Speicherplatz als die verfügbaren 20% benötigen, muss das Betriebssystem vorhandene Seiten im RAM auslagern, von denen es annimmt, dass sie bald weniger genutzt werden. Besonders beim Start anderer Programme. Das Hin- und Herwechseln von Seiten nimmt viel Zeit in Anspruch und verlangsamt die Leistung Ihres PCs drastisch, da Sie jetzt mit der Geschwindigkeit der Festplatte und nicht des Arbeitsspeichers arbeiten.

Es hilft ein wenig, auf einer Festplatte eine spezielle Partition auf Ihrer Festplatte zu erstellen und diese als dedizierten "Auslagerungsspeicher" zuzuweisen (nicht für "echte" Dateien verwenden), damit das Auslagern weniger von der Fragmentierung der Festplatte betroffen ist.

Gilles Lesire
quelle
ROM ist nur eine Nomenklatur für die Festplatte, wenn es um Caching, Paging usw. geht. Alles, was nicht der Arbeitsspeicher ist. Und ROM ist normalerweise langsamer als RAM, fast immer schon. Alte Computer haben beim Booten die Daten vom ROM in den RAM kopiert (ROM Shadowing), da dies schneller funktionierte.
Gilles Lesire
1
Sicher, aber ROM und RAM werden auch als nichtflüchtiger oder flüchtiger Speicher verwendet? BTW ROM ist normalerweise langsamer, ROM wird beim Booten in den RAM (ROM Shadowing) kopiert, um die Leistung zu verbessern. Aber sicher, ich ändere die eine Referenz, um dein Nitpicking zu korrigieren. ;)
Gilles Lesire
1

Denken Sie daran, dass Festplatten um eine Größenordnung langsamer sind als RAM, und RAM selbst ist (in der Gesamtarchitektur) zunächst gar nicht so schnell. In der Reihenfolge der Zugriffsgeschwindigkeit (wobei jeder Strompfad eine Größenordnung langsamer ist als der oben angegebene) haben Sie

  1. Prozessorregister - In der Praxis sind die Register innerhalb eines Prozessorzyklus verfügbar . Angesichts der Tatsache, dass Prozessoren Milliarden von Zyklen pro Sekunde ausführen (3 GHz = 3 Milliarden Zyklen pro Sekunde), ist dies verrückt schnell.
  2. Prozessor-Cache - Abhängig vom Level, aber diese sind immer noch ziemlich schnell (Verfügbarkeit von 3-5 Zyklen für L1-Cache).
  3. Direktzugriffsspeicher (RAM) - Der Direktzugriffsspeicher bedeutet, dass Sie beim Zugriff nicht wissen, in welchem ​​Zustand er sich befindet. Stellen Sie sich einen Paketzusteller vor, der anhalten, das Paket abholen, zur Tür gehen und an der Türklingel klingeln und auf eine Antwort warten muss. Vielleicht warten Sie gar nicht, oder vielleicht warten Sie ein oder zwei Minuten, bis Mrs. Smith zur Tür im hinteren Teil des Hauses gelangt ist. In der Praxis sprechen wir von 14-27 Zyklen (je nachdem, in welchem ​​Zustand sich der RAM befand, als wir darauf zugegriffen haben).
  4. Festplattenlaufwerk - Hier findet gerade ein physischer Prozess statt, und während dieser so schnell wie möglich abläuft, warten Sie darauf, dass sich die Köpfe und die Spuren unter diesen Köpfen bewegen. In der Praxis kann eine Festplatte mit 7.200 U / min eine Umdrehung in etwa 4 ms oder in etwa 750.000 Zyklen für einen 3-GHz-Prozessor ausführen . Das geht langsam.

Der Virtual Memory Manager ist ein Spieler. Es wird gewettet, dass Sie nicht immer den gesamten Arbeitsspeicher benötigen. Daher werden Vermutungen angestellt und die Würfel gewürfelt, die Ihr Dokumentprogramm (das in den letzten 10 Minuten im Hintergrund war, während Sie dies gelesen haben) nicht hat wirklich wichtig und es schiebt es auf die Festplatte.

Aber dann klickt man wieder auf das Dokument! Jetzt muss der VMM alle diese Daten von der Festplatte zurückladen. Schlimmer noch, wenn Sie wenig RAM haben, müssen andere Daten (mehr Glücksspiele) auf die Festplatte übertragen werden, um nutzbaren Speicherplatz freizugeben. Linux lebt hier gerne am Rande. Es füllt den größten Teil des Arbeitsspeichers mit häufig verwendeten Daten (ideal für Server mit wenigen Prozessen).

Machavity
quelle
1
Ja, der Speichermanager ist ein Spieler, aber das könnte sehr leicht missverstanden werden. Wenn der Speicherzugriff wirklich zufällig wäre, wäre der Speichermanager so oft falsch wie richtig und das gesamte System würde ausfallen. Programme weisen jedoch tendenziell eine starke Referenzlokalität auf. Das heißt, die meisten Speicherzugriffe sind in der Regel auf einen relativ kleinen Speicherbereich beschränkt. Sie bewegen sich zwar, aber langsam genug, damit das System funktioniert. Die Chancen sind in der Speichermanager-Gunst gestapelt und Fehler werden schnell korrigiert. Dies hat sich in jahrzehntelanger Erfahrung
bewährt
Die Angabe "Zufällig im Arbeitsspeicher" bezieht sich auf die Tatsache, dass Sie zufällig auf einen beliebigen Arbeitsspeicher zugreifen können. (Im Gegensatz dazu müssen Sie warten, bis die Daten unter den Leseköpfen wie auf einer Festplatte oder Bändern vorbeigekommen sind, und dann nacheinander auf die Daten zugreifen.)
Phil
0

Die krachenden Antworten haben es ziemlich genau getroffen. Wenn Sie dazu in der Lage sind, können Sie minimieren, wie schnell dies geschieht, indem Sie die Auslagerungsgeschwindigkeit verringern (wie viel RAM das System verwenden kann, bevor Objekte in den Auslagerungsbereich verschoben werden). Ich mag es, Systeme so einzustellen, dass sie nicht ausgetauscht werden, bis der RAM-Wert für Serveranwendungen 99% erreicht, da der Standardwert effektiv bedeutet, dass ich nur 80% des RAM-Werts für die Nutzung des Cachings verwenden muss, ohne dafür bestraft zu werden das System in Swap Space.

Codykochmann
quelle