|
最近在学习TCPIP协议栈的相关知识,主要是基于STM32F7的硬件平台,协议栈选择了目前比较主流的轻量级TCPIP协议栈LWIP和网络上目前还算比较火的国产自主研发的DJYOS(都江堰操作系统)的DJYIP协议栈。主要测试了两个协议栈的TCP速度测试,写个帖子,纪念一下。本人菜鸟,各位轻拍,欢迎提出更多测试意见。1、测试目的& i9 c. U- w5 ?1 W3 D! I( T% | 在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速度。 2 |) c8 \0 _5 u3 ? 2、测试方法6 i3 j$ y9 Z Q! G 用一块STM32F7的发送板,应用层无延迟调用TCP发送函数send(),不断发送不同大小的数据包,数据包大小范围64 ~ 1460byte,接收端每1秒统计接收到的数据包,交终端上显示接收的速度。(当然,运行LWIP和DJYIP的两块接收板,运行在相同的主频,协议栈的pbuf缓冲、TCP接收窗口大小、优先级等一致。) 2 e, B) w% R8 K5 D$ u 3、软硬件平台 硬件平台 LWIP DJYIP6 b9 a6 v& R, Z# ?; I+ h& c E 运行板件 ST官方板STM32756G-EVAL2 STM32F7核心板2 k2 k$ v1 {) u( D/ D% b: T 运行主频 200MHz 200MHz! Q8 j% X {; S9 c `4 c 连接方式 与发送板直连 与发送板直连 编译调试 MDK eclipse 软件平台 LWIP DJYIP% j- i5 |2 a) C1 O- _: d 网络驱动接收方式 中断 中断, ] b. x, x- e8 W' I$ l; v pbuf大小 16kbytes 16kbytes TCP窗口 / J1 n9 O, r! `% |8 ~3 Z 2048 2048 其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库,- `6 E/ z- t# i0 V$ V) |7 K 编译运行在MDK5.12.& `! e9 F$ s9 R* F( } |
基于STM32F767通过cube配置:QSPI接口读写64M PSRAM+flash参考资料...
STM32F746G-DISCO移植lvgl9.0性能基准测试
STM32F745 USART1 Bootloader启动失败排查与解决的流程分析
STM32芯片命名规则
STM32 引脚到底有多少?为什么一个引脚能当好几个用?
入门嵌入式,为什么STM32是“优选起步”?
嵌入式-单片机-STM32 EXTI中断
STM32单片机进行除零运算,为何程序不崩溃?
STM32 LL为什么比HAL高效?
STM32时钟详解
微信公众号
手机版
(1)源码编写及修改' ^( K9 S6 H& y7 I. ^8 @5 ?* H7 j& Y1 E8 V
主要是比较基础的socket编程,发送板作为TCP客户端,两块接收板作为TCP服务器,客户端板建立TCP连接后,一直
发送程序,服务器一直接收TCP数据,并统计接收速度。
对STM32Cube_FW_F7_V1.6.0源码中LWIP的配置,需要修改lwipopts.h,主要修改了如下两行代码
#define PBUF_POOL_SIZE 11//89 o. M! F) Z2 b, ?$ @
#define TCP_WND 2048//(2*TCP_MSS)
(2)客户端发送+ ?- l- y+ J' R1 T0 A U# {0 v
while(1) ' D+ E& ]5 p# [
{1 G1 E4 l/ h m7 [+ w
byMsgBuf[0] = byMsgBuf[0] + 1;
if(ClientSndRand)1 H7 o V) K7 \7 @; ~8 R t5 x
{
iMsgLen = (int)(drand48() * TCP_PKG_LEN_MAX);$ z6 q4 l( T1 ^9 w
}
else" g8 s9 C' F. ~" U
{
iMsgLen = ClientSndLen;
}
if(iMsgLen)
iMsgLen = send(sockfd, byMsgBuf, iMsgLen, 0);( `, r: }, k; r) i$ @4 w0 ?& G
}$ i( S; t" D o% z( o& d
(3)服务器接收
while(1)/ |( T: G/ m; }- B
{( v; {, D5 i0 j2 \& Y9 H% ^
iMsgLen = recv( sFd, byMsgBuf, SvrRcvLen, 0);; z; |6 W# j0 D) U1 r$ Q! L
iMsgCnt += iMsgLen;, N4 m$ O+ T/ J( w
}& X- o+ R% E! B7 p3 C# C
5、测试结果
测试结果如下表所示
2 z1 c7 I/ t2 g! Z! k+ V9 f
发送包(byte) LWIP(Mbytes/s) DJYIP(Mbytes/s)
1400 3.02 3.187 m$ K& {. f& }1 C& V/ V1 ~3 e+ L
1024 4.22 3.16
512 3.07 35 T3 w/ u' T; G' i6 O+ h4 _
256 2.02 2.5
128 0.2±0.2 1.76, E' P' G& P8 I ?$ M% h
64 0.2±0.2 1.12- F& G% F+ i8 ] o/ J3 x
rand*1460 1M内变动 2.52
其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是# Q1 |8 D' N$ ?2 f( A% R+ G* P6 f' X
因为1024是2的整数次幂的原因(可能猜测)。
从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定" G9 Q4 a8 Y# [/ d/ E+ N
性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。
6 t" V2 E: w( G
ps:大家如果有相关的测试数据,可回复,大家一起参考学习。