搜索
bottom↓
回复: 150

RT-Thread/LwIP在STM32上TCP速度测试结果(ENC28J60 vs DM9000A vs STM32F107)

  [复制链接]

出0入0汤圆

发表于 2010-1-31 11:42:19 | 显示全部楼层 |阅读模式
因为挺多人诟病RT-Thread/LwIP的速度问题,而且默认的LwIP配置中确实存在问题(所以才有,使用LwIP容易,但要想使用LwIP获得好的的速度,难!),不同的参数对应LwIP不同的体积、功能。

RT-Thread/LwIP做一个如下修改,会让TCP网络速度好一些(特别是发送速度,否则大概只有5KB/s)
在rtconfig.h中添加宏定义
/* TCP sender buffer space */
#define RT_LWIP_TCP_SND_BUF 2048

如果使用google svn版本,目前已经在lwipopts.h中默认采用2048的参数。

这么修改以后,STM32上几种以太网接口速度分别如下:(netio的TCP测试,tx对应STM32的接收,rx对应STM32的发送)
STM32F103 + ENC28J60(这个使用ICDev的ENC28J60网络模块)
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size 1k bytes: 208 KByte/s Tx, 4784 Byte/s Rx.
Packet size 2k bytes: 207 KByte/s Tx, 254 KByte/s Rx.
Packet size 4k bytes: 208 KByte/s Tx, 255 KByte/s Rx.
Packet size 8k bytes: 207 KByte/s Tx, 256 KByte/s Rx.
Packet size 16k bytes: 210 KByte/s Tx, 255 KByte/s Rx.
Packet size 32k bytes: 212 KByte/s Tx, 97 KByte/s Rx.
Done.

STM32F103 + DM9000A(这个用的STM32 Radio开发板)
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size 1k bytes: 535 KByte/s Tx, 5078 Byte/s Rx.
Packet size 2k bytes: 535 KByte/s Tx, 878 KByte/s Rx.
Packet size 4k bytes: 535 KByte/s Tx, 878 KByte/s Rx.
Packet size 8k bytes: 510 KByte/s Tx, 879 KByte/s Rx.
Packet size 16k bytes: 537 KByte/s Tx, 876 KByte/s Rx.
Packet size 32k bytes: 540 KByte/s Tx, 152 KByte/s Rx.
Done.

STM32F107
TCP connection established.
Packet size 1k bytes: 607 KByte/s Tx, 5045 Byte/s Rx.
Packet size 2k bytes: 607 KByte/s Tx, 1086 KByte/s Rx.
Packet size 4k bytes: 607 KByte/s Tx, 1087 KByte/s Rx.
Packet size 8k bytes: 608 KByte/s Tx, 1086 KByte/s Rx.
Packet size 16k bytes: 610  KByte/s Tx, 1086 KByte/s Rx.
Packet size 32k bytes: 612  KByte/s Tx, 152 KByte/s Rx.
Done.

这么看起来,STM32F107的网络速度还是比另外两个要好。当然ENC28J60也不会存在只有几k的速度。

出0入0汤圆

发表于 2010-1-31 13:26:01 | 显示全部楼层
还没有具体测试过呢

出0入0汤圆

发表于 2010-1-31 13:57:39 | 显示全部楼层
用测试数据说话,这个要顶!

另外,这组数据和RTT网站上的LM3S上的测试数据比较一下:

对比情况采用了相同的netio测试得到的数据统计
RT-Thread/LM3S
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel
TCP connection established.
Packet size 1k bytes: 704 KByte/s Tx, 5131 Byte/s Rx.
Packet size 2k bytes: 704 KByte/s Tx, 1950 KByte/s Rx.
Packet size 4k bytes: 704 KByte/s Tx, 2197 KByte/s Rx.
Packet size 8k bytes: 704 KByte/s Tx, 2200 KByte/s Rx.
Packet size 16k bytes: 706 KByte/s Tx, 2196 KByte/s Rx.
Packet size 32k bytes: 709 KByte/s Tx, 2136 KByte/s Rx.
Done.

TI/无操作系统情况下的LwIP
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel
TCP connection established.
Packet size 1k bytes: 870 KByte/s Tx, 5187 Byte/s Rx.
Packet size 2k bytes: 870 KByte/s Tx, 2463 KByte/s Rx.
Packet size 4k bytes: 870 KByte/s Tx, 3322 KByte/s Rx.
Packet size 8k bytes: 870 KByte/s Tx, 3239 KByte/s Rx.

不知道能不能这样拿来比较,看起来LM3S的速度要快不少呢,很想知道是什么原因?

出0入0汤圆

发表于 2010-1-31 14:23:41 | 显示全部楼层
貌似STM32F107的效率不高,内置MAC的速度只跟DM9000A差不多
内置MAC省去数据搬移,效率应该高一点

出0入0汤圆

 楼主| 发表于 2010-2-1 12:06:00 | 显示全部楼层
STM32F107上软件复制的部分多了些,需要在SRAM里建一份buffer,然后再启动DMA传输到MAC中,应该这份驱动还有优化的余地(但lwip推崇的是0拷贝,所以传输的报文不是连续的,导致不能直接做DMA传输)
头像被屏蔽

出0入0汤圆

