top - ver memoria ram linux terminal
¿Cuál es la diferencia entre buffer vs memoria caché en Linux? (10)
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 buffer es primero en entrar, primero en salir
- la política de caché es de uso reciente.
¿Estoy en lo cierto?
En particular, estoy viendo los dos comandos: free
y vmstat
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
Los búferes están asociados a un dispositivo de bloque específico, y cubren el almacenamiento en caché de los metadatos del sistema de archivos, así como el seguimiento de las páginas en vuelo. La memoria caché solo contiene datos de archivos estacionados. Es decir, los almacenamientos intermedios recuerdan qué hay en los directorios, qué permisos de archivos existen y realizan un seguimiento de qué memoria se está escribiendo o leyendo para un dispositivo de bloques en particular. La memoria caché solo contiene el contenido de los archivos.
Creo que esta página ayudará a entender la diferencia entre el buffer y el caché profundamente. http://www.tldp.org/LDP/sag/html/buffer-cache.html
Leer desde un disco es muy lento comparado con acceder a la memoria (real). Además, es común leer la misma parte de un disco varias veces durante periodos de tiempo relativamente cortos. Por ejemplo, uno podría leer primero un mensaje de correo electrónico, luego leer la carta en un editor cuando responda, y luego hacer que el programa de correo lo lea nuevamente al copiarlo en una carpeta. O bien, tenga en cuenta la frecuencia con que el comando ls
se puede ejecutar en un sistema con muchos usuarios. Al leer la información del disco solo una vez y luego mantenerla en la memoria hasta que ya no se necesite, se puede acelerar todo menos la primera lectura. Esto se llama almacenamiento en búfer de disco, y la memoria utilizada para este fin se llama memoria caché de búfer.
Como la memoria es, desafortunadamente, un recurso finito, es más, escaso, la memoria caché del buffer por lo general no puede ser lo suficientemente grande (no puede contener todos los datos que uno quiera usar). Cuando la memoria caché se llena, los datos que no han sido utilizados por más tiempo se descartan y la memoria así liberada se usa para los nuevos datos.
El almacenamiento en búfer de disco también funciona para las 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 y luego lo lee el compilador), por lo que poner datos escritos en el caché es una buena idea. Por otro lado, al solo poner los datos en la caché, no escribirlos en el disco de una vez, el programa que escribe se ejecuta más rápido. Las escrituras se pueden hacer en segundo plano, sin ralentizar los otros programas.
El Enlace 2 de Seth Robertson decía: "Para una comprensión completa de esos términos, refiérase al libro del kernel de Linux, como Desarrollo del Kernel de Linux por Robert M. Love".
Encontré algunos contenidos sobre ''buffer'' en la segunda edición del libro.
Aunque el dispositivo físico en sí es direccionable a nivel de sector, el kernel realiza todas las operaciones de disco en términos de bloques.
Cuando un bloque se almacena en la memoria (por ejemplo, después de una lectura o pendiente de una escritura), se almacena en un ''buffer''. Cada ''buffer'' está asociado con exactamente un bloque. El ''buffer'' sirve como el objeto que representa un bloque de disco en la memoria.
Un ''buffer'' es la representación en memoria de un solo bloque de disco físico.
Las operaciones de E / S de bloque manipulan un solo bloque de disco a la vez. Una operación de E / S de bloque común es leer y escribir inodos. El kernel proporciona la función bread () para realizar una lectura de bajo nivel de un solo bloque del disco. A través de ''búferes'', los bloques de discos se asignan a sus páginas en memoria asociadas. "
El búfer contiene metadatos que ayudan a mejorar el rendimiento de escritura El caché contiene el contenido del archivo en sí (a veces aún no se escribe en el disco) lo que mejora el rendimiento de lectura
Explicado por RedHat :
Páginas de caché:
Una memoria caché es la parte de la memoria que almacena datos de forma transparente para que las futuras solicitudes de datos se puedan atender con mayor rapidez. 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á la mayor cantidad de RAM posible para almacenar en caché la información de los sistemas de archivos y discos locales y remotos. A medida que pasa el tiempo, se realizan varias lecturas y escrituras en el sistema, kernel 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 usarán en el futuro cercano. El caché no se recupera en el momento en que el proceso obtiene detener / salir, sin embargo, cuando los otros procesos requieren más memoria que la memoria disponible, el núcleo ejecutará heurísticas para reclamar la memoria almacenando los datos de caché y asignando esa memoria a un nuevo proceso.
Cuando se solicita cualquier clase de archivo / datos, el kernel buscará una copia de la parte del archivo sobre la que actúa el usuario y, si no existe dicha copia, asignará una nueva página de memoria caché y la rellenará con los contenidos apropiados leídos del disco.
Los datos que se almacenan dentro de un caché pueden ser valores que se han calculado anteriormente o duplicados de valores originales que están almacenados en otro lugar del disco. Cuando se solicitan algunos datos, primero se verifica la caché para ver si contiene esos datos. Los datos se pueden recuperar más rápidamente desde la memoria caché que desde su origen.
Los segmentos de memoria compartida SysV también se contabilizan como un caché, aunque no representan ningún dato en los discos. Se puede verificar el tamaño de los segmentos de memoria compartida utilizando el comando ipcs -m y verificar la columna de bytes.
Buffers:
Los búferes son la representación en bloque de disco de los datos que se almacenan debajo de los cachés de página. Buffers contiene los metadatos de los archivos / datos que se encuentran debajo de la memoria caché de la página. Ejemplo: Cuando hay una solicitud de cualquier dato que esté presente en la caché de la página, primero el kernel verifica los datos en los buffers que contienen los metadatos que apuntan a los archivos / datos reales contenidos en las cachés de página. Una vez que se conocen los metadatos, se conoce la dirección de bloque real del archivo, que el kernel recoge para su procesamiento.
Los "búferes" representan la cantidad de RAM dedicada a los bloques de disco en caché. "Cached" es similar a "Buffers", solo que esta vez almacena en caché las páginas de la lectura del archivo.
cita de:
No es "tan" 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 al tanto aquí.
La memoria caché es para almacenar el contenido real del archivo.
Un búfer es una región de memoria utilizada para guardar datos temporalmente 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 uso en el futuro accediendo a la copia almacenada en caché en lugar de recuperar los datos originales, de modo que el tiempo promedio de acceso sea más corto.
búfer y caché.
Un buffer es algo que aún debe ser "escrito" en el disco.
Un caché es algo que ha sido "leído" desde el disco y almacenado para su uso posterior.
Respuesta citada (para referencia):
Respuesta corta: en caché es el tamaño de la memoria caché de la página. Los búfers son del tamaño de los búferes de E / S de bloques en memoria. Asuntos almacenados en caché; Buffers es en gran medida irrelevante.
Respuesta larga: el caché es el tamaño de la memoria caché de la página Linux, menos la memoria en la memoria caché de intercambio, que se representa mediante SwapCached (por lo tanto, el tamaño total de la caché de la página se almacena en caché + SwapCached). Linux realiza todas las E / S de archivos a través de la memoria caché de la página. Las escrituras se implementan simplemente marcando como sucias las páginas correspondientes en la memoria caché de la página; los hilos de descarga luego escriben periódicamente en el disco las páginas sucias. Las lecturas se implementan al devolver los datos de la memoria caché de la página; si los datos aún no están en la memoria caché, primero se rellena. En un sistema Linux moderno, Cached puede fácilmente ser de varios gigabytes. Se encogerá solo en respuesta a la presión de la memoria. El sistema purgará la memoria caché de la página junto con el intercambio de datos en el disco para proporcionar más memoria según sea necesario.
Los búferes son búferes de E / S de bloques en memoria. Son relativamente efímeros. Antes de Linux kernel versión 2.4, Linux tenía cachés de memoria y página separados. Desde 2.4, la página y la memoria caché de búfer están unificados y Buffers son bloques de disco raw no representados en la memoria caché de la página, es decir, no datos de archivo. La medida de Buffers es por lo tanto de importancia mínima. En la mayoría de los sistemas, Buffers suele ser solo de decenas de megabytes.