本文目录导读:

qperf 是一个灵活的网络性能测量工具,可以很方便地测量单线程或多线程情况下的延迟(Latency)和吞吐量(Bandwidth/Throughput)。
它的核心原理是:需要在一台机器上启动服务器端(监听),在另一台机器启动客户端(发起测试)。
以下是使用 qperf 测量延迟和带宽的标准方法:
环境准备
- 安装:在客户端和服务器端都需要安装
qperf。- Red Hat/CentOS/Fedora:
sudo yum install qperf或sudo dnf install qperf - Debian/Ubuntu:
sudo apt install qperf
- Red Hat/CentOS/Fedora:
- 防火墙:确保服务器端的防火墙允许
qperf的默认端口19765(TCP)。
启动服务器端
在作为测试目标的机器上运行(通常只需运行一次,保持后台运行):
# 在服务器端执行 qperf --listen # 或指定端口(如果默认端口被占用) qperf --listen_port 12345
服务器会进入等待状态,直到客户端发起请求。
测量网络延迟
延迟测试通常使用 TCP 协议,模拟请求-响应往返时间(RTT)。
基本命令格式:在客户端执行 qperf <服务器IP> <测试类型>
测试单次 TCP 延迟
# 在客户端执行 qperf 192.168.1.100 tcp_lat
- 输出示例:
tcp_lat: latency = 45.2 us (微秒) ← 这就是单次往返时间us是微秒,通常数据中心内网是 100-500 us,跨机房是 1ms-10ms。
测试单次 UDP 延迟
qperf 192.168.1.100 udp_lat
注意:qperf 默认测量的是 单次请求-响应 的延迟,而不是 ping 的 ICMP 延迟,这能更真实反映应用程序(如数据库、RPC服务)的延迟。
测量网络带宽(吞吐量)
带宽测试通常使用 TCP 流来测试最大吞吐量。
测试 TCP 带宽
# 在客户端执行 qperf 192.168.1.100 tcp_bw
- 输出示例:
tcp_bw: bw = 1.12 GB/sec ← 这里显示的是字节/秒 (GigaBytes per second)- 如果显示
GB/sec,是字节速率。1 GB/sec约等于8 Gbps(网络常用单位)。 - 如果显示
Gb/sec,则是比特速率,注意看单位。
- 如果显示
测试 UDP 带宽
qperf 192.168.1.100 udp_bw
UDP测试可以设置流量整形,如 -m 指定报文大小,-u 指定速率限制。
进阶参数(组合测试与调优)
qperf 的强大之处在于可以同时测试多种指标,或指定参数。
同时测试延迟和带宽
qperf 192.168.1.100 tcp_lat tcp_bw
会依次执行延迟测试和带宽测试,并给出两个结果。
指定测试时长
默认可能只测几秒,可以增加时长以获得更稳定结果:
qperf 192.168.1.100 -t 30 tcp_bw # 测试30秒
指定消息大小 (影响带宽/延迟)
默认消息大小较小(延迟测试通常64字节,带宽测试通常几百KB),可以手动指定:
# 用64字节的小包测延迟(模拟小请求) qperf 192.168.1.100 -m 64 tcp_lat # 用1M字节的大包测带宽(模拟大文件传输) qperf 192.168.1.100 -m 1M tcp_bw
使用多连接 (模拟并发)
这在测量高并发场景下的带宽或延迟时很有用。
# 使用4个TCP连接并发送测试带宽 qperf 192.168.1.100 -t 30 -n 4 tcp_bw
调整TCP缓冲大小 (测试极限带宽)
如果默认测试结果偏低,可能是因为TCP收发缓冲区太小:
# 设置发送/接收缓冲区为 256KB qperf 192.168.1.100 --tcp_buf_size 256K tcp_bw
解读结果时的关键点
-
单位陷阱:
- 带宽结果中
GB/sec是字节(Gigabytes),而网络设备的带宽通常用Gbps(Gigabits)表示,换算:1 GB/sec = 8 Gbps。 - 延迟结果中
us是微秒(百万分之一秒),ms是毫秒(千分之一秒),1 ms = 1000 us。
- 带宽结果中
-
链路层的影响:
- 如果两端网卡都是 10Gbps,但实测只有
12 GB/sec(即约9 Gbps),这已经是很好的结果,协议开销会导致大约 5-10% 的损耗。 - 如果实测远低于理论值(例如只有
200 MB/sec),可能是 CPU瓶颈、PCIe总线限制、网卡驱动问题 或 中间交换机/防火墙限速。
- 如果两端网卡都是 10Gbps,但实测只有
-
从结果反推:
- 延迟高 且 带宽低:通常是链路拥塞、网络设备处理慢或往返距离远(物理距离+跳数多)。
- 延迟低 但 带宽低:可能是单线程瓶颈、TCP窗口太小、CPU单核性能不足(
qperf默认单线程)或隔板/线缆接触不良。
总结命令备忘录
| 测试目标 | 客户端命令示例 (假设服务器IP为 192.168.1.100) |
|---|---|
| 默认 TCP 延迟 | qperf 192.168.1.100 tcp_lat |
| 默认 TCP 带宽 | qperf 192.168.1.100 tcp_bw |
| 同时测试 | qperf 192.168.1.100 tcp_lat tcp_bw |
| 指定消息大小 | qperf 192.168.1.100 -m 64 tcp_lat |
| 多线程测带宽 | qperf 192.168.1.100 -n 4 tcp_bw |
| 长时间测试 | qperf 192.168.1.100 -t 60 tcp_bw |
| 指定缓冲区大小 | qperf 192.168.1.100 --tcp_buf_size 512K tcp_bw |
最后提醒:执行前要确保服务器端启动的 qperf 进程与客户端版本匹配,并在测试大带宽时注意 CPU 占用率,避免客户端或服务器 CPU 成为瓶颈导致结果不准。
标签: 网络性能指标