Comparación de algoritmos de compresión ZRAM en Raspberry PI

Advertencia

En este artículo solo me interesa utilizar el algoritmo de compresión con mayor reducción. En otras situaciones habrá que tener en cuenta también el impacto en consumo de CPU, pero esto no es un factor en mi caso de uso.

Ten en cuenta que en tu caso puedes valorar otras cosas. Depende de tus necesidades concretas.

En Cómo y por qué utilizar ZRAM como "espacio de intercambio" o SWAP comparo el nivel de compresión de varios algoritmos en mi portátil, con mi perfil de uso del portátil.

Como explico allí, uno de los entornos donde ZRAM es más interesante es en una Raspberry PI, porque por un lado no queremos quemar la microSD con las grabaciones del espacio de intercambio y, por otro, el tamaño de la RAM disponible en una Raspberry PI es limitado y no se puede ampliar.

Las comparativas del nivel de compresión que extraje de mi portátil son útiles, pero prefiero hacer las pruebas también en mi Raspberry PI, fundamentalmente porque el perfil de uso es muy diferente y los resultados de la compresión serán distintos.

La configuración de dispositivos ZRAM es similar a lo explicado en Cómo y por qué utilizar ZRAM como "espacio de intercambio" o SWAP, así que no voy a repetirla aquí. Lo más importante es ver qué algoritmos de compresión tenemos disponibles y probarlos todos. Para ello, una vez que ya hemos creado algún dispositivo ZRAM, podemos preguntarle qué algoritmos de compresión soporta:

root@osmcpi:~# cat /sys/block/zram0/comp_algorithm
lzo lzo-rle lz4 zstd [deflate]

En esta versión del Sistema Operativo tenemos cinco algoritmos de compresión disponibles para ZRAM. Los probamos todos con mi caso de uso y vemos el resultado tras achuchar un poco la Raspberry PI:

root@osmcpi:~# free; zramctl
              total        used        free      shared  buff/cache   available
Mem:         943444      864652       45356          12       33436       42956
Swap:       5242860     1094232     4148628
NAME       ALGORITHM DISKSIZE   DATA  COMPR  TOTAL STREAMS MOUNTPOINT
/dev/zram4 zstd            1G 210.2M  86.5M  91.1M       4 [SWAP]
/dev/zram3 lz4             1G 212.9M   114M 119.5M       4 [SWAP]
/dev/zram2 lzo-rle         1G 211.9M 112.9M 118.6M       4 [SWAP]
/dev/zram1 lzo             1G 214.9M 113.4M 119.1M       4 [SWAP]
/dev/zram0 deflate         1G 216.7M    87M  91.5M       4 [SWAP]

La tabla de compresión es la siguiente:

lz4 1.78
lzo-rle 1.79
lzo 1.80
zstd 2.31
deflate 2.37

Como puede verse, la tasa de compresión es bastante peor que en mi portátil. Es una lástima, pero es normal que haya diferencias porque el perfil de uso es muy distinto.

El sistema de compresión más efectivo, para este caso, es deflate seguido de cerca por zstd. Dado que la diferencia en compresión es pequeña y zstd es bastante más eficiente en CPU, podría interesar utilizarlo.

Volviendo a hacer la prueba solo con los ZRAM usando los algoritmos más interesantes, tenemos:

root@osmcpi:~# free; zramctl
              total        used        free      shared  buff/cache   available
Mem:         943444      713180      127684        2468      102580      186748
Swap:       1048568      985796       62772
NAME       ALGORITHM DISKSIZE   DATA  COMPR  TOTAL STREAMS MOUNTPOINT
/dev/zram1 zstd          512M 497.7M 205.9M 215.5M       4 [SWAP]
/dev/zram0 deflate       512M 460.5M 187.6M 196.4M       4 [SWAP]

La tabla de compresión queda así:

zstd 2.31
deflate 2.34

El nivel compresión es bastante comparable. Por tanto, puede interesar valorar un atributo secundario como el consumo de CPU.