Wie ordnet FreeBSD Speicher zu?

9

Ich bin mir bewusst , dass dies vereinfacht / generali Erklärung, aber top(1)Speicher Dienstprogramm teilt in FreeBSD in sechs pools- Active, Inactive, Wired, Cache, Buffersund Free. Beispiel aus der top(1)Ausgabe:

Mem: 130M Active, 42M Inact, 51M Wired, 14M Cache, 34M Buf, 648K Free
Swap: 512M Total, 512M Free

Activewird von laufenden Prozessen verwendet und Wiredwird hauptsächlich für den Kernel verwendet. Inactiveist Speicher von geschlossenen Prozessen, der noch zwischengespeichert wird, falls er wiederverwendet werden muss, CacheDaten zwischengespeichert sind, BuffersFestplattenpuffer sind (ich denke, er ähnelt der cachedLinux- free(1)Ausgabe (?)) und Freevollständig unbenutzter Speicher ist. Ich bin richtig , dass FreeBSD - Kernel automatisch zuordnet Raum aus Inactive, Cacheund BuffersPools Activeoder Wiredbei Bedarf?

Martin
quelle

Antworten:

13

Um es kurz zu machen, wird aktiver und verkabelter Speicher verwendet, der nicht gegen freien Speicher ausgetauscht werden sollte oder kann. Während inaktiv richtig ausgelagert werden kann, ist aber nach wie vor im Besitz von einem Prozess (nicht freigegeben) oder dem Kernel, so dass diese nicht stark Speicher verwendet werden, aber immer noch verwendet.

Neu ist Wäsche , eine Liste schmutziger Speicherseiten, die möglicherweise auf das Auslagerungsgerät geschrieben werden müssen. Entweder, wenn schmutziger Speicher ausgetauscht werden musste oder nicht, wird er wieder in die inaktive Warteschlange aufgenommen.

Der kabelgebundene Speicher sollte aus Sicherheitsgründen (im Fall des Kernels) oder zur Optimierung des Userland-Prozesses (wie ZFS) nicht ausgetauscht werden. Der kabelgebundene Speicher wird für Caches von Dateisystemen verwendet, die möglicherweise vom Kernel freigegeben werden. Zumindest für ZFS kann dies als größtenteils freier Speicher angesehen werden.

Freier Speicher ist definitiv frei.

Cached (jetzt veraltet, denke ich) ist bereit, freigegeben zu werden, da es bereits ausgetauscht wurde und nur für eine mögliche Neuzuweisung vorhanden ist.

Der Puffer wird von den meisten Dateisystemen (UFS, FAT, ...) als Cache verwendet und gibt die von den Dateisystemen verwendete Speichermenge an. Es kann aktiv, inaktiv oder verkabelt sein.

ARC (Adaptive Replacement Cache) ist der von ZFS verwendete Cache und der Speicher kann bei Bedarf freigegeben werden.

Aus dem FreeBSD Wiki on Memory

Speicherklassen

Aktiv

  • Enthält Seiten "aktiv" (kürzlich), auf die Userland verweist
  • Enthält eine Mischung aus sauberen und schmutzigen Seiten
  • Seiten werden regelmäßig vom Seitendämon gescannt (jede Seite wird alle vm.pageout_update_period Sekunden einmal besucht).
  • Scans prüfen, ob auf die Seite seit dem letzten Scan verwiesen wurde
  • Wenn genügend Scans abgeschlossen sind, ohne dass eine Referenz angezeigt wird, wird die Seite in die inaktive Warteschlange verschoben
  • Implementiert Pseudo-LRU

