网络基准测试小结(一)

阿凡达2018-08-23 14:54

前段时间对网易云新版vpc性能进行了性能测试,测试覆盖了多种镜像,包含不同操作系统。由,使用的测试工具也不尽相同。当时在工具安装使用上踩了很多坑,现在对不同测试环境使用的测试工具进行总结。


  • 测试镜像列表
测试过程中覆盖的镜像包括11个linux镜像(debian系列、ubuntu系列和centos系列),2个windows镜像(windows server),镜像详细信息如下表所示:

测试过程中主要关注的性能指标为吞吐量、延迟时间和pps(包转发率),因此选择netperf和iperf作为基准测试工具。这两个工具都有若干版本,不同版本功能还不完全一样,因此要针对每个镜像选择相应版本的测试工具。

  • netperf使用注意事项
netperf主要用来测试网络的吞吐量和延迟时间。
默认情况下,netperf的测试结果输出格式如下:
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  32000    10.00    1923.23   
里面只有吞吐量,不包含平均延时、延时90值等参数指标。如果需要输出延迟时间等指标,则需要在测试命令后面添加-O参数:
 Maximum      Mean         90th         99th         Throughput Throughput  
 Latency      Latency      Percentile   Percentile              Units       
 Microseconds Microseconds Latency      Latency                             
                           Microseconds Microseconds                        
 233568       130.09       6            1592         1924.18    10^6bits/s  
但是,netperf2.4.5并不支持-O参数:
root@ima1-0-4:~# netperf -t TCP_STREAM -H 13.20.1.116 -l 10 -- -m 32k -O "MIN_LAETENCY,MAX_LATENCY,MEAN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT,THROUGHPUT_UNITS"
netperf: invalid option -- 'O'
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 13.20.1.116 (13.20.1.116) port 0 AF_INET : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384  32000    10.00    5227.17  
无法直接格式化输出延迟时间。通常情况下,使用apt-get install、yum install等在线安装方式安装的都是2.4.5,因此选择使用安装包本地安装,版本通常使用2.6.0。
同时,由于-O参数需要对输出结果进行统计,会消耗CPU等系统资源。如果网络本身的cpu占用率已经很高,再加上-O参数会影响网络的性能测试结果。例如在测小包吞吐量时,CPU使用率通常会达到将近100%,再加上-O参数后性能就会出现明显下降:
1)加-O参数测试结果:
 Maximum      Mean         90th         99th         Throughput Throughput  
 Latency      Latency      Percentile   Percentile              Units       
 Microseconds Microseconds Latency      Latency                             
                           Microseconds Microseconds                        
 15804        0.33         1            1            1137.17    10^6bits/s  

2)不加-O参数测试结果:

Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 87380  16384     64    30.00    1901.55   
 因此-O参数应该根据实际情况进行选择。
  • debian注意事项
debian系列镜像在测试过程中使用的工具为netperf2.6.0和iperf2.0.5。
前者通过下载软件安装包后通过解压、make、make install方式本地装,后者可以通过apt-get install iperf方式直接安装。
  • ubuntu注意事项
ubuntu使用的测试工具版本与debian完全一样,而且在ubuntu镜像中这两个工具可以直接通过apt-get install netperf/apt-get install iperf进行安装,非常方便。
  • centos注意事项
centos系列镜像使用的工具为netperf2.6.0和iperf3.0.6.
netperf的安装方式同debian一样,仍为本地安装。在线安装提示找不到安装包(update也没用):
[root@ima0-0-test ~]# yum install netperf
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
No package netperf available.
Error: Nothing to do
iperf通过yum install的方式提示找不到软件:
[root@ima0-0-test ~]# yum install iperf
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
No package iperf available.
Error: Nothing to do
在通过本地下载安装包解压安装时,iperf2.0.5的安装包在./configure阶段会一直报错,gcc、make等依赖均已经安装:
[root@ima0-0-test iperf-2.0.5]# ./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for g++... no
checking for c++... no
checking for gpp... no
checking for aCC... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl.exe... no
checking for FCC... no
checking for KCC... no
checking for RCC... no
checking for xlC_r... no
checking for xlC... no
checking whether the C++ compiler works... no
configure: error: in `/home/iperf-2.0.5':
configure: error: C++ compiler cannot create executables
See `config.log' for more details.
[root@ima0-0-test iperf-2.0.5]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
后来偶然发现iperf3.0.6的安装包不存在此问题,因此centos镜像的pps测试使用iperf3.0.6安装工具,通过本地安装方式进行安装。
工具安装成功后,将debian系列和ubuntu系列云主机所在VPC的安全组规则设置后即可进行netperf和iperf测试。但是,在centos镜像中,一样的安全组规则设置在网络测试时却会报错。后来发现,centos还需要额外关闭iptables防火墙:
service iptables stop


网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者季涛授权发布。