udp rss hash causes low iperf perforamnce

0.1. vxlan下iperf性能问题

VXlan网络下,在两个容器(分别在两个host上)上,使用iperf进行tcp网络性能测试,带宽只能达到3.5Gb/s左右。
而两个容器所在的host机器之间是万兆网络环境,host上的网卡是ixgbe 10G网卡

0.2. 解决方法

  1. 发送端使用多线程参数 -P
1
iperf  -c 192.168.51.2   -P8 -t 1000
  1. 接收端IXGBE网卡RSShash使用hash(SrcIP, DstIP, SrcPort, DstPort)
1
ethtool -N em2 rx-flow-hash udp4 sdfn

0.3. 复现方法

在容器1启用server端:

1
iperf  -s

容器2上启用client端:

1
iperf  -c 192.168.51.2

0.4. 问题分析

0.4.1. ipef压测的同时,最好情况下可以看到4Gb/sec的带宽,带宽在3G左右波动

图1

0.4.1.1. 使用top命令在容器所在的两台host机器上查看cpu利用率。

0.4.1.2. client端cpu很空闲的

图2

0.4.1.3. server端cpu(cpu10)被压满了

图3

所以单进程的性能已经接近瓶颈,因此使用并发多个线程。

1
iperf  -c 192.168.51.2   -P8 -t 1000

压测发现性能还是3-4G左右,效果提高不明显。

top观察发现单核cpu的利用率奇高,已经被压爆了,但是其他cpu却没啥压力。
因此怀疑rsshash没做好,

1
2
3
4
[root@bogon ~]# ethtool -n em2 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA

重新设置udp4的rsshash规则

1
2
3
4
5
6
7
[root@bogon ~]#  ethtool -N em2 rx-flow-hash udp4 sdfn
[root@bogon ~]# ethtool -n em2 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]

0.4.2. 测试验证

iperf client使用4个线程压测
ifperf server端看到softirqd压力分不到了4个cpu上(cpu2,6,8,10)
图5
总的带宽达到8.38Gb/s.
图6

0.4.3. 关于RSS可以参考这个图片及相应的解释

Packet Flow的图片

RSS 介绍
http://2.bp.blogspot.com/-WRpAha4DF68/Ul9-j0IPCgI/AAAAAAAABjs/uHU5UuKrfnw/s1600/osi_layers+(6).png)


udp rss hash causes low iperf perforamnce
https://martinbj2008.github.io/2016/10/26/2016-10-13-udp-rss-hash-cause-low-iperf-perforamnce/
Author
Martinbj2008
Posted on
October 26, 2016
Licensed under