PCI直通允许您在VM内部使用物理PCI设备(图形卡,网卡)(仅限KVM虚拟化)。如果您“PCI passthrough”设备,该设备将不再可用于主机。
注意:PCI passthrough是Proxmox VE中的一项实验性功能
要启用硬件直通的话先要确保硬件支持VT-D和VT-X,CPU必须支持硬件虚拟化(为了使用 kvm)和 IOMMU(为了使用 VGA 直通)并保证主板中相关功能的开启
- IOMMU 是 Intel VT-d 和 AMD-Vi 的通用名称。
- VT-d 指的是直接输入/输出虚拟化(Intel Virtualization Technology for Directed I/O),不应与VT-x(x86平台下的Intel虚拟化技术,Intel Virtualization Technology)混淆。VT-x 可以让一个硬件平台作为多个“虚拟”平台,而 VT-d 提高了虚拟化的安全性、可靠性和 I/O 性能。
设置完之后最好重新启动一下
reboot
lspci | grep -i ethernet
显示
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@pve:~# lspci | grep -i ethernet
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM
01:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
01:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
01:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
01:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 16)
root@pve:~#
修改grub
vi /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
update-grub
dmesg | grep -e DMAR -e IOMMU
修改grub
vi /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
update-grub
dmesg | grep -e DMAR -e IOMMU
修改文件/etc/modules,加入如下的行
vi /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
执行命令来更新initramfs
update-initramfs -u -k all.
查找网卡ID
lspci | grep net
或者
lspci
添加PCI
vi /etc/pve/qemu-server/vmid.conf
添加一个pci地址:
hostpci0: 01:00.0
添加多个pci地址方式1:
hostpci0: 01:00.0;01:00.1
添加多个pci地址方式2:
hostpci0: 01:00.0
hostpci1: 01:00.1
添加统称所有pci地址,自动传递所有功能:
hostpci0: 01:00
添加PCIE
vi /etc/pve/qemu-server/111.conf
machine: q35
hostpci0: 01:00.0,pcie=1
硬件->添加,选择PCI设备->选择,完成
如需更改为PCIE,可设置机器为q35
如果添加了PCI设备开启虚拟机正常使用那后面的就不需要看了
如果添加了PCI设备无法开启虚拟机的话需要允许不安全的中断
要让pci passthrough正常工作,您需要为您的pci设备提供专用的iommu组
find / sys / kernel / iommu_groups / -type l
输入命令后有相关东西输出,则表示正常
如果没有则需要进行IOMMU中断重映射,只有每个IOMMU都支持中断重映射,才会启用中断重映射。
没有中断重映射就不可能使用PCI passthrough。
对于KVM用户,设备分配将失败,出现’Failed to assign device "[device name]"的错误,即“无法分配设备”[设备名称]“:操作不允许”错误,并且’未找到中断重映射硬件,将设备传递到非特权域是不安全的。
不支持中断重映射的系统:
If your system doesn’t support interrupt remapping,
you can allow unsafe interrupts with:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
vi /etc/modprobe.d/pve-blacklist.conf
文件里面添加一行
options vfio_iommu_type1 allow_unsafe_interrupts=1
来启用不安全的中断
之后就可以通过图形化界面执行PCIE设备的直通操作了