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

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

[复制链接]
feixiang20 发布时间:2017-5-19 23:40
最近在学习TCPIP协议栈的相关知识,主要是基于STM32F7的硬件平台,协议栈选择了目前比较主流的轻量级TCPIP协议栈LWIP和网络上目前还算比较火的国产自主研发的DJYOS(都江堰操作系统)的DJYIP协议栈。主要测试了两个协议栈的TCP速度测试,写个帖子,纪念一下。本人菜鸟,各位轻拍,欢迎提出更多测试意见。1、测试目的
* i" X+ G5 H4 n* A7 r' X    在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速度。 " @+ v2 \2 N5 {0 g( d0 y4 G7 j  W7 R
2、测试方法
5 }5 k% [& O% k9 O     用一块STM32F7的发送板,应用层无延迟调用TCP发送函数send(),不断发送不同大小的数据包,数据包大小范围64 ~ 1460byte,接收端每1秒统计接收到的数据包,交终端上显示接收的速度。(当然,运行LWIP和DJYIP的两块接收板,运行在相同的主频,协议栈的pbuf缓冲、TCP接收窗口大小、优先级等一致。)   
+ m9 r/ }2 Q% h* I3、软硬件平台
  D1 f3 t4 @2 Y     硬件平台
7 y/ z' ~( E' `, NLWIP        DJYIP
8 w+ e. W$ a9 H5 P5 m- z; w% v3 I运行板件        ST官方板STM32756G-EVAL2        STM32F7核心板
$ s) D: m/ B, L  N( K运行主频        200MHz        200MHz# }* `. I+ ^/ S2 C" u$ w8 J' ^
连接方式        与发送板直连        与发送板直连
2 o0 v+ C: ~0 l( T3 G编译调试        MDK        eclipse
+ Y1 i; ?* ~! s& O     软件平台
+ e  @2 A0 C# X9 G3 |. M) l, H. mLWIP        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
9 j2 m6 f) M. |" l6 l2048
% G. G1 p  j  r    其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库,
) w0 l# ]/ O, F# _  ^编译运行在MDK5.12.
3 M* |* t. N* _9 j4 H$ |4 D6 z* A$ c
收藏 1 评论3 发布时间:2017-5-19 23:40

举报

3个回答
feixiang20 回答时间:2017-5-19 23:40:46
4、测试步骤
. [1 E; q& M; q- S2 z7 C7 v5 y    (1)源码编写及修改
/ x7 P# r1 q% c1 b             主要是比较基础的socket编程,发送板作为TCP客户端,两块接收板作为TCP服务器,客户端板建立TCP连接后,一直0 ^; q6 G# d0 V, L& |3 r2 c% u
发送程序,服务器一直接收TCP数据,并统计接收速度。
4 o: d# A" F8 u- U8 l1 v              对STM32Cube_FW_F7_V1.6.0源码中LWIP的配置,需要修改lwipopts.h,主要修改了如下两行代码
, x. v/ g; x& v# U#define PBUF_POOL_SIZE          11//8
7 ]: Q" l! Q8 @2 ?8 Q$ b3 T. {( \#define TCP_WND                 2048//(2*TCP_MSS)
1 c( a: `) i3 F/ p# p! r4 a    (2)客户端发送
" b8 Q& w" ~' M: H" `+ P       while(1)   
/ R4 S+ _3 P+ T9 E" q      {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
            {
$ V% q% @( ^" i; I0 r                       iMsgLen =  (int)(drand48() * TCP_PKG_LEN_MAX);0 M* V  U0 G8 y* ?( P
            }
  ~/ X4 H! b2 W( ^            else4 |: r! Y# p3 A' x6 [2 I* s
            {
# x, q2 V: {4 `) ?" Z7 {( o' H$ L# }                    iMsgLen = ClientSndLen;1 [, {& v5 P: @) [$ t
            }& G) d' h1 S/ u; _! \1 n
            if(iMsgLen)
. J! _  _7 O5 k6 h2 \                    iMsgLen = send(sockfd, byMsgBuf, iMsgLen, 0);
7 H# T; U9 n' ]- h; W8 ?* I    }4 o4 o. W& T& `4 k
    (3)服务器接收
% g7 M9 U% \/ H0 c          while(1)8 t2 B( R/ Z- U  i: \
         {
6 q9 }4 x/ m. C( l" |, q& p. v                 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
     
2 F& ?/ o% l  ^发送包(byte)        LWIP(Mbytes/s)        DJYIP(Mbytes/s)
+ `' ~8 K, u& ^! r1400        3.02        3.189 B5 v- b  @# P1 ~2 H8 Y; P+ q
1024        4.22        3.16
$ ?: {3 e% r. I0 y0 f& n3 s512        3.07        3
9 F/ x" M2 t) E$ K256        2.02        2.5& t; D/ N' e& D1 T
128        0.2±0.2        1.76
) g0 e" ?/ D- _; L4 Y% j) q. P) S  x64        0.2±0.2        1.12
' @# r# ]! P* N# k6 }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的整数次幂的原因(可能猜测)。
feixiang20 回答时间:2017-5-19 23:41:02
6、结论
' v# c: j; Y; p; g& u9 d2 H* K      从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定
5 v* Q; ^$ y5 T* k! b. v* o性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。# c, }3 T8 A3 E/ S" h8 o& o. @* ?

/ [3 ~2 j9 l" O; f+ Y7 _0 ^6 F# f1 f5 L: q) ?, q9 x6 p9 k
ps:大家如果有相关的测试数据,可回复,大家一起参考学习。
在现人生 回答时间:2019-4-23 23:55:49
你好,问题一个局外的问题,为什么发送64~1460个数据的包,LWIP不是有个分包机制吗?不是可以发送大于1460个数据的包吗?(本人在发送大于1460个数据的包时,接收端无法接收到,所以提这个问题),如果知道原因,麻烦解答,谢谢
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版