【引自xxxx的博客】Linux网络目标
在生产力虚拟环境中,要达到高性能的网络是极为重要的目标。针对这个目标,微软使用在非虚拟环境下,相同等级的技术来在 Linux 虚拟环境中达成这个目标。举例来说,让虚拟机不透过 hypervisor 即可直接使用硬件网卡,例如如果有一张实体的 10G 网卡,我们必须要确保虚拟机能够尽可能达到 10G 的网络传输性能。在 Azure 公有云上,我们早已投入大量的技术与开发能量在优化 Linux 于虚拟环境的性能,以及虚拟机使用多个虚拟 CPU 的性能优化。并且也针对多个程序或者执行使用相当多的网络联机做了优化设计。而每个网络包的延迟也是相当重要的部分,所以除了吞吐量要大之外,也必须顾及延迟的问题。也在 Linux 上实作这些功能并且作了实际的评估与测量。在稍后的章节会更仔细深入地提及这些测量的设置与结果。
Linux网络性能特性
在 Linux 系统整合服务驱动程序(LIS)中,已经包含数个提升网络性能及吞吐量的功能。 这些功能包括 Virtual Receive Side Scaling (vRSS) 以及数种 TCP/IP 的处理优化。vRSS 功能通过多个 vCPU 来处理流入的网络包以增强网络性能。在没有 vRSS 的情况下,流入的包会导致第一颗 vCPU 经常中断处理网络包。而在繁重的网络使用时,第一颗 vCPU 的使用率常常飙高至 100% 的使用率,而造成使用率的瓶颈,但其他的 vCPU 却仅有少量的负载。 因此, vRSS 可以更有效利用多核来平均中断不同的核心,减少第一颗 vCPU 因网络造成的大量使用率。 经由测试,在八颗 vCPU 的情况下,网络的吞吐量可以有显著的提升。 如果您运行的虚拟机有多至八颗 vCPU 以上,则 vRSS 仅会使用其中的八颗 vCPU 来处理网络包。 相反的若您使用小型虚拟机,仅搭载一颗 vCPU 时,则 vRSS 将不会带来任何好处。 与 vRSS 类似,当在传送包时,也会将这些包交由多颗 vCPU 来处理,来避免单颗 vCPU 高使用率所带来的瓶颈。
现今, TCP 体积变得越来越大,甚至已经超越当初 Ethernet 的标准 MTU 规范。Linux 客户端内的虚拟网卡驱动程序会采用较大的包来转入 Hyper-V 主端后传送。 Hyper-V 主端使用实体网卡转送这种大型的数据到实体的网络上。如果物理网卡不支持这么大的包,则 Hyper-V 会透过软件分割切段。不过,从 Linux 客户端传递至 Hyper-V 主端采用较大包的传输效率明显高于使用较小的包。
而在检查码 (Checksum) 的作法也是类似的,在 Linux 客户端到 Hyper-V 的包传输上,其包是没有检查码片段的,而 Hyper-V 再转送包去外部网络时,将会使用物理网卡来做检查码的计算与附加。如果物理网卡不支持检查码计算功能,则 Hyper-V 将会透过软件计算。 而在后述的情况,无论在客户端或者主端做软件计算所消耗的效能是几乎没有差异的。
上述功能不需要您去做特别的调整或管理。 Hyper-V 将会自动地依照情境启用这些功能来提升网络吞吐量以及减少 CPU 在处理网络上的额外消耗。
Linux网络可用性特性
其中一个新的网络功能为虚拟网卡可用性功能。 这个功能将会在 Windows Server 2016 Hyper-V(可于目前处于技术预览阶段使用到),以及最新版本的 LIS 驱动程序(4.0 或者之后的版本)。 通过虚拟网卡可用性功能,你可以在虚拟机运行当中,随时添加或者移除虚拟网卡,这项功能也能减少虚拟机下线时间。 这在您排除网络问题时相当有用,因为您可直接加入新的网络联机到已知有网络问题的虚拟机中。
以下例子简单示范,当您有一台运行于 Hyper-V 上的 Linux 虚拟机,并配有一张虚拟网卡。 则在 Linux 客户端内使用 ifconfig 命令将会看到下图呈现的样子:
如预期的,您将会看到网络经由 eth0 联机,还有一个本地回路 (loopback)。
但如果您到 Hyper-V 加入另外一张虚拟网卡至此虚拟机中,大部分的 Linux 虚拟机会立刻检测到此虚拟网卡,并指派为 eth1 且自动使用 DHCP 获取 IP 。 这张虚拟网卡可以马上被使用,则 ifconfig 后的结果为下图:
当您在 Hyper-V移除虚拟网卡时,Linux 虚拟机将会实时的移除这张网卡。
Linux网络性能
我们建立一个测试环境,架设两台 Linux 虚拟机分别在两台分开的 Hyper-V 。而这两个 Hyper-V 通过实体的 10G 网络骨干链接,当然也支持更快的 40G 版本。 而这两台 Linux 虚拟机各自配备 8 颗虚拟 CPU 以发挥 vRSS 最大性能。 我们通过 iperf3 这个工具来测量 Linux 客户端的最大网络吞吐量。 iperf3 是个开源工具可以点这里到 Github 查看更多细节。 我们设定 iperf3 使用 16 条测试,并且有不同程度的吞吐量,来仿真典型生产力服务器的工作情况。
因此,上述的测量配置看起来将会如下图:
总结
网络高性能与高吞吐量是目前在生产虚拟环境为关键需求之一,而 Linux 目前在 Hyper-V 上运行已可达到 10G 物理网络的连接速度,这将能提升更多生产力的使用需求。不过,我们的技术将会持续精进,下一步就是尽可能的达到与物理 40G 网络相近的速度为目标。 除性能提升之外,也加入了虚拟网卡可用性功能减少下线时间,并提供您更有弹性的网络设定。