发表于 2010-2-1 13:50:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2010-2-1 14:04:13 | 显示全部楼层
回复【5楼】bbs2009  
  请问 ffxz 楼主。
     我想学习 RT-Thread/LwIP。 手里有一块  X256 的 ATMEL 公版,哪有  RT-Thread/LwIP  X256  的 例程 可下载。
  
     方便的话 请上传一份。 谢了!
-----------------------------------------------------------------------

RT-Thread/7x256并没做单独的发布,但7x256的版本RT-Thread也支持得非常完善,shell、lwip都有支持,并且错误处理部分的支持也加强过(当线程运行出错时,会打印错误现场相关信息,然后自动挂起问题线程,并切换到其他就绪线程接着运行)。

RT-Thread/7x256的版本可以从google svn中获得,svn的用法请查阅相关文档,如果图方便可以使用RT-Thread论坛上aozima整理的代码快速下载包。
头像被屏蔽

出0入0汤圆

发表于 2010-2-1 14:13:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2010-2-1 14:20:21 | 显示全部楼层
LZ,有没有测试例程下载?

出0入0汤圆

 楼主| 发表于 2010-2-1 15:22:53 | 显示全部楼层
回复【7楼】bbs2009  
谢谢 ffxz。
   我下载过 rt-thread-0.2.4-at91sam7x256.zip     AT91SAM7X256的EMAC驱动(注意PHY芯片是RTL8021)。
   但 ATMEL 公版 PHY芯片不是RTL8021。 不知有无移植好的 rt-thread ?   
   
-----------------------------------------------------------------------

这个已经是0.2.4的老版本了,google svn上0.3.x系列的新版本似乎已经支持其他PHY芯片。

回复【8楼】acer  
LZ,有没有测试例程下载?
-----------------------------------------------------------------------

网络测试例程?google svn上有,请自行下载。这些是不单独做发布的。

出0入0汤圆

发表于 2010-2-1 15:35:25 | 显示全部楼层
请问SVN上哪个工程可以用来测试ENC28J60?

出0入0汤圆

 楼主| 发表于 2010-2-1 15:37:57 | 显示全部楼层
STM3210

如何使用STM32分支可以看相应的RT-Thread/STM32发布说明,通过配置STM3210可以分别支持enc28j60、dm9000a和stm32f107

出0入0汤圆

发表于 2010-2-1 16:42:58 | 显示全部楼层
测试一下,看看速度提高了吗

出0入0汤圆

发表于 2010-3-8 16:00:01 | 显示全部楼层
at91sam7x256 + dm9161  测试结果怎么会这样呢?

ucos+lwip


(原文件名:at91sam7x_net_test.JPG)

出0入0汤圆

 楼主| 发表于 2010-3-8 17:52:46 | 显示全部楼层
你这个似乎很低,我手头上的板子只有RTL8021,我找mbbill问问

出0入0汤圆

发表于 2010-3-8 18:19:48 | 显示全部楼层
回复【13楼】ljt8015
at91sam7x256 + dm9161  测试结果怎么会这样呢?
ucos+lwip


(原文件名:at91sam7x_net_test.JPG)
引用图片

-----------------------------------------------------------------------


修改了几个参数后,效果有所好转

-------------------------------------------------------------------




/* TCP Maximum segment size. */
#ifndef TCP_MSS
#define TCP_MSS                         2048//1024
#endif

/* TCP sender buffer space (bytes). */
#ifndef TCP_SND_BUF
#define TCP_SND_BUF                     2048//1024
#endif

/* TCP sender buffer space (pbufs). This must be at least = 2 *
   TCP_SND_BUF/TCP_MSS for things to work. */
#ifndef TCP_SND_QUEUELEN
#define TCP_SND_QUEUELEN                4 * TCP_SND_BUF/TCP_MSS  //4
#endif






----------------------测试结果---------------------------------
C:\bin>win32-i386 -t 192.168.168.232

NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  379 KByte/s Tx,  7238 Byte/s Rx.
Packet size  2k bytes:  379 KByte/s Tx,  131204 Byte/s Rx.
Packet size  4k bytes:  380 KByte/s Tx,  132495 Byte/s Rx.
Packet size  8k bytes:  380 KByte/s Tx,  135815 Byte/s Rx.
Packet size 16k bytes:  382 KByte/s Tx,  138020 Byte/s Rx.
Packet size 32k bytes:  384 KByte/s Tx,  143390 Byte/s Rx.
Done.

出0入0汤圆

 楼主| 发表于 2010-3-8 18:25:04 | 显示全部楼层
#define TCP_SND_BUF                     2048
这个继续加大

还有TCP_WND也加大

出0入0汤圆

发表于 2010-3-8 18:43:37 | 显示全部楼层
回复【16楼】ffxz
#define TCP_SND_BUF                     2048
这个继续加大
还有TCP_WND也加大

-----------------------------------------------------------------------

要加多大呢?

TCP_MSS  这个呢?

出0入0汤圆

发表于 2010-3-8 19:04:39 | 显示全部楼层
回复【16楼】ffxz
#define TCP_SND_BUF                     2048
这个继续加大
还有TCP_WND也加大

-----------------------------------------------------------------------


