打印
[STM32F7]

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

[复制链接]
3007|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 desomond 于 2017-5-19 17:44 编辑

    最近在学习TCPIP协议栈的相关知识,主要是基于STM32F7的硬件平台,协议栈选择了目前比较主流的轻量级TCPIP协议栈LWIP和网络上目前还算比较火的国产自主研发的DJYOS(都江堰操作系统)的DJYIP协议栈。主要测试了两个协议栈的TCP速度测试,写个帖子,纪念一下。本人菜鸟,各位轻拍,欢迎提出更多测试意见。1、测试目的
    在尽量保持硬件和软件一致的前提下,测试LWIP和DJYIP两个协议栈的TCP接收不同包的速度。
2、测试方法
     用一块STM32F7的发送板,应用层无延迟调用TCP发送函数send(),不断发送不同大小的数据包,数据包大小范围64 ~ 1460byte,接收端每1秒统计接收到的数据包,交终端上显示接收的速度。(当然,运行LWIP和DJYIP的两块接收板,运行在相同的主频,协议栈的pbuf缓冲、TCP接收窗口大小、优先级等一致。)   
3、软硬件平台
     硬件平台
LWIPDJYIP
运行板件ST官方板STM32756G-EVAL2STM32F7核心板
运行主频200MHz200MHz
连接方式与发送板直连与发送板直连
编译调试MDKeclipse
     软件平台
LWIPDJYIP
网络驱动接收方式中断中断
pbuf大小16kbytes16kbytes
TCP窗口
2048
2048
    其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库,
编译运行在MDK5.12.
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)
14003.023.18
10244.223.16
5123.073
2562.022.5
1280.2±0.21.76
640.2±0.21.12
rand*14601M内变动2.52
      其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是
因为1024是2的整数次幂的原因(可能猜测)。

6、结论
      从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定
性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。


ps:大家如果有相关的测试数据,可回复,大家一起参考学习。
   



沙发
desomond|  楼主 | 2017-5-23 08:54 | 只看该作者
本帖最后由 desomond 于 2017-5-24 09:15 编辑

今天继续看了一下LWIP和DJYIP两个协议栈,从编译结果上了解了一下资源消耗情况。主要是通过编译与不编译协议栈,链接器会对不调用的中间文件不链接,即没有调用的会被删除,不生成最终结果。

DJYIP:

如图所示,是eclipse编译打印出的结果,调用与不调用DJYIP的对比情况,可得出DJYIP占用资源情况:
    FLASH:109kbytes     data:920byte       bss:  看不懂为什么还增加了,但是从map文件来看的话,TCPIP协议栈总共使用了13kbyte
其中DJYIP包含了:网卡驱动代码、FTP、DNS、TFTP、telnet、TCP、UDP、PPP等。


LWIP:

如上图所示,是MDK编译打印出来的结果,调用与不调用LWIP编译出来的结果,看到:
      FLASH : COde+RO-data:64kByte          rw-data:328      bss:看不懂,也增加了。其中LWIP的服务主要是TCP和UDP。

DJYIP开的服务比较多,资源占用却并不多,LWIP开的服务比较少一些,资源占用并不见得少。

2.3.jpg (38.79 KB )

2.3.jpg

使用特权

评论回复
板凳
desomond|  楼主 | 2017-5-23 08:58 | 只看该作者
对于一个协议栈而言,我觉得资源占用情况并不是最重要的,关键是它提供的功能是否完备、性能是否稳定,从这点来讲,从贴上上来看,对于小包收发和随机包的收发,DJYIP表现还不错,继续学习。

使用特权

评论回复
地板
desomond|  楼主 | 2017-5-23 08:58 | 只看该作者
对资源占用的情况,我觉得还有一点可能需要注意,就是协议栈动态分配的内存

使用特权

评论回复
5
一笔带过00| | 2017-10-17 15:52 | 只看该作者
测试结果有一个不懂的地方,你这个发送速度是以位为单位还是以字节为单位?

使用特权

评论回复
6
charleydeng| | 2017-10-22 14:58 | 只看该作者
本帖最后由 charleydeng 于 2017-10-22 15:01 编辑
一笔带过00 发表于 2017-10-17 15:52
测试结果有一个不懂的地方,你这个发送速度是以位为单位还是以字节为单位? ...

他这个测的是 IEEE-802.3-2002 compliant Ethernet connector 吧?
有线以太网的速度有个几M字节每秒,也属正常吧。
有一个WIFI模块,通过杜邦飞线和STM32F7连接,测试得到的TCP速度也可以超过1.3M字节每秒呢。
更多详细说明,请参看:https://bbs.21ic.com/forum.php?mod=viewthread&tid=2382250
或上某宝搜索 "ESP8266 SPI 高速" 排名靠前的就有。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

109

帖子

3

粉丝