
Hice dos experimentos.
El primer experimento (Ubuntu 20.04, sistema de archivos ext4):
- Ejecutar comando
free -h -w
:
$ free -h -w
total used free shared buffers cache available
Mem: 30Gi 2,6Gi 25Gi 106Mi 126Mi 2,1Gi 27Gi
- Ejecutar comando
sudo find / | grep something
- Ejecute el comando
free -h -w
nuevamente y observe un aumento significativo (aproximadamente 1 G) de la columna "buffers" y también un aumento de la columna "caché" (aproximadamente 500 M):
$ free -h -w
total used free shared buffers cache available
Mem: 30Gi 2,6Gi 24Gi 106Mi 1,2Gi 2,6Gi 27Gi
El segundo experimento (misma PC):
- Ejecutar comando
free -h -w
:
$ free -h -w
total used free shared buffers cache available
Mem: 30Gi 2,6Gi 24Gi 106Mi 1,2Gi 2,6Gi 27Gi
- Ejecute el comando
dd if=/dev/nvme0n1p2 of=/dev/null bs=1M count=500
: su disco sería otro aquí - Ejecute el comando
free -h -w
nuevamente y observe un aumento de 500 M en los buffers:
$ free -h -w
total used free shared buffers cache available
Mem: 30Gi 2,6Gi 24Gi 115Mi 1,7Gi 2,6Gi 27Gi
Entonces la pregunta es: ¿por qué buffers
se aumentó la columna en el primer caso y por qué en el segundo caso? He leído esto¿Qué es la columna de buffers en la salida de free?pero las respuestas aquí no son apropiadas para mí.
Dicen que "la columna de búfer contiene metadatos sobre archivos", pero es incorrecto, porque es la columna de "caché" la que cuenta losas para inodo, dentry y buffer_head (que en realidad son metadatos de archivos). man free
También nos dice que cache
la columna contiene SReclaimable
.
También dicen que "la columna de búfer contiene caché de bloques de dispositivos de bloque", y se parece más a la verdad, explica por qué buffers
aumentó cuando ejecuté dd
, pero no explica por qué buffers
la columna aumentó cuando ejecuté find
el comando. E incluso en el caso de dd
: ¿por qué lo necesitamos si ya tenemos caché de archivos? Nadie lee/escribe directamente desde/para bloquear dispositivos, excepto discos DVD.
Respuesta1
Encontré la respuesta aquí:¿Cómo identificar la causa del gran uso de la memoria intermedia?
Parece que Linux almacena los inodos de los archivos dos veces: la primera vez como ext4_inode_cache
/ inode_cache
en losas (observé un aumento en el tamaño de estas losas con slabtop
el comando) y la segunda vez en buffers (porque los inodos se leen directamente desde los dispositivos de bloque, y todos los bloques que se leyeron directamente desde los dispositivos de bloque se almacenan en buffers). Entonces, cuando ejecuto find
el comando, Linux lee los bloques de inodos del dispositivo de bloque, los guarda en búferes y luego crea el caché de inodos en losas. Como resultado, aumentan tanto las columnas cache
como buffers
en la salida.free