我有一台带有 2 个 NIC 的服务器
01:00.0 以太网控制器:英特尔公司以太网控制器 10 千兆位 X540-AT2(修订版 01) 01:00.1 以太网控制器:英特尔公司以太网控制器 10 千兆位 X540-AT2(修订版 01)
我想要将这 2 个 NIC 设备分配给客户机(ubuntu server 14.04),我正在关注这个主题本主题:如何在 KVM 中使用 VT-d 分配设备 所以我按照它说的做了:
- 修改内核配置:
使 menuconfig 设置“总线选项(PCI 等)”->“支持 DMA 重映射设备”为““将“总线选项(PCI 等)”->“启用 DMA 重映射设备”设置为““设置“总线选项(PCI 等)”->“PCI Stub 驱动程序”为“*”保存并重建内核
我的dmesg | grep -e DMAR -e IOMMU显示:
[0.000000] ACPI:DMAR 00000000ddfaabc8 000078(v01 INTEL SNB 00000001 INTL 00000001)[0.000000] Intel-IOMMU:已启用 [0.018789] dmar:IOMMU 0:reg_base_addr fed90000 ver 1:0 cap >c9008020660262 ecap f010da [0.018860] IOAPIC id 2 在 DRHD 基础 0xfed90000 IOMMU 0 下 [1.610427] DMAR:未找到 ATSR [1.610449] IOMMU 0 0xfed90000:使用排队无效 [1.610451] IOMMU:设置 RMRR:[1.610460] IOMMU:设置设备 0000:00:1d.0 的标识映射 >[0xdde16000 - 0xdde32fff] [1.610478] IOMMU:设置设备 0000:00:1a.0 的标识映射 >[0xdde16000 - 0xdde32fff] [1.610487] IOMMU:为 LPC 准备 0-16MiB 统一映射 [1.610494] IOMMU:设置设备 0000:00:1f.0 的标识映射 [0x0 - 0xffffff]
- 我还通过在 /boot/grub/grub.conf 文件中的内核行附加 intel_iommu=on 参数来激活内核中的 Intel VT-d
- 将 BIOS 上的 VT-d 设置为启用
从主机内核驱动程序解除网卡绑定:
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind
我使用 lspci -k 验证了解除绑定:驱动程序是 pci_stub
当我在客户虚拟机的 XML 文件中添加以下几行时,出现错误
设备 01:00.0 已在使用中
XML 添加
hostdev 模式 ='子系统' 类型 ='pci' 管理 ='yes' 源地址域 ='0x0000' 总线 ='0x01' 插槽 ='0x00' 功能 ='0x0'/ /source /hostdev