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选项

fc12fc40f0607d2e983f1c464adbcc3c.png

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

添加内核启动参数

如果是intel cpu:intel_iommu=on.

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

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

d4526d3e3fbfc98915aa6ebefd712462.png

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

7a6a1e380e6aa499c68b59097fc47db4.png

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

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

118dc6122076e553b82e163db42d4fbf.png

创建VF

#查看PCI

516ddb6436cfc3e4da09de56c0329726.png

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

f06bdf3dd4e939dacc2d8445c790143d.png

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

modprobe ixgbe max_vfs=2

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

modprobe -r ixgbe

#查看创建出的VF

fcbd109ca74a1bb3eb543bcdb6db93f6.png

#对VF添加MAC地址

19ff2c8b1fbf3a5dd7beddb7fd8ec147.png

添加PCI到虚拟机

a2997cc432f7a16b9de73c3a60a317cf.png

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

829f60758011bebe906326a2026f65cc.png

在虚拟机里查看PCI

7d0c3c1ec52b2c6d2a5aafd876885a5c.png

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