Nova ドライバー
Nova ドライバーは、新しく登場した NVIDIA GPU 向けの GPU ドライバーです。Nova ドライバー
Nova ドライバーは GSP(GPU System Processor)に対応した NVIDIA GPU 向けの GPU ドライバーであり、Nouveau ドライバーの後継を目指して開発されています。オープンソースで開発されています。
サポート対象の NVIDIA GPU
Nova ドライバーがサポートする NVIDIA GPU は、GeForce RTX 20(Turing 世代)シリーズ以降のすべての NVIDIA GPU が対象です。現在開発中のドライバー
Nova ドライバーは現在開発中のドライバーであり、ユーザーが安定して利用できるドライバーになるのは、2027年以降になると思われます。Ubuntu だとどんなに早くても、Ubuntu 27.04 あたりでしょうか。
具体的な状況は、今後明らかになっていくと思います。
Rust で開発
Nova ドライバーは Rust で開発されています。これによりメモリー安全性が向上し、メモリー周りに関連する不具合の大部分を未然に回避できるようになります。
さらに論理的な誤りをコンパイル時に検出できるように、API を設計することも可能になります。
特に GPU ドライバーは高度な非同期処理を行うため、Rust の採用により信頼性や安定性の向上に期待できます。
Nouveau ドライバー
もう一つ NVIDIA GPU 向けの OSS ドライバーがありますね。すでにご存知の方も多いかと思いますが、Nouveau ドライバーも NVIDIA GPU 向けの OSS ドライバーです。
ちなみに読み方は「ヌーヴォー」です。
Nouveau ドライバーは、古い NVIDIA GPU もサポート対象になっています。
双方のドライバーでサポート対象の NVIDIA GPU が異なる点が、ユーザーから見た大きな相違点になるでしょう。
Nova ドライバーは GeForce RTX 20 シリーズ以降の NVIDIA GPU がサポート対象であり、Nouveau ドライバーは古い NVIDIA GPU もサポート対象になっています。
なぜ新しいドライバーを作るのか
Nova ドライバーも、Nouveau ドライバーも、サポート対象の NVIDIA GPU が異なりますが、役割は同じです。ここに来てなぜ新しいドライバーを作るのでしょうか。
Nouveau ドライバーの設計と実装
Nouveau ドライバーは、GSP が登場するずっと前から存在しているドライバーであり、GSP を前提とした設計ではありません。加えて当時の NVIDIA は、今ほど OSS ドライバーの開発に協力的ではありませんでした。
そのため Nouveau ドライバーで NVIDIA GPU に対応するにあたり、当時の Nouveau ドライバーの開発者は、NVIDIA GPU の内部構造の多くをリバースエンジニアリングして対応せざるを得ませんでした。
しかしその結果、コードベースはかなり複雑で保守が難しいものになってしまいました。
GSP の登場で風向きが変わる
今までは NVIDIA GPU の内部構造を調査して、それを Nouveau ドライバーに実装していく作業を行っていました。しかし GSP の登場でこの状況が大きく変化しました。
NVIDIA GPU の内部構造の多くが GSP ファームウェアに格納され、今までリバースエンジニアリングし実装していた作業から解放されたのです。
ドライバーの構造をもっと簡素にできる
今までリバースエンジニアリングが必要だった NVIDIA GPU の内部機能の大部分は、GSP ファームウェアに格納されているため、Nouveau ドライバーの開発者は、ドライバーの構造をもっと簡素にできると考えました。この時 GSP はハードウェア抽象化レイヤー(HAL)の役割を担い、ホストカーネルとはプロセス間通信(IPC)を通じてやり取りする設計になります。
メンテナンス性の向上
ドライバーが簡素になれば当然メンテナンス性は向上し、さらに他者からすればドライバーの構造も把握しやすくなり、コミュニティーからの積極的な参加にも期待できます。これが新しいドライバーを作る主な理由になります。
2種類のモジュール
Nova ドライバーは、以下の2種類のモジュールで構成されています。- Nova-Core
- Nova-DRM
Nova-Core
Nova-Core は PCIe 等を通じ、NVIDIA GPU と対話する基盤機能を提供します。特に重要な役割として、GSP を起動したり、コマンドキューを通じて GSP と通信する役割を担います。
ちなみに Nova-Core は、drivers/gpu/nova-core/ に配置されています。
Nova-DRM
Nova-DRM が実際のグラフィックドライバーになります。Nova-DRM は一般的な DRM(Direct Rendering Manager)インターフェースをユーザー空間にすべて提供する役割を担います。
ちなみに Nova-DRM は、drivers/gpu/drm/nova/ に配置されています。
なぜ別れているのか
役割を分けることで、Nova-Core を基盤とした Nova-DRM 以外のグラフィックドライバーを構築できるようになります。例えば NVIDIA GPU を仮想化する VFIO ドライバーを Nova-Core 上に構築できます。
将来的に棲み分けか
現状 Nova ドライバーも Nouveau ドライバーも、GeForce RTX 20 シリーズ以降の NVIDIA GPU が対象になっており、対象範囲が重複しています。Nova ドライバーが完成した暁には、古い NVIDIA GPU は Nouveau ドライバーで対応し、GeForce RTX 20 シリーズ以降の NVIDIA GPU は Nova ドライバーで対応する形になるかと思います。

