|
From: | Dave Lunger |
Subject: | [lwip-users] TCP jumps the gun? |
Date: | Thu, 20 Dec 2012 15:23:30 -0500 |
Over the last few days, have been battling a performance issue. It appears to be something tricky about lwip configuration and use. The system of concern is lwip ( tried upgrades to no avail from 1.32->1.4.0->1.4.1) on an ARM as an HTTP server transmitting LARGE files (50 mb+) to a PC client. The symptom is that normally I’ll see transfer rates of 900 kb/sec to 1 mb/sec; but, otherwise more in the 20 kb/sec ballpark… with NOTHING in the middle ground, depending on configuration. The signature of the problem has to do with what lwip is deciding to send for the next packet – it appears to jump ONE and then a BIG pregnant pause (1.2 seconds typically) until lwip transmits the missing packet (because it jumped the gun earlier), and then this proceeds normally for a short period and then repeats. Here is some data illustrating the issue (I’ve normalized the sequence numbers for clarity): PC Client lwip Server Transmits packet 0 Transmits packet 1 ACKs thru 1 Transmits packet 2 ACKs thru 2 Transmits packet 3 TRANSMITS PACKET 5!!! ACKs thru 3 Transmits packet 6 ACKs thru 3 <1.2 second delay> Transmits packet 4 The above happens with WND 2 (or 1, seems like 1 is equivalent to 2?); SNDBUF of 4 packets and SND_QLEN of 4 packets; and calling tcp_write with 4 packets of data at a time. If I expand WND to 4 and supply tcp_write with 2 packets of data at a time, the above oddity does NOT occur. So, my question is: what’s going on with a packet seemingly being passed one packets-worth beyond the window? |
[Prev in Thread] | Current Thread | [Next in Thread] |