En Linux, ¿cuál es la diferencia entre "búferes" y "caché" informados por el comando gratuito?

Pregunta:

Esta es una vieja pregunta que he visto de vez en cuando. Mi comprensión es bastante limitada (habiendo leído acerca de las diferencias hace mucho tiempo, pero los factores involucrados nunca se han quedado realmente atascados).

Como yo lo entiendo,

  • Amortiguadores

    Son utilizados por programas con operaciones de E / S activas, es decir, datos que esperan ser escritos en el disco.

  • Cache

    Es el resultado de operaciones de E / S completadas, es decir, búferes que se han vaciado o datos leídos del disco para satisfacer una solicitud.

¿Puedo obtener una explicación clara para la posteridad?

Respuesta:

El total "almacenado en caché" también incluirá algunas otras asignaciones de memoria, como cualquier elemento de archivo tmpfs. Para ver esto en efecto, intente:

mkdir t
mount -t tmpfs none t
dd if=/dev/zero of=t/zero.file bs=10240 count=10240
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
umount t
sync; echo 3 > /proc/sys/vm/drop_caches; free -m

y verá que el valor de "caché" se reduce en los 100Mb que copió en el sistema de archivos basado en RAM (suponiendo que hubiera suficiente RAM libre, es posible que encuentre algo de eso en intercambio si la máquina ya está comprometida en exceso en términos del uso de la memoria). El "sync; echo 3> / proc / sys / vm / drop_caches" antes de cada llamada a free debe escribir cualquier cosa pendiente en todos los búferes de escritura (la sincronización) y borrar todos los bloques de disco almacenados en caché / búfer de la memoria, por lo que Free solo leerá otros asignaciones en el valor "en caché".

La RAM utilizada por las máquinas virtuales (como las que se ejecutan en VMWare) también puede contarse en el valor "almacenado en caché" gratuito, al igual que la RAM utilizada por los archivos asignados en memoria abiertos actualmente (esto variará según el hipervisor / versión que esté utilizando y posiblemente también entre versiones del kernel).

Por lo tanto, no es tan simple como "los búferes cuentan las escrituras de archivos / red pendientes y los recuentos en caché de los bloques leídos / escritos recientemente guardados en la RAM para guardar lecturas físicas futuras", aunque para la mayoría de los propósitos esta descripción más simple servirá.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım