it-swarm.com.de

Was ist der Unterschied zwischen Puffer und Cache-Speicher in Linux?

Mir ist nicht klar, was der Unterschied zwischen den beiden Linux-Speicherkonzepten ist: buffer und cache. Ich habe diesen Beitrag durchgelesen und es scheint mir, dass der Unterschied zwischen ihnen die Auslaufrichtlinie ist:

  1. die Pufferrichtlinie ist First-In-First-Out
  2. die Cache-Richtlinie lautet "Zuletzt verwendet".

Habe ich recht?

Ich betrachte insbesondere die beiden Befehle: free und vmstat

[email protected]:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
5  0      0    173     67    912    0    0    19    59   75 1087 24  4 71  1
[email protected]:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          2007       1834        172          0         67        914
-/+ buffers/cache:        853       1153
Swap:         2859          0       2859
148
James.Xu

"Puffer" stellen dar, wie viel von RAM für das Zwischenspeichern von Plattenblöcken reserviert ist. "Cached" ist ähnlich wie "Buffers", nur dass diesmal Seiten aus dem Lesen von Dateien zwischengespeichert werden.

zitat aus: 

61
Seth Robertson

Puffer sind einem bestimmten Blockgerät zugeordnet und umfassen das Zwischenspeichern von Metadaten des Dateisystems sowie Nachverfolgung von Flugseiten. Der Cache enthält nur geparkte Dateidaten. Das heißt, die Puffer erinnern sich daran, was In Verzeichnissen, welche Dateiberechtigungen sind, und verfolgen, was Speicher wird für ein bestimmtes Blockgerät geschrieben oder gelesen. Der Cache enthält nur den Inhalt der Dateien.

Zitatlink

153
xoy

Zitierte Antwort (als Referenz):

Kurze Antwort: Im Cache ist die Größe des Seitencaches angegeben. Puffer ist die Größe von In-Memory-Block-E/A-Puffern. Zwischengespeicherte Sachen; Puffer sind weitgehend irrelevant.

Lange Antwort: Zwischengespeichert ist die Größe des Linux-Seitencaches, abzüglich des Arbeitsspeichers im Swapcache, der durch SwapCached dargestellt wird (die gesamte Seitencachegröße ist daher im Cache gespeichert). Linux führt alle Datei-E/A über den Seiten-Cache aus. Schreibvorgänge werden so implementiert, dass die entsprechenden Seiten im Seiten-Cache einfach als verschmutzt markiert werden. Die Flusher-Threads schreiben dann unregelmäßige Seiten periodisch auf die Festplatte zurück. Lesevorgänge werden implementiert, indem die Daten aus dem Seitencache zurückgegeben werden. Wenn sich die Daten noch nicht im Cache befinden, werden sie zuerst aufgefüllt. Bei einem modernen Linux-System kann der Cache-Speicher problemlos mehrere Gigabyte betragen. Es wird nur als Reaktion auf Speicherdruck schrumpfen. Das System löscht den Seiten-Cache und gibt Daten auf die Festplatte aus, um bei Bedarf mehr Speicherplatz zur Verfügung zu stellen.

Puffer sind speicherinterne Block-E/A-Puffer. Sie sind relativ kurzlebig. Vor der Linux-Kernel-Version 2.4 verfügte Linux über separate Seiten- und Puffercaches. Seit 2.4 sind der Seiten- und Puffercache vereinheitlicht und Puffer sind rohe Plattenblöcke, die nicht im Seitencache dargestellt werden, d. H. Keine Dateidaten. Die Buffers-Metrik ist daher von minimaler Bedeutung. Auf den meisten Systemen sind Puffer oft nur einige zehn Megabyte groß.

74
socketpair

Es ist nicht ganz so einfach wie dieses, aber es könnte helfen zu verstehen:

Der Puffer dient zum Speichern von Dateimetadaten (Berechtigungen, Speicherort usw.). Jede Speicherseite wird hier nachverfolgt.

Der Cache dient zum Speichern des tatsächlichen Dateiinhalts.

18
n00ber

puffer und Cache. 

