10G(82599EB) 网卡测试优化(jumbo frame, tcp win scaling)

1. 开启 jumbo frame
开启之前:
# netperf  -H 192.168.10.2  -t TCP_STREAM -c -C -l 10
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.10.2 () port 0 AF_INET
Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^6bits/s  % S      % S      us/KB   us/KB

 87380  16384  16384    10.00      9394.05   2.68     2.46     0.561   0.516  

对于 2900, 4000/4500, 6000/6500 系列的,可以看这里。我们这里使用的是 N5K:
sw 上:
N5K(config)#policy-map type network-qos jumbo
N5K(config-pmap-nq)#class type network-qos class-default
N5K(config-pmap-c-nq)#mtu 900
N5K(config-pmap-c-nq)#exit
N5K(config-pmap-nq)#exit
N5K(config)#system qos
N5K(config-sys-qos)#service-policy type network-qos jumbo

server:
# ifconfig eth2 mtu 9000
永久写入:
# vi /etc/sysconfig/network-script/ifcfg-eth2
MTU="9000"

测试:
# ip route get 192.168.10.2

开启之后,效果十分的明显,达到了 9.9Gbps:
# netperf  -H 192.168.10.2  -l 15 -c -C -t TCP_SENDFILE -f /boot/initramfs-2.6.32-220.el6.x86_64.img  -f g
TCP SENDFILE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.10.2 () port 0 AF_INET
Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^9bits/s  % S      % S      us/KB   us/KB
 87380  16384  16384    15.00         9.90   2.15     2.91     0.427   0.578  

注意,jambo frame 是需要端到端的开启的,即 server-sw-server,只要有一方没有开启都无法实现。

2. tcp_window_scaling 对网络的影响
这个参数主要是在 tcp win size > 2^16(64Kb) 时发挥作用,默认 tcp_window_scaling 是开启的:
# cat /proc/sys/net/ipv4/tcp_window_scaling
1
# netperf  -H 192.168.10.2  -P1 -l 30
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.10.2 () port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  
 87380  16384  16384    30.00    9411.50   


将 server 端的关闭:
# echo 0 > !$
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
# netperf  -H 192.168.10.2  -P1 -l 30
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.10.2 () port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  
 87380  16384  16384    30.00    2323.36   

只要有一端不开启,吞吐只能维持在 2Gbps 左右。当然,可以通过 interrupt coalescing 来部分的提高吞吐。