¿Cómo soluciono el error "NVRM: GPU 0000:01:00.0: GPU has fallen off the
bus." en Ubuntu 20.04LTS?

Reunido en la Confederación General del Trabajo, Juan Perón expone sobre
los peligros que supone una desconsideración humana sobre los factores
ecológicos en su evolución, toda vez que explica cómo solucionar el
problema del cuelgue de la gráficas 3D de las placas de video nVidia en
Ubuntu.

(...) Frente al imperativo de la evolución, nosotros debemos pensar que
quizás antes del año 2000 - en el que se doblará la actual población de
la tierra y disminuirá a la mitad la materia prima para seguir viviendo
- se va a tener que producir indefectiblemente la integración universal.
Es decir, que los hombres se pongan de acuerdo en la defensa total de la
tierra, y en la utilización de la tierra como hermanos y no como
enemigos unos de otros.

Además de eso será necesario que se satisfaga la solución a esa
superpoblación. Cuando en la tierra ha habido superpoblación - porque
eso se ha producido ya en algunas regiones, ya que obedece no al número
de habitantes solamente, sino a la desproporción entre el número de
habitantes y los medios de subsistencia - las soluciones han sido
siempre de dos naturalizas.

Uno es la supresión biológica, es decir matar gente, de lo que se
encargan las guerras, las pestes y el hambre, que es la enfermedad que
más mata en la tierra. El otro es el reordenamiento geopolítico, que
permite una mayor producción y una mejor distribución de los medios de
subsistencia.

Si el hombre - en esto que resta hasta ese momento del año 2000 y
comienzos del siglo XXI - no ha resuelto el problema por la vía
geopolítica produciendo más y distribuyendo con mayor justicia lo que el
hombre necesita para subsistir, no quedará otro remedio que lanzar en
masa la bomba atómica, que también puede ser una solución si la
insensatez de los hombres no ha utilizado el camino constructivo y se ha
decidido por el destructivo.

Nuestro sistema opera por designio - a todas las luces similar. Veamos
un ejemplo, los cuales suelen explicarlo todo.

En mi sistema dispongo de una placa madre ESC H57H-Mus, cuya electrónica
principal sirve de base para un microprocesador Intel i7, 16 GB de
memoria RAM, y varios discos de estado sólido que utilizo como
almacenamiento. Este equipo no es ya lo más moderno que dispone la
técnica, pero al satisfacer mis necesidades computacionales, lo he
mantenido remozado como corresponde, por ejemplo con una adaptadora de
video nVidia GTX 750 Ti. A este hardware veterano he instalado nuevo
software, de excelencia, el Ubuntu Mate 20.04LTS.

Lamentablemente, las nuevas iteraciones del Kernel Linux hacen amplio
uso de excelentes condiciones de suspensión y ahorro energético para
varios subsistemas (sonido, video, etcétera). Estas características
nuevas del software, sin embargo, no son tratadas de forma reticente por
la veterana placa madre, y suelen presentar errores bajo diferentes
situaciones.

En particular, utilizo el el controlador de video nVidia 440.10 x64
junto con el Kernel 5.4.0-42-generic de Ubuntu Mate. Bajo condiciones de
uso de escritorio y aplicaciones 3D con sonido, el sistema gráfico se
interrumpe y congela, sin que se cuelgue todo el sistema. Esto se
produce sobre todo al utilizar durante un tiempo aplicaciones de
escritorio con sonido y efectos de video tridimensional. En tales casos
no podremos utilizar el escritorio, y la única forma de recuperar
control es resetear el sistema.

Afortunadamenet, al no colgarse completamente, si el sistema cuenta con
un servicio SSH será posible ingresar al mismo desde otro equipo en la
red, y así será posible realizar algunos chequeos de lo que ha causado
el error. Mediante el comando dmesg podremos revisar el status del
sistema, y encontramos el siguiente error: "GPU 0000:01:00.0: GPU has
fallen off the bus" ("la Unidad de Procesamiento gráfico xxx se ha
desconectado del bus").

[26959.161910] NVRM: GPU at PCI:0000:01:00: GPU-2f0e77b9-a938-5e53-1b55-f5b4ab0ad918
[26959.161922] NVRM: Xid (PCI:0000:01:00): 79, pid=1373, GPU has fallen off the bus.
[26959.161929] NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
[26959.161948] NVRM: A GPU crash dump has been created. If possible, please run
               NVRM: nvidia-bug-report.sh as root to collect this data before
               NVRM: the NVIDIA kernel module is unloaded.

