vxlan下iperf性能问题
VXlan网络下,在两个容器(分别在两个host上)上,使用iperf进行tcp网络性能测试,带宽只能达到3.5Gb/s左右。
而两个容器所在的host机器之间是万兆网络环境,host上的网卡是ixgbe 10G网卡
解决方法
发送端使用多线程参数
-P
1
iperf -c 192.168.51.2 -P8 -t 1000
接收端IXGBE网卡RSShash使用hash(SrcIP, DstIP, SrcPort, DstPort)
1
ethtool -N em2 rx-flow-hash udp4 sdfn
复现方法
在容器1启用server端:
1 | iperf -s |
容器2上启用client端:
1 | iperf -c 192.168.51.2 |
问题分析
ipef压测的同时,最好情况下可以看到4Gb/sec的带宽,带宽在3G左右波动
使用top命令在容器所在的两台host机器上查看cpu利用率。
client端cpu很空闲的
server端cpu(cpu10)被压满了
所以单进程的性能已经接近瓶颈,因此使用并发多个线程。
1 | iperf -c 192.168.51.2 -P8 -t 1000 |
压测发现性能还是3-4G左右,效果提高不明显。
top观察发现单核cpu的利用率奇高,已经被压爆了,但是其他cpu却没啥压力。
因此怀疑rsshash没做好,
1 | [root@bogon ~]# ethtool -n em2 rx-flow-hash udp4 |
重新设置udp4的rsshash规则
1 | [root@bogon ~]# ethtool -N em2 rx-flow-hash udp4 sdfn |
测试验证
iperf client使用4个线程压测
ifperf server端看到softirqd压力分不到了4个cpu上(cpu2,6,8,10)
总的带宽达到8.38Gb/s.
关于RSS可以参考这个图片及相应的解释
Packet Flow的图片
http://2.bp.blogspot.com/-WRpAha4DF68/Ul9-j0IPCgI/AAAAAAAABjs/uHU5UuKrfnw/s1600/osi_layers+(6).png)