All-in-One(二):硬件直通

发布时间 2023-09-23 15:23:49作者: 一克猫

简介

  硬件直通简单来说就是让虚拟机直接使用物理机的硬件资源,例如网卡、显卡等。

配置

手动启用 IOMMU

  打开 PVE 的 shell 执行以下命令:

# 编辑grub文件
nano /etc/default/grub

# 修改GRUB_CMDLINE_LINUX_DEFAULT 
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

# 更新grub文件
update-grub

# 重启系统
reboot

# 检查是否开启成功
dmesg | grep -e DMAR -e IOMMU

  当然,如果你嫌麻烦,可以使用 pvetools 脚本进行配置,不过该脚本我没有用过,看样子挺强大的,如果你选择使用,欢迎告诉我使用体验和效果。

打开PT模式

PT模式:会在IOMMU需要使用时候才启动,适配器不需要使用 DMA 转换到内存,因此可以提高其他没有分配过设备的性能

# 编辑grub文件
nano /etc/default/grub

# 修改GRUB_CMDLINE_LINUX_DEFAULT 
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt" 

# 编辑modules文件
nano /etc/modules

# 添加以下内容
vfio 
vfio_iommu_type1 
vfio_pci 
vfio_virqfd

# 刷新initramfs
update-initramfs -u -k all

# 更新grub文件
update-grub

# 重启系统
reboot

# 检查是否开启成功,成功会输出一堆硬件信息
dmesg | grep -e DMAR -e IOMMU

拉黑驱动

  使 PVE 不加载驱动,直通给虚拟机:

# 查看 pci id
lspci -nnk

# 编辑vfio.conf
nano /etc/modprobe.d/vfio.conf

# 绑定 pci id
softdep r8169 pre:vfio-pci
options vfio-pci id=10ec:8125 #10ec:8125 替换成查到的要直通的 pci id 例如网卡的pci id

# 编辑blacklist.conf
nano /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel
blacklist snd_soc_skl
blacklist snd_hda_codec_hdmi
blacklist i915
blacklist ahci
blacklist nvidiafb # 如果用核显就不用拉黑nvidia驱动

# 刷新initramfs
update-initramfs -u -k all

注意事项

  • 硬盘直通:优先选择直通 sata 控制器,硬盘映射次之。
  • 核显直通:如果多个虚拟机要直通核显,那么必须开启gvt-g,像我只用在NAS上就不需要。在配置成功之前不建议设置核显直通的虚拟机开机自启,否则一旦出现连接不上PVE管理后台的情况,重启PVE后虚拟机开机核显就被占了,此时连接屏幕是无信号的,只能在PVE启动之前通过在安全模式中用命令去停止虚拟机。

image.png

参考

  1. ProxmoxVE(PVE) 启用 IOMMU