1. 网络性能测试工具的选择与对比
在评估单板计算机和迷你PC的网络性能时,iperf3一直是我们的首选工具。但最近微软的一篇博客文章引起了我的注意,他们明确指出iperf3不应该在Windows 11上使用,并推荐了自家的ntttcp工具。这促使我进行了一次深入的对比测试。
1.1 为什么微软不推荐iperf3?
微软给出了三个主要原因:
- 官方支持问题:iperf3的维护者ESnet明确表示不正式支持Windows平台,他们推荐使用iperf2。虽然有人通过Cygwin在Windows上运行iperf3,但并非所有功能都能正常工作。
- 性能问题:iperf3在Windows上是模拟运行的,它不会调用Windows原生API,而是使用Linux/POSIX调用,这可能会影响性能表现。
- 版本滞后:Windows平台上可用的iperf3版本(3.1.3)发布于2016年,即使ESnet提供的3.16版本也落后了15个版本。
1.2 微软推荐的替代方案
微软维护了两个开源网络测试工具:
- ntttcp(Windows NT Test TCP):支持Windows和Linux平台,命令行界面与iperf3类似,专注于网络栈吞吐量测试。
- ctsTraffic:仅支持Windows-to-Windows测试,专注于端到端的好吞吐量场景。
由于我们的测试通常涉及Linux和Windows混合环境,ctsTraffic不适用,因此我们重点测试ntttcp。
2. 测试环境搭建与配置
2.1 硬件配置
我的测试平台包含四个主要组件:
- Khadas Mind Premium迷你PC:配备2.5GbE网卡和WiFi 6,运行Windows 11 Pro
- UP Xtreme i11 Edge迷你PC:配备2.5GbE网卡,运行Ubuntu 20.04作为服务器
- TP-Link 2.5GbE交换机
- 小米AX6000 WiFi 6路由器
2.2 软件安装
2.2.1 Linux端安装ntttcp
在Ubuntu 20.04上安装ntttcp非常简单:
git clone https://github.com/microsoft/ntttcp-for-linux cd ntttcp-for-linux/src make sudo make install2.2.2 Windows端准备
Windows用户可以直接下载ntttcp.exe二进制文件,无需安装即可运行。
3. 基础测试与参数解析
3.1 基本命令结构
ntttcp的基本命令结构与iperf3类似,但有一些关键差异:
接收端命令(Linux):
ntttcp -r -m 1,*,192.168.31.12 -t 60 -V发送端命令(Windows):
ntttcp.exe -s -m 1,*,192.168.31.12 -l 128K -t 60 -V3.2 关键参数说明
-r:作为接收端运行-s:作为发送端运行-m:线程映射,格式为"发送线程,接收线程,IP地址"-t:测试持续时间(秒)-l/-b:缓冲区大小(Windows用-l,Linux用-b)-V:详细输出模式-ns:无同步模式(Windows-Linux互测必需)
3.3 Windows-Linux互测的特殊配置
在Windows和Linux之间测试时,必须使用-ns(无同步)参数,否则连接会失败。这是ntttcp的一个已知限制。
对于Windows接收端,还需要开放防火墙:
netsh advfirewall firewall add rule program=C:\path\to\ntttcp.exe name="ntttcp" protocol=any dir=in action=allow enable=yes profile=ANY4. 性能测试结果对比
4.1 测试方案设计
我们进行了四组测试:
- WiFi 6上传(Windows→Linux)
- WiFi 6下载(Linux→Windows)
- 2.5GbE上传(Windows→Linux)
- 2.5GbE下载(Linux→Windows)
每组测试都使用iperf3和ntttcp分别进行,参数尽可能保持一致。
4.2 测试结果汇总
| 测试类型 | iperf3结果 | ntttcp结果 |
|---|---|---|
| WiFi 6上传(Tx) | 712 Mbps | 785 Mbps |
| WiFi 6下载(Rx) | 590 Mbps | 604 Mbps |
| 2.5GbE上传(Tx) | 700 Mbps | 704 Mbps |
| 2.5GbE下载(Rx) | 2.30 Gbps | 2.28 Gbps |
4.3 结果分析
WiFi性能:
- 上传场景下,ntttcp比iperf3快约10%
- 下载场景差异不明显
- 两种工具都显示Linux的WiFi性能优于Windows
有线网络性能:
- 2.5GbE环境下两者性能接近
- 都达到了接近线速的性能
CPU占用:
- ntttcp提供了更详细的CPU使用数据
- 测试期间CPU占用都很低(<1%)
5. 高级测试与多线程优化
5.1 微软推荐的多线程测试
微软建议使用多线程和大缓冲区来测试真实带宽能力。我们尝试了8线程、1MB缓冲区的配置:
Linux发送端命令:
ntttcp -s -m 8,*,192.168.31.69 -b 1024K -N -t 60测试结果:
- 吞吐量:564.55Mbps
- 比单线程配置略低
- CPU占用略有上升(约3%)
5.2 多线程测试的注意事项
- 线程数量选择:不应超过CPU核心数
- 缓冲区大小:大缓冲区可以减少系统调用开销
- 结果波动:WiFi测试结果本身波动较大,需要多次测试取平均值
6. 工具优缺点分析
6.1 ntttcp的优势
- 官方支持:微软维护,针对Windows优化
- 额外指标:提供CPU占用、数据包重传等详细数据
- 高带宽支持:微软文档显示在10GbE+环境中表现更好
6.2 ntttcp的不足
- 跨平台限制:Windows-Linux测试需要特殊参数
- 参数差异:Windows和Linux版本参数不完全一致
- 更新滞后:Linux版本三年未更新
- 缺少反向测试:没有类似iperf3的
-R参数
6.3 iperf3的现状
虽然微软不推荐,但iperf3仍有其优势:
- 更广泛的社区支持
- 跨平台一致性更好
- 更简单的命令行界面
7. 实际应用建议
基于测试结果,我给出以下建议:
Windows环境:
- 优先考虑ntttcp,特别是高带宽测试场景
- 需要Windows-Linux互测时,记得使用
-ns参数
Linux环境:
- iperf3仍是可靠选择
- 如果需要更详细的系统指标,可以尝试ntttcp
性能分析:
- 关注CPU占用、重传率等额外指标
- 多次测试取平均值,特别是WiFi测试
测试报告:
- 明确标注使用的工具和版本
- 记录完整的命令行参数
- 注明测试环境和网络配置
8. 常见问题排查指南
8.1 连接失败问题
症状:Windows客户端报错"目标机器积极拒绝"
解决方案:
- 确保使用
-ns参数 - 检查防火墙设置
- 确认IP地址和端口正确
8.2 性能异常低
可能原因:
- 缓冲区大小设置不合理
- 线程数过多或过少
- 网络设备限制
排查步骤:
- 尝试不同的缓冲区大小(64K-1M)
- 调整线程数量(1-CPU核心数)
- 检查网络设备状态和配置
8.3 结果波动大
处理方法:
- 延长测试时间(至少60秒)
- 进行多次测试取平均值
- 确保测试环境稳定(减少其他网络活动)
9. 测试技巧与经验分享
缓冲区大小选择:
- 千兆以下网络:64K-128K
- 千兆以上网络:256K-1M
- 实际测试中,128K在大多数场景表现良好
测试持续时间:
- 至少30秒,推荐60秒
- 长时间测试可以平滑短期波动
系统准备:
- 关闭不必要的网络应用
- 更新网卡驱动
- 检查系统电源管理设置(避免节能模式)
结果记录:
- 保存原始输出日志
- 记录测试时间、环境温度等可能影响结果的因素
10. 结论与个人体会
经过详细的对比测试,我发现ntttcp和iperf3在2.5GbE及以下网络环境中的性能差异不大。ntttcp的主要优势在于:
- 提供了更丰富的系统指标
- 在Windows平台有官方支持
- 高带宽场景可能表现更好
然而,ntttcp的跨平台测试略显复杂,且Linux版本更新不及时。在实际测试工作中,我仍然会优先使用iperf3,特别是在需要快速获取基本吞吐量数据时。
对于需要深入分析网络性能的场景,特别是Windows平台的高带宽测试,ntttcp是一个值得考虑的替代方案。我建议网络测试人员同时掌握这两种工具,根据具体需求灵活选择。