×

SR-IOV

hqy hqy 发表于2022-11-10 10:26:21 浏览364 评论0

抢沙发发表评论

SSR-IOV是Single Root I/O Virtualization的缩写。


 


在虚拟机中,一切皆虚拟。比如网卡,虚拟机看来好像有一个真实网卡,但是这个网卡是宿主机虚拟出来的硬件,也就是一堆软件代码而已,没有真实硬件。


虚拟虽然万能,但是很显然,这一堆代码是需要CPU去执行的!所以,虚拟设备的性能会随着宿主机的性能而改变,另外宿主机由于需要进行数据处理,时延等也产生了。


我们之前也提到过,VT-D这个功能可以将物理的PCI-e设备直接分配给虚拟机,让虚拟机直接控制硬件,那么就可以避开上述的问题。但是,虚拟机会独占这个直通的PCI-e设备,一台宿主机可能有成百上千个虚拟机,如果每个虚拟机都给直通一个PCI-e设备,比如网卡,那么该造什么样的主机?拥有100个物理网卡的主机?想象一下也是不太可能。


为了解决这个问题,Intel提出来SR-IOV这个东西。SR-IOV最初应用在网卡上。简单的说,就是一个物理网卡可以虚拟出来多个轻量化的PCI-e物理设备,从而可以分配给虚拟机使用。大概的框图如下:

image.png



SR-IOV是虚拟化的一个重要功能。启用SR-IOV的这个功能,将大大减轻宿主机的CPU负荷,提高网络性能,降低网络时延等。


废话少说,下面说一下我们怎么使用SR-IOV,以及SR-IOV的性能如何?


各种主流虚拟宿主机都支持SR-IOV。下面我们用VMware的ESXi平台来讲解。


SR-IOV需要软硬都支持才行。这次我们使用的硬件如下:


SuperMICRO X9DRL-iF主版

XEON E5 2687W 双CPU

DDR3 ECC REG 128GB 内存

Intel X540-T2双口万兆网卡

存储若干

ea3ae9f934e92c84200cf325b05afa40_d01de0f31a40d8ac7584b83d752e6acc.png


首先需要在BIOS打开VT-D及SRIOV支持选项,这个不细说。接下来配置ESXi。


进入ESXi硬件配置页面,找到我们需要进行配置的SR-IOV网卡。


30d4962b0aab4214dd3e2b146e8edecc_79830a61708cb8e73c698fd5749bde93.png


两个网口,我们配置第一个网口为SR-IOV口。


2c6524f2ef684736514831dd9104f75c_0dec806e9a00ebc1a872e0221e33aa98.png


设置虚拟VF为8个。这个网卡每个网口最大支持64个VF。

258f411c6793446fc332eea7b5e60da3_d304b910117b7493f115df37fdf21282.png



保存配置之后,重新启动ESXi,就可以看到硬件上出现了8个虚拟网卡设备。这样子我们就完成了ESXi的SR-IOV配置。


小TIPS:初次玩这些东西时,最好选用可靠的服务器平台,这些服务器平台都是经过测试支持SR-IOV的。不要选用民用主板,要不然硬件这一部分你都搞不定,可能就放弃了。


接下来,SR-IOV的性能如何呢?我们对比一下看看。


测试时使用的网络拓扑如下:


7f9246b6fb7336423babfb995bafdf52_093c77cbf7d70db3614027013917d58a.png


两台主机,FreeBSD 12.0和ESXi的10G网口0直连。新建一台虚拟机,Port0中的SR-IOV VF0分配给VM使用。另外,PF设置连接虚拟交换机,然后再给VM分配一个虚拟网卡,连接这个虚拟交换机。


我们将流量跑不同的路径,就可以对比出来两者的性能差异。


下图是Windows8.1虚拟机中的网卡配置,Ethernet1是vmxnet3虚拟网卡,pciPassthru0是SR-IOV的网卡。

image.png


ee123dee93f93bd8941f860598eaeef9_fc701efda38799b3d5ebff409d72fc24.png



下面是虚拟机中的网卡界面。


0fa0ddfcd57954ae2418493a055252f9_f056f7dcfe4ba5036f22b49ad224e679.png


测试工具使用iperf3。我们在FreeBSD中启动服务端。

1ed2c8ff9bc012f8b2a2c1d73c641860_24b1246631e21af9a2313de56acec340.png



虚拟机中,我们先把虚拟机中SR-IOV的VF网卡禁用,先测试虚拟网卡。


5a05d02a4b4904d516571005dd9509bd_0edf113dc46a3ec1be909a1359f93bc5.png


2.21Gbit/sec,哦?好像成绩不怎么好?


接下来禁用虚拟网卡,启用VF网卡。看一下VF的网卡的表现:

image.png



3.21Gbits/sec


第一轮VF网卡就已经胜出!3.21Gbits VS 2.21Gbits。另外我们也可以看出,虚拟网卡的流量不怎么稳定,最快3.05G, 最慢1.96G/sec。而VF网卡的性能就很稳定了。


不过怎么10G网卡才只有这么点性能?一般来说,单线程流量是喂不饱10G网络的。我们接下来用5个线程来看看。iperf可以通过参数-P 5打开5个线程。


先看虚拟网卡的情况:

image.png



不错!变成了8.68Gbits/sec!VF网卡呢?

image.png



9.57Gbits/sec!快达到10G网卡的上限了!


当然,10G网络相比较对于1G网络来说,调优非常关键。我们这次限于篇幅这次只用缺省的参数进行测试,不能算是一次严谨的对比。


但是抛开CPU占用等情况,VF网卡已经比虚拟网卡在速度上胜出了。


打赏

本文链接:https://www.kinber.cn/post/2892.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客