Dies ist eine alte Frage, die ich von Zeit zu Zeit gesehen habe. Mein Verständnis davon ist eher begrenzt (nachdem ich vor langer Zeit über die Unterschiede gelesen habe, aber die beteiligten Faktoide sind nie wirklich festgefahren).
So wie ich es verstehe,
Puffer
Werden von Programmen mit aktiven E / A-Operationen verwendet, dh Daten, die darauf warten, auf die Festplatte geschrieben zu werden
Zwischenspeicher
Ist das Ergebnis abgeschlossener E / A-Vorgänge, dh Puffer, die geleert oder Daten von der Festplatte gelesen wurden, um eine Anforderung zu erfüllen.
Kann ich eine klare Erklärung für die Nachwelt bekommen?
linux
memory
virtual-memory
Avery Payne
quelle
quelle
Antworten:
Die "zwischengespeicherte" Gesamtsumme enthält auch einige andere Speicherzuordnungen, z. B. alle tmpfs-Dateisysteme. Um dies zu sehen, versuchen Sie:
und Sie werden sehen, dass der "Cache" -Wert um die 100 MB abfällt, die Sie in das RAM-basierte Dateisystem kopiert haben (vorausgesetzt, dass genügend freier RAM vorhanden ist, werden Sie möglicherweise feststellen, dass ein Teil davon im Swap landet, wenn der Computer bereits überlastet ist der Speichernutzung). Das "sync; echo 3> / proc / sys / vm / drop_caches" vor jedem Aufruf von free sollte alles schreiben, was in allen Schreibpuffern ansteht (die Synchronisierung) und alle zwischengespeicherten / gepufferten Plattenblöcke aus dem Speicher löschen, so dass free nur andere liest Zuweisungen im "zwischengespeicherten" Wert.
Der von virtuellen Maschinen (z. B. unter VMWare ausgeführten) verwendete Arbeitsspeicher wird möglicherweise auch im "zwischengespeicherten" Wert von free mitgezählt, ebenso wie der Arbeitsspeicher, der von derzeit geöffneten Speicherzuordnungsdateien verwendet wird (dies hängt vom verwendeten Hypervisor / der verwendeten Version und ab) möglicherweise auch zwischen Kernelversionen).
Es ist also nicht so einfach wie "Puffer zählen ausstehende Datei- / Netzwerk-Schreibvorgänge und zwischengespeicherte Zählungen kürzlich gelesener / geschriebener Blöcke im RAM, um zukünftige physische Lesevorgänge zu speichern", obwohl diese einfachere Beschreibung für die meisten Zwecke ausreicht.
quelle
Schwierige Frage. Wenn Sie den freien Speicherplatz berechnen, müssen Sie Puffer und Cache addieren. Dies ist, was ich finden konnte
Ein Puffer muss noch auf die Festplatte geschrieben werden. Ein Cache wurde von der Festplatte "gelesen" und zur späteren Verwendung gespeichert.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
quelle
Ich suchte nach einer klareren Beschreibung des Puffers und fand sie in
"Professional Linux® Kernel Architecture 2008"
quelle
Erklärt von RedHat :
Cacheseiten:
Ein Cache ist der Teil des Speichers, in dem Daten transparent gespeichert werden, damit zukünftige Anforderungen für diese Daten schneller bearbeitet werden können. Dieser Speicher wird vom Kernel verwendet, um Plattendaten zwischenzuspeichern und die E / A-Leistung zu verbessern.
Der Linux-Kernel ist so aufgebaut, dass er so viel RAM wie möglich verwendet, um Informationen von Ihren lokalen und entfernten Dateisystemen und Festplatten zwischenzuspeichern. Während die Zeit vergeht, werden verschiedene Lese- und Schreibvorgänge auf dem System ausgeführt. Der Kernel versucht, die Daten für die verschiedenen auf dem System ausgeführten Prozesse oder die Daten der relevanten Prozesse, die in naher Zukunft verwendet werden würden, im Speicher zu halten. Der Cache wird nicht zurückgefordert, wenn der Prozess angehalten / beendet wird. Wenn jedoch die anderen Prozesse mehr Speicher als den verfügbaren Speicher benötigen, führt der Kernel Heuristiken aus, um den Speicher zurückzugewinnen, indem die Cache-Daten gespeichert und dieser Speicher einem neuen Prozess zugewiesen wird.
Wenn irgendeine Art von Datei / Daten angefordert wird, sucht der Kernel nach einer Kopie des Teils der Datei, auf den sich der Benutzer bezieht. Wenn keine solche Kopie vorhanden ist, reserviert er eine neue Seite des Cache-Speichers und füllt sie mit die entsprechenden Inhalte von der Festplatte ausgelesen.
Die Daten, die in einem Cache gespeichert werden, können Werte sein, die zuvor berechnet wurden, oder Duplikate der ursprünglichen Werte, die an anderer Stelle auf der Festplatte gespeichert sind. Wenn einige Daten angefordert werden, wird der Cache zuerst überprüft, um festzustellen, ob er diese Daten enthält. Die Daten können schneller aus dem Cache abgerufen werden als aus dem Quellcache.
Gemeinsam genutzte SysV-Speichersegmente werden ebenfalls als Cache behandelt, obwohl sie keine Daten auf den Datenträgern darstellen. Die Größe der gemeinsam genutzten Speichersegmente kann mit dem Befehl ipcs -m und der Spalte bytes überprüft werden.
Puffer:
Puffer sind die Plattenblockdarstellung der Daten, die unter den Seiten-Caches gespeichert sind. Buffers enthält die Metadaten der Dateien / Daten, die sich im Seiten-Cache befinden. Beispiel: Bei einer Anforderung von Daten, die im Seiten-Cache vorhanden sind, überprüft der Kern zunächst die Daten in den Puffern, die die Metadaten enthalten, die auf die tatsächlichen Dateien / Daten in den Seiten-Caches verweisen. Sobald aus den Metadaten die tatsächliche Blockadresse der Datei bekannt ist, wird diese vom Kernel zur Verarbeitung abgerufen.
quelle
Puffer / Cache freigeben
Warnung Dies erklärt eine starke Methode, die auf dem Produktionsserver nicht empfohlen wird! Du bist also gewarnt, beschuldige mich nicht, wenn etwas schief geht.
Zum besseren Verständnis könnten Sie Ihr System zwingen , so viel Speicher wie möglich zu delegieren,
Präambelcache
um die zwischengespeicherte Datei zu löschen:Bevor Sie den Test durchführen, können Sie ein anderes Fenster öffnen und einen Treffer erzielen:
zum Verfolgen der Swap-Entwicklung in Echtzeit.
Hinweis: Sie müssen so viele Festplatten im aktuellen Verzeichnis entsorgen, wie Sie über mem + swap verfügen
Die DemoNota, der Host, auf dem ich das gemacht habe, wird stark genutzt. Dies ist bei einer sehr leisen Maschine von größerer Bedeutung.
quelle