GNU/Linux >> Tutoriales Linux >  >> Linux

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

Solución 1:

El total "almacenado en caché" también incluirá otras asignaciones de memoria, como cualquier sistema de archivos 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é" cae en los 100 Mb que copió en el sistema de archivos basado en ram (suponiendo que hubiera suficiente RAM libre, es posible que parte de ella termine en intercambio si la máquina ya está comprometida en exceso en términos de uso de la 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 búferes de escritura (la sincronización) y borrar todos los bloques de disco almacenados en caché/en búfer de la memoria para que free solo lea otros asignaciones en el valor "almacenado".

La RAM utilizada por las máquinas virtuales (como las que se ejecutan bajo VMWare) también puede contarse en el valor "almacenado en caché" gratuito, al igual que la RAM utilizada por los archivos asignados en memoria actualmente abiertos (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 "recuentos de búfer pendientes de escrituras de archivos/redes y recuentos en caché de bloques leídos/escritos recientemente guardados en RAM para guardar futuras lecturas físicas", aunque para la mayoría de los propósitos esta descripción más simple servirá.

Solución 2:

Pregunta capciosa. Cuando calcula el espacio libre, en realidad necesita sumar el búfer y el 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

Solución 3:

Estaba buscando una descripción más clara sobre el búfer y la encontré en "Professional Linux® Kernel Architecture 2008"

Capítulo 16:Página y caché de búfer

Interacción

Establecer un vínculo entre las páginas y los búfers sirve de poco si no hay beneficios para otras partes del núcleo. Como ya se señaló, es posible que algunas operaciones de transferencia hacia y desde dispositivos de bloque deban realizarse en unidades cuyo tamaño depende del tamaño del bloque de los dispositivos subyacentes, mientras que muchas partes del núcleo prefieren realizar operaciones de E/S con granularidad de página, ya que esto facilita mucho las cosas. — especialmente en términos de gestión de memoria. En este escenario, los amortiguadores actúan como intermediarios entre los dos mundos.

Solución 4:

Explicado por RedHat :

Páginas de caché:

Un caché es la parte de la memoria que almacena datos de manera transparente para que las futuras solicitudes de esos datos se puedan atender más rápido. Esta memoria es utilizada por el núcleo 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 sus sistemas de archivos y discos locales y remotos. A medida que pasa el tiempo y se realizan varias lecturas y escrituras en el sistema, el 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 utilizarán en un futuro próximo. El caché no se recupera en el momento en que el proceso se detiene o sale; sin embargo, cuando los otros procesos requieren más memoria que la memoria libre disponible, el kernel ejecutará la heurística para recuperar la memoria almacenando los datos del caché y asignando esa memoria al nuevo proceso.

Cuando se solicita cualquier tipo de archivo/datos, el kernel buscará una copia de la parte del archivo en la que el usuario está actuando y, si no existe tal copia, asignará una nueva página de memoria caché y la llenará con el contenido apropiado leído 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 se almacenan en otro lugar 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 desde el caché que desde su 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.

Búferes:

Los búferes son la representación de bloque de disco de los datos que se almacenan en las cachés de página. Los búferes contienen los metadatos de los archivos/datos que residen en la 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 núcleo verifica los datos en los búferes que contienen los metadatos que apuntan a los archivos/datos reales contenidos en los cachés de la página. Una vez que se conoce la dirección de bloque real del archivo a partir de los metadatos, el kernel lo recoge para procesarlo.

Solución 5:

Liberar búfer/caché

Advertencia ¡Esto explica un método fuerte que no se recomienda en el servidor de producción! Así que estás advertido, no me culpes si algo sale mal.

Para entender, la cosa, podrías forzar su sistema para delegar tanta memoria como sea posible a cache que soltar el archivo en caché:

Preámbulo

Antes de hacer la prueba, puede abrir otra ventana y hacer clic:

$ vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  1  39132  59740  39892 1038820    0    0     1     0    3    3  5 13 81  1
 1  0  39132  59140  40076 1038812    0    0   184     0 10566 2157 27 15 48 11
...

para seguir la evolución del swap en tiempo real.

Nota: Debe deshacerse de tantos discos libres en el directorio actual, tiene mem+swap

La demostración
$ free
         total       used       free     shared    buffers     cached
Mem:       2064396    2004320      60076          0      90740     945964
-/+ buffers/cache:     967616    1096780
Swap:      3145720      38812    3106908

$ tot=0
$ while read -a line;do
      [[ "${line%:}" =~ ^(Swap|Mem)Total$ ]] && ((tot+=2*${line[1]}))
    done </proc/meminfo
$ echo $tot
10420232

$ dd if=/dev/zero of=veryBigFile count=$tot
10420232+0 records in
10420232+0 records out
5335158784 bytes (5.3 GB) copied, 109.526 s, 48.7 MB/s

$ cat >/dev/null veryBigFile

$ free
             total       used       free     shared    buffers     cached
Mem:       2064396    2010160      54236          0      41568    1039636
-/+ buffers/cache:     928956    1135440
Swap:      3145720      39132    3106588

$ rm veryBigFile 

$ free
         total       used       free     shared    buffers     cached
Mem:       2064396    1005104    1059292          0      41840      48124
-/+ buffers/cache:     915140    1149256
Swap:      3145720      39132    3106588

Nota, el host en el que he hecho esto es muy usado. Esto será más significativo en una máquina realmente silenciosa.


Linux
  1. ¿Cuál es la diferencia entre un contenedor de Linux y una imagen?

  2. Cómo eliminar búferes de memoria y caché en Linux

  3. ¿Cuál es la diferencia entre las opciones -i y -U utilizadas en el comando rpm en Linux?

  4. ¿Cuál es la diferencia entre el búfer y la memoria caché en Linux?

  5. ¿Cuál es la diferencia entre 'localizar' y 'buscar' en Linux?

¿Cuál es la diferencia entre los núcleos de macOS y Linux?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Rsync y BTRFS en Linux?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Cuál es la diferencia entre los comandos kill y killall?

¿Cuál es la diferencia entre DMA y E/S mapeada en memoria?