La razón por la que aumentan los buffers en la salida del comando "free -h"

La razón por la que aumentan los buffers en la salida del comando "free -h"

Hice dos experimentos.

El primer experimento (Ubuntu 20.04, sistema de archivos ext4):

  1. 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
  1. Ejecutar comandosudo find / | grep something
  2. Ejecute el comando free -h -wnuevamente 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):

  1. 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
  1. Ejecute el comando dd if=/dev/nvme0n1p2 of=/dev/null bs=1M count=500: su disco sería otro aquí
  2. Ejecute el comando free -h -wnuevamente 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é buffersse 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 freeTambién nos dice que cachela 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é buffersaumentó cuando ejecuté dd, pero no explica por qué buffersla columna aumentó cuando ejecuté findel 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_cacheen losas (observé un aumento en el tamaño de estas losas con slabtopel 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 findel 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 cachecomo buffersen la salida.free

información relacionada