本文目录导读:

Netperf 是一个经典的网络性能测试工具,主要用于测量 TCP/UDP 的吞吐量、延迟和请求/响应(RR)性能。
由于 Netperf 是基于 C/S(客户端/服务器)架构的,测试前需要明确谁当做服务端,谁当做客户端。
以下是进行基准测试的标准步骤和常用命令:
环境准备
-
安装 Netperf
- Ubuntu/Debian:
sudo apt install netperf - CentOS/RHEL:
sudo yum install netperf(可能需要先启用 EPEL 仓库) - 源码编译: 从官网下载,
./configure && make && sudo make install
- Ubuntu/Debian:
-
网络拓扑确认
- 确定 Server(服务端) 和 Client(客户端) 的 IP 地址。
- 防火墙注意: 服务端需要开放端口(默认是 12865,可通过
-p修改)。
核心测试步骤
启动服务端
在作为服务器的机器上运行 netserver:
netserver
- 默认监听所有 IP 的 12865 端口。
- 可以指定端口或监听特定 IP:
netserver -p 20000 -L 192.168.1.100
客户端运行测试
在客户端机器上使用 netperf 命令进行测试。
基本语法:
netperf -H <服务端IP> [其他参数]
常见基准测试场景与参数
TCP 吞吐量测试
测试网络的最大传输能力(千兆网卡是否达标、网络是否存在瓶颈)。
# 默认测试 TCP 流(STREAM) netperf -H 192.168.1.100 -l 30
-l 30:测试持续 30 秒。- 结果解读:关注 Throughput(吞吐量)。
- 千兆局域网理想值约 940-980 Mbps。
- 万兆局域网理想值约 9.4-9.8 Gbps。
- 如果远低于预期,可能是网卡协商速度、网线质量、CPU 负载或驱动问题。
针对大包优化测试(基于 1460 字节 MTU):
netperf -H 192.168.1.100 -l 30 -m 65536 -t TCP_STREAM
-m 65536:设置发送缓冲区大小为 64KB。
TCP 请求/响应延迟测试(RR)
用于评估常见的 Web 请求、数据库查询或 RPC(远程过程调用)场景。
netperf -H 192.168.1.100 -l 30 -t TCP_RR
- 结果解读:关注 Latency(延迟) 和 Transaction Rate(事务速率)。
- Netperf 以 平均延迟(单位微秒或毫秒)和部分标准偏差的形式给出结果。
- 吞吐量结果中的
Trans Rate数值越高,意味着延迟越低。
小包交互测试(模拟高频数据包):
netperf -H 192.168.1.100 -l 30 -t TCP_RR -r 64,1024
-r 64,1024:请求 size 64 字节,响应 size 1024 字节,调整这两个数值可以模拟不同类型的应用交互。
UDP 吞吐量 & 丢包率测试
用于测试 VoIP(语音通话)、视频流或 DNS(域名解析)场景。
# UDP 默认测试(发送 64 字节包) netperf -H 192.168.1.100 -l 30 -t UDP_STREAM
测试特定大小包的吞吐量 & 丢包:
netperf -H 192.168.1.100 -l 30 -t UDP_STREAM -m 1472
-m 1472:这是 UDP 在标准以太网(1500 MTU)下的最大单包数据量。- 结果解读:输出包含 Throughput(吞吐量) 和关键的 Loss(丢包率)。
如果丢包率大于 0,表明网络或应用层缓冲区存在容量不足或拥塞。
TCP 连接速率测试(CRR)
模拟短连接场景(HTTP/1.0、数据库短连接)。
netperf -H 192.168.1.100 -l 30 -t TCP_CRR
- 结果解读:主要观察系统处理 新建 TCP 连接的能力(每秒连接数),数值较低通常说明 TCP 栈或内核参数(如
tcp_tw_reuse)需要调优。
结果分析要点
-
吞吐量瓶颈识别:
- CPU 利用率在客户端或服务端达到 100%,说明存在 CPU 瓶颈(此时可能需要调整中断亲和性或使用大页内存,具体取决于你的环境)。
- CPU 空闲但吞吐量低,通常是 网络瓶颈(带宽不足、丢包)或 驱动/硬件问题(如网卡缓存、内存带宽不足)。
-
延迟抖动:
- 观察 Netperf 输出的
Stddev(标准偏差),如果该数值较大(例如超过 ±50微秒),说明网络存在抖动,可能影响实时应用。
- 观察 Netperf 输出的
-
双向测试:
- Netperf 默认只测单向,要测双向,可以:
- 方法1:同时运行两个 netperf 实例(一个发,一个收)。
- 方法2:使用高级测试类型(如
TCP_MAERTS其实是为了测试接收端性能,并非标准双向;更推荐-t TCP_RR来模拟双向数据交换)。
- Netperf 默认只测单向,要测双向,可以:
调试技巧
- 查看详细错误:在客户端或服务端加上
-v 2(详细程度参数)可以输出更详细的调试信息,帮助你定位问题。 - 指定测试时间:基准测试建议运行 30-60 秒以上 (
-l 60),以获得稳定结果,短时间的突发流量并不能反映网络的实际稳定带宽。 - 并行测试:使用
-P 0禁用并行控制输出,然后使用-T或-b参数进行多连接测试,可以评估网络在高并发下的性能(但请注意避免被误判为攻击流量)。
总结命令速查
| 场景 | 命令 |
|---|---|
| 标准 TCP 吞吐量 | netperf -H <IP> -l 30 |
| 大包 TCP 吞吐量 | netperf -H <IP> -l 30 -t TCP_STREAM -m 65536 |
| TCP 延迟 | netperf -H <IP> -l 30 -t TCP_RR |
| UDP 吞吐量 | netperf -H <IP> -l 30 -t UDP_STREAM -m 1472 |
| TCP 连接速率 | netperf -H <IP> -l 30 -t TCP_CRR |
建议将测试结果记录下来,作为网络性能的 基线(Baseline),后续在调整网卡参数(如 gro, tso, 中断亲和性 irqbalance)或遇到性能问题时,可以通过与基线对比来快速判断性能波动的原因。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。