基于OVS-DPDK计算节点的网络性能测试和优化方法

概述

本文主要介绍在云计算环境下, 如何使用测试仪对基于OVS-DPDK的计算节点进行网络性能测试, 以及如何优化整体的网络性能。

DPDK介绍

DPDK(数据平面开发套件, Data Plane Development Kit)是由Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

用户程序可集成DPDK库, 直接调用DPDK库函数进行网络数据包的处理和转发, 绕过内核协议栈, 大幅提升数据包处理能力。在云计算中, 该技术可以运用在网络功能虚拟化(NFV)和边缘计算(Edge Computing)等场景中, 用来构建高性能网络、虚拟机、虚拟化网络设备等。

OVS介绍

Open vSwitch(OVS)是一种开源的虚拟软件交换机, 在OpenStack中是一种构建和实现虚拟网络的重要底层技术, 其性能直接关系到整个云计算环境的网络性能。 新版的OVS可以集成DPDK库, 使其性能更加强大。

测试方法

以下是一种通过思博伦测试仪测试整个计算节点网络性能的方法, 该环境模拟了一个真实的OpenStack环境, 测试结果可以用来判断整个计算节点虚拟层端到端的转发性能。

测试拓扑

测试仪连接到dpdk网卡上的2个端口, 虚拟机连接2个flat网络最终通过DPDK网卡和测试仪相连接。 虚拟机内网卡eth0接收测试仪发送的报文, 并通过dpdk软件: l2fwd转发至eth1, 最终发送至测试仪接收端口。如下图所示:

整个流程如下: 测试仪发包 -> dpdk网卡端口1 -> br-ex1网桥->vhu1端口-> 虚拟机eth0 -> l2fwd -> 虚拟机eth1 -> vhu2端口 -> br-ex2 -> dpdk网卡端口2 -> 测试仪收包:

其中,

测试仪发方向port1 mac地址为: 00:10:94:10:00:01

测试仪收方向port2 mac地址为: 00:10:94:10:00:02

虚拟机eth0 mac地址为: fa:16:3e:c3:de:6e

虚拟机eth1 mac地址为: fa:16:3e:98:c7:bc

思博伦测试仪测试方法

1. 测试仪port1 发送流量streamblock中, 目的mac需要填虚拟机eth0的mac地址。

测试仪port2发送流量streamblock中, 目的mac需要填虚拟机eth1的mac地址。

如图所示:

2. 由于ovs-dpdk会在br-int, br-ex1, br-ex2网桥上下发NORMAL流表进行mac表项学习。所以在每次测试前, 需要使用测试仪进行双向打流, 保证三个网桥上都能学习到对应的mac地址。

测试仪双向打流截图:

port1的stramblock打勾:

port2的streamblock打勾:

3. 双向打流:

4. 保证tx rate和rx rate速率差不多, 说明基本上不丢包。停止按停止键。

5. 可以通过计算节点的ovs-appctl查看fdb表项, 如果类似下面的, 即说明fdb表项已经学习到, 在表项超时之前进行RFC2544测试。

6. RFC 2544吞吐测试, 最后自动会生成报告, 包含: 吞吐、丢包率、延迟等信息。

性能优化方法

如果只使用OVS-DPDK不做任何优化是不能发挥出DPDK和整个计算节点强大性能的, 笔者通过下面的一些优化方法可以进一步提升整个计算节点网络的性能, 供各位参考。

硬件资源规划

CPU核规划

1. 首先通过dpdk软件自带的工具cpu_layout, lstopo-no-graphics查看当前CPU、NUMA、CPU核以及dpdk网卡的分布情况和关系:

从上图可以确定, 该计算节点服务器有2个NUMA, 分别有1个物理CPU, CPU开启了超线程。其中CPU核0-7, 16-23位于NUMA0, CPU核8-15,24-31位于NUMA1。而dpdk网卡PCI连接在NUMA0上。

2. 规划CPU核绑定, 使其"专核专用", 可以有效提高性能, 降低延迟和抖动。 本测试中虚拟机为4个CPU核, 这里我们共分配16个CPU核给多台虚拟机使用。OVS主进程占用NUMA0, NUMA1上4个CPU核, OVS-PMD收发包线程占NUMA0,NUMA1上的4个CPU核。

注意: 不要分配CPU核0给各进程。

分配示例结果如下:

该CPU隔离策略规划将给后续优化时使用。

注意: 不同CPU的核分布情况以及核的个数是不一样的。

硬件配置优化

BIOS调优

开机进入BIOS:

1. 启用VT-d

2. 关闭CPU C3, C6 state

3. 调整CPU Power and Performance Policy为Performance

这样可以使CPU不进行空闲睡眠, 达到CPU最高性能。

注意: 不同型号的服务器配置方法和名称可能不一样。

操作系统优化

GRUB调优

在grub中配置1G大页内存、关闭CPU c-state、并根据CPU核规划隔离: 2-7, 10-15, 18-23, 26-31核。

系统程序优化

关闭irqbalance

其他不必要的程序可以都关掉

Nova配置优化

配置虚拟机CPU核绑定

根据之前的CPU核绑定规划, 指定一组隔离出来CPU核心专门给Nova创建的虚拟机来使用。

Filter配置

配置nova filter, 保证能过滤出合格的NUMA配置,

/etc/nova/nova.conf

Flavor配置

配置4U4G flavor为: 4个CPU, 4G内存, 50G硬盘, 以及如下的元数据:

结果如下

计算节点OVS优化

OVS TSO patch补丁

目前基于dpdk的ovs-vswitchd不支持TSO(TCP Segment Offload, 分片卸载), 在报文分片时不能够卸载到网卡上处理, 会严重影响性能, 用户有需要可以自行打上相关patch。

OVS配置

1. 根据CPU核绑定规划, 确定OVS lcore进程使用的CPU核为2,18,10,26, 计算出对应的16进制值并进行配置。

2. 根据CPU核绑定规划, 确定OVS-PMD线程使用的CPU核为3,19,11,27, 计算出对应的16进制值并进行配置。

3. 配置内存和其他收发包参数

4. 手动配置ovs-vswitchd的CPU亲和性

5. 多队列配置

此次暂不讨论

6. 查看ovs配置

虚拟机内优化和L2FWD程序的优化

除了计算节点相关优化, 还需要优化被测虚拟机内系统和软件, 以达到性能最优化。

虚拟机grub配置

虚拟机内l2fwd优化

1. 修改l2fwd主代码, 修改以下几个参数可以有效提高吞吐, 降低时延, 具体值暂略:

2. 修改l2fwd主代码, 修改以下几行mac地址代码, 可以做到eth0, eth1之间转发流量:

3. 运行l2fwd:

测试结果

笔者通过上述配置, 在Intel 10GE网卡, 4U4G虚拟机转发的情况下, 可以达到如下性能, 应该还有进一步优化的可能。

END

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180316G1BYIE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券