free
estrae i suoi dati da /proc/meminfo
slkwr133701:/usr/src/linux # free
total used free shared buffers cached
Mem: 2053456 434572 1618884 0 77888 201820
slkwr133701:/usr/src/linux # cat /proc/meminfo
MemTotal: 2053456 kB
MemFree: 1618736 kB
Buffers: 77928 kB
....
Si riferisce alla memoria utilizzata per l'archiviazione temporanea di I/O a blocchi. Il kernel deve assegnare e liberare costantemente unità della stessa dimensione come trasferimenti di I/O a blocchi, pacchetti di rete e buffer di socket
Puoi dare un'occhiata migliore alle cache e alle allocazioni dei buffer eseguendo slabtop
In risposta alla tua domanda sull'utilizzo:il sistema in genere assegnerà più blocchi del necessario, ma con l'aumentare della "pressione della memoria" questi blocchi aggiuntivi verranno rilasciati.
i "buffer" sono recuperabili sotto la pressione della memoria. Quindi è simile alla cache della pagina (colonna "cache"); non è un grande motivo di preoccupazione. Il valore "buffer" può essere piccolo o grande, dipende da cosa sta facendo il tuo sistema :-). Possiamo trovare diversi tipi di cache contati qui.
La cache del buffer è letteralmente la cache della pagina per il dispositivo a blocchi. Linux li segnala solo separatamente. [*] Potresti notare l'utilizzo di "buffer" mentre i programmi leggono/scrivono il nodo del dispositivo a blocchi, ad es. dd status=progress if=/dev/sda of=/dev/null
. Apparentemente le persone lo notano anche durante l'esecuzione di un programma per lettori DVD.
Per prova, vedi:il 30% della RAM è "buffer". Che cos'è?
Se non hai effettuato l'accesso al nodo del dispositivo a blocchi, i tuoi "buffer" sono probabilmente tutti metadati del filesystem . I filesystem usano la cache del buffer internamente per comodità. Si assicurano che non duplichi mai il file data - contenuto del file - che è memorizzato nella cache della pagina principale. Esattamente ciò per cui il filesystem utilizza la cache del buffer - semmai - varia a seconda del filesystem.
Su una macchina con una piccola quantità di RAM fisica, ho notato che i "buffer" possono sembrare alti, quando ho filesystem ext3/ext4. Questo perché le scritture sul journal passano attraverso la cache del buffer. (Vedi link sopra). I filesystem ext3/4 memorizzano anche i contenuti delle directory nella cache del buffer.
In secondo luogo, i "buffer" mostrati dal free
Il comando include anche SReclaimable, che significa lastre recuperabili. (Dimostrato qui:The Right Way to Monitor Linux Memory, Again).
La memoria della lastra non parte della pagina/buffer cache. Tuttavia è conveniente contarli insieme. Sono entrambi recuperabili e l'uso principale (unico?) Delle lastre recuperabili è per la memorizzazione nella cache del filesystem. Ad esempio, i metadati dei file (inode) e le ricerche dei percorsi (dentry) vengono memorizzati nella cache in slab recuperabili. "La memoria slab recuperabile [può] occupare una grande frazione della memoria di sistema su sistemi per lo più inattivi con molti file."
Puoi vedere il Buffers
non elaborato e SReclaimable
valori in cat /proc/meminfo
. Puoi anche eseguire slabtop
per vedere l'elenco delle lastre. AFAICT, slabtop
non fornisce statistiche sulle lastre come recuperabili o meno. Ma di solito puoi indovinare, e se c'è qualche lastra sospetta immagino che tu possa cercarla per nome.
[*] Ai fini di questa risposta, "buffer cache" è la cache contata da Buffers
in /proc/meminfo
. Tuttavia, altre fonti possono fare riferimento all'intera cache della pagina come cache buffer unificata. Se vuoi la spiegazione storica, vedi il primo link.
Inoltre, gli sviluppatori Linux potrebbero aver usato "buffer cache" per indicare cose diverse, quando litigavano sulle implementazioni del filesystem.