虚拟化中的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究竟是干嘛用的呢?它能给虚拟化平台带来多么可观的性能提升呢?还是上一张架构图来看看吧:

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

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来使用

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

宿主机OS:windows server 2012R2

虚拟机OS:windows server 2012R2

服务器型号:DELL R720

网卡:intel x520 series

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

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

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

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

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

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

顺带提一句Peripheral Component Interconnect Special Interest Group(外围部件互连专业组),简称PCISIG,这个组织定义了每个设备最多可支持的vf数量为256个

在正确且成功开启了sriov功能之后,我启动这台测试虚拟机SRIOV_2012,可以看到hyper-v下方显示当前SRIOV是活动状态,但奇怪的是我发现有两个IP。。怎么回事呢?

进入到虚拟机系统里来看设备管理器,发现多了一块网卡,叫做“Intel(R)82599虚拟功能”,其实我这块Intel x520 series网卡是基于Intel 82599控制芯片的,后面的虚拟功能翻译过来就是virtual function,也就是虚出来的一个VF,它以一块虚拟网卡的形式呈现在虚机操作系统里了,因此我刚才看到了两个IP地址

这里可能有个小bug,就是我需要重新配一次IP,这样这台虚拟机才不会出现两个IP地址,如下图目前这个正常的测试IP显示的是(复制)

重新输一遍之后就恢复正常了,也就是说原先的IP地址没有直接映射到我的VF上面,下图显示当前IP已经恢复正常了,只有一个6.6.6.0的IP

同样通过powershell命令“get-netadaptersriovvf”可以看到当前生成的VF信息

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

下面开始一个拷贝测试,通过网络传输一个iso文件,在启用SRIOV的情况下,传输速度大约460MB/S

在传输文件同时,我使用工具(burnintest)对虚拟机CPU进行加压,以尽量模拟实际情况,观察结果如下图,通过性能监视器看到CPU使用率最小值不到2%,最大值11%多,相差约9.5%

接着关掉这个虚拟机的SRIOV功能

可以看到VF没有了,如下图

通过powershell确认VF的确离我们远去了~

同样再通过网络拷贝一次文件,依旧是iso文件(这里不用考虑缓存因素,我在每次拷贝之前都会进行一些复制操作以便尽量充满缓存),传输速率大概在410MB/S左右


同样传输期间对虚拟机CPU进行加压,观察性能监视器结果,CPU负载最小值不到2%,最大值接近17%,相差约15%

综合上述情况来看,对比SRIOV功能开启与关闭,拷贝同样iso文件以及相同的CPU加压方式,结果如下:

开启SRIOV 关闭SRIOV 差值
CPU使用率 9.5% 15% 5.5%
传输速率 460MB/S 410MB/S 50MB/S

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

通过上面的测试可以看出在SRIOV开启或关闭的不同情况下,对比还是有一定效果的,我的测试环境还是不够严谨的,因为在实际生产环境中还要考虑诸多因素,例如磁盘的IO,虚拟机的CPU配置等等情况,但是即便比较粗陋,这个数据还是具有一定参考价值的,将近6%左右的CPU负载以及相差50MB/S的速率我想对于任何一个有大批量并发请求的虚拟化平台用户来讲都是相当可观的,所以说SRIOV对于当前私有云用户来讲还是很有价值的。

说起SRIOV,其实还有一个“兄弟”不得不提,它就是VMQ(virtual machine queue),我的个人理解是SRIOV更适合于出流量,它优化了数据在虚拟机与物理机之间交互的路径,简化了这个过程,使得性能近乎于纯物理环境,但是对于入流量来讲,大部分处理工作还是交由CPU来做,外部流量进来之后,系统需要确认哪些数据发送给哪些虚拟机,这些路由和分发工作在大访问量的场景下是十分费力的,VMQ功能恰恰解决了这个问题,同样是需要物理网卡支持,将入流量提前进行路由并列队,系统直接分配给需要接收的虚拟机,提高了性能,但是VMQ基于“先到先得”的机制,建议仅对那些有大批量访问请求的虚拟机使用,以免那些只有很少入流量的机器影响了关键业务。

关于虚拟化的硬件加速功能还有很多,如果以后有条件了会一并奉上与大家分享。

虚拟化中的SR-IOV

时间: 2024-08-06 20:03:43

虚拟化中的SR-IOV的相关文章

Hyper-V在桌面虚拟化中的优劣势分析

在桌面虚拟化的项目中使用Hyper-V已经有一段时间了,最近越来越迷茫了,迷茫在Hyper-V到底在什么场景中比自己的竞争对手(vmware和citrix)存在绝对优势? 为什么这样说呢? 在桌面虚拟化中比较典型的两种方式是RDS和VDI模式,以我个人经验来看,虽然RDS是性价比非常高的一种解决方案,但是在实际使用过程中只要甲方不是特别在意投资的情况下都会去选择VDI模式.因为RDS模式给最终使用者带来的局限性和限制性太强了,最终会导致用户的意见或反对情绪比较大. 无论是RDS还是VDI模式中,

云桌面及桌面虚拟化中的安全问题探析

