家里试用了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
按步骤来,首先选择安装盘
机型选q35,勾选Qemu代理
总线选SATA,如果是SSD就勾选SSD仿真
CPU核心根据自己来,类别选host,勾选启用NUMA
网络选择VirtIO,性能最好
完成后,选硬件,添加CD/DVD驱动器,把virtio驱动加载上
启动虚拟机,按步骤安装,进入Win10后,打开光盘,安装驱动
顺便把guest-agent也安装了
装完后有网络了,先配置下远程桌面或者安装VNC,防止黑屏进不去操作不了;再准备好核显驱动,等下需要断网安装驱动。
这里核显驱动新显卡要使用旧版
UHD600能正常安装的版本是:26.20.100.7262 (很难找,找了半天)
HD4400直接使用官网下载的就行 15.40.7.4279
丢到下载目录
关机,把显卡直通进来
把网络断开
开机,进入系统后,安装驱动。装完后去管理里看看是否为正常,不正常时显示代码43
安装驱动后需要使用组策略禁用驱动安装防止自动更新最新程序,否则用着用着就蓝屏重启进不去了(被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
成功直通的画面
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如何禁止驱动自动更新,然后关机恢复网络,再开机就可以了。
这样就不会因为驱动更新导致花屏蓝屏了。
最终J4125能Legacy直通核显,看效果
而4300U只能UPT直通,禁用了虚拟显示器
发表回复