Was bedeuten die Felder "Buff / Cache" und "Avail Mem" oben?

28

Innerhalb der Ausgabe von top gibt es zwei Felder mit den Bezeichnungen "buff / cache" und "avail Mem" in den Speicher- und Swap-Verwendungszeilen:

Bildbeschreibung hier eingeben

Was bedeuten diese beiden Felder?

Ich habe versucht, sie zu googeln, aber die Ergebnisse führen nur zu allgemeinen Artikeln, und sie erklären nicht, was diese Felder bedeuten.

user2064000
quelle

Antworten:

31

top‚s Manpage beschreibt nicht die Felder, aber free‘ s tut:

Puffer

Speicher, der von Kernel-Puffern verwendet wird ( Buffersin /proc/meminfo)

Zwischenspeicher

Vom Seiten-Cache und den Slabs ( Cachedund SReclaimablein /proc/meminfo) verwendeter Speicher

Buff / Cache

Summe von Puffern und Cache

verfügbar

Schätzung der verfügbaren Speicherkapazität zum Starten neuer Anwendungen ohne Auslagerung. Im Gegensatz zu den Daten, die vom Cache oder den freien Feldern bereitgestellt werden, wird in diesem Feld der Seitencache berücksichtigt und auch, dass nicht alle wiederherstellbaren Speicherplatten aufgrund von Elementen zurückgefordert werden, die gerade verwendet werden ( MemAvailablein /proc/meminfo, verfügbar in Kernel 3.14, emuliert in Kernel 2.6.27+) , sonst wie frei)

Grundsätzlich zählt „Buff / Cache“ den Speicher, der für Daten verwendet wird, die sich auf der Festplatte befinden oder bald dort enden sollten, und ist daher potenziell verwendbar (der entsprechende Speicher kann im Falle eines Caches sofort zur Verfügung gestellt werden oder ausreichend Zeit zur Verfügung gestellt werden). bei Puffern - letztere sollen ohnehin klein bleiben); "Verfügbar" misst die Menge an Speicher, die zugewiesen und verwendet werden kann, ohne dass ein weiterer Austausch erforderlich ist (weitere Informationen hierzu finden Sie unter Wie kann ich die Menge an verfügbarem Speicher portabel über Distributionen hinweg abrufen? ).

Stephen Kitt
quelle
1
Puffer / Cache werden bei ausreichender Zeit nicht zur Verfügung gestellt ; Es handelt sich um Speichersegmente, die sofort verfügbar sind, wenn ein Programm Speicher benötigt. Siehe auch linuxatemyram.com
DopeGhoti
4

Um ein bisschen zu verdeutlichen, beziehen sich Puffer auf Daten, die geschrieben werden - dieser Speicher kann nicht zurückgefordert werden, bis der Schreibvorgang abgeschlossen ist.

Cache bezieht sich auf Daten, die gelesen wurden - es wird beibehalten, falls es erneut gelesen werden muss, kann jedoch sofort zurückgefordert werden, da es immer wieder von der Festplatte gelesen werden kann.

WallStProg
quelle
Das bedeutet es hier nicht wirklich. /proc/meminfohat ein Feld für Writebackspeziell. Es gibt ein separates Feld Buffers, und das ist, wie buffersin gezeigt free -w. Ein häufiger Grund für die BuffersSpeichernutzung ist hier angegeben: " 30% des Arbeitsspeichers sind" Puffer ". Was ist das? "
sourcejedi
Aus diesem Grund ( access.redhat.com/solutions/406773 ) gehe ich davon aus, dass Writeback der Teil der Puffer ist, der noch nicht auf die Festplatte geschrieben wurde. Oder sagst du etwas anderes?
WallStProg
Diese Beschreibung wäre irreführend. Buffersist (jetzt) ​​ein Teil des Seiten-Cache; es wird nicht mitgezählt Cached, aber es wird als Teil von gezählt Active(file) + Inactive(file). Siehe Kommentare zu Stephen Kitts Antwort. Dirtyist der Teil des Seiten-Caches, in den geschrieben wurde und der eventuell auf die Festplatte zurückgeschrieben werden muss. Writebackbeinhaltet nichtDirty . Daher Writebackist nicht ein Teil des Wertes von Buffers.
Sourcejedi
Was Bufferstatsächlich bedeutet, ist der dem Blockgerät zugeordnete Seiten-Cache. Einige Dateisysteme verwenden dies intern. andere benutzen es überhaupt nicht. Ich behebe meine Antwort auf die Frage "30% meines RAM sind Puffer".
Sourcejedi
2

Die kanonische Quelle dieser Informationen ist /usr/src/linux/Documentation/filesystems/proc.txt

Puffer : Relativ temporärer Speicher für unformatierte Festplattenblöcke sollte nicht sehr groß werden (ca. 20 MB). Cache : Cache im Speicher für Dateien, die von der Festplatte gelesen werden (der Seiten-Cache). Beinhaltet nicht SwapCached.

Weitere Details finden Sie auch hier .

Der Linux Page Cache (" Cached :" von meminfo) ist auf den meisten Systemen der größte einzelne RAM-Konsument. Jedes Mal, wenn Sie read () von einer Datei auf der Festplatte ausführen, werden diese Daten in den Speicher eingelesen und in den Seiten-Cache (1.) verschoben.
Der Puffer-Cache (" Puffer :" in meminfo) ist relativ zu den Dentry / Inode-Caches eng.

Oder analysieren Sie den Quellcode wie folgt .

Der Betrag von buffersist der Rückgabewert von functionnr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

Die Menge von cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
Axiqia
quelle