使用SR-IOV创建KVM虚拟机报错“host doesn’t support passthrough of host PCI devices”解决

一、问题现象

使用SR-IOV虚拟网卡创建KVM虚拟机,创建虚拟机添加“–hostdev=xxxx”参数,或者修改虚拟机XML配置文件增加 “hostdev”,创建SR-IOV虚拟网卡时会报错如下:

ERROR unsupported configuration: host doesn’t support passthrough of host PCI devices

二、 确认开启SR-IOV全部支持

以下忘记第二项不设置或打开都会导致以上问题。

1、在BIOS里开启网卡SR-IOV
在这里插入图片描述
注:即使BIOS里开启全局SRIOV,网卡也依然可以当作普通网卡使用

2、在BIOS里开启VT-d支持
在这里插入图片描述
3、在grub配置iommu支持

修改/boot/grub2/grub.cfg或 /etc/grub2.cfg文件(软链接),在linux16加载内核镜像一行追加“intel_iommu=on iommu=pt”,“iommu.passthrough=1”不加也可,包含在“intel_iommu=on”

[root@localhost ~]# ls -l /etc/grub2.cfg lrwxrwxrwx. 1 root root 22
Nov 19 17:54 /etc/grub2.cfg -> …/boot/grub2/grub.cfg

linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro
crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet
intel_iommu=on iommu=pt

也可修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX最后追加“intel_iommu=on iommu=pt”参数,然后执行grub2-mkconfig -o /boot/grub2/grub.cfg刷新 grub.cfg 文件;

[root@localhost ~]# cat /etc/default/grub GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="( s e d ′ s , r e l e a s e . ∗ (sed 's, release
.*(sed ′ s,release.∗,g’ /etc/system-release)" GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT=“console”
GRUB_CMDLINE_LINUX=“crashkernel=auto rd.lvm.lv=cl/root
rd.lvm.lv=cl/swap rhgb quiet intel_iommu=on iommu=pt
iommu.passthrough=1” GRUB_DISABLE_RECOVERY=“true”

[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating
grub configuration file … Found linux image:
/boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image:
/boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image:
/boot/vmlinuz-0-rescue-e5ec5990f1e548bea132e3458196c892 Found initrd
image: /boot/initramfs-0-rescue-e5ec5990f1e548bea132e3458196c892.img
done

注:额外追加“console=ttyS0,115200”参数可支持串口显示;

4、虚拟化支持及开启成功验证

1)验证BIOS里开启SR-IOV和Intel VT-d,Grub开启IOMMU生效方法如下:

[root@localhost ~]# cat /proc/cmdline | grep intel_iommu
BOOT_IMAGE=/vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro
crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet
intel_iommu=on iommu=pt iommu.passthrough=1

[root@localhost ~]# dmesg | grep -e IOMMU
[ 0.000000] DMAR: IOMMU enabled
[ 0.064288] DMAR-IR: IOAPIC id 3 under DRHD base 0xfbffc000 IOMMU 0
[ 0.064289] DMAR-IR: IOAPIC id 1 under DRHD base 0xc7ffc000 IOMMU 1
[ 0.064290] DMAR-IR: IOAPIC id 2 under DRHD base 0xc7ffc000 IOMMU 1

BIOS里只开启SR-IOV,忘记开启Intel VT-d时只会打印:

[root@localhost ~]# dmesg | grep -e IOMMU
[ 0.000000] DMAR: IOMMU enabled

并且创建虚拟机添加“–hostdev=xxxx”参数,创建SR-IOV虚拟网卡时会报错如下:

ERROR unsupported configuration: host doesn’t support passthrough of host PCI devices

2)验证vfio加载正常:

[root@localhost ~]# lsmod | grep vfio
vfio_iommu_type1       17632  1 
vfio_pci               36948  1 
vfio                   26136  5 vfio_iommu_type1,vfio_pci
irqbypass              13503  4 kvm,vfio_pci

注意:重启后“lsmod | grep vfio”并不会有显示,只有虚拟机创建后才会加载启动vfio,看到显示。

Centos7使用SR-IOV创建KVM虚拟机具体方法参见:使用SR-IOV创建KVM虚拟机

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promox SR-IOV是一种技术,它用于在虚拟化环境中实现更高的性能和更低的延迟。SR-IOV代表单根输入/输出虚拟化,它允许虚拟机直接访问物理设备,而无需通过主机操作系统的干扰。 通常情况下,在虚拟化环境中,虚拟机通过主机操作系统来访问物理设备,这就导致了一定的性能损失和延迟。但是,Promox SR-IOV技术通过直接将物理设备的功能划分为虚拟功能,然后分配给虚拟机解决这个问题。这使得虚拟机可以直接访问分配给它的物理设备,绕过主机操作系统的干扰。 Promox SR-IOV技术的一个重要优势是可以提供更低的延迟和更高的网络吞吐量。这对于需要高性能网络连接的应用程序非常重要,例如大规模数据传输和实时数据处理。此外,通过减少主机操作系统对网络流量的处理,SR-IOV还可以减少CPU消耗,提高整个系统的效率。 然而,Promox SR-IOV也存在一些限制。例如,由于物理设备的功能被划分为虚拟功能,因此每个虚拟机只能直接访问分配给它的特定功能。此外,SR-IOV还要求物理设备必须支持SR-IOV技术才能使用。这意味着,在实施Promox SR-IOV之前,需要对硬件进行适当的支持和配置。 总之,Promox SR-IOV是一种提高虚拟化环境性能和降低延迟的技术。通过直接将物理设备的功能划分为虚拟功能,并分配给虚拟机来实现,SR-IOV可以提供更低的延迟和更高的网络吞吐量。然而,SR-IOV也有一些限制,包括对硬件的特定支持和配置要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值