Red Hat 推出 Nova,一个用 Rust 编写的 NVIDIA GPU 驱动程序

红帽公司已启动 Nova 项目,该项目旨在开发一款适用于 NVIDIA GPU 的全新开源驱动程序。在该项目中,GPU 的初始化和管理操作被移至固件中,并由独立的 GSP(GPU 系统处理器)微控制器执行。这款新驱动程序以 Linux 内核模块的形式实现,并利用了 DRM(直接渲染管理器)子系统。该项目定位为 Nouveau 驱动程序的延续,Nouveau 驱动程序适用于基于 Turing 微架构的 NVIDIA GeForce RTX 2000 系列显卡及后续的 GSP 固件 GPU,并有望在未来取代 Nouveau。

该驱动程序代码使用 Rust 编写,并额外利用了多个尚未被主内核采用的 Rust 视频驱动程序开发层。例如,该驱动程序使用了来自 rust-device 分支的驱动程序构造抽象、来自 rust-pci 分支的 PCI 总线操作组件,以及来自 rust-drm 分支的 DRM 和 GEM 子系统绑定(该绑定也用于开发适用于 Apple M1 和 M2 GPU 芯片的 drm-asahi Rust 驱动程序)。使用 Rust 有望通过降低内存操作中的错误概率来提高驱动程序的安全性和可靠性,同时还能将视频驱动程序开发与 Rust 中用于驱动程序开发的通用组件、绑定和抽象的开发相结合。

创建新驱动程序的动机在于,通过利用 GS​​P 固件提供的众多现成处理程序,与 Nouveau 驱动程序相比,它有望实现显著的简化。由于需要支持较旧的 NVIDIA GPU,Nouveau 驱动程序的代码过于复杂且缺乏灵活性,而解决 Nouveau 驱动程序中存在的诸如 VMM/MMU 代码中的死锁等问题,则需要对代码库进行大量重写。

全新开发的 Nova 驱动程序从一开始就避免了此类问题和复杂情况的发生,因为它无需实现许多驱动程序端的抽象层,而这些抽象层在新 NVIDIA GPU 的固件中已经提供。Nouveau 需要将代码合并以支持新旧 GPU,而 Nova 驱动程序仅保留基于 GSP 的 GPU 支持,从而免去了确保与旧 GPU 代码兼容性的负担。

来源: opennet.ru

添加评论