参数
#define TCP_WND                         4096
#define TCP_MSS                         2048
#define TCP_SND_BUF                     4096


C:\bin>win32-i386 -t 192.168.168.232

NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  375 KByte/s Tx,  4915 Byte/s Rx.
Packet size  2k bytes:  376 KByte/s Tx,  119506 Byte/s Rx.
Packet size  4k bytes:  376 KByte/s Tx,  274181 Byte/s Rx.
Packet size  8k bytes:  377 KByte/s Tx,  426539 Byte/s Rx.
Packet size 16k bytes:  378 KByte/s Tx,  431461 Byte/s Rx.
Packet size 32k bytes:  381 KByte/s Tx,  这里网卡死掉了
C:\bin>win32-i386 -t 192.168.168.232

NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  376 KByte/s Tx,  4719 Byte/s Rx.
Packet size  2k bytes:  377 KByte/s Tx,  131336 Byte/s Rx.
Packet size  4k bytes:  377 KByte/s Tx,  505184 Byte/s Rx.
Packet size  8k bytes:  378 KByte/s Tx,  452532 Byte/s Rx.
Packet size 16k bytes:  379 KByte/s Tx,  448056 Byte/s Rx.
Packet size 32k bytes:  381 KByte/s Tx,  这里网卡死掉了


性能还是不理想啊!~~~~

出0入0汤圆

发表于 2010-3-8 19:31:57 | 显示全部楼层
TCP_SND_BUF继续加大呢?
1024*8, 1024*10

TCP_WND也加大试下!

出0入0汤圆

发表于 2010-3-8 22:02:46 | 显示全部楼层
回复【19楼】shaolin
TCP_SND_BUF继续加大呢?
1024*8, 1024*10
TCP_WND也加大试下!
                        
-----------------------------------------------------------------------

多大是理想的状态呢?

出0入0汤圆

发表于 2010-3-8 22:19:42 | 显示全部楼层
1024*10,1024×20

出0入0汤圆

发表于 2010-3-9 11:16:48 | 显示全部楼层
回复【21楼】shaolin
1024*10,1024×20
-----------------------------------------------------------------------

1024*10 是哪个参数?

1024*20 是哪个参数?


一共不是三个参数么?

出0入0汤圆

发表于 2010-3-9 12:08:19 | 显示全部楼层
回复【19楼】shaolin  
TCP_SND_BUF继续加大呢?  
1024*8, 1024*10  
TCP_WND也加大试下!  
                          
-----------------------------------------------------------------------

多大是理想的状态呢?

TCP_SND_BUF 1024*10,1024×20
TCP_WND 1024*10,1024×20

测试嘛,这两个参数都尽量配大好了!

出0入0汤圆

发表于 2010-3-9 12:57:14 | 显示全部楼层
回复【23楼】shaolin
回复【19楼】shaolin   
TCP_SND_BUF继续加大呢?   
1024*8, 1024*10   
TCP_WND也加大试下!   
                           
-----------------------------------------------------------------------  
多大是理想的状态呢?
TCP_SND_BUF 1024*10,1024×20  
TCP_WND 1024*10,1024×20  
测试嘛,这两个参数都尽量配大好了!
-----------------------------------------------------------------------

#define TCP_MSS   这个呢?和那两个参数有什么关联没?

出0入0汤圆

 楼主| 发表于 2010-3-9 13:19:29 | 显示全部楼层
TCP_MSS:
MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。

TCP_WND与TCP接收相关,能够做多个数据包接收,然后只发一个ACK确认。
TCP_SND_BUF与发送相关。

出0入0汤圆

发表于 2010-3-9 22:00:12 | 显示全部楼层
回复【25楼】ffxz
TCP_MSS:
MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。
TCP_WND与TCP接收相关,能够做多个数据包接收,然后只发一个ACK确认。
TCP_SND_BUF与发送相关。
-----------------------------------------------------------------------

tks!~~

出0入0汤圆

发表于 2010-3-10 00:06:01 | 显示全部楼层
mark  学习

出0入0汤圆

发表于 2010-3-14 02:52:35 | 显示全部楼层
我在金牛STM32107的开发板上跑的速度测试。


(原文件名:速度.PNG)

出0入0汤圆

发表于 2010-3-15 08:58:55 | 显示全部楼层
看看 RTT + LM3S 的速度.


(原文件名:lm3s.JPG)

出0入0汤圆

发表于 2010-3-15 09:11:59 | 显示全部楼层
回复【28楼】vbcity
我在金牛STM32107的开发板上跑的速度测试。  


(原文件名:速度.PNG)
引用图片
-----------------------------------------------------------------------

回复【29楼】hyz_avr 红尘
看看 RTT + LM3S 的速度.


(原文件名:lm3s.JPG)
引用图片

-----------------------------------------------------------------------



性能好高啊!~~~  你们的lwip的参数设置是怎样的啊?
TCP_SND_BUF ?   
TCP_WND ?

出0入0汤圆

发表于 2010-3-15 09:26:16 | 显示全部楼层
就是LM3S RC1 默认的,没动过.

出0入0汤圆

发表于 2010-3-15 12:28:16 | 显示全部楼层
回复【31楼】hyz_avr 红尘
就是LM3S RC1 默认的,没动过.
-----------------------------------------------------------------------

