| 
 
| 本帖最后由 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、软硬件平台
 硬件平台
 
 软件平台|  | LWIP | DJYIP |  | 运行板件 | ST官方板STM32756G-EVAL2 | STM32F7核心板 |  | 运行主频 | 200MHz | 200MHz |  | 连接方式 | 与发送板直连 | 与发送板直连 |  | 编译调试 | MDK | eclipse | 
 
 其中,运行在STM32756G-EVAL2的LWIP的软件代码,是直接从ST官方下载的STM32Cube_FW_F7_V1.6.0版本固件库,|  | LWIP | DJYIP |  | 网络驱动接收方式 | 中断 | 中断 |  | pbuf大小 | 16kbytes | 16kbytes |  | TCP窗口 | 2048 | 2048 | 
 编译运行在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、测试结果
 测试结果如下表所示
 
 其中,rand是产生0~1的随机数。LWIP这组数据中,1024的速度大于1400,有可能是| 发送包(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 | 
 因为1024是2的整数次幂的原因(可能猜测)。
 
 6、结论
 从测试结果看到,LWIP在处理TCP的大包数据时,速度优于DJYIP,而在处理小包时的稳定
 性和速度不及DJYIP。djyos协议栈在各种情况下均保持稳定的性能,且有较好的速度,符合嵌入式系统需求。
 
 
 ps:大家如果有相关的测试数据,可回复,大家一起参考学习。
 
 
 
 
 
 | 
 |