zram: Decompression failed!

Con un ordenador y un sistema operativo nuevo toca encontrar y pulir detalles todo el tiempo. En esta ocasión lo que estaba viendo es que, cuando la máquina estaba muy cargada de CPU, se me morían procesos de vez en cuando. Tras experimentarlo varias veces en días diferentes, tras haber reiniciado el ordenador entre medias y notar esa aparente correlación entre la carga de CPU y los fallos de los programas, planteé dos hipótesis rápidas:

  • Que la máquina nueva está defectuosa y da problemas cuando se calienta mucho (carga de CPU elevada). Estamos en noviembre en Madrid, pero es cierto que yo torturo mis ordenadores cosa mala. Esta hipótesis se podría validar con una carga de CPU media y un secador de pelo, o advirtiendo si las incidencias suben o baja en función de la temperatura ambiental.
  • Memoria defectuosa, tal vez vinculada también a la temperatura. Para comprobar esta hipótesis lo más evidente sería utilizar una herramienta como memtest86, pero me llevé la gran sorpresa de que memtest86 no funciona en ordenadores con arranque UEFI, que es el caso de mi nuevo portátil.

Estaba dando vueltas al problema cuando se me ocurrió examinar los logs del sistema operativo y me encontré los siguientes mensajes de error:

[42028.302788] zram: Decompression failed! err=-22, page=1014500
[42054.078557] zram: Decompression failed! err=-22, page=723903
[42059.341537] zram: Decompression failed! err=-22, page=882298
[42059.341559] zram: Decompression failed! err=-22, page=882298
[42059.341564] Read-error on swap-device (252:2:7058384)
[42060.219105] zram: Decompression failed! err=-22, page=882298
[42060.219124] zram: Decompression failed! err=-22, page=882298
[42060.219128] Read-error on swap-device (252:2:7058384)
[42227.794573] zram: Decompression failed! err=-22, page=683032
[42624.876873] zram: Decompression failed! err=-22, page=922205
[42624.876898] zram: Decompression failed! err=-22, page=922205
[42624.876902] Read-error on swap-device (252:2:7377640)
[42626.831143] zram: Decompression failed! err=-22, page=662025
[42626.831160] zram: Decompression failed! err=-22, page=662025
[42626.831164] Read-error on swap-device (252:3:5296200)
[42630.433498] zram: Decompression failed! err=-22, page=905764
[42630.433517] zram: Decompression failed! err=-22, page=905764
[42630.433521] Read-error on swap-device (252:2:7246112)
[42989.405417] zram: Decompression failed! err=-22, page=877548
[42999.463318] zram: Decompression failed! err=-22, page=629447

Vaya, ¡parece que tenemos un ganador!

Llevo usando ZRAM muchos años sin problemas y con un gran beneficio, pero es cierto que esto es una máquina nueva y, sobre todo, un sistema operativo nuevo (Ubuntu 20.04).

Buscando el mensaje de error por internet encuentro que se trata de un problema conocido. Algunas referencias:

Resumiendo: hace unos meses el kernel de Linux añadió una optimización llamada ZSMALLOC_PGTABLE_MAPPING que beneficia sobre todo a máquinas de 32 bits. Esa optimización no funciona bien y causa corrupción al descomprimir bloques de la ZRAM precisamente cuando la CPU está muy cargada (condición de carrera). No había notado el problema hasta ahora porque estaba usando un sistema operativo más antiguo, no el nuevo Ubuntu 20.04.

Mi primer paso fue comprobar si mi kernel Ubuntu está compilado con esa opción o no:

jcea@jcea:~$ grep -i PGTABLE_MAPPING /boot/config-5.4.0-54-generic
CONFIG_PGTABLE_MAPPING=y

Vaya, parece que sí. El misterio se resuelve.

¿Qué hacer ahora? Lo más fácil es esperar a que Ubuntu publique una actualización de kernel con esa función desactivada. El problema es que no sé cuándo van a hacerlo o, siquiera, si considerarán que vale la pena. Además, mientras espero mi máquina seguiría comportándose de forma poco fiable.

La otra opción es compilar mi propio kernel. Esa fue mi elección, tal y como describo en ¿Cómo compilar un kernel nuevo en Ubuntu 20.04?

Actualización 20201214: La cosa no fue trivial, pero tuvo final feliz. Mientras tanto, Ubuntu todavía no ha sacado una actualización de kernel que solucione este problema. Menos mal que decidí morder la bala y currármelo yo.