完成了U 盘引导 NVMe之后,终于进入了 PVE 的 Web 界面,对于 Gen8 来说,还有不少需要优化的地方。
硬件直通
直通SATA控制器
直接分配给虚拟机对应的PCI设备开机会报错
kvm: -device vfio-pci,host=0000:00:1f.0,id=hostpci0.0,bus=ich9-pcie-port-1,addr=0x0.0,multifunction=on: vfio 0000:00:1f.0: failed to setup container for group 10: Failed to set group container: Invalid argument
TASK ERROR: start failed: QEMU exited with code 1查阅资料后发现 intel_iommu=relax_rmrr 能解决问题:
RMRR (Reserved Memory Region Reporting) 是 Intel 为了保证硬件稳定,在 BIOS 里划定的一些自留地。
BIOS 说:这几块内存地址(比如处理 USB 鼠标或主板监控的数据)只能给特定的硬件使用,操作系统不准动。
intel_iommu=relax_rmrr这个是Gen8直通SATA控制器必须的,否则虚拟机开机报错
直通参数配置
因为我是U盘启动NVMe中的PVE,所以在 grub 或者 menu.slt 中找到kernel /boot/vmlinuz-6.xx.xx-1-pve root=/dev/mapper/pve-root ro quiet
在后面加上 intel_iommu=on,relax_rmrr iommu=pt
最终的启动参数
kernel /boot/vmlinuz-6.17.2-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on,relax_rmrr iommu=pt
initrd /boot/initrd.img-6.17.2-1-pve参数说明
intel_iommu=on
描述:开启 Intel CPU 的 IOMMU 支持,硬件直通的总开关。
作用:它在物理硬件和虚拟机之间建立一层地址转换映射,是所有直通操作的基础。没有它,后续所有参数均不生效。
intel_iommu=relax_rmrr
描述:解开 HPE 硬件锁定。
作用:Gen8 的 BIOS 经常将板载网卡或 USB 划入不可分配的保留内存区域(RMRR)。加上此参数可以强行解除锁定,解决设备被 RMRR 占用无法直通的问题。
iommu=pt
描述:开启 Passthrough 模式,提高未直通设备的性能
作用:让内核仅在必要时才转换设备地址。这能显著提升宿主机(PVE)自身未被直通硬件的性能,并减少 CPU 开销。
intremap=no_x2apic_optout
描述:中断映射优化
作用:在开启直通后,某些老旧的服务器硬件(如 Gen8)可能会出现中断处理异常,导致系统日志疯狂报错或虚拟机卡顿。这个参数告诉内核:别管 BIOS 的限制,强制开启中断映射。
pcie_acs_override=downstream,multifunction
描述:拆分分组
作用:PCIe 插槽分组(IOMMU Group)有时候非常暴力,可能把网卡、阵列卡全分在一个组里,导致你要么全给虚拟机,要么一个都不给。强制系统尝试拆分这些分组,让你能绕过硬件层面的隔离限制,精准地把某一个网口或某一块卡单独分给虚拟机。
intremap=off (备选)
描述:如果上面的参数还是让你在直通网卡时导致 PVE 宿主机断网或死机
作用:彻底关掉中断映射。会降低一点安全性,但能解决很多由于硬件中断冲突导致的直通失败问题。
优化脚本
在网络上搜集了一些:
- Shell脚本:看查看温度、CPU信息、硬盘信息
https://www.right.com.cn/forum/thread-6754687-1-1.html
https://github.com/a904055262/PVE-manager-status - Shell脚本:看查看温度、CPU信息、硬盘信息
https://github.com/MiKing233/PVE-Manager-Status - Shell脚本:1+2的合体
https://github.com/ALRCMt/pve-manager-remix - pve-diy:集成很多功能、查看各种信息,换源等
https://github.com/xiangfeidexiaohuo/pve-diy - pvetools:集成很多功能、查看各种信息,换源等
https://github.com/ivanhao/pvetools - pve_source:集成很多功能、查看各种信息,换源等(闭源)
https://bbs.x86pi.com/thread?topicId=20
我是用pve-diy的脚本优化的
设置cpu调度
命令
#查看cpu信息 / 支持什么调度模式
cpupower frequency-info
#设置cpu调度模式
cpupower -c all frequency-set -g [模式]cpu调度模式说明
acpi-cpufreq驱动:
performance 性能模式,将 CPU 频率固定工作在其支持的较高运行频率上,而不动态调节。
userspace 系统将变频策略的决策权交给了用户态应用程序,较为灵活。
powersave 省电模式,CPU 会固定工作在其支持的最低运行频率上。
ondemand 按需快速动态调整 CPU 频率,没有负载的时候就运行在低频,有负载就高频运行。
conservative 与 ondemand 不同,平滑地调整 CPU 频率,频率的升降是渐变式的,稍微缓和一点。
schedutil 负载变化回调机制,后面新引入的机制,通过触发 schedutil sugov_update 进行调频动作。intel_pstate驱动:
performance 最大化 CPU 性能
powersave 优化能效 平衡性能与功耗 相比acpi-cpufreq powersave调节器更智能 响应更快 高负载下可能略逊于performance模式 但日常使用差异通常不明
常用命令
#查看温度(需安装 lm-sensors):
sensors
#查看 IOMMU 是否开启成功:
dmesg | grep -e DMAR -e IOMMU
#查看 PCI 设备列表(获取设备 ID):
lspci -nn
#查看所有物理磁盘、分区以及它们的挂载点和容量大小。
lsblk
#查看当前 PVE 已识别的存储池状态(local, local-lvm 等)
pvesm status
#查看系统各分区的实际占用空间
df -h
#查看 LVM 卷组和逻辑卷的信息
vgs
lvs
参考网站
PVE all in one保姆级教程:https://www.fqkeji.net/1796.html
cpu调度:https://www.geekxw.top/2794/
