在使用 NVIDIA 显卡时为 redroid 开启3d加速
島村絢沙
2022年10月24日 00:33

我的系统信息:

OS: Manjaro Linux x86_64 Host: 81Q5 Legion Y7000P 2019 Kernel: 6.0.1-zen2-1-zen DE: GNOME 42.5 WM: Mutter WM Theme: Adwaita CPU: Intel i7-9750H (12) @ 4.500GHz GPU: NVIDIA GeForce GTX 1660 Ti Mobile GPU: Intel CoffeeLake-H GT2 [UHD Graphics 630] Memory: 15875MiB

redroid 支持 N 卡 3d 加速, 但不是开箱即用的, 必须将 redroid 部署在 qemu 虚拟机内, 通过 VirtIO-GPU 实现. 如果同时具有 Intel 集显和 NVIDIA 独显, 直接在主机运行应该调用的是集显, 而不是独显, 也不是软件渲染.

这种方案相比透传(pass-through)的好处是无需将显卡驱动卸掉, 主机完全可以在使用独显的同时将独显共享给虚拟机. 缺点是损耗大, glmark2 跑分仅有宿主机  1/5. 所以某种意义上这么做还不如直接用集显跑.

步骤:

1. 安装 ubuntu 22.04.1 虚拟机

代码块
Shell
自动换行
复制代码
# 创建虚拟磁盘
qemu-img create -f qcow2 ubuntu.qcow2 20G
# 启动 live 环境, 然后正常装系统
qemu-system-x86_64 -boot d -cdrom "ubuntu-22.04.1-desktop-amd64.iso" -enable-kvm -smp 4 -device intel-hda -device hda-duplex  -device virtio-vga-gl  -net nic -net user,hostfwd=tcp::5555-:5555    -cpu host  -m 4096  -display sdl,gl=on -hda ubuntu.qcow2
复制成功

网上写的教程写的参数大都是过时的, 比如 -soundhw 已经被废弃, -device virtio-vga,virgl=on 应替换为 -device virtio-vga-gl.  具体参数什么意思去 https://wiki.archlinux.org/title/QEMU 查找, 不要看中文的, 很久没更新了.

2. 启动虚拟机

代码块
Shell
自动换行
复制代码
qemu-system-x86_64 c  -enable-kvm -smp 4 -device intel-hda -device hda-duplex  -device virtio-vga-gl  -net nic -net user,hostfwd=tcp::5555-:5555    -cpu host  -m 4096  -display sdl,gl=on -hda ubuntu.qcow2
复制成功

3. 按照 redroid README.md 操作启动容器

代码块
自动换行
复制代码
# install required kernel modules
apt install linux-modules-extra-`uname -r`
modprobe binder_linux devices="binder,hwbinder,vndbinder"
modprobe ashmem_linux

sudo docker run -itd --privileged \
   -v ~/data11-nb:/data \
   -p 5555:5555 \
   redroid/redroid:11.0.0-latest \
   androidboot.redroid_gpu_mode=host \" class=
复制成功

4. 在宿主机连接至 redroid. 用 qtscrspy 或 scrcpy 都行

代码块
Shell
自动换行
复制代码
adb connect localhost:5555
qtscrcpy
复制成功

打开 https://cznull.github.io/vsbm, 可以看到 3d 加速已经生效(这么大的卡顿是 peek 录制 gif 的问题, 并且它左右是反的)

检查一下显卡占用: