SR-IOV VF在KVM下Intel 82599ES的应用

SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。

  1. PF就是物理网卡所支持的一项PCI功能,PF可以扩展出若干个VF
  2. VF是支持SRIOV的物理网卡所虚拟出的一个“网卡”或者说虚出来的一个实例,它会以一个独立网卡的形式呈现出来,每一个VF有它自己独享的PCI配置区域,并且可能与其他VF共享着同一个物理资源(公用同一个物理网口)
  3. PF miniport driver即PF驱动是工作于Hyper-V虚拟化平台父区域的,并在VF之前最先加载
  4. VF miniport driver即VF驱动是工作于Hyper-V虚拟化平台子区域的,,即guestOS;需要注意的是,VF及PF之间是隔离的,任何经由VF驱动或所执行的结果都不会影响到其他的VF或PF
  5. Network Interface Card即物理网卡,在启用SRIOV之后会生成若干vport,物理NIC所要做的就是转发physical port与vport之间的流量
  6. physical port顾名思义就是物理网口,在SRIOV场景中physical port充当一个面向对外的网络媒介
  7. VPort是个抽象出来的接口,类似于物理网口,它们被映射给每一个VF或者PF,供parentOS或guestOS来使用

注意并不是所有网卡都能支持SR-IOV,在这里能够看到具体哪些英特尔以太网适配器和控制器支持 SR-IOV以及相应的驱动:

http://www.intel.cn/content/www/cn/zh/support/network-and-i-o/ethernet-products/000005722.html?wapkw=(sr-iov)

Intel 82599ES对应的驱动是ixgbe,下面是SR-IOV VF在KVM下Intel 82599ES的应用步骤,宿主机以CentOS7为例。

  • 设置BIOS打开VT-x VT-d SR-IOV选项

有些厂商没有显示SR-IOV选项,但可能还是支持的,可以试一下。

  • 添加内核启动参数

如果是intel cpu:intel_iommu=on.

如果是amd cpu: iommu=pt  iommu=1.

编辑启动配置文件/etc/grub2.cfg

重启系统,查看IOMMU是否正常支持

  • 阻止系统为虚拟出的VF网卡加载驱动

编辑/lib/modprobe.d/dist-blacklist.conf文件,把ixgbevf驱动加入黑名单

  • 创建VF

#查看PCI

#查看网卡可支持的最大VF数

#加载驱动,举例每个网卡创建两个VF

modprobe ixgbe max_vfs=2

#若需要重新加载驱动,先移除驱动,再加载

modprobe -r ixgbe

#查看创建出的VF

#对VF添加MAC地址

  • 添加PCI到虚拟机

如果添加完PCI,启动虚拟机的时候报以下错误,可能是硬件平台不支持,建议换台设备。

  • 在虚拟机里查看PCI

可看到82599ES创建出的VF成功透传到虚拟机。

参考链接:

http://www.intel.com/content/dam/www/public/us/en/documents/technology-briefs/xl710-sr-iov-config-guide-gbe-linux-brief.pdf

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/network/sr-iov-architecture

如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880

发表评论