最近在学习TCPIP协议栈的相关知识,主要是基于STM32F7的硬件平台,协议栈选择了目前比较主流的轻量级TCPIP协议栈LWIP和网络上目前还算比较火的国产自主研发的DJYOS(都江堰操作系统)的DJYIP协议栈。主要测试了两个协议栈的TCP速度测试,写个帖子,纪念一下。本人菜鸟,各位轻拍,欢迎提出更多测试意见。1、测试目的 在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速度。 " @+ v2 \2 N5 {0 g( d0 y4 G7 j W7 R 2、测试方法 用一块STM32F7的发送板,应用层无延迟调用TCP发送函数send(),不断发送不同大小的数据包,数据包大小范围64 ~ 1460byte,接收端每1秒统计接收到的数据包,交终端上显示接收的速度。(当然,运行LWIP和DJYIP的两块接收板,运行在相同的主频,协议栈的pbuf缓冲、TCP接收窗口大小、优先级等一致。) 3、软硬件平台 硬件平台 LWIP DJYIP 运行板件 ST官方板STM32756G-EVAL2 STM32F7核心板 运行主频 200MHz 200MHz# }* `. I+ ^/ S2 C" u$ w8 J' ^ 连接方式 与发送板直连 与发送板直连 编译调试 MDK eclipse 软件平台 LWIP DJYIP7 w+ e& Z3 g* I$ o3 j 网络驱动接收方式 中断 中断% I8 w$ I, u3 A _; r, r$ ]$ J; U pbuf大小 16kbytes 16kbytes2 O% _8 E$ k M. N1 r B# s* y TCP窗口 & G" `3 _3 x" J# d, \ 2048 2048 其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库, 编译运行在MDK5.12. 4 H$ |4 D6 z* A$ c |
基于STM32F746G-Discover的扩展电路板
【合集】STM32F7教程、资料大集合
F769 Discovery实现播放U盘音乐的播放器
STM32 VS Code Extension (在Ubuntu上开发STM32,ST官方vscode插件使用指南)
STM32F765@216MHz跑NES模拟器【代码】【视频】
基于STM32F7实现ADC软件触发+轮询采集
基于STM32F7进行ADC采集解决更新问题
基于STM32F7使用定时器经验分享
实现基于STM32F7中周期采集
基于STM32F7中实现采集和中断
(1)源码编写及修改
主要是比较基础的socket编程,发送板作为TCP客户端,两块接收板作为TCP服务器,客户端板建立TCP连接后,一直0 ^; q6 G# d0 V, L& |3 r2 c% u
发送程序,服务器一直接收TCP数据,并统计接收速度。
对STM32Cube_FW_F7_V1.6.0源码中LWIP的配置,需要修改lwipopts.h,主要修改了如下两行代码
#define PBUF_POOL_SIZE 11//8
#define TCP_WND 2048//(2*TCP_MSS)
(2)客户端发送
while(1)
{0 T" R3 N* `$ T9 v# Z
byMsgBuf[0] = byMsgBuf[0] + 1;" l( Q& V# f( [: T; K* s7 s
if(ClientSndRand)$ ^) k2 {% l% b! F
{
iMsgLen = (int)(drand48() * TCP_PKG_LEN_MAX);0 M* V U0 G8 y* ?( P
}
else4 |: r! Y# p3 A' x6 [2 I* s
{
iMsgLen = ClientSndLen;1 [, {& v5 P: @) [$ t
}& G) d' h1 S/ u; _! \1 n
if(iMsgLen)
iMsgLen = send(sockfd, byMsgBuf, iMsgLen, 0);
}4 o4 o. W& T& `4 k
(3)服务器接收
while(1)8 t2 B( R/ Z- U i: \
{
iMsgLen = recv( sFd, byMsgBuf, SvrRcvLen, 0);( A3 d9 n6 F" p/ e, t
iMsgCnt += iMsgLen;" O; i5 B, L4 G. h& a# e3 w
}' S x( w. K P; d2 s9 s# b0 D* \
5、测试结果' v( a5 e% K) r
测试结果如下表所示, Q# h+ F* a9 Z, p2 e, K! b# D- i
发送包(byte) LWIP(Mbytes/s) DJYIP(Mbytes/s)
1400 3.02 3.189 B5 v- b @# P1 ~2 H8 Y; P+ q
1024 4.22 3.16
512 3.07 3
256 2.02 2.5& t; D/ N' e& D1 T
128 0.2±0.2 1.76
64 0.2±0.2 1.12
rand*1460 1M内变动 2.52& I2 I' U; D6 ~! P
其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是% [5 _) l# T, l6 R; ` \7 o& `8 T
因为1024是2的整数次幂的原因(可能猜测)。
从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定
性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。# c, }3 T8 A3 E/ S" h8 o& o. @* ?
0 ^6 F# f1 f5 L: q) ?, q9 x6 p9 k
ps:大家如果有相关的测试数据,可回复,大家一起参考学习。