我的at91sam7x256 + dm9161 的性能怎么这么低呢???

出0入0汤圆

发表于 2010-3-15 13:58:47 | 显示全部楼层

(原文件名:未命名.JPG)




硬件
CPU: at91sam7x256    48mhz
PHY: dm9161

软件:rtt + lwip  

参数:
TCP_SND_BUF  256
TCP_MSS      128
TCP_WND      1024


这是我测的最好的结果,看来 ARM7TDMI 的cpu性能还是比 cortex-m3 有很大差异啊!~~~~

出0入0汤圆

发表于 2010-3-15 22:39:51 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-9-14 12:06:23 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2010-9-17 16:55:49 | 显示全部楼层
各位大侠。怎么看这个速度??

出0入0汤圆

 楼主| 发表于 2010-9-17 21:56:44 | 显示全部楼层
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel

TCP connection established.
Packet size 1k bytes: 208 KByte/s Tx, 4784 Byte/s Rx.
            ^^ 这个是一个TCP包的大小
                      ^^^ 这个PC侧的发送速度,也就是设备侧的接收速度
                                      ^^^^ 这个是PC侧的接收速度,也就是设备侧的发送速度

从后面的列表可以看出,它能够测试不同包大小的网络速度。

出0入0汤圆

发表于 2010-9-20 12:18:06 | 显示全部楼层
不知道楼主测试以太网速度,有没有使能STM32F107以太网mac自身的ip/udp/tcp/icmp计算校验和功能?
我下载STM32F107以太网的例程好像没有使能。使能的情况是否能再快些?

/*
The STM32F107 allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
- To use this feature let the following define uncommented.
- To disable it and process by CPU comment the  the checksum.
*/
#define CHECKSUM_BY_HARDWARE


#ifdef CHECKSUM_BY_HARDWARE
  /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
  #define CHECKSUM_GEN_IP                 0
  /* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
  #define CHECKSUM_GEN_UDP                0
  /* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
  #define CHECKSUM_GEN_TCP                0
  /* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
  #define CHECKSUM_CHECK_IP               0
  /* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
  #define CHECKSUM_CHECK_UDP              0
  /* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
  #define CHECKSUM_CHECK_TCP              0
#else
  /* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
  #define CHECKSUM_GEN_IP                 1
  /* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
  #define CHECKSUM_GEN_UDP                1
  /* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
  #define CHECKSUM_GEN_TCP                1
  /* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
  #define CHECKSUM_CHECK_IP               1
  /* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
  #define CHECKSUM_CHECK_UDP              1
  /* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
  #define CHECKSUM_CHECK_TCP              1
#endif

不过需要注意lwip代码中ICMP.C做些调整(呵呵呵呵,我使用最新lwip1.3.2来调试,ping了老半天才发现这个问题 :(  )
/* This part of code has been modified by ST's MCD Application Team */
/* To use the Checksum Offload Engine for the putgoing ICMP packets,
   the ICMP checksum field should be set to 0, this is required only for Tx ICMP*/
#ifdef CHECKSUM_BY_HARDWARE
    iecho->chksum = 0;
#else       
        /* adjust the checksum */
    if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) {
      iecho->chksum += htons(ICMP_ECHO << 8) + 1;
    } else {
      iecho->chksum += htons(ICMP_ECHO << 8);
    }       
#endif

出0入0汤圆

发表于 2010-10-11 10:40:22 | 显示全部楼层
使用win32-i386 -t 192.168.0.65

connect<> : error code 10061  是怎么回事?

出0入0汤圆

发表于 2010-10-13 10:01:19 | 显示全部楼层
这个是什么测试软件?

出0入0汤圆

发表于 2010-11-12 14:39:43 | 显示全部楼层
这个测试需要在系统中加入什么代码?

我也测一下我的LPC1766+KSZ8041

出0入0汤圆

发表于 2010-11-12 14:44:09 | 显示全部楼层
回复【41楼】bamstone  
这个测试需要在系统中加入什么代码?
我也测一下我的lpc1766+ksz8041
-----------------------------------------------------------------------
trunk\components\net\apps里有个 netio.c
加入工程编译后,在finsh执行: finsh>>netio_init()

然后PC上面使用netio工具连接目标板即可测试.
具体操作,请仔细看帖子.

出0入0汤圆

发表于 2010-11-12 16:48:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-12 17:42:19 | 显示全部楼层
多谢

出0入0汤圆

发表于 2010-11-12 19:04:05 | 显示全部楼层
看看我的测试结果

周立功LPC1766开发板,PHY是KSZ8041

上面的结果是电脑通过无线网卡连接到路由器,开发板直接插在路由器上。
下面的结果是电脑和开发板用直连线直接连接。
发现PC网卡的性能也会影响测试结果。

根据这个结果看,NXP的芯片性能是不错的。

C:\bin>win32-i386 -t 192.168.1.30

