AMDGPU, memoria y fallos misteriosos: La solución
Hoy amanecí con la PC hecha un desmadre. Aplicaciones como Firefox y Chrome se cerraban de la nada con volcados de memoria y el escritorio se sentía lento, como si algo estuviera atorando los engranes. La neta, pensé que había roto algo en mi configuración, pero el problema resultó ser algo mucho más oscuro en la gestión de memoria de la GPU.
Si tienes una tarjeta AMD moderna (como mi RX 7900 XTX) y sufres de cierres aleatorios, esto te interesa.
El síntoma y la bitácora
Como siempre, cuando algo falla, lo primero es ir al chismógrafo del sistema: la bitácora (journal).
journalctl -p 3 -xb
Entre el mar de letras, encontré este error repetido una y otra vez, justo cuando las aplicaciones tronaban:
kernel: amdgpu: init_user_pages: Failed to get user pages: -1
Este mensaje es clave. Básicamente, el controlador de AMD (amdgpu) estaba intentando reservar o "anclar" memoria RAM para trabajar, pero el sistema le decía "¡Nel, pastel!".
¿Por qué pasa esto?
Resulta que estas tarjetas gráficas bestiales necesitan bloquear mucha memoria para funcionar chingón. Sin embargo, los límites por defecto de seguridad del usuario (ulimit) para memlock (memoria bloqueada) suelen ser bajísimos (tipo 64KB o un poco más).
Cuando la GPU pide más y topa con el límite, falla la operación y ¡pum! Se lleva de corbata a la aplicación que estaba usando la aceleración gráfica.
La solución
El arreglo es bien fácil, nomás hay que decirle al sistema que no sea codo con la memoria bloqueada para el usuario.
Creé un archivo de configuración en /etc/security/limits.d/99-amdgpu.conf con el siguiente contenido:
* soft memlock unlimited
* hard memlock unlimited
Note
Usé * para que aplique a todos los usuarios, pero podrías poner tu usuario específico si te pones exigente. Y sí, unlimited suena peligroso, pero para una estación de trabajo personal con estos fierros, es lo que se necesita.
Después de guardar el archivo, reinicié la máquina (o puedes cerrar sesión y volver a entrar) para que los cambios surtieran efecto.
Conclusión
Santo remedio. Los fallos desaparecieron y todo se siente fluido otra vez.
A veces los problemas más molestos son nomás un numerito mal configurado en un archivo de texto. Si tienes una Radeon serie 7000 y andas batallando, checa tus ulimits antes de culpar a los controladores.
¿Te ha pasado? Ahí me cuentas.