El sistema de archivos zram informa un uso diferente a nivel de dispositivo al informado por el sistema de archivos

El sistema de archivos zram informa un uso diferente a nivel de dispositivo al informado por el sistema de archivos

Tenemos un dispositivo zram de 80 GB definido en nuestro host, y dentro de este un sistema de archivos ext4 de 170 GB:

  echo 170G > /sys/block/zram0/disksize
  echo 80G  > /sys/block/zram0/mem_limit
  /usr/sbin/mkfs.ext4 -q -m 0 /dev/zram0
  /usr/bin/mount /dev/zram0 /var/zram

Nuestra aplicación utiliza este sistema de archivos para acceder rápidamente a grandes cantidades de datos efímeros.

El tamaño del sistema de archivos que se muestra en dfcoincide con el tamaño de zram como se informa en/sys/block/zram0/disksize

Al copiar los datos de prueba en un sistema de archivos vacío, verificamos que se logra una relación de compresión de 2,2: 1, por lo que el sistema de archivos se llena antes de alcanzar el límite de memoria de zramfs. El /sys/block/zram0/orig_data_sizevalor coincide con el uso informado por el sistema de archivos:

# expr `cat orig_data_size` / 1024 ; df -k /dev/zram0
112779188
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/zram0     175329308 112956600  62356324  65% /var/zram

Sin embargo, cuando la aplicación se ejecuta con datos en vivo durante un período más largo, descubrimos que ya no coincide.

# expr `cat orig_data_size` / 1024 ; df -k /dev/zram0
173130200
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/zram0     175329308 112999496  62313428  65% /var/zram

Ahora, el sistema de archivos informa un uso de aproximadamente 110 GB, pero el dispositivo zramfs informa 165 GB. Al mismo tiempo, la memoria de zramfs se agota y el sistema de archivos pasa a ser de sólo lectura.

Las cifras de zram confirman que estamos obteniendo una relación de compresión de 2,2: 1 entre orig_data_size y compr_data_size; sin embargo,¿Por qué el sistema de archivos muestra mucho más espacio libre que el dispositivo zram? Incluso si se trata de espacio ya asignado para su reutilización por el sistema de archivos, ¿no debería reutilizarse en lugar de asignar espacio nuevo?

Los datos constan de una gran cantidad de archivos pequeños que se agregan y eliminan a intervalos irregulares.

Respuesta1

La causa de esto resulta ser que cuando se eliminan archivos del sistema de archivos ext4 que se encuentra en el dispositivo zram0, la memoria no se libera nuevamente al sistema. Esto significa que, aunque el espacio está disponible para que lo use el sistema de archivos (la salida de df), todavía se le asigna memoria (las estadísticas en /sys/block/zram0). Como resultado, el uso de memoria alcanza el 100% de la asignación, aunque el sistema de archivos todavía se encuentra medio lleno debido a las eliminaciones.

Esto significa que aún puede llenar el sistema de archivos y los archivos nuevos no utilizarán tanto espacio de memoria nuevo; sin embargo, afecta negativamente la relación de compresión.

La solución es montar el sistema de archivos con las opciones discardy noatime. Los discardlanzamientos liberaron espacio de archivos en el dispositivo de memoria y, como resultado, el uso en las dos coincidencias volvió a ser posible.

información relacionada