云端卫士实战录 | 使用Netperf测试传统socket性能报告

本文由云端卫士安全能力工程师分享,介绍了如何使用Netperf工具测试传统socket在万兆网卡环境下的性能。通过TCP_STREAM和UDP_STREAM模式,分析了网络分组、本地和远端缓冲对性能的影响,结果显示本地和远端缓存越大,性能越高。
摘要由CSDN通过智能技术生成
《实战录》导语

本期分享人为云端卫士安全能力工程师陈冲,将介绍使用netperf进行测试传统socket性能测试。由于本文较长,为方便离线阅读,在文末点击阅读原文,可以下载PDF版本。


Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。本文中我们将介绍使用netperf进行测试传统socket性能测试。


一、测试环境


1. 系统环境

1. 发报机测试环境

Ø 操作系统类型: Linux

Ø 操作系统版本: CentOS 7.0

Ø 内核版本:3.10.0-123.el7.x86_64

Ø 千兆网卡型号:BCM5720

2. 收报机测试环境

Ø 操作系统类型: Linux

Ø 操作系统版本: CentOS 7.0

Ø 内核版本:3.10.0-123.el7.x86_64

Ø 千兆网卡型号:Intel Corporation I350 Gigabit

测试中发报网口和收报网口采用直连的方式。

2. Netperf版本

版本:netperf-2.7.0



二、性能测试


Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。


Server端运行命令:  netserver -D  -p 4444


当netserver在server端启动以后,就可以在client端运行netperf来测试网络的性能。netperf通过命令行参数来控制测试的类型和具体的测试选项。根据作用范围的不同,netperf的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数。


两者之间使用--分隔:netperf [global options]-- [test-specific options]


这里我们只解释那些常用的命令行参数,其它的参数读者可以查询netperf的man手册。


       -H host :指定远端运行netserver的server IP地址。

-p port : 指定远端运行netsever的端口

-l testlen:指定测试的时间长度(秒)

-t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR。


TCP_STREAM:  Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:

 

TCP_RR: 方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。

 

TCP_CRR: 与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。

 

UDP_STREA: 用来测试进行UDP批量传输时的网络性能。需要特别注意的是,此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示.

 

UDP_R: 方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以我们推测交易率一定会有相应的提升。

 

局部参数:

-s size: 设置本地系统的socket发送与接收缓冲大小

-S size:设置远端系统的socket发送与接收缓冲大小

-m size:设置本地系统发送测试分组的大小

-M size: 设置远端系统接收测试分组的大小

-r req,resp: 设置re’quest和reponse分组的大小



1. TCP网络性能

1).单个TCP连接,批量传输大量数据

 

 1. 测试网络分组对于传统socket速率的影响,网络分组可以理解为一次性发送一组报文,主要测试路由器是否缺乏足够的缓冲区空间进而对socket的传输速率有影响,但是在本测试环境下两个网口是直连的,所以预计分组对于吞吐量没有任何影响。

客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444 -- -m size

 

网卡速率(Mbps)

本地socket缓冲(bytes)

远端socket缓冲(bytes)

测试分组大小(bytes)

测试时间(s)

客户端个数

吞吐量(Mbit/s)

1000

16834

87380

2048

20

1

941.42

1000

16384

87380

4096

20

1

941.43

1000

16384

87380

8192

20

1

941.23

1000

16384

87380

16384

20

1

941.43

 


2. 测试本地缓冲对于传统socket速率的影响。

客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444 -- -s size

 

网卡速率(Mbps)

本地socket缓冲(bytes)

远端socket缓冲(bytes)

测试分组大小(bytes)

测试时间(s)

客户端个数

吞吐量(Mbit/s)

1000

2048

87380

16834

20

1

180.62

1000

4096

87380

16384

20

1

487.49

1000

8192

87380

16384

20

1

911.80

1000

16384

87380

16384

20

1

941.43

 

3. 测试远端缓冲对于传统socket速率的影响。

客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444 -- -S size

 

网卡速率(Mbps)

本地socket缓冲(bytes)

远端socket缓冲(bytes)

测试分组大小(bytes)

测试时间(s)

客户端个数

吞吐量(Mbit/s)

1000

16834

10922

16834

20

1

361.88

1000

16384

21845

16384

20

1

633.07

1000

16384

43960

16384

20

1

935.92

1000

16384

87380

16384

20

1

941.25


4. 测试多客户端的传统socket速率。

客户端运行命令: ./netperf –H 192.168.20.124 -l 20 –p 4444

 

网卡速率(Mbps)

本地socket缓冲(bytes)

远端socket缓冲(bytes)

测试分组大小(bytes)

测试时间(s)

客户端个数

吞吐量(Mbit/s)

1000

16834

87380

16834

60

1

941.45

1000

16384

87380

16384

60

2

946.18

1000

16384

87380

16384

60

3

955.00

1000

16384

87380

16384

60

4

966.76

 


2).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值