你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【转】STM32F7 LWIP和DJYIP协议栈TCP速度测试

[复制链接]
feixiang20 发布时间:2017-5-19 23:40
最近在学习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、软硬件平台
" [" B7 O) j$ L) Q6 j6 k9 Z     硬件平台
' e! \, ]+ r' P" e. ]8 Q& fLWIP        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
连接方式        与发送板直连        与发送板直连
7 R: l) Q: l6 E编译调试        MDK        eclipse
0 z$ v" X3 M) Y8 G     软件平台
4 q) b0 q6 |5 G; O$ A4 J+ R! ~* PLWIP        DJYIP% j- i5 |2 a) C1 O- _: d
网络驱动接收方式        中断        中断, ]  b. x, x- e8 W' I$ l; v
pbuf大小        16kbytes        16kbytes
$ C( L3 D* P. N: ~/ t# \TCP窗口        / J1 n9 O, r! `% |8 ~3 Z
2048
- h# m$ g( Q" u, o2048
: Y8 T  \% g5 p9 w$ Q* g) V# z    其中,运行在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( }

+ K5 W* C7 O* I. D7 x, k
赞 收藏 1 评论3 发布时间:2017-5-19 23:40

举报

3个回答
feixiang20 回答时间:2017-5-19 23:40:46
4、测试步骤
3 C' h& D2 Q5 q  P; l+ W- W    (1)源码编写及修改' ^( K9 S6 H& y7 I. ^8 @5 ?* H7 j& Y1 E8 V
             主要是比较基础的socket编程,发送板作为TCP客户端,两块接收板作为TCP服务器,客户端板建立TCP连接后,一直
% j* @0 P: x. L2 O发送程序,服务器一直接收TCP数据,并统计接收速度。
, Z0 K3 O$ V+ o' L4 f2 j$ C# B; O              对STM32Cube_FW_F7_V1.6.0源码中LWIP的配置,需要修改lwipopts.h,主要修改了如下两行代码
9 R/ Z6 O. ~; A& s#define PBUF_POOL_SIZE          11//89 o. M! F) Z2 b, ?$ @
#define TCP_WND                 2048//(2*TCP_MSS)
& g: a+ I- Q* z6 `    (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;
5 R3 q4 y  w+ e% l            if(ClientSndRand)1 H7 o  V) K7 \7 @; ~8 R  t5 x
            {
  b2 Q& t8 V3 |9 Y( ^1 P                       iMsgLen =  (int)(drand48() * TCP_PKG_LEN_MAX);$ z6 q4 l( T1 ^9 w
            }
- a" ~2 \# E1 q, q            else" g8 s9 C' F. ~" U
            {
9 T; B' ~' _2 }7 \( R$ L! ?' }3 a0 Z                    iMsgLen = ClientSndLen;
9 M* O" j' h6 z* y8 R            }
  p7 x5 b& ]* J1 |9 C% l$ W9 L            if(iMsgLen)
. `8 V& k* s: I2 v' a4 p/ e                    iMsgLen = send(sockfd, byMsgBuf, iMsgLen, 0);( `, r: }, k; r) i$ @4 w0 ?& G
    }$ i( S; t" D  o% z( o& d
    (3)服务器接收
, @  G! R% e. j4 C1 R          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、测试结果
% h6 U0 C; {$ f6 i5 ?. D- h9 {       测试结果如下表所示
( u# p1 S  g' r0 a' n- ]     2 z1 c7 I/ t2 g! Z! k+ V9 f
发送包(byte)        LWIP(Mbytes/s)        DJYIP(Mbytes/s)
) i. o& l" n9 P0 [. f% @, j; c  C1400        3.02        3.187 m$ K& {. f& }1 C& V/ V1 ~3 e+ L
1024        4.22        3.16
% ]% s# K+ [7 a: ]8 a8 g3 K2 R512        3.07        35 T3 w/ u' T; G' i6 O+ h4 _
256        2.02        2.5
$ w8 w: |# O- Q" P3 U& ?8 |5 q& N128        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
' `" I6 M) z1 k( u9 L      其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是# Q1 |8 D' N$ ?2 f( A% R+ G* P6 f' X
因为1024是2的整数次幂的原因(可能猜测)。
feixiang20 回答时间:2017-5-19 23:41:02
6、结论
4 k: M/ @1 o& j9 k- U& u      从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定" G9 Q4 a8 Y# [/ d/ E+ N
性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。
- g7 g$ [( `) @, z; ~. ~
; C, h7 S% j( z& ~6 t" V2 E: w( G
ps:大家如果有相关的测试数据,可回复,大家一起参考学习。
在现人生 回答时间:2019-4-23 23:55:49
你好,问题一个局外的问题,为什么发送64~1460个数据的包,LWIP不是有个分包机制吗?不是可以发送大于1460个数据的包吗?(本人在发送大于1460个数据的包时,接收端无法接收到,所以提这个问题),如果知道原因,麻烦解答,谢谢

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版