计划
核心目标:动态调度 OCuLink 4060,榨干游戏性能,完美兼容遗留 XP 资产
【GPU 动态调度与性能释放 (Win VM)】
1. 物理连接:OCuLink 4060 冷机接好,严禁通电插拔
2. 默认态(宿主独占):
NixOS 启动时 nvidia 驱动接管 4060,780M 负责宿主显示
4060 算力供 Docker 容器(Ollama 等)调用
3. Hook 自动化(Libvirt Hook)——含设备存在性检查:
▶ Hook 脚本开头先检查 GPU 是否存在:
if ! lspci -nn | grep -q "10de:2803"; then
echo "GPU not found, skipping VFIO setup."
exit 0
fi
▶ 启动 Win VM 时(prepare/begin):
a. 只暂停真正占用 GPU 的容器(如 Ollama),中间件不动
b. 确保 4060 未被宿主机桌面占用
c. 按顺序 rmmod nvidia_drm → nvidia_modeset → nvidia_uvm → nvidia
d. modprobe vfio-pci
e. Hugepages 启动时已预留,此处不动态分配
f. 启动 VM,直连扩展坞显示器
▶ 关闭 Win VM 时(release/end):
a. 解绑 vfio-pci
b. 按顺序 modprobe nvidia_drm → nvidia_modeset → nvidia_uvm → nvidia
c. 恢复被暂停的 Docker 容器
d. Hugepages 保留给下次使用,不释放
4. CPU 软亲和(不硬绑):
Win VM 优先使用 4-14 号逻辑核
宿主机 + Linux VM 使用 0-3 号核
保留弹性,不硬性隔离
【无 4060 场景兼容】
5. 内核参数 vfio-pci.ids=10de:2803 无害,设备缺失时静默忽略
6. Hook 脚本通过 lspci 检测,设备不存在时跳过所有 GPU 切换
7. 备用方案:为 Win VM 创建无 GPU 直通的配置(WinVM-NO-GPU.xml)
4060 不在时,用此配置启动,VM 仍可办公网银,只是无游戏加速
8. 宿主机桌面强制只使用 780M 核显
【VMware XP 虚拟机迁移重构】
9. 格式转换:qemu-img convert -p -f vmdk -O qcow2 xp_legacy.vmdk xp_legacy.qcow2
10. 防蓝屏创建:磁盘总线先用 IDE,网卡先用 e1000
11. 驱动注入:挂载 virtio-win.iso,安装 qxldod/w7/x86 显卡驱动与 VirtIO 网卡驱动
12. 终态切换:驱动就绪后切回 VirtIO
若分辨率异常,退回 vga 或 cirrus 视频模型
【潜在问题与解决】
蓝屏或无法启动 → 磁盘总线改回 IDE
显示分辨率异常 → 视频模型从 qxl 换成 vga 或 cirrus
鼠标错位 → 调整 virt-manager 的“缩放显示”或“鼠标集成”
画面发黄 → 游戏中按 Tab → GameRendering → Custom passes → 取消 Tunnel Pass
GPU 切换失败 → 检查显示管理器是否占用 DRM 节点
无 4060 时 VM 启动失败 → 预期行为,改用无 GPU 直通的备用配置