QEMU Virgil ― 仮想マシンで3Dグラフィックスを高速化しよう
仮想化とは実に巧妙な技術です。コンピュータの中にもう一台のコンピュータがあり、無限の可能性とユースケースが広がります。ただし、例外がひとつあります。それはゲームです。どんな理由であれ仮想マシンを運用している人に聞けば、ほぼ間違いなく、あらゆる仮想化ソフトウェア共通の大きな弱点――グラフィックススタックの未熟さを指摘するはずです。
実際、ゲストOSを仮想マシン上で動かすと、2D・3D機能のグラフィックスアクセラレーションがホストマシンのネイティブ性能に及ばず、制限を受けることが少なくありません。仮想化が多くの問題を解決してくれるとしても、ゲームだけは解決してくれないのです。Virgil 3Dは、仮想化ソフトウェアに3Dの力をもたらし、いずれはホストと同等のパフォーマンスを実現することを目指すプロジェクトです。その実装のひとつがQEMU Virgilで、QEMU/KVMベースの仮想マシンでSDL2とVirgil 3Dを有効にできます。興味深そうですね。それでは早速見ていきましょう。

セットアップ
この手の取り組みの最大の難点は、設定がかなり複雑になり、すべてを構成して動かすまでに時間がかかることです。しかしVirgil 3Dの場合、既存のsnapパッケージを使えば、手動でのコンパイルといった面倒な作業をすべて省略できます。ちなみに筆者自身はsnapプロジェクトに関わっていますので、もしバイアスを感じたら読むのをやめてくださいね。
sudo snap install qemu-virgil
sudo snap connect qemu-virgil:kvm
仮想マシンの起動
次に、3Dアクセラレーション対応の仮想マシンを起動するサンプルコマンドを見てみましょう。少し圧倒されてしまった方は、以前公開したKVM入門ガイドも参照してみてください。そこで解説した内容の大部分は今でもそのまま通用します。
qemu-virgil -enable-kvm -m 4096 -device virtio-vga,virgl=on -display sdl,gl=on -netdev user,id=ethernet.0,hostfwd=tcp::10022-:22 -device rtl8139,netdev=ethernet.0 -soundhw ac97 kubuntu.img -boot d -cdrom kubuntu.iso
各オプションの意味
ここで使われているオプションを一つずつ確認していきましょう。
- -enable-kvm: KVMによる完全仮想化を利用します。CPUが仮想化支援機能(Intel VT-x / AMD-Vなど)を備えており、BIOSで有効化されていることが前提です。
- -m 4096: 仮想マシンのメモリを4GBに設定します。
- -device ...: デバイスドライバを追加するオプションです。ここではvirglを使用しています。
- -display ...: ディスプレイ出力にSDLとOpenGLレンダリングを利用することを指定します。
- -netdev ...: TCPポートフォワーディング機能付きのネットワークインターフェースを設定します。これにより、ホストのポート10022経由でSSH接続できるようになります。ネットワークデバイスにはRTL8139仮想アダプタを指定しており、速度は100Mbpsまでという制限がありますが、代わりにe1000を使うことも可能です。詳細については公式KVMのネットワーキングページをご覧ください。
- -soundhw: サウンドカードを設定します。
- kubuntu.img: 仮想ハードディスクのファイル名です。まだ作成していない場合は、ddコマンドでディスクイメージを作成するか、後述のqemu-imgコマンドを使います。
- -boot d: 起動順序を指定します。「d」はCD-ROMを最優先で起動することを意味します。
- -cdrom kubuntu.iso: kubuntu.isoを仮想CDイメージとしてマウントします。まずライブセッションで起動してOSをインストールし、2回目以降の起動時には-bootと-cdromの各オプションを削除すればOKです。
このほかにも、仮想CPUの数やCPUモデルの変更、スナップショット、ディスクキャッシュモード、USB機能、各種メモリ管理機能など、試せるオプションは多数あります。ですが今回はKVMを極めるのが目的ではなく、3Dを楽しむことが目的です。
仮想ハードディスクの作成
仮想ディスクは、たとえば次のようなコマンドで作成できます。
qemu-img create -f qcow2 kubuntu.img 20g
仮想マシンの起動と3Dグラフィックスの確認
Enterキーを押せば、あら不思議。仮想マシンが起動し、ほどなくして選択したゲストOSのデスクトップが表示されます。今回のテストでは、Fedora 32をホストとしてKubuntu 20.04を動かしました。もちろんWindowsを含め、好きなOSをゲストとして利用できます。


3Dアクセラレーションが有効になっているかどうかは、次のコマンドで確認できます。
glxinfo | grep "direct rendering"

これはすべての3Dレンダリング機能が実装済みであることを意味するわけではありませんが、確かな第一歩と言えるでしょう。実際、筆者のKubuntu仮想マシンでは必要な要素が一通り揃っており、動作も非常に軽快で、3Dパフォーマンスも安定していました。PassMarkのburn-inテストまで実行してみましたが、問題なく完走できました。

まとめ
Virgilは実に魅力的なプロジェクトです。比較的シンプルで低コストなソリューションだからです。複数のGPUを搭載したマシンでPCIバス識別子などを駆使し、ホストとゲスト仮想マシンでそれぞれ別のGPUカードを使い分けることで、ゲスト側でネイティブ並みのパフォーマンスを実現している方もいます。しかしそれは、一般的な技術愛好家にとってスキル面でも予算面でもハードルが高い話です。正直なところ、ごく普通の人はLinuxも仮想化も使わないでしょうから。
「ゼロ」と「フル3D環境」の中間に位置する存在として、仮想マシンでそこそこのグラフィックス性能が必要なら、Virgilはまさに適切なレベルの機能を提供してくれるかもしれません。ニッチな領域であり開発途上ではありますが、それなりに安定して動作し、筆者のテストでもパフォーマンスは十分でした。仮想化が物理ハードウェアを完全に置き換える段階(もしあるとすれば)にはまだ達していませんが、Virgilは正しい方向への一歩です。ぜひ一度試してみてください。それではまた。
-
仮想マシンで3Dアクセラレーションを実現する方法 パート1:VMwareとDirectXの設定チュートリアル
既存のホストマシンの上で仮想化されたOSを動かすのは、とても魅力的なアイデアです。楽しく、クールで、実際のプラットフォームに導入する前にソフトウェアを試せるだけでなく、通常はためらってしまうような操作にも挑戦できます。さらに大きな柔軟性を得られ、展開コストも大幅に削減できます。しかし、ほとんどの仮想化ソフトウェアに欠けていたのが、ゲストOS向けの3Dアクセラレーションでした。あるいは「欠けていた」と言うべきでしょう……今や、仮想マシンでの3Dアクセラレーションは現実のものとなっています。はじめにこの連載記事では、ゲストOSで3Dアクセラレーションを有効にするために必要な簡単な設定テクニックを紹
-
MojoPac徹底解説|USBメモリで使えるデスクトップ仮想化ソフトウェア
大容量ポータブルUSBデバイスが手頃な価格で容易に入手できるようになった今、ポケットに収まる小さなドライブに大量のデータやアプリケーションまで持ち運べるというアイデアは、非常に魅力的に響きます。この用途向けに特化した人気ソフトウェアとしては、Portable AppsやPendrive Linuxが挙げられますが、それぞれにいくつかの弱点があります。 Portable AppsとPendrive Linuxの課題 Portable AppsはWindowsコンピュータ専用です。Firefox、GIMP、OpenOfficeなど数多くの便利なアプリケーションを持ち運べる一方で、USBドライブ上の