¿Qué significan los campos "buff / cache" y "avail mem" en la parte superior?

28

Dentro de la salida de top, hay dos campos, marcados "buff / cache" y "avail Mem" en la memoria y líneas de uso de intercambio:

ingrese la descripción de la imagen aquí

¿Qué significan estos dos campos?

He intentado buscarlos en Google, pero los resultados solo muestran artículos genéricos en la parte superior, y no explican qué significan estos campos.

usuario2064000
fuente

Respuestas:

31

top's página de manual no describe los campos, pero free' s hace:

tampones

Memoria utilizada por las memorias intermedias del núcleo ( Buffersen /proc/meminfo)

cache

Memoria utilizada por el caché de página y losas ( Cachedy SReclaimableen /proc/meminfo)

buff / cache

Suma de buffers y caché

disponible

Estimación de cuánta memoria está disponible para iniciar nuevas aplicaciones, sin intercambiar. A diferencia de los datos proporcionados por la memoria caché o los campos libres, este campo tiene en cuenta la memoria caché de la página y también que no todas las losas de memoria recuperables se recuperarán debido a los elementos en uso ( MemAvailableen /proc/meminfo, disponible en los núcleos 3.14, emulados en los núcleos 2.6.27+ , de lo contrario es lo mismo que gratis)

Básicamente, "buff / cache" cuenta la memoria utilizada para los datos que están en el disco o deberían terminar allí pronto, y como resultado es potencialmente utilizable (la memoria correspondiente puede estar disponible de inmediato, en el caso de la memoria caché, o si se le da suficiente tiempo) en el caso de los amortiguadores, se supone que estos últimos deben permanecer pequeños de todos modos); "Disponible" mide la cantidad de memoria que se puede asignar y usar sin causar más intercambio (consulte ¿Cómo puedo obtener la cantidad de memoria disponible de forma portátil en las distribuciones? Para obtener más detalles al respecto).

Stephen Kitt
fuente
1
Las memorias intermedias / caché no están disponibles con el tiempo suficiente ; son segmentos de memoria que están disponibles de inmediato si algún programa requiere que se asigne algo de memoria. Ver también linuxatemyram.com
DopeGhoti
4

Solo para aclarar un poco, los búferes se refieren a los datos que se están escribiendo : esa memoria no se puede recuperar hasta que se complete la escritura.

La memoria caché se refiere a los datos que se han leído : se conservan en caso de que necesiten leerse nuevamente, pero se pueden recuperar de inmediato ya que siempre se pueden volver a leer desde el disco.

WallStProg
fuente
Eso no es realmente lo que significa aquí. /proc/meminfotiene un campo para Writebackespecíficamente. Hay un campo separado Buffers, y eso es lo que se muestra buffersen free -w. BuffersAquí se muestra una razón común para el uso de la memoria: "El 30% de la RAM son" buffers ". ¿Qué es? "
sourcejedi
A partir de esto ( access.redhat.com/solutions/406773 ), considero que la reescritura es la porción de Buffers que aún no se ha escrito en el disco. ¿O estás diciendo algo más?
WallStProg
Esa descripción sería engañosa. Bufferses (ahora) una parte del caché de la página; no se cuenta Cached, pero se cuenta como parte de Active(file) + Inactive(file). Ver comentarios sobre la respuesta de Stephen Kitt. Dirtyes la parte de la memoria caché de la página en la que se ha escrito y, por lo tanto, finalmente necesita volver a escribirse en el disco. WritebackNo incluyeDirty . Por lo tanto, Writebackno es una parte del valor de Buffers.
sourcejedi
Lo que Buffersrealmente significa es el caché de página asociado con el dispositivo de bloque. Algunos sistemas de archivos usan esto internamente; otros no lo usan en absoluto. / va a arreglar mi respuesta en la pregunta "30% de mi RAM es buffers".
sourcejedi
2

La fuente canónica de esta información es /usr/src/linux/Documentation/filesystems/proc.txt

Buffers : el almacenamiento relativamente temporal para bloques de disco sin procesar no debería ser tremendamente grande (20 MB más o menos) en caché : caché en memoria para archivos leídos del disco (el caché de página). No incluye SwapCached.

También puedes encontrar más detalles aquí .

La caché de página Linux (" En caché :" de meminfo) es el mayor consumidor de RAM en la mayoría de los sistemas. Cada vez que realiza una lectura () desde un archivo en el disco, esos datos se leen en la memoria y se almacenan en la memoria caché de la página (1.).
El caché del búfer (" Buffers :" en meminfo) está muy cerca de los cachés dentry / inode.

O analizar el código fuente como este .

La cantidad de buffers es el valor de retorno de la funciónnr_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;
}

La cantidad de cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
axiqia
fuente