All-in-One,但是小米笔记本!

一直想尝试一下All-in-One的方案,但是无奈手边并没有支持iommu的设备,正值双十一之际,就在我决定挑选硬件组装一台All-in-One PC时,我突然想到,自己的小米游戏本有没有可能支持iommu呢?一念之间,我已经做好了Debian live的U盘,此时,神奇的事情发生了。。。

没错,你可能已经猜到了,在设置了内核cmdline后,IOMMU竟然启用了,不仅如此,PCI Passthrough所需的特性全部都启用了!最终我成功的在PVE上安装了Windows11并透传了独立显卡GTX1060m。此文将记录这一切是如何发生的。

0x0 准备工作

  • 小米游戏本一代,处理器i5-7300hq,显卡GTX1060m,内存16GB
  • U盘
  • PVE镜像,Windows11镜像
  • USB键盘,USB鼠标

0x1 安装PVE

可以参考这篇文章在Proxmox VE中安装Openwrt作为软路由

0x2 配置PCI Passthrough所需特性

0x2.1 启用IOMMU

打开grub配置文件,在内核cmdline中追加intel_iommu=on,并更新grub配置。

1
2
3
4
5
vim /etc/default/grub

>> GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

update-grub

0x2.2 加载vfio驱动模块

将vfio相关模块追加到/etc/modules

1
2
3
4
5
6
7
vim /etc/modules

>>
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

0x2.3 检查配置是否生效

  • 查看IOMMU是否启动

    1
    dmesg | grep -e DMAR -e IOMMU

    如果生效,将会有类似于DMAR: IOMMU enabled的log输出,如图

  • 查看IOMMU Interrupt Remapping是否启动

    1
    dmesg | grep 'remapping'

    如果生效,将会有类似于DMAR-IR: Enabled IRQ remapping in x2apic mode的log输出,如图

  • 查看IOMMU Isolation是否启动

    1
    find /sys/kernel/iommu_groups/ -type l

    检查IOMMU分组是否正确,这需要ACS (Access Control Services)的支持,如图

0x3 安装Windows11虚拟机

创建虚拟机的过程中有几个步骤需要注意:

  • Guest OS选择Microsoft Windows

  • Machine选择q35,BIOS选择OVMF(UEFI),添加EFI Disk和TPM

  • CPU Type选择host

  • 添加Windows的virtio驱动镜像,从这里下载

当安装到选择磁盘这一步时,需要选择加载驱动程序,否则会找不到虚拟硬盘。后续的安装过程与标准流程没有区别。

0x4 设置GPU Passthrough

这是All-in-One方案中最重要的部分,毕竟代码要写,游戏也还是要玩的😁。

这个步骤本身没什么难的,直接添加对应的PCI设备即可。

但对于小米游戏本,这一步有两个大坑!

  • 因为它的独显的VBIOS不支持UEFI启动,所以如果虚拟机只有一个独显,WIndows系统是没有办法完成初始化的,表现为系统始终无法启动,因此我们需要一个虚拟显示设备辅助WIndows启动。

  • 好的,现在我们进入系统了,结果发现显卡驱动竟然安装不上,显示为找不到兼容的显示设备。经过几天的调查,发现设备管理器里面,显卡的Sub_Vendor ID和Sub_Product ID是全0,有可能是这个信息是存储在主板BIOS中,而不是VBIOS中,解决方法比较简单,在PVE的PCI Passthrough界面可以直接配置该信息。另外还需要选中All FunctionsPCI-Express

  • 设置KVM选项ignore_msrs,否则虚拟机在使用独显的过程中会崩溃

    1
    echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

最后,附上完整的硬件配置

0x5 软路由

既然是All-in-One,OpenWRT,爱快,网心云这些肯定是少不了啦,不过这些都是常规的操作,不作详细介绍了。

0x6 一周之后

虽然整套All-in-One方案在功能上没有任何问题,但却拜倒在这颗i5-7300hq上,它太弱啦😂。

直接表现就是在Windows中玩游戏一卡一卡,CPU占用直接100%😫。

所以一周之后,我打算重新装回WIndows11,不过在之前,我写下此文,特此纪念自己的折腾之路😊。

0x7 参考

https://pve.proxmox.com/wiki/Pci_passthrough

https://pve.proxmox.com/wiki/PCI(e)_Passthrough

https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers

https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF

https://lantian.pub/article/modify-computer/laptop-muxed-nvidia-passthrough.lantian/

https://lantian.pub/article/modify-computer/laptop-intel-nvidia-optimus-passthrough.lantian/

https://post.smzdm.com/p/avx8pn3n/

https://xylog.cn/2020/03/03/proxmox-vga-nvidia.html

https://iamroot.cn/pvean-zhuang-win/

https://www.syfly007.com/post/CS/linux/pve%E6%98%BE%E5%8D%A1%E7%9B%B4%E9%80%9A.html