NETIO - Network Throughput Benchmark, Version 1.31
(C) 1997-2008 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  450.17 KByte/s Tx,  4822 Byte/s Rx.
Packet size  2k bytes:  450.81 KByte/s Tx,  804.29 KByte/s Rx.
Packet size  4k bytes:  452.81 KByte/s Tx,  840.25 KByte/s Rx.
Packet size  8k bytes:  449.57 KByte/s Tx,  838.09 KByte/s Rx.
Packet size 16k bytes:  451.11 KByte/s Tx,  837.67 KByte/s Rx.
Packet size 32k bytes:  454.88 KByte/s Tx,  144.73 KByte/s Rx.
Done.


C:\bin>win32-i386 -t 192.168.1.30

NETIO - Network Throughput Benchmark, Version 1.31
(C) 1997-2008 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  960.01 KByte/s Tx,  4813 Byte/s Rx.
Packet size  2k bytes:  961.16 KByte/s Tx,  2282.65 KByte/s Rx.
Packet size  4k bytes:  961.33 KByte/s Tx,  2294.59 KByte/s Rx.
Packet size  8k bytes:  961.88 KByte/s Tx,  2288.86 KByte/s Rx.
Packet size 16k bytes:  961.41 KByte/s Tx,  2307.86 KByte/s Rx.
Packet size 32k bytes:  964.52 KByte/s Tx,  144.35 KByte/s Rx.
Done.
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-12-7 22:03:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-9 16:26:38 | 显示全部楼层
看来用STM32F103 + DM9000A的性价比最高

出0入0汤圆

发表于 2011-1-7 17:51:10 | 显示全部楼层
我用asio写的压力测试,采用通讯协议方式,不是直接返回,通讯协议由头和数据构成,

测试时,PC 端随机发送长度 0-1024 的数据,STM32端 原样返回, PC 端比较在发送,

同时 STM32 和 PC 继续互相发送心跳包.

实际测试结果表明, STM32F107 速度大约 322K/秒

出0入0汤圆

发表于 2011-1-7 20:24:06 | 显示全部楼层
我的1766测试发送能达到32MBPS 4M字节,用keil 的tcp 协议。

出0入0汤圆

发表于 2011-1-10 08:48:42 | 显示全部楼层
回复【14楼】ffxz  
-----------------------------------------------------------------------
lwip不是不支持分片包吗?请问这里的2K,4K,8K,16K,32K怎么理解呢??

出0入0汤圆

发表于 2011-1-10 10:45:24 | 显示全部楼层
mark~

出0入0汤圆

发表于 2011-1-11 08:20:11 | 显示全部楼层
请问用Ucos怎么测速呢?
我用的是ucos+lwip,建了一个任务,在任务里面,将tcpip的各项初始化,然后再调用netio_init(),然后是死循环。如下:
sem = sys_sem_new(0);
tcpip_init(tcpip_init_done, &sem);
sys_sem_wait(sem);
sys_sem_free(sem);

IP4_ADDR(&gw, 192,168,0,1);
IP4_ADDR(&ipaddr, 192,168,0,207);
IP4_ADDR(&netmask, 255,255,255,0);
netif_set_default(netif_add(&loop_netif, &ipaddr, &netmask, &gw, NULL, ethernetif_init, tcpip_input));
        netif_set_up(&loop_netif);
netio_init();
while(1);
不知道这样操作是否正确呢?但是我用PC机的程序的时候,只能够出现上面的
NETIO - Network Throughput Benchmark, Version 1.31  
(C) 1997-2008 Kai Uwe Rommel  
下面就没显示了,怎么回事呢?

然后我又建一个一个任务,里面主要跑一个服务器,将上面这个初始化的任务阻塞掉,也就是将while(1)改成:
        OSTaskCreate(Task2,(void*)0,&Task2Stk[256-1],5);
        sem = sys_sem_new(0);
        sys_sem_wait(sem);
在PC机程序端只能够出现:
NETIO - Network Throughput Benchmark, Version 1.31  
(C) 1997-2008 Kai Uwe Rommel  
TCP connection established.
Packet size  1k bytes:
就没有下文了,请问是怎么回事呢?

出0入0汤圆

发表于 2011-1-11 09:39:51 | 显示全部楼层
还是用MCU集成的MAC+外置PHY快一点,网口收到的数据直接用DMA搬到RAM上不用占用外部总线或者IO

出0入0汤圆

发表于 2011-2-24 17:54:44 | 显示全部楼层
mark下

出0入0汤圆

发表于 2011-4-12 14:53:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-15 11:30:10 | 显示全部楼层
回复【楼主位】ffxz
-----------------------------------------------------------------------

这个顶一下 ,stm32 网络 性能 测试

出0入0汤圆

发表于 2011-4-15 19:04:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-26 09:19:48 | 显示全部楼层
回复【38楼】yanxp  
....
不过需要注意lwip代码中ICMP.C做些调整(呵呵呵呵,我使用最新lwip1.3.2来调试,ping了老半天才发现这个问题 :(  )
/* This part of code has been modified by ST's MCD Application Team */
/* To use the Checksum Offload Engine for the putgoing ICMP packets,
   the ICMP checksum field should be set to 0, this is required only for Tx ICMP*/
#ifdef CHECKSUM_BY_HARDWARE
    iecho->chksum = 0;
#else       
/* adjust the checksum */
    if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) {
      iecho->chksum += htons(ICMP_ECHO << 8) + 1;
    } else {
      iecho->chksum += htons(ICMP_ECHO << 8);
    }       
