本文将分享在 STM32H743 平台上实测 Zephyr RTOS 内置以太网协议栈性能的过程与结果。测试聚焦于 TCP 吞吐率,并针对测试中可能遇到的栈溢出问题给出了配置参考。
开发与测试环境
- 开发平台:Windows
- RTOS: Zephyr
- MCU: STM32H743
关键配置调整
为确保网络任务有足够的栈空间运行,避免测试中出现栈溢出,需要修改 Zephyr 示例项目 zephyr/samples/net/zperf/prj.conf 中的相关配置。主要调整了以下几个栈大小和连接数参数:
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_NET_MGMT_EVENT_STACK_SIZE=4096
CONFIG_NET_TX_STACK_SIZE=4096
CONFIG_NET_RX_STACK_SIZE=4096
CONFIG_SHELL_STACK_SIZE=4096
CONFIG_NET_BUF_DATA_SIZE=256
CONFIG_NET_TCP_WORKQ_STACK_SIZE=4096
CONFIG_NET_MAX_CONTEXTS=16
CONFIG_NET_MAX_CONN=16
测试步骤
- 将修改配置后的
zperf 示例编译并下载到 STM32H743 开发板。
- 在作为客户端的主机(PC)上执行以下
iperf 命令,发起 TCP 测试:
iperf -c 192.168.2.1 -p 5001 -t 30 -P 4 # TCP 4 流 30 s
- 在开发板的 Zephyr Shell 中启动
zperf 服务器,监听 TCP 下载:
zperf tcp download 5001
测试结果分析
开发板运行 zperf 后,会建立服务并等待连接,下图展示了服务器端的会话状态与单流速率:

主机端 iperf 命令的输出汇总了所有数据流的整体性能。从结果可见,在4个并行TCP流的测试下,总平均带宽达到了 94.5 Mbits/sec,接近百兆以太网的物理极限。

这个成绩表明,Zephyr 内置的网络协议栈(非常见的 LwIP)在 STM32H743 这款高性能MCU上具备相当优秀的 TCP 性能。当然,若要稳定跑满 100Mb/s 线速,可能还需在驱动或协议栈参数上进行更深入的优化。
常见问题:栈溢出
在调试和测试过程中,如果栈空间配置不足,系统可能会因栈溢出而崩溃。下图是一个典型的栈溢出错误日志,在系统启动进行网络初始化时发生,错误信息明确指出了“Stack overflow”。

若遇到类似错误,首要检查点就是上文提到的各项 *_STACK_SIZE 配置,适当增大对应任务的栈大小通常可以解决问题。
希望这份具体的测试数据与配置经验,能为你在云栈社区或其他平台评估或使用 Zephyr 的以太网功能提供有价值的参考。
|