Ein Puffer ist etwas, das noch auf die Festplatte geschrieben werden muss. 

Ein Cache ist etwas, das von der Festplatte "gelesen" wurde und für die spätere Verwendung gespeichert wurde.

11
ChaiZhi

Ich denke, diese Seite wird dazu beitragen, den Unterschied zwischen Puffer und Cache zu verstehen. http://www.tldp.org/LDP/sag/html/buffer-cache.html

Das Lesen von einer Festplatte ist im Vergleich zum Zugriff auf (realen) Speicher sehr langsam. Außerdem ist es üblich, den gleichen Teil einer Platte während relativ kurzer Zeit mehrmals zu lesen. Zum Beispiel könnte man zuerst eine E-Mail-Nachricht lesen, dann den Brief in einen Editor einlesen, wenn er darauf antwortet, und dann das Mail-Programm beim Lesen in einen Ordner erneut lesen lassen. Oder überlegen Sie, wie oft der Befehl ls auf einem System mit vielen Benutzern ausgeführt werden kann. Indem Sie die Informationen nur einmal von der Festplatte lesen und dann im Speicher aufbewahren, bis sie nicht mehr benötigt werden, können Sie alle Daten bis auf das erste Lesen beschleunigen. Dies wird als Plattenpufferung bezeichnet, und der für diesen Zweck verwendete Speicher wird als Puffercache bezeichnet.

Da der Speicher leider eine begrenzte, ja begrenzte Ressource ist, kann der Puffercache normalerweise nicht groß genug sein (er kann nicht alle Daten enthalten, die jemals verwendet werden sollen). Wenn der Cache voll ist, werden die Daten, die am längsten nicht verwendet wurden, verworfen, und der frei gewordene Speicher wird für die neuen Daten verwendet.

Festplattenpufferung funktioniert auch für Schreibvorgänge. Einerseits werden geschriebene Daten häufig bald wieder gelesen (z. B. wird eine Quellcodedatei in einer Datei gespeichert und dann vom Compiler gelesen). Es ist daher eine gute Idee, Daten in den Cache zu schreiben. Andererseits wird das schreibende Programm schneller ausgeführt, wenn die Daten nur in den Cache gestellt und nicht gleichzeitig auf die Festplatte geschrieben werden. Die Schreibvorgänge können dann im Hintergrund ausgeführt werden, ohne die anderen Programme zu verlangsamen.

9
Eric

Erklärt von RedHat :

Cache-Seiten:

Ein Cache ist der Teil des Speichers, in dem Daten transparent gespeichert werden, sodass zukünftige Anforderungen für diese Daten schneller bearbeitet werden können. Dieser Speicher wird vom Kernel zum Zwischenspeichern von Plattendaten und zur Verbesserung der E/A-Leistung verwendet.

Der Linux-Kernel ist so aufgebaut, dass er so viel RAM wie möglich zum Zwischenspeichern von Informationen von Ihren lokalen und fernen Dateisystemen und Festplatten verwendet. Wenn die Zeit über verschiedene Lese- und Schreibvorgänge im System abläuft, versucht der Kernel, Daten für die verschiedenen Prozesse, die auf dem System laufen, oder die Daten der relevanten Prozesse, die in der nahen Zukunft verwendet werden, im Speicher gespeichert zu halten. Der Cache wird nicht zu dem Zeitpunkt zurückgefordert, an dem der Prozess gestoppt/beendet wird. Wenn für die anderen Prozesse mehr Speicher als für den verfügbaren freien Speicher erforderlich ist, führt der Kernel Heuristiken aus, um den Speicher zurückzugewinnen, indem er die Cache-Daten speichert und diesen Speicher einem neuen Prozess zuordnet.

Wenn irgendeine Art von Datei/Daten angefordert wird, sucht der Kernel nach einer Kopie des Teils der Datei, für den der Benutzer tätig ist. Wenn keine solche Kopie vorhanden ist, ordnet er eine neue Seite des Cache-Speichers zu und füllt sie mit der entsprechende Inhalt wird 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 zunächst überprüft, ob der Cache diese Daten enthält. Die Daten können schneller aus dem Cache abgerufen werden als aus dem Ursprungsursprung.