#endif
-----------------------------------------------------------------------

在ucosii +lwip1.2上不修改还能ping通,修改了反而不行

另外
使用dm9000A 16bit mode
在nios ii 50MHz fast core,硬件乘法器,无硬件除法器的情况下,TCP连接
硬件checksum
发送400KB/s cpu占用率为25%,发送320KB/s cpu占用率为20%
软件checksum
发送400KB/s cpu占用率为32%,发送320KB/s cpu占用率为25%
正在做长期不间断传输测试,再高的速度以后再试


dm9000a slave时序(clk)
setup 4
read wait 5
write wait 3
hold 2


回复【53楼】 yaodongliang 栋梁之才
请问用Ucos怎么测速呢?
-----------------------------------------------------------------------
while(1)
{
send
osdly
}
然后看以太网调试工具

出0入0汤圆

发表于 2011-5-26 09:30:16 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-5-26 15:29:08 | 显示全部楼层
回复【15楼】ljt8015
-----------------------------------------------------------------------

LWIP的收发速度为什么差别那么大啊?原理是什么啊??

出0入0汤圆

发表于 2011-7-7 17:37:49 | 显示全部楼层
不错,回头测试下,我的是7x256+lwip无操作系统

出0入0汤圆

发表于 2011-7-7 23:12:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-7 23:53:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-8 14:36:23 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-7-8 17:13:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-11 09:04:50 | 显示全部楼层
没想到TI的LM3S的速度也那么快。在这里面看是最快的了。内置以太网控制器和PHY的那个?

出0入0汤圆

发表于 2011-7-11 09:16:49 | 显示全部楼层
回复【44楼】bamstone
-----------------------------------------------------------------------

你的LPC1766+KSZ8041的emac.c是怎么修改的?稳不稳定啊,能不能发我一份参考一下?我自己更改的,现在用pingTester软件连续ping测试时偶尔出现第一次ping是Timeout,其余的就正常了,有的时候不会出现,不知是哪里的问题,我怀疑是我的emc部分没修改好。

出0入0汤圆

发表于 2011-7-12 11:57:48 | 显示全部楼层
回复【楼主位】ffxz
-----------------------------------------------------------------------

这个测试时用的哪个例程?  还是测试部分代码要另外写

出0入0汤圆

发表于 2011-7-12 12:08:52 | 显示全部楼层
回复【70楼】putron09  
-----------------------------------------------------------------------
这个测试时用的哪个例程?  还是测试部分代码要另外写
-----------------------------------------------------------------------

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4593755

出0入0汤圆

发表于 2011-7-18 17:07:06 | 显示全部楼层
看看 无操作系统 + 我们的高速TCP/IP协议栈的速度.

LM3S9B90
========

C:\bin>netio -t 192.168.0.18

NETIO - Network Throughput Benchmark, Version 1.31
(C) 1997-2008 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  4107 KByte/s Tx,  5866 Byte/s Rx.
Packet size  2k bytes:  2894 KByte/s Tx,  2809 KByte/s Rx.
Packet size  4k bytes:  2110 KByte/s Tx,  3825 KByte/s Rx.
Packet size  8k bytes:  1809 KByte/s Tx,  3826 KByte/s Rx.
Packet size 16k bytes:  1586 KByte/s Tx,  3849 KByte/s Rx.
Packet size 32k bytes:  1292 KByte/s Tx,  3625 KByte/s Rx.
Done.

STM32F107 金牛三代
==================
C:\bin>netio -t 192.168.0.18

NETIO - Network Throughput Benchmark, Version 1.31
(C) 1997-2008 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  3917 KByte/s Tx,  5366 Byte/s Rx.
Packet size  2k bytes:  2104 KByte/s Tx,  2809 KByte/s Rx.
Packet size  4k bytes:  1511 KByte/s Tx,  3825 KByte/s Rx.
Packet size  8k bytes:  1393 KByte/s Tx,  3826 KByte/s Rx.
Packet size 16k bytes:  1285 KByte/s Tx,  3849 KByte/s Rx.
Packet size 32k bytes:  1057 KByte/s Tx,  3625 KByte/s Rx.
Done.

和其他协议栈,开发板得接收速度产生了质的飞跃。有需要的网友可以联系我。
QQ:1561724180
tel:0311-87024917

出0入0汤圆

发表于 2011-7-25 11:51:52 | 显示全部楼层
回复【72楼】highSpeedTCPIP 刘耀楷
-----------------------------------------------------------------------

mark

出0入0汤圆

发表于 2011-8-3 08:50:39 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-8-4 12:02:48 | 显示全部楼层
netio网络速度测试有更新,近期放一个出来,对于网络速度有一些提升(和芯片有关),好的速度能够提升100%。

出0入0汤圆

 楼主| 发表于 2011-8-21 12:25:00 | 显示全部楼层
依然是ARM Cortex-M3的指标,RT-Thread + LwIP的环境:
E:\Tools>netio.exe -t 192.168.1.30