Inaktiv

  • Enthält Seiten, die außerhalb der aktiven Warteschlange gealtert sind
  • Enthält Seiten, die aus dem Puffercache entfernt wurden
  • Enthält eine Mischung aus sauberen und schmutzigen Seiten
  • Seiten werden vom Seitendämon (beginnend am Kopf der Warteschlange) gescannt, wenn ein Speichermangel vorliegt:
    • Seiten, auf die verwiesen wurde, werden zurück in die aktive Warteschlange oder in das Ende der inaktiven Warteschlange verschoben
    • Verschmutzte Seiten werden an den Ende der Wäschewarteschlange verschoben
    • Nicht referenzierte, saubere Seiten können sofort freigegeben und wiederverwendet werden
  • Implementiert LRU der zweiten Chance

Wäsche

  • Warteschlange zum Verwalten schmutziger inaktiver Seiten, die bereinigt ("gewaschen") werden müssen, bevor sie wiederverwendet werden können
  • Wird von einem separaten Thread, dem Wäschethread, anstelle des Seitendämons verwaltet
  • Der Wäschethread wäscht eine kleine Anzahl von Seiten, um die inaktiven und Wäschewarteschlangen auszugleichen
  • Die Häufigkeit der Wäsche hängt ab von:
    • Wie viele saubere Seiten gibt der Seitendämon frei? Mehr Freiheiten tragen zu einer höheren Waschhäufigkeit bei
    • Die Größe der Wäschewarteschlange im Verhältnis zur inaktiven Warteschlange. Wenn die Wäschewarteschlange wächst, werden wir häufiger waschen
  • Die Seiten werden vom Wäschethread gescannt (beginnend am Kopf der Warteschlange):
    • Seiten, auf die verwiesen wurde, werden zurück in die aktive Warteschlange oder in den Endbereich der Wäschewarteschlange verschoben
    • Schmutzige Seiten werden gewaschen und dann nahe an den Kopf der inaktiven Warteschlange verschoben

Kostenlos

  • Speicher, der vom Rest des Systems verwendet werden kann.

Verdrahtet

  • Nicht auslagerbarer Speicher: Kann erst freigegeben werden, wenn er vom Eigentümer ausdrücklich freigegeben wurde
  • Der Userland-Speicher kann mit mlock (2) verkabelt werden (vorbehaltlich der System- und Benutzerbeschränkungen).
  • Kernel-Speicherzuweiser geben verdrahteten Speicher zurück
  • Der Inhalt des ARC und des Puffercaches ist verkabelt
  • Ein Teil des Speichers ist permanent verkabelt und wird nie freigegeben (z. B. die Kerneldatei selbst).

Aus Das Design und die Implementierung des FreeBSD-Betriebssystems Kapitel 6.12 Seitenaustausch (Nicht mehr vollständig korrekt, aber hier als Referenz für die alte Frage):

