2012-03-15 20 views
15

Esto se ha pedido anteriormente pero no desea actualizar el mismo subproceso nuevamente ya que era un subproceso antiguo.Comprensión de "Buffers" y "Cached" desde el comando

Quiero aclararme en la columna "búferes" y "caché" de la salida del comando free.

Esto es lo que mi comprensión ...

Buffer es algo en que los datos está ahí en la memoria pero aún no se ha volcado al disco. Los datos serán descargados al disco bdflush daemon periódicamente o podemos hacerlo manualmente ejecutando el comando sync.

La memoria caché, por el contrario, es un programa/datos que se carga en la memoria pero se retiene en la memoria para que, si se necesita nuevamente, esté disponible rápidamente.

Para entender el concepto de tampones, probé el siguiente experimento ...

Ésta es la lectura de free comando en mi escritorio

 
[[email protected] ~]$ free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  465  2431   0   30  230 
-/+ buffers/cache:  204  2692 
Swap:   4000   0  4000 

[[email protected] ~]$ sync 

[[email protected] ~]$ free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  466  2431   0   30  230 
-/+ buffers/cache:  205  2691 
Swap:   4000   0  4000 

Aquí no puedo ver Buffer siendo reducida después de ejecutar el sync comando.

Luego probé lo siguiente ... Intenté escribir un archivo enorme en el disco.

 
[[email protected] ~]$ dd if=/dev/zero of=test bs=1024k 

Como era de esperar, el valor almacenado en caché debe aumentar y libre se confirma esta ..

 
@localhost ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  1466  1430   0   32  1127 
-/+ buffers/cache:  306  2590 
Swap:   4000   0  4000 

vuelvo a ejecutar el comando sync y luego se comprueba mediante free. Puedo ver que el valor del buffer se reduce a partir de la salida del comando free. No hubo reducción en el caché. Esto significa que las páginas sucias en la RAM después de mi ejecución de dd se han enrutado al disco.

 
@localhost ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  1466  1430   0   10  1127 
-/+ buffers/cache:  306  2590 
Swap:   4000   0  4000 

Entonces actualizan el parámetro drop_cache kernel para que el caché se deja caer vlaue

 
[[email protected] ~]# cat /proc/sys/vm/drop_caches 
0 

[[email protected] ~]# echo "1" > /proc/sys/vm/drop_caches 

[[email protected] ~]# cat /proc/sys/vm/drop_caches 
1 

free ahora confirma que tanto en tampón y se deja caer el valor de cache.

 
[[email protected] ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  299  2597   0   1   74 
-/+ buffers/cache:  224  2672 
Swap:   4000   0  4000 

lo tanto, mi afirmación inicial de que "buffer" es la memoria RAM de datos, que aún no se ha volcado a disco parece ser correcta.

Por favor, guíame si estoy en la dirección correcta.

Respuesta

2

La forma en que siempre lo he entendido es que el área de memoria intermedia es para el almacenamiento temporal de datos que se leen o escriben en dispositivos (incluidos discos), mientras que el área de memoria caché acelera las lecturas futuras de un dispositivo.

1

Entiendo esto: los almacenamientos intermedios le dicen cuánta memoria está reservada para mantener los dispositivos de bloque, pero el caché le dice la cantidad de memoria que se utiliza para los archivos .

18

Los encabezados de columna en el comando libre están mal etiquetados, al menos desde el punto de vista de un usuario de Linux (a diferencia del desarrollador). A continuación hay una aclaración de lo que significan los títulos:

total: Sí, esto es total ram.

usado: Esta es probablemente la columna más confusa. Esta es una combinación de la memoria usada de la aplicación y otra memoria usada "temporalmente" (memoria caché + memoria caché) que en realidad está disponible si es necesario. Entonces, técnicamente, la memoria se está utilizando realmente, pero gran parte de esta memoria está disponible si una aplicación lo necesita. La memoria usada "temporalmente" se toma prestada si está disponible en el sistema Linux para ayudar a acelerar el rendimiento del sistema, de lo contrario, el sistema habría leído más a menudo del disco. Gran parte de este tipo de memoria se muestra debajo de la columna 'en caché'. El sistema linux renuncia a esta memoria si una aplicación necesita memoria.

gratis: Sí, esta memoria pura libre y sin tocar.

a compartir: memoria asignada específicamente para su uso por múltiples procesos

tampones: memoria temporal mantenidas en reserva para ayudar a algunos procesos

caché: de memoria que está disponible y 'prestado' por el sistema operativo para ayudar a acelerar muchas operaciones del sistema operativo Linux. El sistema renuncia a esta memoria si una aplicación lo necesita.

La línea que comienza con -/+ buffers/cache suele ser más útil que la primera Mem línea. La intersección de gratis y -/+ buffers/cache es esencialmente lo que tiene para la memoria 'disponible'.

2

Linux VM subsistema trata cualquier libres o no utilizados o no asignados memoria como buffers/cache

Por lo tanto, correr echo 1 > /proc/sys/vm/drop_caches indica al núcleo descarte o limpiar las memorias caché de páginas (página-cache) , dentries (slab-cache) e inodos (en el slab-cache) y causan que la memoria se reclame y esté disponible.

Las páginas de caché de datos limpios no se liberan por diseño. El kernel puede recuperarlos fácilmente si se va a asignar o no memoria adicional (malloc/calloc/brk/sbrk y amigos), mientras que contienen datos útiles de los discos que, si es necesario, se guardan haciendo una E/S de disco.

El comando sync solo compromete las páginas sucias en la memoria del disco, no libera los búferes/caché. La única manera de soltar buffers/cache es mediante el uso echo "1" > /proc/sys/vm/drop_caches o el núcleo recupera las páginas de datos para la nueva asignados solicitados por las aplicaciones

pdflush ha sido reemplazado mediante el uso de hilos de lavado por información del dispositivo de soporte (BDI).

2

Citando RHEL:

Linux siempre trata de utilizar la memoria RAM para acelerar las operaciones de disco mediante el uso de memoria disponible para los amortiguadores (metadatos del sistema de archivos) y la memoria caché (páginas con contenido real de archivos o dispositivos de bloque).

Cuestiones relacionadas