SR-IOV 是什么?性能能好到什么程度? - 知乎

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

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

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

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

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图1

    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 双口万兆网卡
    • 存储若干

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图2

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

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图3

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图4

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图5

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

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


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

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图6

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

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

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图7
    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图8

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图9

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图10

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图11

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

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图12

    3.21Gbits/sec

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

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

    先看虚拟网卡的情况:

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图13

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

    SR-IOV是什么?性能能好到什么程度? - 知乎 - 图14

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

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

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


    如果你喜欢今后能多看到类似的文章,请看完之后点赞收藏分享,这样子我就可以有动力多写一些啦~~~

    如果真的真的很喜欢,那么请赞赏!