Der Kernel unterteilt den Hauptspeicher in fünf Listen:

  1. Kabelgebunden : Kabelgebundene Seiten sind im Speicher gesperrt und können nicht ausgelagert werden. Normalerweise werden diese Seiten vom Kernel oder vom Pager für den physischen Speicher verwendet oder sie wurden mit mlock gesperrt . Darüber hinaus sind alle Seiten, die zum Halten der Thread-Stapel geladener (dh nicht ausgelagerter) Prozesse verwendet werden, ebenfalls verdrahtet.
  2. Aktiv : Aktive Seiten werden von einer oder mehreren Regionen des virtuellen Speichers verwendet. Obwohl der Kernel sie ausblenden kann, führt dies wahrscheinlich dazu, dass ein aktiver Prozess sie erneut zurückwirft.
  3. Inaktiv : Inaktive Seiten sind möglicherweise verschmutzt und enthalten noch bekannte Inhalte, sind jedoch normalerweise nicht Teil einer aktiven Region. Wenn der Inhalt der Seite verschmutzt ist, muss der Inhalt in den Hintergrundspeicher geschrieben werden, bevor die Seite wiederverwendet werden kann. Sobald die Seite bereinigt wurde, wird sie in die Cache-Liste verschoben. Wenn das System nicht genügend Arbeitsspeicher hat, versucht der Pageout-Daemon möglicherweise, aktive Seiten in die inaktive Liste zu verschieben, in der Hoffnung, Seiten zu finden, die nicht wirklich verwendet werden. Die Auswahlkriterien, die vom Pageout-Daemon verwendet werden, um Seiten auszuwählen, die von der aktiven Liste in die inaktive Liste verschoben werden sollen, werden später in diesem Abschnitt beschrieben. Wenn der freie Speicher und die Cache-Listen auf niedrig fallen, durchläuft der Pageout-Daemon die inaktive Liste, um mehr Cache und freie Seiten zu erstellen.
  4. Cache : Cache-Seiten enthalten noch bekannte Inhalte, die jedoch nicht Teil einer Zuordnung sind. Wenn sie in der aktiven Region fehlerhaft sind, sind sie nicht Teil einer Zuordnung. Wenn sie in einem aktiven Bereich fehlerhaft sind, werden sie von der Cache-Liste in die aktive Liste verschoben. Wenn sie zum Lesen oder Schreiben verwendet werden, werden sie zuerst aus der Cache-Liste in den Puffer-Cache verschoben und schließlich in die inaktive Liste freigegeben. Ein mlock -Systemaufruf kann eine Seite aus der Cache-Liste zurückfordern und verkabeln . Seiten in der Cache-Liste ähneln inaktiven Seiten, mit der Ausnahme, dass sie nicht verschmutzt sind, entweder weil sie seit dem Auslagern nicht geändert wurden oder weil sie in ihren Hintergrundspeicher geschrieben wurden. Sie können für eine neue Verwendung beansprucht werden, wenn eine Seite benötigt wird.
  5. Kostenlos : Kostenlose Seiten haben keinen nützlichen Inhalt und werden zur Erfüllung neuer Seitenfehleranforderungen verwendet.

Um Ihre ursprüngliche Frage zu beantworten

Stimmt es, dass der FreeBSD-Kernel bei Bedarf automatisch Speicherplatz aus Inactive-, Cache- und Pufferpools Active oder Wired zuweist?

Aktive Seiten können inaktiv werden, wenn sie längere Zeit nicht verwendet wurden. Wenn der Kernel eine inaktive Seite austauscht, wird diese Seite in die Cache- Liste verschoben . Seiten in der Cache- Liste sind nicht Teil der virtuellen Zuordnung eines Prozesses, können jedoch problemlos als aktiv oder verkabelt zurückgefordert werden . Oder wenn für I / O als benötigtes Puffer - Cache.

Der kabelgebundene Speicher kann nicht aus dem Hauptspeicher ausgelagert werden. Wenn es durch einen Prozess verdrahtet ist, muss es mit dem munlockAufruf nicht verkabelt werden , um wieder aktiver Speicher zu werden.

Aktiver , inaktiver und verkabelter Speicher kann vom Prozess oder Kernel freigegeben und zur freien Liste hinzugefügt werden .

Raphael Ahrens
quelle
Ich habe gerade einen Fehler in meiner ersten Frage bemerkt. Ich fragte : „Bin ich richtig , dass FreeBSD - Kernel automatisch zuordnet Raum aus Inactive, Wired, Cacheund BuffersPools Activeoder Wiredbei Bedarf?“ während ich wollte fragen : „Bin ich richtig , dass FreeBSD - Kernel automatisch zuordnet Raum aus Inactive, Cacheund BuffersPools Activeoder Wiredbei Bedarf?“. Ich habe meine erste Frage aktualisiert. Also kurz gesagt, ist gebrauchte Speicher in FreeBSD Wired+ Activeund wenn diese beiden Pools zusätzliche Menge an Speicher benötigen dann wird diese genommen aus Inacative, Cached, Buffersoder FreePools?
Martin
@ Martin ja das klingt ungefähr richtig. Ich habe meine Antwort auf Ihre Frage aktualisiert.
Raphael Ahrens