Nova, el nuevo controlador escrito en Rust de Red Hat para GPUs NVIDIA
Desde que Nvidia libero sus módulos de kernel GPU como código abierto, parecÃa que tanto el controlador propietario de Nvidia como el controlador de código abierto Nouveau tendrÃan grandes mejoras con los aportes que podrÃa realizar la comunidad e incluso que el algún momento Nouveau podrÃa estar a la altura.
Después de varios meses y de que el desarrollo de Nouveau se llegara ralentizar, Red Hat ha tomado cartas en el asunto y hace poco dio a conocer la noticia de que se encuentra trabajando en el proyecto Nova, el cual presenta como un nuevo controlador abierto para GPU NVIDIA el cual está siendo desarrollado en Rust.
Este controlador incluye operaciones de inicialización y control de la GPU en el firmware, utilizando un microcontrolador GSP independiente. Nova está diseñado como un módulo para el kernel de Linux y utiliza el subsistema DRM (Direct Rendering Manager). Este proyecto se considera una continuación del desarrollo del controlador Nouveau para GPU con firmware GSP.
Danilo Krummrich (Red Hat) explica:
Con Nova tenemos la oportunidad de reducir significativamente la complejidad en comparación con Nouveau, por dos razones principales. En primer lugar, la arquitectura histórica de Nouveau, especialmente en torno a nvif/nvkm, es bastante complicada e inflexible y requiere una revisión importante para resolver algunos problemas. A continuación, también queremos aprovechar la oportunidad para contribuir a los esfuerzos de Rust en el kernel y beneficiarnos de la mayor seguridad de la memoria que ofrece el lenguaje de programación Rust.
Además de ello, se menciona que con el desarrollo de Nova, Red Hat pretende aprovechar la oportunidad para contribuir a los esfuerzos de Rust en el kernel, ya que como se mencionó el código del controlador está escrito en Rust y utiliza varias capas para desarrollar controladores de video en este lenguaje. Por ejemplo, el controlador utiliza abstracciones de la rama Rust-Device para crear controladores, componentes de la rama Rust-Pci para trabajar con el bus PCI, y enlaces para los subsistemas DRM y GEM de la rama Rust-DRM.
También se menciona el desarrollo del controlador drm-asahi Rust para GPU de chips Apple M1 y M2. El uso de Rust se espera que aumente la seguridad y confiabilidad del controlador al reducir la probabilidad de errores al trabajar con la memoria y permitir la combinación del trabajo en el controlador de video con el desarrollo de componentes comunes en Rust.
El objetivo de Nova es convertirse eventualmente en un controlador de código abierto para NVIDIA Linux, dirigido a las GPU Turing y modelos más recientes (especialmente en la serie RTX 2000) que admitan GSP. Este nuevo controlador está siendo desarrollado en Rust para lograr una mayor ligereza y flexibilidad, lo cual se presenta como una opción prometedora.
Una de las razones para crear un nuevo controlador es simplificar el proceso en comparación con Nouveau, gracias al uso de controladores listos para usar proporcionados por el firmware GSP. Esto evita la complejidad innecesaria en el código del controlador Nouveau, que necesita soportar GPU NVIDIA más antiguas y presenta problemas como bloqueos en el código VMM/MMU. Al desarrollar Nova desde cero y enfocarse solo en GPU basadas en GSP, se espera evitar estos problemas y complicaciones.
Por otra parte, Red Hat también menciona algunos de los puntos que debe abordar, ya que dice que con la elección de Rust, el primer problema a resolver es la falta de abstracciones de enlace de C para infraestructura integral del kernel:
«por ejemplo, abstracciones de dispositivo/controlador … necesitamos un usuario para las abstracciones en sentido ascendente, pero también necesitamos las abstracciones para crear un controlador: queremos desarrollar Nova en sentido ascendente y comenzar con solo un código auxiliar que solo haga uso de algunas abstracciones básicas de Rust.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace, asi como también consultar el desarrollo y consultar el código fuente de este en su repositorio.