4.5.9. 以太网性能测试

本章旨在指导如何使用 iperf3 工具进行以太网性能测试。可以查阅 iperf3 了解命令详细使用说明。

以太网性能测试关注点:

  1. 带宽吞吐量: 测试以太网实际可用带宽,以确定以太网负载情况性能表现。

  2. 延迟: 评估数据以太网传输延迟,特别负载条件下,延迟增加可能实时应用产生负面影响。

  3. 包率: 测试以太网数据包丢失率,以确定以太网稳定性。丢包率影响数据传输完整性。

  4. MTU(最大传输单元): 验证网卡 MTU 配置及端路径能否正确收发不同档位载荷数据包。

4.5.9.1. 吞吐量测试

测试原理

以太网性能测试依赖于客户端服务器之间数据传输操作。具体原理如下:

  1. 服务器端: 使用 iperf3 监听指定端口,等待客户端连接。服务器通过记录接收数据量时间间隔,计算实际带宽吞吐量。

  2. 客户端: 客户端主动连接服务器,并指定速率间隔发送数据包,模拟网络流量负载。

  3. 统计信息: 测试过程中,iperf3记录关键数据,包括带宽、延迟、丢包率、重传次数等,帮助分析网络性能。

准备工作

image-20250108-201939.png

  1. 选择连接方式: 开发板- 电脑直连或者开发板 - 开发板 直连。

  2. 确定服务器客户端: 开发板客户端服务端可以,对端设备可以个人电脑(PC),也可以一块开发板。

  3. 确定网段: 配置相同网段的 IP 地址。

注意:章节测试配置仅供参考,用户根据实际硬件情况调整测试配置。

示例配置

测试配置如下:

  • 连接方式 : 开发板- 电脑直连。

  • 服务器(PC): IP 地址192.168.1.195

  • 客户端(开发板): IP 地址192.168.1.10

执行命令测试 PC 和开发板以太网连通性:

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 启动服务器。首先,前往iperf 官网 下载 iperf3 安装包完成安装。

在 Windows 系统上,通过命令提示窗口(cmd)执行命令:

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 客户端,指定连接的 Server 端的 IP 地址端口号,然后启动测试。

执行命令:

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

测试标准

测试结果

查阅 iperf3- 测试结果分析 了解输出信息各字段含义。

获得理想性能测试结果,请确保以下条件:

  • 客户端服务器通过高质量网线直连。

  • 客户端服务器协商得到 1000M 的速率;

  • 测试时,客户端服务器其他负载任务运行。

目前我们测试出来性能指标数据如下(仅供参考):

接收带宽:870Mbits/sec

发送带宽:940Mbits/sec

4.5.9.2. MTU 性能测试

介绍如何使用 iperf3以太网进行 MTU 性能测试,MTU 在以太网默认1500 字节。

说明: Buildroot 系统自带的 BusyBox ping支持 -M do(禁止分片),无法用于严格的 MTU 测试。本章节采用 iperf3 UDP 大包方式进行 MTU 验证。

测试原理

MTU(Maximum Transmission Unit)表示接口 IP 层允许最大报文长度(单位:字节;不以太网头)。以太网 MTU 测试包含两个层面:

  1. 配置层: 读取 /sys/class/net/eth0/mtu,确认接口 MTU 配置正确。

  2. 路径层: 使用 iperf3UDP 模式发送接近 MTU 的数据包,验证端到路径包。

UDP 载荷长度与 MTU 的对应关系如下:

UDP 载荷长度 = MTU - 28

其中 28 字节为 IP 头(20 字节)+ UDP 头(8 字节)。以上按 IPv4、无 IP Options 计算;若使用 IPv6,需按 IPv6 头长度(通常 40 字节)重新计算。

测试档位划分:

接口 MTU iperf3 -l(UDP 载荷) 说明
576 548 最小常见 MTU
1500 1472 标准以太网 MTU
3000 2972 验证开发板发送大帧、PC 端正常接收(依赖 PC 网卡能力)
说明:测试包含 MTU 9000(Jumbo Frame)。标准 PC 网卡默认 MTU 为 1500,通常支持接收 9000 字节超大帧;即便开发板设置成功,PC 端 iperf3无法正常接收,会出现 100% 丢包。大帧验证以 MTU 3000 档位为准。

