1. 介绍 Netperf
网络性能是云服务器的重要指标,对网络性能进行准确的测试非常重要。Netperf 是一种可以用来衡量不同类型网络性能的工具,它可以用来测试 PPS(即每秒钟发送数据包的数目)、单向吞吐量和端到端延迟。本文给大家简述如何采用 Netperf 对网络性能进行测试。
2. 安装 Netperf
2.1 环境准备
-
测试机
- 被压力测试网络 PPS 的 DC2 实例,可以用来作为 Netperf 测试中的 Client 端或者 Server 端
- 虚拟机名称:test_netperf1; 虚拟机 IP:116.85.255.6。(虚拟机可以在 滴滴云上申请)
-
陪练机
- DC2 实例,可以用来作为 Netperf 测试中的 Client 端或者 Server 端,与测试机建立控制连接,传递测试配置相关的信息以及测试结果
- 虚拟机名称:test_netperf2; 虚拟机 IP:116.85.255.5
2.2 安装 Netperf
- 运行下面命令下载 Netperf
wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
- 解压 Netperf
tar -zxvf netperf-2.5.0.tar.gz
- 进入 Netperf目录
cd netperf-2.5.0.tar.gz
- 执行以下命令配置文件,编译并且安装
./configure
make
make install
- 运行以下命令验证 Netperf 是否安装成功。如果安装成功会生成2个工具:NetServer 和 Netperf。
netperf -h
netserver -h
2.3 开启多队列功能
在测试机内开启多队列功能(假设需要开启的网卡是 eth0),用来提高测试机接收数据包的性能。
- 执行以下命令开启多队列,开启 3 个队列
ethtool -L eth0 combined 3
- 执行以下命令修改每个队列的参数
echo "ff" > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-1/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-2/rps_cpus
3. 使用 Netperf 和 NetServer 测试网络性能
3.1 测试收方向
- 测试机
- 测试机内启动 NetServer 进程,-p 参数用来指定接收数据包的端口号
netserver -p 6000
- 陪练机
- 陪练机内启动 Netperf 进程,分别制定到测试机不同的 NetServer 端口
- netperf -H 参数指定测试机的 IP 地址
- netperf -p 参数指定测试机的端口号
- netperf -l 参数指定陪练机向测试发送数据包的时间
- netperf -t 参数指定发送数据包的协议类型为 TCP_STREAM 还是 UDP_STREAM
- netperf -m 参数指定数据包的字节大小
netperf -H 116.85.255.6 -p 6000 -t UDP_STREAM -l 300 -- -m 64
3.2 测试发方向
- 陪练机
- 在所有陪练机内各启动一个 NetServer 进程,-p 指定端口号
netserver -p 7000
- 测试机
- 测试机内启动 Netperf 进程,-H 指定为陪练机的 IP 地址
- 有多少个陪练机,需要在测试机内启动多少个 Netperf 进程
netperf -H 116.85.255.5 -p 6000 -t UDP_STREAM -l 300 -- -m 64
3.3 测试结果分析
- 最终发送端的每个 Netperf 进程输出如下结果,以下结果不能代表以上申请测试机的性能,具体性能根据实际测试结果而定
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
84675 64 300.00 353255 0 6.03
153284 300.00 109999 0.19
输出结果各个字段的含义如下:
字段名 | 含义 | 备注 |
---|---|---|
Socket size(bytes) | 缓冲区的大小 | - |
Message size(bytes) | 数据包的大小 | - |
Elapsed Time(secs) | 测试时间 | - |
Messages Okay(个) | 发送成功的数据包数目 | - |
Messages Errors(个) | 发送失败的数据包数目 | - |
Throughtput(10^6bits/sec) | 吞吐量 | - |
- PPS
- PPS 为每秒钟发送成功的数据包个数
- 具体计算方法:PPS = 数据包发送成功的数目/测试时间
- 可以在 Server 端用 sar 命令来统计实际收到的数据包,具体命令如下所示,其表示每隔 1 秒统计一次,统计 300 次,sar 命令最后会对 300 次的统计结果求平均
sar -n DEV 1 300