Gemeinsame Speichersegmente von SysV werden ebenfalls als Cache ausgewiesen, obwohl sie keine Daten auf den Festplatten darstellen. Sie können die Größe der Shared Memory-Segmente mit dem Befehl ipcs -m und der Bytespalte überprüfen.

Puffer:

Puffer sind die Plattenblockdarstellung der Daten, die unter den Page-Caches gespeichert sind. Puffer enthält die Metadaten der Dateien/Daten, die sich unter dem Seitencache befinden ..__ Beispiel: Wenn im Seitencache vorhandene Daten angefordert werden, überprüft der Kernel zuerst die Daten in den Puffern, die die Metadaten enthalten was auf die tatsächlichen Dateien/Daten in den Seiten-Caches verweist. Sobald die tatsächliche Blockadresse der Datei aus den Metadaten bekannt ist, wird sie vom Kernel zur Verarbeitung abgeholt.

7
Ijaz Ahmad Khan

Seth Robertsons Link 2 sagte: "Für ein umfassendes Verständnis dieser Begriffe verweisen wir auf ein Linux-Kernel-Buch wie Linux Kernel Development von Robert M. Love."

In der zweiten Ausgabe des Buches habe ich einige Inhalte zu "Puffer" gefunden.

Obwohl das physische Gerät selbst auf Sektorebene adressierbar ist, führt der Kernel alle Plattenoperationen in Form von Blöcken aus.

Wenn ein Block im Speicher abgelegt wird (beispielsweise nach einem Lesevorgang oder einem ausstehenden Schreibvorgang), wird er in einem 'Puffer' gespeichert. Jedem 'Puffer' ist genau ein Block zugeordnet. Der 'Puffer' dient als Objekt, das einen Plattenblock im Speicher darstellt.

Ein "Puffer" ist die In-Memory-Darstellung eines einzelnen physischen Plattenblocks.

Block-E/A-Operationen bearbeiten jeweils einen einzelnen Plattenblock. Eine übliche Block-E/A-Operation ist das Lesen und Schreiben von Inodes. Der Kernel stellt die Funktion bread () zur Verfügung, um einen einzelnen Block von der Festplatte zu lesen. Plattenblöcke werden über "Puffer" den zugehörigen In-Memory-Seiten zugeordnet. "

3
Chao Yin

Der Puffer enthält Metadaten, die zur Verbesserung der Schreibleistung beitragen

Der Cache enthält den Dateiinhalt selbst (manchmal muss noch auf die Festplatte geschrieben werden), wodurch die Leseleistung verbessert wird

1
karthik

Zitat aus dem Buch: Einführung in Information Retrieval

Zwischenspeicher

Wir möchten so viel Daten wie möglich im Speicher behalten, insbesondere diejenigen Daten, auf die wir häufig zugreifen müssen. Wir bezeichnen die Technik, häufig verwendete Plattendaten im Zwischenspeicher des Hauptspeichers zu speichern.

Puffer

Betriebssysteme lesen und schreiben im Allgemeinen ganze Blöcke. Daher kann das Lesen eines einzelnen Bytes von der Festplatte genauso lange dauern wie das Lesen des gesamten Blocks. Blockgrößen von 8, 16, 32 und 64 Kilobyte (KB) sind üblich. Wir bezeichnen den Teil des Hauptspeichers, in dem ein Block, der gerade gelesen oder geschrieben wird, als Puffer gespeichert.

0
yantaq

Ein Puffer ist ein Speicherbereich, in dem Daten temporär gespeichert werden, während sie innerhalb eines Computers von einem Ort zum anderen verschoben werden. Ein Cache ist ein temporärer Speicherbereich, in dem häufig aufgerufene Daten für einen schnellen Zugriff gespeichert werden können. Sobald die Daten im Cache gespeichert sind, kann die spätere Verwendung durch Zugriff auf die zwischengespeicherte Kopie erfolgen, anstatt die ursprünglichen Daten erneut abzurufen, sodass die durchschnittliche Zugriffszeit kürzer ist. 

0
Abigail