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 | vim /etc/default/grub |
0x2.2 加载vfio驱动模块
将vfio相关模块追加到/etc/modules
。
1 | vim /etc/modules |
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 Functions和PCI-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