测试使用 -b 100M 限制发送速率为 100 Mbits/sec,目的避免 UDP 满速发送导致 CPU 或处理过来产生与 MTU 无关包,使测试结果稳定、可复现。建议 MTU 测试前先完成本章 吞吐量测试(TCP iperf3),确认链路协商到 1000M,TCP 吞吐量正常(Retr 无明显持续增长)

注意: 由于使用-b 100M 限速,各档位相同测试总流量(MBytes)会接近,这是正常现象。区分不同 MTU 档位查看 Datagrams(发送包数):MTU 越大,单包越大,在相同带宽发送包数少。

准备工作

MTU 测试网络环境吞吐量测试相同,需确保开发板与 PC 处于同一网段链路已 up。示例配置如下:

  • 连接方式: 开发板 - 电脑 直连。

  • 服务器(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 测试

开发板设置 MTU 并执行 UDP 测试:

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 的通用提示,UDP MTU 测试忽略。关注 receiver 行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.
注意: MTU 3000 测试发送约 3000 字节的 IP 报文。PC 端网卡需能接收对应大小帧;若 receiver 出现丢包,除检查开发板 MTU 外,还确认 PC 网卡是否支持 Jumbo Frame,必要在 PC 端同步设置 MTU 。

测试完成恢复默认 MTU

ip link set eth0 mtu 1500
cat /sys/class/net/eth0/mtu # 确认读回值与设定值一致。

# PC 端(若大帧测试时修改过 MTU),则也要恢复。

测试标准

配置检查

  • 默认 MTU 为 1500ip link set eth0 mtu <值> 设置成功,读回值设定值一致。

  • receiver 端 UDP 丢包率0%0/N (0%))。

  • 设置目标 MTU 后,并使用对应-l 值(576→548,1500→1472,3000→2972)。

测试目标 MTU 对比

-b 100M -t 5 条件下,各档位 Datagrams 必须不同;总流量(MBytes)和 Bitrate 因限速接近。

MTU -l Datagrams(约) 包率 结论
576 548 ~114,000 0% PASS
1500 1472 ~42,500 0% PASS
3000 2972 ~21,000 0% PASS
注意: 若 MTU 已改为 1500 但使用 -l 548,发送尺寸包,无法验证 1500 MTU 目标,且 Datagrams 会与 576 档位接近(约 11 万包)。每个档位必须同时使用对应的 MTU 和 -l 值。

4.5.9.3. 常见问题

1. 为什么 iperf3 客户端无法连接服务器?

  • 原因分析:

    1. 客户端服务器同一网段,或 IP 地址配置错误。

    2. 防火墙阻止iperf3 使用端口。

    3. 服务器正确启动监听指定端口。

  • 解决方法:

    1. 确保客户端服务器的 IP 地址处于同一网段,且通过 ping 命令相互通信。

    2. 检查防火墙设置,允许 iperf3 使用端口通信(例如,5002)。

    3. 确保服务器端正确执行 iperf3 -s 命令监听。

2. 为什么测试带宽低于预期值?

  • 原因分析:

    1. 网络硬件网卡支持千兆速率,或协商千兆速率。

    2. 客户端服务器运行其他负载任务,影响性能。

  • 解决方法:

    1. 检查设备硬件支持千兆以太网,必要强制网卡协商千兆速率。

    2. 测试前,关闭客户端服务器可能占用网络系统资源其他任务。

3. 为什么测试过程出现包率?

  • 原因分析:

    1. 测试网络环境存在干扰,或网线质量较差。

    2. 测试设备网络配置(如缓冲区大小)不符合要求。

  • 解决方法:

    1. 使用高质量网线,并确保连接稳固干扰。

    2. 调整网络配置,例如增大 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 实例关闭。

  • 解决方法:

    1. 确保服务器端运行其他 iperf3 实例,或使用不同端口启动:

      iperf3 -s -p <新端口号>
      
    2. 检查结束占用端口进程:

      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 后测试。

提示:以上方法未能解决问题,请参考 iperf3 官方文档相关技术论坛,获取支持。