¿Qué es la columna de buffers en la salida de free?

¿Qué es la columna de buffers en la salida de free?

Estos preguntasEnumere brevemente el formato del comando gratuito, teniendo en cuenta que los buffers son memoria del kernel que debe escribirse en el disco y el caché son datos de archivos que no necesitan escribirse en el disco.

En mi sistema, a diferencia de la mayoría de las veces que lo he ejecutado gratis, los buffers ocupan más del 10% de la RAM. Por lo general, los buffers son un valor pequeño, casi simbólico.

Mi pregunta es, ¿qué hay exactamente en el área llamada buffers? ¿Puedo buscarlo con lsof? ¿Consta de regiones de archivos abiertos que no se han vaciado? ¿Son regiones de archivos asignadas en memoria? ¿Qué es?

El sistema funciona bien y se utiliza poco intercambio, por lo que el rendimiento es bueno.

Respuesta1

freeextrae sus datos de/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
....

Esto se refiere a la memoria utilizada para el almacenamiento temporal de E/S en bloque. El kernel tiene que asignar y liberar unidades del mismo tamaño constantemente, como transferencias de E/S en bloque, paquetes de red y buffers de socket.

Puede obtener una mejor visión de los cachés y las asignaciones de búfer ejecutandoslabtop

En respuesta a su pregunta de uso: el sistema normalmente asignará más bloques de los que necesita, pero a medida que aumenta la "presión de la memoria", estos bloques adicionales se liberarán.

Respuesta2

Los "búferes" son recuperables bajo presión de memoria. Por lo tanto, es similar al caché de la página (columna "caché"); No es un gran motivo de preocupación. El valor de los "búferes" puede ser pequeño o grande, depende de lo que esté haciendo su sistema :-). Podemos encontrar varios tipos de caché contados aquí.

La caché del búfer es literalmente la caché de páginas para el dispositivo de bloque. Linux simplemente los reporta por separado.[*] Podrías notar el uso de "búferes" mientras los programas leen/escriben el nodo del dispositivo de bloque, por ejemplo dd status=progress if=/dev/sda of=/dev/null. Aparentemente la gente también lo nota cuando ejecuta un programa de reproducción de DVD.

Como prueba, consulte:El 30% de la RAM son "búferes". ¿Qué es?

Si no ha estado accediendo al nodo del dispositivo de bloqueo, sus "búferes" probablemente sean todos sistemas de archivos.metadatos. Los sistemas de archivos utilizan el caché del búfer internamente por conveniencia. Se aseguran de que nunca duplique el archivo.datos- contenido del archivo - que se almacena en el caché de la página principal. Exactamente para qué utiliza el sistema de archivos el caché del búfer, en todo caso, varía según el sistema de archivos.

En una máquina con una pequeña cantidad de RAM física, noté que los "búferes" pueden verse altos cuando tengo sistemas de archivos ext3/ext4. Esto se debía a que las escrituras en el diario pasan por la memoria caché del búfer. (Ver enlace arriba). Los sistemas de archivos ext3/4 también almacenan el contenido del directorio en la memoria caché del búfer.

En segundo lugar, los "búferes" que muestra el freecomando también incluyen SReclaimable, es decir, losas recuperables. (Demostrado aquí:La forma correcta de monitorear la memoria de Linux, nuevamente).

La memoria de losa esnoparte de la página/caché del búfer. Sin embargo es conveniente contarlos juntos. Ambos son recuperables, y el uso principal (¿único?) de losas recuperables es para el almacenamiento en caché del sistema de archivos. Por ejemplo, los metadatos de archivos (inodos) y las búsquedas de rutas (dentry) se almacenan en caché en losas recuperables. "La memoria de bloque recuperable [puede] ocupar una gran fracción de la memoria del sistema en sistemas en su mayoría inactivos con muchos archivos".

Puedes ver el raw Buffersy SReclaimablelos valores en cat /proc/meminfo. También puedes correr slabtoppara ver la lista de losas. AFAICT, slabtopno proporciona estadísticas sobre si las losas son recuperables o no. Pero normalmente puedes adivinar, y si hay alguna losa sospechosa, supongo que puedes buscarla por su nombre.


[*] A los efectos de esta respuesta, "caché del búfer" es el caché contado Buffersen /proc/meminfo. Sin embargo, otras fuentes pueden referirse a la caché de la página completa como una caché de búfer unificada. Si quieres la explicación histórica, mira el primer enlace.

Además, es posible que los desarrolladores de Linux hayan usado "caché de búfer" para significar cosas diferentes cuando discutían sobre implementaciones de sistemas de archivos.

Respuesta3

En segundo lugar, los "búferes" que muestra el comando gratuito también incluyen SReclaimable

Según la página de manual del comando gratuito (versión 3.3.15): "memoria caché utilizada por la página caché y losas (en caché y SReclaimable en /proc/meminfo)"

Entonces es el caché el que incluye SReclaimable, no los buffers.

información relacionada