XanderYe的个人小站

折腾PVE

家里试用了1000Mbps宽带,导致之前D2550软路由跑不满(700Mbps),于是升级了J4125,刷了爱快半个月,觉得只跑路由有点浪费性能,并且爱快虚拟Openwrt不支持AES加解密性能有点差,于是打算刷PVE用。为啥不用ESXi?PVE相比ESXi优势就是开源,驱动多,支持HDMI直通,而且我个人感觉用PVE更舒服,毕竟是Debian。顺便试试直通HDMI。陆陆续续折腾一周,在J4125和4300U上反复测试,最终效果差强人意,记录下踩的坑。

本次踩坑在PVE 7.1-7/10上进行,听说7.1问题也不少,暂时不影响,不管了。

安装PVE

安装阶段4300U上出了个问题,安装界面白屏有鼠标,移到左边能拖声明过来,查了半天得知是工控机自带LVDS搞的鬼,Linux会把LVDS识别成主屏,进BIOS关闭LVDS即可:Active LFP 改成 No LVDS,还好我的BIOS没有被阉割。还有一些办法:安装Debian再装PVE、盲操安装、安装PVE5.4再升级。

硬件直通

第一步确认自己的U支持VT-D,否则可以退出本文了。

首先需要在BIOS开启CSM支持,启动可以UEFI也可也Legacy,但是VIDEO必须为Legacy。

底下有一键配置脚本,但是建议看一遍流程再用,好排查问题。

开启IOMMU

vi /etc/default/grub

vi如果方向键和Backspace无效,执行以下命令添加配置

echo "set nocompatible" > ~/.vimrc
echo "set backspace=2" >> ~/.vimrc

修改启动配置,找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"

# INTEL的CPU修改
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
# AMD的CPU修改
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

# 如果需要显卡直通,修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"

一些参数说明:

iommu=pt 影响内核驱动,能让内核驱动设备性能更高

pcie_acs_override=downstream 用于拆分iommu,pcie 一二槽同时插上时会共享带宽,如果不拆分iommu,当两个设备同时直通,其中一个就会显示占用

video=vesafb:off video=efifb:off 禁止启动vesa驱动和efi启动的显卡

更新grub

update-grub

加载内核模块

echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_virqfd >> /etc/modules
echo kvmgt >> /etc/modules

更新配置

 update-initramfs -u

如果不需要直通HDMI的话,到这里就可以重启了,后续操作不需要

一些优化配置

# 允许不安全中断
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" >> /etc/modprobe.d/iommu_unsafe_interrupts.conf
# 避免死机
echo "options kvm ignore_msrs=1" >> /etc/modprobe.d/kvm.conf

绑定核显到vfio模块

查看核显以及声卡的供应商和设备ID:

lspci -n | grep -E "0300|0403"

显示
00:02.0 0300: 8086:3185 (rev 06)
00:0e.0 0403: 8086:3198 (rev 06)

第一个是显卡,第二个是声卡

或完整命令 lspci -nn 查看PCIE筛选

绑定到vifo模块,将ids后面修改为刚刚获得的ID

echo "options vfio-pci ids=8086:3185,8086:3198" >> /etc/modprobe.d/vfio.conf

配置屏蔽驱动

echo "blacklist snd_hda_intel" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/pve-blacklist.conf

重启,重启后验证模块是否正常加载

lsmod | grep vfio

附上自己写的一键配置脚本,应该能兼容大多数机器

#!/bin/bash

echo "启用iommu"
MANUFACTURER=`cat /proc/cpuinfo |grep vendor_id |awk -F ':' '{print $2}'|tail -1`
if [ $MANUFACTURER == "GenuineIntel" ]
then
    IOMMU_CMD="intel_iommu=on"
elif [ $MANUFACTURER == "AuthenticAMD" ]
then
   IOMMU_CMD="amd_iommu=on"
else
  echo "不识别的CPU"
  exit 1
fi
sed -i "s/quiet/quiet $IOMMU_CMD video=efifb:off/" /etc/default/grub
update-grub

echo "加载模块"
echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_virqfd >> /etc/modules
echo kvmgt >> /etc/modules

update-initramfs -u

# 允许不安全中断
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" >> /etc/modprobe.d/iommu_unsafe_interrupts.conf
# 避免蓝屏死机
echo "options kvm ignore_msrs=1" >> /etc/modprobe.d/kvm.conf

echo "配置VFIO模块"
echo "搜索显卡和声卡列表"
lspci -nn | grep -E "0300|0403"
PCI_ID=`lspci -n | grep -E "0300|0403" | awk -F" " '{print $3}' | sed ':label;N;s/\n/,/;b label'`
echo "添加以下PCI:$PCI_ID"
echo "options vfio-pci ids=$PCI_ID" >> /etc/modprobe.d/vfio.conf

