使用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虚拟机

### Intel J1900 处理器与 IOMMU 支持的相关配置 Intel J1900 是基于 Bay Trail 平台的一款低功耗处理器,广泛应用于嵌入式系统和小型服务器环境。关于该平台的 IOMMU 配置和支持情况,可以从以下几个方面进行分析: #### 1. **硬件层面的支持** J1900 属于 Atom 系列处理器的一部分,在设计上支持 VT-d 技术(即 Intel 的 IOMMU 实现)。VT-d 提供了 DMA 和中断重映射功能,用于增强系统的安全性并实现高效的设备直通能力。然而,具体的功能启用依赖于 BIOS 设置以及主板的设计[^1]。 #### 2. **BIOS 启用 VT-d 功能** 为了使操作系统能够利用 VT-d/IOMMU 特性,必须在 BIOS 中明确开启 Virtualization Technology for Directed I/O (VT-d) 或类似的选项。如果此选项未被激活,则即使硬件本身具备 VT-d 能力也无法正常工作[^3]。 #### 3. **Linux 内核参数调整** 对于运行 Linux 操作系统的场景,可以通过修改 GRUB 配置文件来确保内核加载时正确初始化 IOMMU 子系统。以下是典型的内核命令行参数设置示例: ```bash GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt" ``` 上述参数的作用如下: - `intel_iommu=on`:强制启用了 Intel VT-d 功能。 - `iommu=pt`:将所有 PCI 设备分配到一个 pass-through 域中,从而允许这些设备直接访问主机内存而不经过额外的翻译层。 需要注意的是,某些情况下可能还需要增加其他特定标志位,比如 `iommupt=relaxed` 来放宽一些严格的检查条件以适应更复杂的虚拟化需求[^2]。 #### 4. **验证 IOMMU 是否成功启动** 完成以上步骤之后,可以执行以下命令确认 IOMMU 已经被正确加载并处于活动状态: ```bash dmesg | grep -e DMAR -e IOMMU ls /sys/kernel/iommu_groups/ ``` 第一条指令会显示有关 DRAM Remapping Table 初始化过程的日志信息;而第二条则列举出了当前系统中存在的各个 IOMMU 组成员列表。 #### 5. **常见问题排查** 当尝试通过 SR-IOV 创建 KVM 虚拟机报错host doesn't support passthrough of host PCI devices”,通常是因为缺少必要的驱动程序或者错误地设置了相关联的资源归属关系所致。此时除了核查前面提到的各项基础准备工作外,还需特别留意目标设备是否满足单一根域隔离(Single Root IO Virtualization and Sharing Standard, SR-IOV)的要求,并且保证它们归属于同一个 NUMA node 下面以便减少潜在冲突风险。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值