NETIO - Network Throughput Benchmark, Version 1.31
(C) 1997-2010 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  6529.17 KByte/s Tx,  5270 Byte/s Rx.
Packet size  2k bytes:  7093.20 KByte/s Tx,  2683.21 KByte/s Rx.
Packet size  4k bytes:  7098.49 KByte/s Tx,  5104.68 KByte/s Rx.
Packet size  8k bytes:  7102.49 KByte/s Tx,  5246.36 KByte/s Rx.
Packet size 16k bytes:  7075.39 KByte/s Tx,  5152.15 KByte/s Rx.
Packet size 32k bytes:  7105.65 KByte/s Tx,  5317.87 KByte/s Rx.
Done.

出0入0汤圆

发表于 2011-8-22 09:56:13 | 显示全部楼层
MARK, STM32 TCP/IP

出0入0汤圆

发表于 2011-8-24 15:00:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-5 01:28:14 | 显示全部楼层
回复【77楼】ffxz
依然是arm cortex-m3的指标,rt-thread + lwip的环境:
e:\tools&gt;netio.exe -t 192.168.1.30
netio - network throughput benchmark, version 1.31
(c) 1997-2010 kai uwe rommel
tcp connection established.
packet size  1k bytes:  6529.17 kbyte/s tx,  5270 byte/s rx.
packet size  2k bytes:  7093.20 kbyte/s tx,  2683.21 kbyte/s rx.
packet size  4k bytes:  7098.49 kbyte/s tx,  5104.68 kbyte/s rx.
packet size  8......
-----------------------------------------------------------------------

怎么发送比接受还要快?

出0入0汤圆

发表于 2011-9-5 01:54:51 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2011-9-5 09:23:22 | 显示全部楼层
回复【81楼】lghtjpu  辉葛炮
回复【77楼】ffxz
依然是arm cortex-m3的指标,rt-thread + lwip的环境:
e:\tools&gt;netio.exe -t 192.168.1.30
netio - network throughput benchmark, version 1.31
(c) 1997-2010 kai uwe rommel
tcp connection established.
packet size  1k bytes:  6529.17 kbyte/s tx,  5270 byte/s rx.
packet size  2k bytes:  7093.20 kbyte/s tx,  2683.21 kbyte/s rx.
packet size  4k bytes:  7098.49 kbyte/s tx,  5104.68 kbyte/s rx.
p......
-----------------------------------------------------------------------

你可以先思考下。

出0入0汤圆

发表于 2011-9-7 10:41:53 | 显示全部楼层
哪位DX解释下,STM32 1K包发送为什么这么慢,是NETIO本身的原因?

出0入0汤圆

发表于 2011-9-7 13:09:21 | 显示全部楼层
回头可以试试

出0入0汤圆

发表于 2011-9-20 08:54:03 | 显示全部楼层
估计STM32F207 跑120M的主频,网络应该会再快点

出0入0汤圆

发表于 2011-9-28 23:04:16 | 显示全部楼层
回复【2楼】danju
-----------------------------------------------------------------------

请问仁兄的LM3S的程序怎么优化的,怎么可以达到5MB的速度

出10入0汤圆

发表于 2011-9-29 22:51:55 | 显示全部楼层
mark很好的参考!!

出0入0汤圆

发表于 2011-10-1 11:26:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-1 20:43:41 | 显示全部楼层
硬件STM32F103 + DM9000A(安富莱电子)
本人的山寨内核和协议栈(RTK V0.1)
软件直接采用netio V1.31
由于fsmc的8字节问题,TCP窗口尺寸只能开到8K左右。用PC做netio服务器。


>ipconfig
RTK IP Configuration
  Ethernet adapter eth0:
  MAC Address......:00:A6:98:00:01:56
  Dhcp Enabled.....: Yes
  IP Address.......:192.168.1.3
  Subnet Mask......:255.255.255.0
  Default Gateway..:192.168.1.1
  DNS Servers1.....:192.168.1.1
  DNS Servers2.....:0.0.0.0
>netio -t 192.168.1.251

NETIO - Network Throughput Benchmark, Version 1.31
(C) 1997-2008 Kai Uwe Rommel

TCP connection established.
Packet size  1k bytes:  3223.21 KByte/s Tx,  3123.32 KByte/s Rx.
Packet size  2k bytes:  3232.57 KByte/s Tx,  2935.83 KByte/s Rx.
Packet size  4k bytes:  3155.29 KByte/s Tx,  2917.09 KByte/s Rx.
Packet size  8k bytes:  3225.75 KByte/s Tx,  323.51 KByte/s Rx.
Packet size 16k bytes:  3195.48 KByte/s Tx,  321.20 KByte/s Rx.
Packet size 32k bytes:  3154.45 KByte/s Tx,  302.57 KByte/s Rx.
Done.

>ps

ready tasks:2 sleep tasks:5
PID  Task              CPU       Used stack   Free stack  Priority
    0 System             0.26%             0            0         0
   46 dhcpC              0.00%           392          536       150
   43 Dm9000             0.00%           376          352       153
   35 Con2               0.73%           712          416       150
   25 Ucgui             59.67%           816          512       150
    4 Timer              0.00%           520          312       100
    2 Con1               0.00%           872          656       150
    1 idle              39.18%            64          256       255
>

由于内存的限制,对netio的代码做了部分修改。例如:

netio V1.31 在RTK V0.1中的移植 (原文件名:netio4rtk.JPG)



