4.5.9. 以太网性能测试
本章iperf3 工具
以太网
带宽
和 测试吞吐量: 以太网 的 实际 可用 带宽,以 确定 以太网 在 高 负载 情况 下 的 性能 表现。 延迟: 评估
数据 在 以太网 上 传输 时 的 延迟,特别 是 在 高 负载 条件 下,延迟 的 增加 可能 会 对 实时 应用 产生 负面影响。 丢
包率: 测试以太网 中 数据包 的 丢失 率,以 确定 以太网 的 稳定性。丢 包率 过 高 会 影响 数据传输 的 完整性。 MTU(最大
传输 验证单元): 网卡 MTU 配置 及端 到 端 路径 能否 正确 收发 不同 档位 的 满 载荷 数据包。
4.5.9.1. 吞吐量测试
测试原理
以太网
服务器端: 使用
iperf3监听指定 端口,等待 客户端 连接。服务器 通过 记录 接收 的 数据量 和 时间 间隔,计算 实际 带宽 和 吞吐量。 客户端: 客户端
主动 连接 服务器,并 以 指定 的 速率 和 间隔 发送 数据包,模拟 网络流量 负载。 统计
信息: 测试过程 中, iperf3会记录 关键 数据,包括 带宽、延迟、丢 包率、重传 次数 等,帮助 分析 网络 性能。
准备工作

