Esta es una vieja pregunta que he visto de vez en cuando. Mi comprensión de esto es bastante limitada (después de haber leído acerca de las diferencias hace mucho tiempo, pero los factoides involucrados nunca se pegaron realmente).
Según lo entiendo,
Tampones
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, almacenamientos intermedios que se han vaciado o datos leídos del disco para satisfacer una solicitud.
¿Puedo obtener una explicación clara de la posteridad?
linux
memory
virtual-memory
Avery Payne
fuente
fuente
Respuestas:
El total "en caché" también incluirá algunas otras asignaciones de memoria, como cualquier sistema de archivos tmpfs. Para ver esto en efecto, intente:
y verá que el valor de "caché" cae por los 100Mb que copió al sistema de archivos basado en ram (suponiendo que haya suficiente RAM libre, puede encontrar que parte de él terminó en intercambio si la máquina ya está comprometida en exceso en términos de uso de memoria). El "sync; echo 3> / proc / sys / vm / drop_caches" antes de cada llamada a free debería escribir cualquier cosa pendiente en todos los buffers de escritura (la sincronización) y borrar todos los bloques de disco en caché / buffer de la memoria, por lo que 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 se puede contar en el valor "en caché" de la libre, al igual que la RAM utilizada por los archivos mapeados en memoria actualmente abiertos (esto variará dependiendo del hipervisor / versión que esté utilizando y posiblemente entre versiones del kernel también).
Por lo tanto, no es tan simple como "los buffers cuentan las escrituras de archivos / redes pendientes y los recuentos en caché de los bloques leídos / escritos recientemente guardados en la RAM para guardar futuras lecturas físicas", aunque para la mayoría de los propósitos esta descripción más simple servirá.
fuente
Pregunta capciosa. Cuando calcula el espacio libre, realmente necesita agregar el búfer y la memoria caché. Esto es lo que pude encontrar
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.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
fuente
Estaba buscando una descripción más clara sobre el búfer y encontré en
"Professional Linux® Kernel Architecture 2008"
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 usará 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 trata de 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. La memoria 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 libre disponible, el núcleo ejecutará heurística para reclamar la memoria almacenando los datos de la memoria 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
Liberación de búfer / caché
Advertencia ¡ Esto explica un método fuerte no recomendado en el servidor de producción! Así que estás advertido, no me culpes si algo sale mal.
Para comprenderlo, podría forzar a su sistema a delegar la mayor cantidad de memoria posible para luego
Preámbulocache
soltar el archivo en caché:Antes de hacer la prueba, puedes abrir otra ventana y un hit:
para seguir la evolución del intercambio en tiempo real.
Nota: Debe disponer de tantos discos libres en el directorio actual, tiene mem + swap
La demoNota, el host en el que he hecho esto es muy utilizado. Esto será más significativo en una máquina realmente silenciosa.
fuente