También podríamos ejecutar el programa de reporte de bugs, con:

sudo ./usr/bin/nvidia-bug-report.sh

El problema de desconexión microtemporal de la GPU del resto del bus de
control se debe a la funcionalidad de ahorro energético. Esta es capaz
de pone en espera o"StandBy" a los clientes gráficos, pero el bus
gráfico de la placa madre no lo vuelve a encender con la prontitud
suficiente y provoca el cuelgue gráfico.

Para solucionar el problema, necesitaremos activar el Modo Persistencia.
El Modo Persistencia es un control interno que activa ("Enabled") o
desactiva ("Disabled") esta operatoria en la GPU de nuestra placa de
video. Cuando el Modo de Persistencia está activado, el controlador
nVidia permanecerá cargado en memoria incluso cuando no existan
programas activos que lo usen (tal como el servidor gráfico X11,
escritorios gráficos, o el programa nvidia-smi). Lograremos así
disminuir la latencia de carga del controlador asociada con la ejecución
de varias aplicaciones gráficas tridimensionales dependientes del mismo.

Para verificar el estado actual del Modo de Persistencia de nuestro
controlador nVidia e, abrimos una terminal con Ctrl+Alt+t e ingresamos
el siguiente Comando de Organización:

sudo /usr/bin/nvidia-smi -q | grep -i Persistence

...el sistema nos devolverá el estado del mismo, que en este caso
debería ser Disabled, por "desactivado":

Persistence Mode  : Disabled

Para activar el Modo de Persistencia desde la línea de comandos,
podremos ingresar lo siguiente:

sudo /usr/bin/nvidia-smi -pm 1

Nuestro GNU con Linux nos solicitará nuestra contraseña para hacerlo
efectivo. Conforme la hayamos ingresado, debería activarse, lo cual
quedará indicado con el siguiente mensaje:

Enabled persistence mode for GPU 00000000:01:00.0.
All done.

El problema de esta solución radica en que su acción sólo será temporal,
y se revertirá toda vez que reiniciemos nuestro sistema. Nuestro
Movimiento es uno que debe propender a lograr soluciones permanentes
para los problemas de los argentinos. Por tal motivo, si quisiéramos que
el Modo de Persistencia sea realmente persistente en el tiempo,
podríamos hacer que este comando que lo active se ejecute
automáticamente toda vez que se inicie el sistema, y antes de comenzar
el despliegue gráfico. Como ventaja añadida, esto no requerirá que se
ingrese la contraseña de Conductor.

Para ello es necesario activar y usar el método tradicional de
autoejecución en GNU, el fichero /etc/rc.local. Este se encuentra
desactivado en Ubuntu 18.04LTS y superiores, pero podrán activarlo
siguiendo estos pasos generales que os he indicado.

Una vez realizado dicho procedimiento, quedará presente el fichero
rc.local, y por lo tanto podremos editarlo para que cumpla esta tarea
fundamental a fin de que no se cuelgue nuestro video nVidia. Podremos
hacerlo ingresando el siguiente comando:

sudo nano /etc/rc.local

...lo cual abrirá el editor GNU Nano con el fichero /etc/rc.local.
Debemos pegamos las siguientes líneas antes de la última línea del
archivo, la cual debe ser siempre "exit 0":

## Agregado para activar el modo de persistencia
## del controlador NVIDIA.
/usr/bin/nvidia-smi -pm 1

Guardamos con Ctrl+o y salimos del editor con Ctrl+x. Le asignamos
permisos de ejecución con:

sudo chmod +x /etc/rc.local

...y finalmente reiniciamos el sistema con:

sudo reboot

A la vuelta, hemos de comprobar que el Modo Persistencia esté activado.
Para ello ingresamos nuevamente:

/usr/bin/nvidia-smi -q | grep -i Persistence

...a lo cual ahora el sistema debería devolvernos:

Persistence Mode  : Enabled

Y ya no se debería colgar más la instancia gráfica, a coste de un lógico
mayor consumo de recursos computacionales por parte de las aplicaciones
gráficas no cerradas que hagan uso de nuestra GPU en Linux.