From 4a525e2822cd879bb5445d61ec0f1a440e6c1985 Mon Sep 17 00:00:00 2001 From: Uyanide Date: Mon, 1 Dec 2025 17:27:27 +0100 Subject: [PATCH] too lazy to come up with a helpful commit message :) --- memo/kvm-virtio-accel3D.md | 116 +++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 memo/kvm-virtio-accel3D.md diff --git a/memo/kvm-virtio-accel3D.md b/memo/kvm-virtio-accel3D.md new file mode 100644 index 0000000..985bdc0 --- /dev/null +++ b/memo/kvm-virtio-accel3D.md @@ -0,0 +1,116 @@ +这是一个关于 **Linux (Arch) 宿主机** + **Linux (Gentoo) 客户机** 在 KVM/QEMU 环境下启用 **Virtio-GPU 3D 加速** 遇到黑屏问题的**非完整**排查与解决记录。 + +## What + +- **环境**:Host: Arch Linux (Kernel 6.x) | Guest: Gentoo Linux | QEMU v10.x。 + +- **配置**:使用 virtio-vga 或 virtio-gpu 显卡,配合 SPICE 协议。 + + ```xml + + + + + + + + ``` + +- **现象**: + + - 虚拟机启动后黑屏,无法进入图形界面。 + - SSH 连接正常,系统内核正常运行。 + - SPICE 窗口内能看到鼠标光标(表示连接建立),但无画面。 + - 关键日志 (`/var/log/libvirt/qemu/xxx.log`): + + ```log + warning: console: no gl-unblock within one second + warning: spice: no gl-draw-done within one second + ``` + +## Why + +初步分析为 OpenGL 渲染死锁,可能由以下因素叠加导致: + +1. 权限不足:QEMU 进程无法访问宿主机的 **/dev/dri/\*** 设备。 + +2. XML 配置缺失:未显式开启 virtio 设备的 3D 加速位。 + +3. 渲染管线冲突:SPICE 直接处理 GL 上下文容易发生阻塞,尤其是当 Guest 从 VGA 模式切换到 GL 模式时。 + +## How + +### 1. 确认权限 + +QEMU 运行用户(通常是 `libvirt-qemu`)必须有权访问 GPU 渲染节点。 + +```bash +# 检查组 +groups libvirt-qemu + +# 如果没有 'render' 组,将加之 +sudo gpasswd -a libvirt-qemu render + +# 重启 +sudo systemctl restart libvirtd +``` + +### 2. EGL-Headless 分离渲染 + +这是解决黑屏死锁最稳妥的方案。通过引入 `egl-headless`,将 OpenGL 渲染(在后台 GPU 完成)与 SPICE 显示传输(在前台完成)解耦。 + +1. **显卡部分** (`