SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。
- PF就是物理网卡所支持的一项PCI功能,PF可以扩展出若干个VF
- VF是支持SRIOV的物理网卡所虚拟出的一个“网卡”或者说虚出来的一个实例,它会以一个独立网卡的形式呈现出来,每一个VF有它自己独享的PCI配置区域,并且可能与其他VF共享着同一个物理资源(公用同一个物理网口)
- PF miniport driver即PF驱动是工作于Hyper-V虚拟化平台父区域的,并在VF之前最先加载
- VF miniport driver即VF驱动是工作于Hyper-V虚拟化平台子区域的,,即guestOS;需要注意的是,VF及PF之间是隔离的,任何经由VF驱动或所执行的结果都不会影响到其他的VF或PF
- Network Interface Card即物理网卡,在启用SRIOV之后会生成若干vport,物理NIC所要做的就是转发physical port与vport之间的流量
- physical port顾名思义就是物理网口,在SRIOV场景中physical port充当一个面向对外的网络媒介
- VPort是个抽象出来的接口,类似于物理网口,它们被映射给每一个VF或者PF,供parentOS或guestOS来使用
注意并不是所有网卡都能支持SR-IOV,在这里能够看到具体哪些英特尔以太网适配器和控制器支持 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成功透传到虚拟机。
参考链接:
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/network/sr-iov-architecture
如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880