5. 浴火重生:测试win vm玩都市天际线,天下游戏虚拟机

计划

核心目标:动态调度 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 直通的备用配置