安全问题一直作为云计算平台的重中之重,本文探析了云桌面及桌面虚拟化中的安全问题. 数据泄露防护(Data leakage prevention, DLP),又称为"数据丢失防护"(Data Loss prevention, DLP)是指通过IT技术方式,防止企业指定的数据信息的非法被策略规定以外的第三方获取.目前Symantec.Macafee等国际企业,以及中软.伊时代.圣博润等国内厂商都有相应的数据防泄密产品方案. 同时,根据诸多IT调研机构的报告显示,该市场在2010年至2020

网络虚拟化中的 offload 技术:LSO/LRO、GSO/GRO、TSO/UFO、VXLAN

网络虚拟化中的 offload 技术:LSO/LRO.GSO/GRO.TSO/UFO.VXLAN 2014年02月14日 16:42:11 阅读数:7731 offload 现在,越来越多的网卡设备支持 offload 特性,来提升网络收/发性能.offload 是将本来该操作系统进行的一些数据包处理(如分片.重组等)放到网卡硬件中去做,降低系统 CPU 消耗的同时,提高处理的性能. 包括 LSO/LRO.GSO/GRO.TSO/UFO 等. LSO/LRO 分别对应到发送和接收两个方向,是 L

关于2016 x86服务器虚拟化中对于桌面虚拟化部分的个人理解

2016版 x86服务器虚拟化的Gartner报告已经出来一段时间了,作为一个主要做虚拟桌面的从业者本来感觉这个报告与我没太大关系,看着熟识的XenServer在三四象限来回游荡,也只能是干着急没办法.仅此而已. 不过最近有些朋友拿着一份公众号文章问我说,咋Citrix桌面虚拟化都掉到第四位了?其实吧这种文章,我个人观点看看就好,也不想多评价,今天又被人问起,就写点东西算是从个人角度分析一下这部分内容,作为闲来之时的聊资. 本人没能力把整个x86虚拟化都分析,就只能聊聊其中一个子主题,Produ

存储在服务器虚拟化中的作用分析

听到厂商宣称他们的产品将改变世界是一回事,而与那些可能成为这些产品潜在用户交谈了解他们真实的想法却是另一回事. 很长一段时间虚拟化领域被宣传最多的板块就是虚拟数据存储.曾经虚拟数据存储被认为是“下一股大浪潮”,虽然存储的很多方面(主要是备份)都受益于虚拟化技术,但是在其他方面却不那么成功.现在市场对什么让一套解决方案成为“虚拟”解决方案.最重要的是企业希望购买什么等方面的理解有些模糊.这段时间,可能数据存储厂商面临的最大挑战就是支持服务器虚拟化. 去年秋季,市场调研公司Forrester尝试弄清

SDN网络虚拟化中有效协调的映射算法

来自论文An efficient and coordinated mapping algorithm in virtualized SDN networks 1.Introduction 这篇文章关注于虚拟SDN网络中的映射技术.不同于先前的工作,这篇文章是第一个考虑了控制器放置和VN映射作为结合的vSDN映射问题,并用公式表达它为多目标整形线性规划问题(integer linear programming ILP)来优化控制器到交换机时延和映射的花费.设计了一个新奇的在线vSDN映射算法'CO

公司Xen server虚拟化中虚拟机磁盘文件丢失的处理办法

描述 因服务器突然断电原因导致Xen Server服务器中一台VPS(即Xen Server虚拟机)不可用,虚拟磁盘文件丢失,通过电话联系北亚数据来进行恢复.硬件环境是Dell 720服务器配戴一张H710P的RAID卡,由4块希捷2T STAT硬盘组成的RAID 10,上层环境是Xen Server 6.2版本操作系统,虚拟机是Windows Server 2003系统,10G系统盘 + 5G数据盘两个虚拟机磁盘,上层是Web服务器(ASP + SQL 2005的网站架构). 分析故障原因 将

Xen server虚拟化中虚拟机磁盘文件丢失的处理办法

描述 因服务器突然断电原因导致Xen Server服务器中一台VPS(即Xen Server虚拟机)不可用,虚拟磁盘文件丢失,通过电话联系北亚数据来进行恢复.硬件环境是Dell 720服务器配戴一张H710P的RAID卡,由4块希捷2T STAT硬盘组成的RAID 10,上层环境是Xen Server 6.2版本操作系统,虚拟机是Windows Server 2003系统,10G系统盘 + 5G数据盘两个虚拟机磁盘,上层是Web服务器(ASP + SQL 2005的网站架构). 分析故障原因 将

虚拟化中当将windows或者linux克隆后怎么处理

相信各位技术人员肯定用过这个东西:当然为的是自己练习,或者环境需要等因素,这个先不说,其中的这个功能大家可以也非常熟悉:这一项不仅使用简单,而且对于应对要求多虚拟机的场景很有帮助,但是当你把一台windows,或者linux克隆后再想使用,就没那么简单了. 对于克隆后的linux: 首先必须把计算机名,IP,等得改了 还需要做一件事其实,当你使用克隆的虚拟机后因为mac地址冲突的原因会导致IP不生效 解决方法: redhat5.5 (1)删除这个文件 (2)onboot必须为yes,删除mac,