echo "配置屏蔽驱动"
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/pve-blacklist.conf
echo "" >> /etc/modprobe.d/pve-blacklist.conf
echo "# Intel Driver" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist snd_hda_intel" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/pve-blacklist.conf
echo "" >> /etc/modprobe.d/pve-blacklist.conf
echo "# AMD Driver" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf

echo "配置完成,请手动重启"

创建虚拟机

下载virtio驱动 virtio-win-pkg-scripts

按步骤来,首先选择安装盘

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-17.png

机型选q35,勾选Qemu代理

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-18.png

总线选SATA,如果是SSD就勾选SSD仿真

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-19.png

CPU核心根据自己来,类别选host,勾选启用NUMA

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-20.png

网络选择VirtIO,性能最好

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-21.png

完成后,选硬件,添加CD/DVD驱动器,把virtio驱动加载上

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-36.png

启动虚拟机,按步骤安装,进入Win10后,打开光盘,安装驱动

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-23.png

顺便把guest-agent也安装了

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-35.png

装完后有网络了,先配置下远程桌面或者安装VNC,防止黑屏进不去操作不了;再准备好核显驱动,等下需要断网安装驱动。

这里核显驱动新显卡要使用旧版
UHD600能正常安装的版本是:26.20.100.7262 (很难找,找了半天)
HD4400直接使用官网下载的就行 15.40.7.4279

丢到下载目录

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-25.png

关机,把显卡直通进来

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-26.png

把网络断开

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-27.png

开机,进入系统后,安装驱动。装完后去管理里看看是否为正常,不正常时显示代码43

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-30.png

安装驱动后需要使用组策略禁用驱动安装防止自动更新最新程序,否则用着用着就蓝屏重启进不去了(被Windows自动更新坑了无数次) ,但是直通核显由于硬件变动会刷新,所以此步骤留到后面做,保持断网状态,确保不是驱动影响画面输出。

关机,把直通的核显(hostpci0)删除,直通键盘鼠标,接下去开始直通HDMI

Legacy模式直通核显

适用于英特尔二代(Sandy Bridge)及以后的CPU,直通的核显为主显卡占用addr=0x02通道,所以不能添加虚拟显卡。

我把此模式写在前面是因为此模式兼容性很差,但性能很好,建议试试。我的J4125驱动正常时能启动,被自动更新后会花屏蓝屏;4300U直接不亮屏也启动不了。

编辑虚拟机配置文件,这里102是你的虚拟机ID

 vi /etc/pve/qemu-server/102.conf

增加这两行

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1
vga: none

启动虚拟机,如果没问题的话画面会显示,有可能花屏蓝屏。如果不行,尝试提取vbios。因为PVE7.1无法提取vbios,这里不说明了,百度都有。说下使用方法

上传vbios.bin到 /usr/share/kvm/ 下,修改配置

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=vbios.bin
vga: none

成功直通的画面

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-32.png

UPT模式直通核显

适用于英特尔五代(Broadwell)及以后的CPU,直通的核显为第二显卡,虚拟vga为主显卡,虚拟显卡的存在会使显卡性能损失,但是兼容性好

编辑虚拟机配置文件,这里102是你的虚拟机ID

 vi /etc/pve/qemu-server/102.conf

增加这两行

args: -device vfio-pci,host=00:02.0,addr=0x18,x-igd-opregion=on
vga: std

启动虚拟机,此时NOVNC有画面,进入系统后HDMI亮起,作为副屏,使用WIN+P调整为复制即可。基本上都能亮屏正常使用,某些软件会强制调用主显卡导致性能很差,可以禁用虚拟显卡,但是双屏还是会损失一些性能。

禁用显卡驱动更新

以上两种方法直通成功后,获取显卡类GUID,使用组策略禁用驱动更新,方法 重要!重要!重要!Windows10如何禁止驱动自动更新,然后关机恢复网络,再开机就可以了。

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-37.png

这样就不会因为驱动更新导致花屏蓝屏了。

最终J4125能Legacy直通核显,看效果

https://wp.xanderye.cn/wp-content/uploads/2022/03/image-38-1024x643.png
https://wp.xanderye.cn/wp-content/uploads/2022/03/image-40.png

而4300U只能UPT直通,禁用了虚拟显示器

赞赏

发表评论

textsms
account_circle
email

  • imace 未知

    最近的exsi6.7一直一天死机一次,mce internal timer error,紫屏,看着就心烦。aida64检测硬件也检测不出问题。正想是不是换pve会好点。不过看似真的很折腾。

    2年前 回复
    • xander博主 未知

      @imace: 直通HDMI比较折腾,相比较esxi是不支持的,所以其实还好

      2年前 回复

XanderYe的个人小站

折腾PVE
家里试用了1000Mbps宽带,导致之前D2550软路由跑不满(700Mbps),于是升级了J4125,刷了爱快半个月,觉得只跑路由有点浪费性能,并且爱快虚拟Openwrt不支持AES加解密性能有点差,于是打算…
扫描二维码继续阅读
2022-03-26