lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Low Iperf performance of lwip 1.4.1 on STM32 and FreeRTOS


From: Claudius Zingerli
Subject: [lwip-users] Low Iperf performance of lwip 1.4.1 on STM32 and FreeRTOS
Date: Fri, 21 Jun 2013 09:26:15 +0200
User-agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6

Hello all,

I'm working on a project using lwIP 1.4.1, FreeRTOS 7.4.2 on an STM32F407 MCU. I have several UDP/TCP/Multicast services running well, but when I tried to measure TCP bandwidth with Iperf as well as with dd|nc, I get very low results. Iperf basically just sends a lot of data and lwIP drops it (using netconn_recv();netbuf_delete() or netconn_recv_tcp_pbuf();pbuf_free();)

An analysis with Wireshark shows the following:
(TCP_MSS=TCP_WND=1460)
- SYN,SYNACK,ACK,PSH,PSH (as usual)
- ZeroWindow (client stuck), WindowUpdate (some ms later)
- PSH, ZeroWindow, WindowUpdate,...

As I understand it, this is how TCP works. Quite low bandwidth (a few hundred kBps) with these settings, but it works.
When I try to increase TCP_WND to p.e. 5kB, the following problems arise:
- Dup ACKs (from lwIP)
- lots of Retransmissions (from Linux)
The bandwidth is in the Bps to kBps range (at most). I spent hours, but have no clue where to look next. Any ideas what could be the reason?
(Iperf Linux to Linux results in the full line speed)

One interesting thing is: I get about 0.5% packet drop if I do a ping -f (100 Pings per second, packets seem to never arrive at the Eth interrupt). MCU load is always quite low (I have a low prio blink task that still gets its CPU time as well as )
Things I already fixed: (my design bases on ST's ethernet code)
- Check any stacks/NULL/malloc fails
- Check if pbuf fits into Tx buffer
- Check if there is enough pbuf_mem to fits Rx packet
- In packet reception I try to drain the input queue (by checking DMARxDescToGet->Status & ETH_DMARxDesc_OWN )
- ETH_DMASR_RBUS cleared in low_level_input()

I just ran out of ideas how to fix the problem. Is this about tuning lwipopts.h? Attached, my current version.

Best regards

Claudius

Attachment: lwipopts.h
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]