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

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

[复制链接]
feixiang20 发布时间:2017-5-19 23:40
最近在学习TCPIP协议栈的相关知识,主要是基于STM32F7的硬件平台,协议栈选择了目前比较主流的轻量级TCPIP协议栈LWIP和网络上目前还算比较火的国产自主研发的DJYOS(都江堰操作系统)的DJYIP协议栈。主要测试了两个协议栈的TCP速度测试,写个帖子,纪念一下。本人菜鸟,各位轻拍,欢迎提出更多测试意见。1、测试目的
    在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速度。
2、测试方法
     用一块STM32F7的发送板,应用层无延迟调用TCP发送函数send(),不断发送不同大小的数据包,数据包大小范围64 ~ 1460byte,接收端每1秒统计接收到的数据包,交终端上显示接收的速度。(当然,运行LWIP和DJYIP的两块接收板,运行在相同的主频,协议栈的pbuf缓冲、TCP接收窗口大小、优先级等一致。)   
3、软硬件平台
     硬件平台
LWIP        DJYIP
运行板件        ST官方板STM32756G-EVAL2        STM32F7核心板
运行主频        200MHz        200MHz
连接方式        与发送板直连        与发送板直连
编译调试        MDK        eclipse
     软件平台
LWIP        DJYIP
网络驱动接收方式        中断        中断
pbuf大小        16kbytes        16kbytes
TCP窗口       
2048
2048
    其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库,
编译运行在MDK5.12.

收藏 1 评论3 发布时间:2017-5-19 23:40

举报

3个回答
feixiang20 回答时间:2017-5-19 23:40:46
4、测试步骤
    (1)源码编写及修改
             主要是比较基础的socket编程,发送板作为TCP客户端,两块接收板作为TCP服务器,客户端板建立TCP连接后,一直
发送程序,服务器一直接收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)   
      {
            byMsgBuf[0] = byMsgBuf[0] + 1;
            if(ClientSndRand)
            {
                       iMsgLen =  (int)(drand48() * TCP_PKG_LEN_MAX);
            }
            else
            {
                    iMsgLen = ClientSndLen;
            }
            if(iMsgLen)
                    iMsgLen = send(sockfd, byMsgBuf, iMsgLen, 0);
    }
    (3)服务器接收
          while(1)
         {
                 iMsgLen = recv( sFd, byMsgBuf, SvrRcvLen, 0);
                 iMsgCnt += iMsgLen;
          }
5、测试结果
       测试结果如下表所示
     
发送包(byte)        LWIP(Mbytes/s)        DJYIP(Mbytes/s)
1400        3.02        3.18
1024        4.22        3.16
512        3.07        3
256        2.02        2.5
128        0.2±0.2        1.76
64        0.2±0.2        1.12
rand*1460        1M内变动        2.52
      其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是
因为1024是2的整数次幂的原因(可能猜测)。
feixiang20 回答时间:2017-5-19 23:41:02
6、结论
      从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定
性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。


ps:大家如果有相关的测试数据,可回复,大家一起参考学习。
在现人生 回答时间:2019-4-23 23:55:49
你好,问题一个局外的问题,为什么发送64~1460个数据的包,LWIP不是有个分包机制吗?不是可以发送大于1460个数据的包吗?(本人在发送大于1460个数据的包时,接收端无法接收到,所以提这个问题),如果知道原因,麻烦解答,谢谢
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版