×

intel网卡-虚拟化中的SR-IOV教程

hqy hqy 发表于2022-11-10 10:25:09 浏览624 评论0

抢沙发发表评论

intel网卡-虚拟化中的SR-IOV教程


虚拟化环境中有很多的硬件加速技术,这些技术标准来源于行业内的领导者或各种组织机构,但是在实际项目落地时又有哪些会被启用呢?哪些启用的功能带来了性能上明显的提升呢?那么这些加速技术如果不痛不痒的话那么它们的存在究竟意义有多大呢?


无论哪家解决方案,若想启用一些加速功能,势必需要硬件的支持,这就导致在一些项目前期的调研或者POC环境里不太容易实现,毕竟有些要求是十分昂贵和苛刻的,比如RDMA。相对于一些需要资金投入的技术来说,SRIOV无疑是比较亲民且易于实现的,今天就选它来一探究竟。本篇将全部采用微软Hyper-V环境进行说明


SRIOV,即单根虚拟化。Intel在早期为了支持虚拟化环境,在CPU和PCI总线上提供了三层虚拟化技术,它们分别是:

  1. 基于处理器的虚拟化技术VT-x

  2. 基于PCI总线实现的IO虚拟化技术VT-d

  3. 基于网络的虚拟化技术VT-c

从SRIOV的中文字面不难理解,它属于VT-d技术的一个分支,要实现SRIOV功能,前提条件就是你的网卡首先要支持SRIOV,你的主板要支持VT-d技术(支持VT-d自然也就支持SRIOV)


那么SRIOV究竟是干嘛用的呢?它能给虚拟化平台带来多么可观的性能提升呢?还是上一张架构图来看看吧:

wKioL1PHnkTSbmTdAAEoz1Xd77E272.jpg

以上图为例逐个解释关键词:

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或PF5. Network Interface Card即物理网卡,在启用SRIOV之后会生成若干vport,物理NIC所要做的就是转发physical port与vport之间的流量

6. physical port顾名思义就是物理网口,在SRIOV场景中physical port充当一个面向对外的网络媒介

7. VPort是个抽象出来的接口,类似于物理网口,它们被映射给每一个VF或者PF,供parentOS或guestOS来使用通过以上架构的描述就可以看出,启用SRIOV之后,物理NIC将通过VF与虚拟机(VF driver)进行数据交互,反之亦然。那么这样一来即可跳过中间的虚拟化堆栈(即VMM层),以达到近乎于纯物理环境的性能;这一点也是SRIOV最大的价值所在,他有别于以往虚拟机通过仿真设备和虚拟化层进行流量传递的情况,那么究竟SRIOV与传统环境相比能提升多少,我来做个实验:

宿主机OS:windows server 2012R2

虚拟机OS:windows server 2012R2

服务器型号:DELL R720

网卡:intel x520 series

######################################################################################

首先在服务器BIOS设置中将SRIOV功能开启


wKioL1PHpS3ilXt1AAZZJSAOZdM624.jpg

物理机确认开启了SRIOV功能之后,接下来在操作系统层面操作,首先Hyper-V若要使用SRIOV,有两处需要修改,一个是虚拟交换机,如下图确认在创建虚拟交换机时开启了SRIOV(单根虚拟化),需要注意的是虚拟交换机一旦创建后,SRIOV功能无法在修改,也就是说你要是忘了开启那对不起,麻烦您删了重来

wKiom1PHpBSCQaFFAATQqNaicuU480.jpg

虚拟交换机启用SRIOV之后,就要在我测试的虚拟机上操作了,在虚拟机的vNIC(虚拟网卡)上开启SRIOV,如下图所示,这里是可以随时开关的

wKioL1PHpTDSLLY2AAWAPOUMqO4403.jpg

确认了上面的操作之后,通过powershell可以进一步确认系统是否识别了我的设置,在当前宿主机执行(get-vmhost).iovsupport或iovsupportreasons来查看返回结果,有关powershell中对象的属性可以通过管道符“|gm”来查看

另外如下图所示,通过get-netadaptersriov来查看当前主机上支持sriov的物理网卡有哪些,并且从返回结果来看,我的x520-2网卡最多支持62的vf。