QEMU 6.1以降でVirgil GPUが使用できなかった問題を解決

Posted on 2022年01月31日 in tech

1   概要

Virgil 3D GPU (Virgl, Virtio GPU) はQEMU上の仮想マシンで使用できる仮想GPUです。 これはホストPCのGPUを利用して動作しています。 私の環境ではLLVMpipeよりも性能が高く感じ、Gentooの仮想マシンなどで使用していました。 しかし、QEMU 6.1へ更新以降、VirgilではなくLLVMpipeが使用されるようになっていました。

2   動作環境

2.1   PC環境

ホストPCの環境は以下のとおりです。

表1. ホストPCの環境
OS Fedora GNU/Linux 35
CPU Ryzen Threadripper 2950x (16 cores, 32 threads)
Memory 128 GiB

仮想PCの環境は以下のとおりです。

表2. 仮想PCの環境
OS Gentoo GNU/Linux
CPU 8 cores
Memory 16 GiB

2.2   QEMUの設定

実際に使用していたQEMUの起動オプションは以下です。

QEMU_AUDIO_DRV=alsa\
qemu-system-x86_64\
        -hda gentoo.qcow2\
        -m 16G\
        -cpu host\
        -machine type=pc,accel=kvm\
        -smp 8\
        -vga virtio\
        -display gtk,grab-on-hover=true,gl=on\
        -device AC97\
        -device nec-usb-xhci,id=usb,bus=pci.0,addr=0x8\
        -device usb-tablet

-vga virtio により、Virtio GPU (=virgil GPU)を使用します。

-display *** により、OpenGLを有効にしGTKウィンドウに描画します。

3   暫定対策

QEMU 6.0系を QEMU からダウンロードし、手動でビルドしました。

ソースディレクトリで以下を実行しインストールしました。

./configure
make -j32 # 32はビルドプロセスの並列スレッド数
sudo make install

4   調査、原因と対策

調査したところ、Virgil公式のGitLabにて以下の記事を見つけました。

Virglrenderer broken on QEMU 6.1.0 for nvidia hosts (#253)

こちらの方はnvidiaホストを利用しているそうですが、私と似た問題に遭遇しています。

メンテナさんの返信によると、graphics deviceの呼び出し方法が変更されたとあります。 記述どおりに以下のようにQEMU起動オプションを変更したところ、Virgilを使用できました。

QEMU_AUDIO_DRV=alsa\
qemu-system-x86_64\
        -hda gentoo.qcow2\
        -m 16G\
        -cpu host\
        -machine type=pc,accel=kvm\
        -smp 8\
        -device virtio-vga-gl\ # 変更箇所
        -display gtk,grab-on-hover=true,gl=on\
        -device AC97\
        -device nec-usb-xhci,id=usb,bus=pci.0,addr=0x8\
        -device usb-tablet

以上

6   更新履歴

  • 2022-01-31 新規作成
  • 2022-02-01 ハイパーリンク文字列をURLからタイトルへ変更、英単語の表記修正など