Virtio-nvgpuという実験的なオープンソースプロジェクトが、すべてのグラフィックス命令を変換したり、カード全体を1台のゲストに専有させたりすることなく、KVM仮想マシンにNvidia製GPUへの共有アクセスを提供しようとしている。開発者らは9月24日に実装の詳細と初期のベンチマーク結果を公開した一方、このソフトウェアはまだ本番運用に使える段階ではないと強調した。

この設計は、ドライバーのABI層で、Linuxゲストとホストの間のNvidiaカーネルドライバー操作を転送する。ゲスト内ではNvidiaのユーザー空間ライブラリが無改変で動作し、アプリケーションはVulkanとNVENCを利用できる。開発者らによると、その後のコマンド送信はマッピングされたメモリを通じて行われるため、通常の描画ループでは描画呼び出しのたびに仮想マシンの境界をまたぐ必要がない。

想定されている用途は、画面を直接接続しないヘッドレス環境でのストリーミングだ。ゲスト内のコンポジターが共有GPU上でフレームを描画・合成し、エンコードしたうえで、圧縮した映像を別の場所に送る。ホストがカードを引き続き利用できる点は、一般にGPUを1台の仮想マシンへ割り当てるVFIOパススルーと異なる。また、グラフィックス呼び出しをシリアライズし、ホスト側で再実行するAPIレベルの変換システムとも異なる方式だ。

プロジェクトが報告した試験では、RTX 3060上の1台のゲストで動かした合成的なヘッドレスVulkanワークロードについて、1フレームの処理におよそ2ミリ秒を超える時間がかかる場合、ベアメタルとの性能差は2%以内だった。4台のゲストを同時に動かすと、カードの処理能力はほぼ均等に分配され、合計フレームレートは1台のゲストの場合に近かった。開発者らは、4台のゲストから同時にH.264エンコードを行ったことも報告した。

これらの数値が示すのは限定された条件での結果であり、性能全般に関する主張ではない。試験は1種類のカード、1種類の合成ワークロード、特定のドライバーバージョンで行われ、別のハイパーバイザーとの比較はない。NvidiaのカーネルドライバーABIは安定したものではないため、virtio-nvgpuは明示的な互換性プロファイルを使い、対応範囲外のバージョンを拒否する。

重要な隔離機能の開発はまだ終わっていない。計画上の設計では、実際のデバイスのファイル記述子とioctlの実行を、ゲストごとに用意するサンドボックス化された補助プロセスに置く。しかし、この補助プロセスは未実装で、現在はバックエンドが仮想マシンモニターのプロセス内でこれらの操作を実行している。この制約に加え、実験段階であることとドライバーへの依存があるため、現行版は開発用の試作品にとどまる。

それでも、このプロジェクトは、命令の変換とデバイス全体のパススルーの中間に位置する手法の可能性を示している。セキュリティモデルと互換性が成熟すれば、各ゲスト内でNvidia純正のユーザー空間ソフトウェア群を必要とするゲームストリーミングや、その他のマルチテナントGPUワークロードに役立つかもしれない。運用者がその可能性を評価するには、より幅広いハードウェアでの試験と、隔離用の補助プロセスの完成が重要になる。