広く使われているマシンエミュレーターであるQEMUには、
QEMU/KVMと3D GPU
QEMU/
Virgil 3Dプロジェクトによって、
Virgil 3Dプロジェクトの成果はすでにQEMUに取り込まれています。そしてUbuntu 19.

ちなみに性能はあくまで
性能にこだわるならマシン上のGPUデバイスをPCIパススルーによって特定のホストに専有させたり、
3D GPUを有効化する方法
さっそくQEMUを使って3D GPUを有効化してみましょう。まずあらかじめ、
$ sudo apt install qemu-system-x86 qemu-utils
またデスクトップ版のインストールイメージもダウンロードしておきます。
$ wget http://jp.releases.ubuntu.com/eoan/ubuntu-19.10-desktop-amd64.iso
こちらもUbuntu 19.
次に仮想マシン用のイメージを作成しておいてください。ここではサイズを20GBにしていますが、
$ qemu-img create -f qcow2 ubuntu.qcow2 20G
では、
$ qemu-system-x86_64 \ -enable-kvm -M q35 -smp 2 -m 4G \ -drive format=qcow2,file=ubuntu.qcow2,if=virtio \ -net nic,model=virtio \ -net user,hostfwd=tcp::2222-:22 \ -vga virtio \ -display gtk,grab-on-hover=on,gl=on \ -boot once=d -no-reboot -cdrom ubuntu-19.10-desktop-amd64.iso
それぞれのオプションは次のとおりです。
-enable-kvm
:CPUの仮想化支援機能を有効化します。-M q35
:マシンタイプをICH9なQ35チップセットにします。-smp 2
:CPUの数を2にしています。いくつでもかまいません。-m 4G
:メモリのサイズを4GBにしています。Ubuntuデスクトップが動くならいくつでもかまいません。-drive format=qcow2,file=ubuntu.
:ディスクイメージを指定しています。こちらもvirtioフレームワークを利用しています。qcow2,if=virtio -net nic,model=virtio
:NICもvirtioを利用します。ディスクも含めて、使用しなくても3D GPUの利用には問題ありません。 -net user,hostfwd=tcp::2222-:22
:ホストの2222番ポートがゲストの22番ポートに転送されるための設定です。SSHでホストからゲストにアクセスしたい際に便利です。-vga virtio
:VGAカードのエミュレーションとしてvirtioを指定しています。今回のキモその1です。-display gtk,grab-on-hover=on,gl=on
:仮想マシンの画面を表示するウィンドウとしてGTKを指定しています。今回のキモその2です。-boot once=d
:1度だけCD-ROMドライブから起動するよう指定しています。-no-reboot
:ゲストを再起動した時、再起動せずに終了します。インストール時に便利なオプションです。 -cdrom ubuntu-19.
:CD-ROMドライブ用イメージを指定しています。10-desktop-amd64. iso
上記を読めばわかるように、-vga virtio -display gtk,grab-on-hover=on,gl=on
」
「-vga
」
「-display
」
しかしながらGTKディスプレイにはgrab-on-hover=on
」
最後に指定しているgl=on
」
オプションを把握したところで、-no-reboot
」
$ qemu-system-x86_64 \ -enable-kvm -M q35 -smp 2 -m 4G \ -drive format=qcow2,file=ubuntu.qcow2,if=virtio \ -net nic,model=virtio \ -net user,hostfwd=tcp::2222-:22 \ -vga virtio \ -display gtk,grab-on-hover=on,gl=on
ちなみに上記はBIOSモードで起動しています。第441回
実際にUEFIモードで起動するには、-drive
」
$ cp /usr/share/OVMF/OVMF_VARS.fd vars.fd $ qemu-system-x86_64 \ -enable-kvm -M q35 -smp 2 -m 4G \ -drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \ -drive if=pflash,format=raw,file=vars.fd \ -drive format=qcow2,file=ubuntu.qcow2,if=virtio \ -net nic,model=virtio \ -net user,hostfwd=tcp::2222-:22 \ -vga virtio \ -display gtk,grab-on-hover=on,gl=on \ -boot once=d -no-reboot -cdrom ubuntu-19.10-desktop-amd64.iso
3D GPUの動作確認
3D GPUを有効化したインスタンスを起動したら、dmesg
の結果です。
$ dmesg | grep drm [ 2.291108] [drm] pci: virtio-vga detected at 0000:00:01.0 [ 2.291113] fb0: switching to virtiodrmfb from VESA VGA [ 2.305099] [drm] virgl 3d acceleration enabled [ 2.309482] [drm] number of scanouts: 1 [ 2.309487] [drm] number of cap sets: 2 [ 2.320084] [drm] cap set 0: id 1, max-version 1, max-size 308 [ 2.320204] [drm] cap set 1: id 2, max-version 2, max-size 556 [ 2.320660] [drm] Initialized virtio_gpu 0.1.0 0 for virtio0 on minor 0 [ 2.327230] virtio_gpu virtio0: fb0: virtio_gpudrmfb frame buffer device
ポイントは上記の
ちなみにQEMUによるインスタンス起動時に-display
」gl=on
」
[ 2.305099] [drm] virgl 3d acceleration not supported by host
「-vga virtio
」-vga qxl
」
次にOpenGL関連の動作確認では定番のglxXXXなコマンドを実行してみましょう。あらかじめmesa-utilsパッケージをインストールしておきます。
$ sudo apt install mesa-utils
まずはグラフィックスデバイスの情報を表示するglxinfo
コマンドの実行です。かなりいろいろな情報が表示されますが、
$ glxinfo | grep OpenGL OpenGL vendor string: Red Hat OpenGL renderer string: virgl OpenGL core profile version string: 4.3 (Core Profile) Mesa 19.2.1 OpenGL core profile shading language version string: 4.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.1 Mesa 19.2.1 OpenGL shading language version string: 1.40 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.1 Mesa 19.2.1 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10 OpenGL ES profile extensions:
ポイントはgl=on
」
Extended renderer info (GLX_MESA_query_renderer): Vendor: VMware, Inc. (0xffffffff) Device: llvmpipe (LLVM 9.0, 128 bits) (0xffffffff) Version: 19.2.1 Accelerated: no Video memory: 3936MB (中略) OpenGL renderer string: llvmpipe (LLVM 9.0, 128 bits)
glxgears
コマンドでFPSを計測してみたところ、gl=on
」

またglxgearsを動かしている間のCPUの負荷は高いものの、glxgears
実行中のCPU負荷そのものは、gl=on
」gl=on
」gl=on
」

ベンチマーク
最後に3D描画を利用したベンチマークを動かしてみましょう。今回は第524回
第524回ではPhoronix Test Suiteをインストールしましたが、
$ wget https://assets.unigine.com/d/Unigine_Heaven-4.0.run $ chmod +x Unigine_Heaven-4.0.run $ ./Unigine_Heaven-4.0.run Creating directory Unigine_Heaven-4.0 Verifying archive integrity... All good. Uncompressing Unigine Heaven Benchmark............................................................................. Unigine Heaven Benchmark installation is completed. Launch heaven to run it
ベンチマークの実行は次のとおりです。
$ cd Unigine_Heaven-4.0/ $ ./heaven
ウィンドウが開いたら


フルスクリーンではないため、
ベンチマーク中のCPU使用率もそこまで高くなることはなく、
8月にリリースされたvirglrenderer 8.