结论是:
TCP窗口的大小对数据接收的影响非常大,如果对高吞吐量有要求,则在不影响系统稳定的前题下应尽量加大窗口尺寸。

出0入0汤圆

发表于 2011-10-1 20:49:52 | 显示全部楼层
楼主77楼的测试数据太强了!
是否方便说明一下硬件和软件情况?

出0入0汤圆

发表于 2011-10-2 08:02:49 | 显示全部楼层
十一的晚上想到了一个改进了窗口的算法,今天早上做了测试。
TCP窗口尺寸依然在8K左右。新算法在出现窗口关闭的情况下,如上面测试过程中8K,16K,32K数据包的情况。性能降低不超过15%。我还是很满意的。看来92楼的结论不准确。
看看测试结果吧,请注意8K及以上包的接收速度:

窗口算法优化结果 (原文件名:窗口算法优化结果.JPG)

出0入0汤圆

发表于 2011-10-3 09:00:06 | 显示全部楼层
请教楼上:
一般都是 5000 Byte/s Rx
你的是
3440.65 Kbyte/s RX. 很是强大.
这块如何优化?

出0入0汤圆

 楼主| 发表于 2011-10-3 09:10:14 | 显示全部楼层
5000 Bytes/s Rx
这个与buffer 缓冲关系很大,不同的机制,速度表现上差异会很大。

出0入0汤圆

发表于 2011-10-5 09:36:56 | 显示全部楼层
回复【95楼】aozima
-----------------------------------------------------------------------

我是这样认为的:

第一:如77楼的测试结果中
Packet size  1k bytes:  6529.17 KByte/s Tx,  5270 Byte/s Rx.
表示嵌入设备的速度为  RX:6529.17 KByte/s,TX:5270 Byte/s
所以应该是TCP发送的流程有些问题。

第二:在我的系统(RTK V0.1)中,发送是多线程抢占物理硬件实现的(保证高优先级的线程的发送报文的优先被发送),这与LWIP的收发线程统一管理不一样。

第三:可能与大家使用的测试软件也有所不同。随LWIP提供的netio好像是重新写过的,大家可以与官方代码做一下比较。我的测试采用了netio官方源码,移植了 计时和系统接口,修改了发送和就收的缓冲区部分。

这里是到RTK V0.1的Netio移植ourdev_682351XDUN5Y.rar(文件大小:8K) (原文件名:netio4rtk.rar)

出0入0汤圆

发表于 2011-10-17 20:30:06 | 显示全部楼层
这几天对手头可以得到的arm板子做了移植和测试,需要说明的是,在网上购买的两块LPC2368开发板总是不稳定,58M能够完成测试。72Mhz是就无法完成测试。稳定性测试也是如此,LPC2368的板子在58Mhz的情况下传输2G到8G数据就会出现PHY突然停止的情况。其它的板子都没有问题。
测试结果如下:


LPC2368 at 58Mhz (原文件名:netiolpc2368at58M.JPG)



LPC2368 at 72Mhz      mcu123的板子 (原文件名:netioslpc2368at72M.JPG)


STM32F103 with DM9000 72Mhz armfly 的板子 (原文件名:netiostm32f103vs9000.JPG)


STM32F107 内置MAC  72Mhz armjishu 的板子 (原文件名:netiostm32f107.JPG)


STM32F207 with DM9000  120Mhz (原文件名:netiostm32f207DM9K.JPG)
顺便说一下,由于没有使用207内部的DMA,DM9000的DMA速度不能超过12Mhz,所以IO占用了17%左右的CPU资源。


STM32F207 内置MAC  72Mhz (原文件名:netiostm32f207EMAC.JPG)


看来网络开发用207还是不错的。最喜欢的还是TIM2和TIM5是32位的定时器,stm32f1xx系列16位TIM作us级别tick有点别扭。

出0入0汤圆

发表于 2011-10-27 21:43:48 | 显示全部楼层
知道深入研究。

出0入0汤圆

发表于 2011-11-4 16:02:29 | 显示全部楼层
学习!

出0入0汤圆

发表于 2011-11-17 15:11:20 | 显示全部楼层
学习!

出0入0汤圆

发表于 2011-11-18 21:33:05 | 显示全部楼层
楼上的5MBPS的速率是怎么弄出来的?接近极限速率了哦。
还有就是NETIO1.31怎么弄到RT-THREAD里?是自己修改的么?

出0入0汤圆

发表于 2011-12-1 20:16:07 | 显示全部楼层
DING.

出0入0汤圆

发表于 2011-12-3 08:28:06 | 显示全部楼层
回复【103楼】aureoleday
楼上的5mbps的速率是怎么弄出来的?接近极限速率了哦。
还有就是netio1.31怎么弄到rt-thread里?是自己修改的么?
-----------------------------------------------------------------------

测试系统不是用RT-THREAD和LWIP实现的。是用一个自己完成的操作系统和协议栈。
netio的移植代码在上面97楼有提供。

出0入0汤圆

发表于 2011-12-4 11:40:37 | 显示全部楼层
下面是用来测试内部mac(dm9161的phy)和外扩dm9000的stm32F207板子:

stm32f207测试板 (原文件名:stm207board.JPG)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 02:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表