云主机发包性能提升方法

本文主要内容

1.vhost-net io不差,只是我们没有用对
目前云主机采用网络io方式为vhost-net,相比较于virtio和全虚拟化网卡,其数据包延迟和pps要好太多,且还存在较大优化空间。

2.去除linux bridge,让云主机直接接入br-int可提升2倍发包pps
云主机发包经过linux bridge (安全组功能使用)到br-int虚拟交换机,发包极限性能16w左右,
如果采用ovs流表实现安全组,云主机直接和br-int相连,云主机包性能则有可能到27-30wpps。

下文主要是对细节描述

细节描述

拓扑

x.png

  • br-int为ovs交换机
  • 172.16.1.3经过linux bridge连接到br-int,主要用来当客户端测试发包能力
  • 172.16.1.12直接接入br-int,主要用来当客户端测试发包能力
  • 172.16.1.5经过linux bridge连接到br-int,主要用来当服务端
  • 所有云主机都是centos7.3操作系统
  • 172.16.1.3/12位于计算节点1
  • 172.16.1.5位于计算节点2
  • 计算节点1和计算节点2接入到同一个物理交换机
  • 计算节点1主机的CPU型号是Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz

结论

经过测试16*vcpu 单队列情况下tx 16wpps、rx 56wpps。

单队列情况下tx发包性能还是很低的,于是采用iperf3和hping3进行tx pps测试,并采用ftrace和perf工具找出性能瓶颈。

采用iperf3测试情况下

  • 发包经过linux bridge,云主机的发包性能目前为15w-17w(不能再向上了,因为云主机对应的内核vhost线程CPU近%100)
  • 去除发包节点的linux bridge后,云主机发包性能可被优化到24w-27w(应该还能向上,因为此时vhost所占用CPU还剩余至少10%)

使用hping3命令测试

  • 发包经过linux bridge的安全组,发包性能15wpps(此时主机侧vhost内核进程100%)
  • 去除发包节点的linux bridge后,去除bridge后发包性能可达40wpps

经过测试可知,单队列情况下,去除linux bridge,在ovs上实现安全组功能,也许可以提升云主机的发包pps到30w-40w pps。

我们知道host主机CPU资源是很珍贵的,多队列可以提升云主机发包能力但是会占用和耗损主机CPU,所以能不开尽量不要开启多队列,因此使用ovs实现安全组+去除linuxbridge是合适的方案。

调试过程关键参数分析

测试方法

iperf3测试方法

服务端:iperf3 -s -p 16001

客户端:iperf3 -u -l 16 -b 100m -t 1200 -c 172.16.1.5 -p 16001 -A 2

hping测试方法

客户端:hping3 -c 100000000 –flood 172.16.1.5

经过linux bridge 云主机发包pps测试情况下

发包云主机所在服务器 perf top记录

如上图ipt_do_table占用率较高,这部分是遍历iptable规则链的函数,做linux bridge安全组功能使用,如上图可以看到,其发包瓶颈在安全组功能。

perftop帮助我们及时发现性能瓶颈点,为我们性能优化提供非常大的便利。

此时记录vhost线程CPU占用情况

去除linux bridge

发包perf top记录

如上我们可以看到,去除linux bridge后性能点已经从linux bridge转移到其它位置,在此不做再详细的分析了。

此时vhost线程CPU占用情况