选择
连接 方式: 开发板-电脑直连或者 开发板-开发板直连。确定
服务器 开发板和 客户端: 做 客户端 和 服务端 都 可以,对端 设备 可以 是 个人电脑(PC),也 可以 是 另 一块 开发板。 确定
网段: 配置为 相同 网段 的 IP 地址。
示例配置
在
连接
方式 : 开发板-电脑直连。服务器(PC): IP 地址
为 192.168.1.195客户端(开发板): IP 地址
为 192.168.1.10
执行命令
ping -I eth0 192.168.1.195
执行
PING 192.168.1.195 (192.168.1.195) from 192.168.1.10 eth0: 56(84) bytes of data.
64 bytes from 192.168.1.195: icmp_seq=1 ttl=128 time=1.54 ms
64 bytes from 192.168.1.195: icmp_seq=2 ttl=128 time=1.28 ms
64 bytes from 192.168.1.195: icmp_seq=3 ttl=128 time=1.57 ms
64 bytes from 192.168.1.195: icmp_seq=4 ttl=128 time=1.40 ms
测试方法
步骤一:启动服务器
在 PC 上iperf3 启动
在 Windows 系统
iperf3 -s -p 5002
启动
-----------------------------------------------------------
Server listening on 5002
-----------------------------------------------------------
客户端
PING 192.168.1.195 (192.168.1.195) from 192.168.1.10 eth0: 56(84) bytes of data.
64 bytes from 192.168.1.195: icmp_seq=1 ttl=128 time=1.54 ms
64 bytes from 192.168.1.195: icmp_seq=2 ttl=128 time=1.28 ms
64 bytes from 192.168.1.195: icmp_seq=3 ttl=128 time=1.57 ms
64 bytes from 192.168.1.195: icmp_seq=4 ttl=128 time=1.40 ms
步骤二:启动客户端
在
执行命令:
iperf3 -c 192.168.1.195 -i 1 -t 600 -p 5002
命令
-c: 指定服务器 的 IP 地址。 -i: 数据打印 间隔时间(单位:秒)。 -t: 测试总 运行 时间(单位:秒)。 -p: 指定服务器 监听 的 端口号。
执行
Connecting to host 192.168.1.195, port 5002
[ 5] local 192.168.1.10 port 40564 connected to 192.168.1.195 port 5002
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 112 MBytes 941 Mbits/sec 49 211 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 939 Mbits/sec 109 210 KBytes
[ 5] 2.00-3.00 sec 110 MBytes 926 Mbits/sec 163 200 KBytes
[ 5] 3.00-4.00 sec 112 MBytes 936 Mbits/sec 65 218 KBytes
测试标准
测试结果
请
为
客户端
与 服务器 通过 高质量 网线 直连。 客户端
和 服务器 协商 得到 1000M 的 速率; 测试
时,客户端 和 服务器 无 其他 高 负载 任务 运行。
目前
接收
发送
4.5.9.2. MTU 性能测试
本iperf3 对
ping 不-M do(禁止iperf3 UDP 大包测试原理
MTU(Maximum Transmission Unit)表示
配置
层: 读取/sys/class/net/eth0/mtu,确认接口 MTU 配置 正确。 路径
层: 使用iperf3以 UDP 模式发送 接近 MTU 的 数据包,验证 端到 端 路径 无 丢 包。
UDP 载荷
UDP 载荷长度 = MTU - 28
其中 28 字节
测试
| 接口 MTU | iperf3 -l(UDP 载荷) |
说明 |
|---|---|---|
| 576 | 548 | 最小 |
| 1500 | 1472 | 标准 |
| 3000 | 2972 | 验证 |
iperf3 也测试-b 100M 限制iperf3),确认
-b 100M 限速,各准备工作
MTU 测试
连接
方式: 开发板-电脑直连。服务器(PC): IP 地址
为 192.168.1.12,运行iperf3 -s -p 5002客户端(开发板): IP 地址
为 192.168.1.10链路
协商: 1000 Mbps 全双工(可通过 cat /sys/class/net/eth0/speed确认)
测试方法
步骤一:启动服务器
在 PC 上iperf3 服务器(测试
iperf3 -s -p 5002
步骤二:启动客户端
MTU 576 测试
在
ip link set eth0 mtu 576
cat /sys/class/net/eth0/mtu # 确认读回值为 576
iperf3 -c 192.168.1.12 -p 5002 -u -l 548 -b 100M -t 5 -i 1
命令
-u: 使用 UDP 模式。-l 548: UDP 载荷 548 字节(576 - 28)。-b 100M: 限制发送 带宽 为 100 Mbits/sec。 -t 5: 测试时 长 5 秒。 -p 5002: 服务器端口。 -i 1:每 1 秒输出 一次 中间 结果。
执行
warning: UDP block size 548 exceeds TCP MSS 524, may result in fragmentation / drops
Connecting to host 192.168.1.12, port 5002
[ 5] local 192.168.1.10 port 57791 connected to 192.168.1.12 port 5002
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 11.9 MBytes 100 Mbits/sec 22806
[ 5] 1.00-2.00 sec 11.9 MBytes 100 Mbits/sec 22810
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.000 ms 0/114037 (0%) sender
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.021 ms 0/114037 (0%) receiver
MTU 1500 测试
ip link set eth0 mtu 1500
cat /sys/class/net/eth0/mtu # 确认读回值为 1500
iperf3 -c 192.168.1.12 -p 5002 -u -l 1472 -b 100M -t 5 -i 1
执行
warning: UDP block size 1472 exceeds TCP MSS 1448, may result in fragmentation / drops
Connecting to host 192.168.1.12, port 5002
[ 5] local 192.168.1.10 port 50264 connected to 192.168.1.12 port 5002
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 11.9 MBytes 100 Mbits/sec 8490
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.000 ms 0/42457 (0%) sender
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.050 ms 0/42457 (0%) receiver
iperf Done.
exceeds TCP MSS 的 warning 是 iperf3 的Lost/Total Datagrams 字MTU 3000 测试
用于
ip link set eth0 mtu 3000
cat /sys/class/net/eth0/mtu # 确认读回值为 3000
iperf3 -c 192.168.1.12 -p 5002 -u -l 2972 -b 100M -t 5 -i 1
执行
warning: UDP block size 2972 exceeds TCP MSS 2948, may result in fragmentation / drops
Connecting to host 192.168.1.12, port 5002
[ 5] local 192.168.1.10 port 51943 connected to 192.168.1.12 port 5002
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 11.9 MBytes 99.9 Mbits/sec 4204
[ 5] 1.00-2.00 sec 11.9 MBytes 100 Mbits/sec 4206
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.000 ms 0/21027 (0%) sender
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.056 ms 0/21027 (0%) receiver
iperf Done.
测试
ip link set eth0 mtu 1500
cat /sys/class/net/eth0/mtu # 确认读回值与设定值一致。
# PC 端(若大帧测试时修改过 MTU),则也要恢复。
测试标准
配置检查
默认 MTU 为 1500,
ip link set eth0 mtu <值>设置成功,读 回值 与 设定值 一致。 receiver 端 UDP 丢
包率 为 0%( 0/N (0%))。设置
目标 MTU 后,并 使用 对应 的 -l值(576→548,1500→1472,3000→2972)。
测试目标 MTU 对比
在 -b 100M -t 5 条件
| MTU | -l |
Datagrams(约) | 丢 |
结论 |
|---|---|---|---|---|
| 576 | 548 | ~114,000 | 0% | PASS |
| 1500 | 1472 | ~42,500 | 0% | PASS |
| 3000 | 2972 | ~21,000 | 0% | PASS |
-l 548,发送-l 值。4.5.9.3. 常见问题
1. 为什么 iperf3 客户端无法连接到服务器?
原因
分析: 客户端
和 服务器 未 在 同一 网段,或 IP 地址 配置 错误。 防火墙
阻止 了 iperf3使用的 端口。 服务器
未 正确 启动 或 未 监听 指定 端口。
解决
方法: 确保
客户端 和 服务器 的 IP 地址 处于 同一 网段,且 能 通过 ping命令相互 通信。 检查
防火墙 设置,允许 iperf3使用的 端口 通信(例如, 5002)。确保
服务器端 已 正确 执行 iperf3 -s命令并 在 监听。
2. 为什么测试带宽低于预期值?
原因
分析: 网络
硬件 如 网卡 不 支持 千兆 速率,或 未 协商 到 千兆 速率。 客户端
或 服务器 运行 了 其他 高 负载 任务,影响 了 性能。
解决
方法: 检查
设备 硬件 支持 千兆 以太网,必要 时 强制 网卡 协商 为 千兆 速率。 测试
前,关闭 客户端 和 服务器 上 可能 占用 网络 或 系统资源 的 其他 任务。
3. 为什么测试过程中出现高丢包率?
原因
分析: 测试
网络 环境 存在 干扰,或 网线 质量 较差。 测试
设备 的 网络 配置(如 缓冲区 大小)不 符合要求。
解决
方法: 使用
高质量 网线,并 确保 连接 稳固 无 干扰。 调整
网络 配置,例如 增大 TCP 缓冲区:
sysctl net.core.rmem_max #查看接收缓冲区(rmem_max)的最大值 sysctl net.core.wmem_max #查看发送缓冲区(wmem_max)的最大值 sysctl -w net.core.rmem_max=2500000 #设置接收缓冲区(rmem_max)的最大值为 2,500,000 字节 sysctl -w net.core.wmem_max=2500000 #设置发送缓冲区(wmem_max)的最大值为 2,500,000 字节
4. 如何解决 iperf3 运行时显示“Address already in use”错误?
iperf3 运行原因
分析: 此错误 通常 是因为 服务器端 口 已经 被 占用,可能 是 另 一个 iperf3实例未 关闭。 解决
方法: 确保
服务器端 未 运行 其他 iperf3实例,或使用 不同 端口 启动: iperf3 -s -p <新端口号>
检查
并 结束 占用 端口 的 进程: netstat -tuln | grep 5002 kill <进程 ID>
5. 为什么 MTU 测试各档位的 MBytes 和 Bitrate 看起来一样?
原因
分析: 测试使用 了 -b 100M限制发送 带宽,在 相同 测试 时 长(如 5 秒)内,各 档位 的 总流量 约 59.6 MBytes,Bitrate 约 100 Mbits/sec,因此 数值 接近。 解决
方法: 区分 MTU 档位应 查看 Datagrams(发送 包数) ,而非 MBytes。MTU 576 约 11 万 包,MTU 1500 约 4.2 万 包,MTU 3000 约 2.1 万 包。同时 确认 每个 档位 使用 了 正确 的 -l值(MTU - 28)。
6. 为什么不测试 MTU 9000?
原因
分析: MTU 9000 属于 Jumbo Frame,要求链路 两端 网卡 均 支持 超大 帧。标准 PC 网卡 默认 MTU 为 1500,通常 无法 接收 9000 字节 的 帧;开发板 侧 即使 设置 ip link set eth0 mtu 9000并发送 -l 8972的 UDP 包,PC 端iperf3会出现 receiver 端 100% 丢包 或 收不到 数据。 解决
方法: 本测试 以 MTU 3000 作为 大帧 验证 档位。若 业务 场景 确需 Jumbo Frame,需 确认 对端 网卡 与 交换机 均 支持,并 在 两端 同步 设置 MTU 后 再 测试。