Skip to content

NAS

PVE 独显直通功耗优化

及时关闭Windows VS 保持Windows待机?

答案是保持Windows 待机。

关闭 Windows 虚拟机并不会使真实硬件断电,因此显卡仍会保持通电运行状态。由于显卡已经直通给了 Windows,PVE host 已经失去了对显卡的控制权。

这会导致显卡缺乏有效的软件控制,可能一直处于高负荷运转状态,反而造成更高的功耗和更大的噪音。

但是众所周知,Windows的待机功耗不尽如人意,有没有一种可以关闭Windows但不让核显失控的方式呢?

备用系统

我们可以创建一个尽可能精简和低功耗的系统,当Windows关闭之后来以最低成本接管显卡。

我选择创建一个Archlinux VM,可以根据我的需求高度自定义,比如不用compositor,display manager和DE/WM只需要tty。如果觉得麻烦也可以直接安装Debian系统(alpine 因为使用musl缘故无法安装NVIDIA官方驱动)

PVE 独显直通windows

Grub配置

参考 PVE 集成显卡直通飞牛OS

安装windows并启用远程登陆

首先我们使用默认显卡来安装windows (这样我们可以通过PVE console来查看当前画面) 安装过程可以参考 [1]

开机加载vfiomodule

编辑/etc/modules,加入以下內容

vfio
vfio_iommu_type1
vfio_pci

也许在其他教程中还会多加一个vfio_virqfd,不过在 kernel6.2 之后这个模块不再需要添加了,已经包含在vfio中了

编辑完成后使用update-initramfs -u -k all来更新 initramfs

PVE 集成显卡直通飞牛OS

更新Grub

编辑 /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"

💡 pve内核经常更新,amd_iommu=on有的内核已经内置,因此不需要上面加amd_iommu=on。如果遇到更新pve内核后,提示iommu没有开启,请手动在以上此处添加amd_iommu=on,并update-grub重启后即可解决。

  1. iommu=pt : 仅对直通设备启用IOMMU,减少性能开销
  2. initcall_blacklist=sysfb_init :启动时运行黑名单内添加项,在Intel的机型中,此项非必要添加,但是在amd机型中建议添加,否则会影响核显直通后的性能,比如4K60Hz降低到30Hz。 防止宿主机占用显卡帧缓冲区
  3. pcie_acs_override=downstream,multifunction 解决某些PCIe设备的ACS限制问题,避免死机

编辑 /etc/modprobe.d/pve-blacklist.conf

blacklist nvidiafb
blacklist amdgpu
options vfio_iommu_type1 allow_unsafe_interrupts=1

解释:屏蔽amd显卡驱动, options vfio_iommu_type1 allow_unsafe_interrupts=1 允许不安全的设备中断,在部分机型上不加此项会导致虚拟机启动加载转圈时直接宿主PVE卡死。