Para mí no está claro cuál es la diferencia entre los dos conceptos de memoria de Linux: buffer
y cache
. He leído esta publicación y me parece que la diferencia entre ellos es la política de vencimiento:
- la política del búfer es primero en entrar, primero en salir
- La política de caché es la menos utilizada recientemente.
Estoy en lo cierto?
En particular, estoy mirando los dos comandos: free
yvmstat
james@utopia:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
5 0 0 173 67 912 0 0 19 59 75 1087 24 4 71 1
james@utopia:~$ free -m
total used free shared buffers cached
Mem: 2007 1834 172 0 67 914
-/+ buffers/cache: 853 1153
Swap: 2859 0 2859
free
salida del comando?Respuestas:
Los "buffers" representan la cantidad de RAM dedicada a los bloques de disco de caché. "En caché" es similar a "Buffers", solo que esta vez almacena en caché páginas de la lectura de archivos.
cita de:
fuente
cache
se llena como se informafree -w -h
, no labuffers
columna. Creo que lacache
columna cuenta tanto las escrituras de disco como las lecturas de disco ybuffers
se usa para otra cosa.enlace de cita
fuente
Respuesta citada (para referencia):
fuente
No es "tan simple" como esto, pero podría ayudar a entender:
Buffer es para almacenar metadatos de archivos (permisos, ubicación, etc.). Cada página de memoria se mantiene aquí.
La memoria caché es para almacenar el contenido real del archivo.
fuente
Explicado por RedHat :
Páginas de caché:
Un caché es la parte de la memoria que almacena los datos de forma transparente para que las solicitudes futuras de esos datos puedan ser atendidas más rápido. El kernel utiliza esta memoria para almacenar en caché los datos del disco y mejorar el rendimiento de E / S.
El kernel de Linux está construido de tal manera que utilizará tanta RAM como sea posible para almacenar en caché la información de sus sistemas de archivos y discos locales y remotos. A medida que pasa el tiempo, se realizan varias lecturas y escrituras en el sistema, el núcleo intenta mantener los datos almacenados en la memoria para los diversos procesos que se ejecutan en el sistema o los datos de los procesos relevantes que se utilizarían en el futuro cercano. El caché no se recupera en el momento en que el proceso se detiene / sale; sin embargo, cuando los otros procesos requieren más memoria que la memoria disponible libre, el núcleo ejecutará heurística para reclamar la memoria almacenando los datos del caché y asignando esa memoria al nuevo proceso.
Cuando se solicita cualquier tipo de archivo / datos, el núcleo buscará una copia de la parte del archivo en el que está actuando el usuario y, si no existe tal copia, asignará una nueva página de memoria caché y la llenará con los contenidos apropiados leídos del disco.
Los datos que se almacenan en una memoria caché pueden ser valores que se han calculado anteriormente o duplicados de valores originales que se almacenan en otra parte del disco. Cuando se solicitan algunos datos, primero se verifica el caché para ver si contiene esos datos. Los datos se pueden recuperar más rápidamente del caché que de su origen de origen.
Los segmentos de memoria compartida de SysV también se contabilizan como caché, aunque no representan ningún dato en los discos. Se puede verificar el tamaño de los segmentos de memoria compartida usando el comando ipcs -m y verificando la columna de bytes.
Tampones:
Los almacenamientos intermedios son la representación del bloque de disco de los datos que se almacenan en los cachés de página. Buffers contiene los metadatos de los archivos / datos que residen en la memoria caché de la página. Ejemplo: cuando hay una solicitud de datos que está presente en la memoria caché de la página, primero el núcleo verifica los datos en los buffers que contienen los metadatos que apuntan a los archivos / datos reales contenidos en las memorias caché de la página. Una vez que los metadatos conocen la dirección de bloqueo real del archivo, el núcleo lo recoge para procesarlo.
fuente
búfer y caché.
Un búfer es algo que aún no se ha "escrito" en el disco.
Un caché es algo que ha sido "leído" del disco y almacenado para su uso posterior.
fuente
Creo que esta página ayudará a comprender profundamente la diferencia entre el búfer y el caché. http://www.tldp.org/LDP/sag/html/buffer-cache.html
La lectura desde un disco es muy lenta en comparación con el acceso a la memoria (real). Además, es común leer la misma parte de un disco varias veces durante períodos de tiempo relativamente cortos. Por ejemplo, primero se puede leer un mensaje de correo electrónico, luego leer la carta en un editor al responder, y luego hacer que el programa de correo lo lea nuevamente al copiarlo en una carpeta. O considere con qué frecuencia el comando
ls
se puede ejecutar en un sistema con muchos usuarios. Al leer la información del disco solo una vez y luego guardarla en la memoria hasta que ya no sea necesaria, se puede acelerar todo menos la primera lectura. Esto se denomina almacenamiento en búfer de disco, y la memoria utilizada para este fin se denomina caché de almacenamiento intermedio.Dado que, desafortunadamente, la memoria es un recurso limitado, es decir, escaso, la memoria caché del búfer generalmente no puede ser lo suficientemente grande (no puede contener todos los datos que uno quiera usar). Cuando el caché se llena, los datos que no se han utilizado durante más tiempo se descartan y la memoria liberada se usa para los nuevos datos.
El almacenamiento en búfer de disco también funciona para escrituras. Por un lado, los datos que se escriben a menudo se vuelven a leer pronto (por ejemplo, un archivo de código fuente se guarda en un archivo, luego el compilador lo lee), por lo que es una buena idea poner los datos que se escriben en el caché. Por otro lado, al solo poner los datos en la memoria caché, no escribirlos en el disco a la vez, el programa que escribe se ejecuta más rápido. Las escrituras se pueden hacer en segundo plano, sin ralentizar los otros programas.
fuente
Link 2 de Seth Robertson dijo "Para una comprensión profunda de esos términos, consulte el libro del kernel de Linux como Linux Kernel Development de Robert M. Love".
Encontré algunos contenidos sobre 'buffer' en la segunda edición del libro.
fuente
Buffer contiene metadatos que ayudan a mejorar el rendimiento de escritura
La memoria caché contiene el contenido del archivo en sí (a veces aún no se ha escrito en el disco) que mejora el rendimiento de lectura
fuente
Cita del libro: Introducción a la recuperación de información
Cache
Buffer
fuente
Un búfer es una región de la memoria que se usa para retener temporalmente los datos mientras se mueve de un lugar a otro dentro de una computadora. Mientras que un caché es un área de almacenamiento temporal donde los datos a los que se accede con frecuencia se pueden almacenar para un acceso rápido. Una vez que los datos se almacenan en la memoria caché, se puede hacer un uso futuro accediendo a la copia en caché en lugar de recuperar los datos originales, de modo que el tiempo de acceso promedio sea más corto.
fuente