[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [lwip-users] netconn_write throughput stuck at 1024 bytes
From: |
DownyTif |
Subject: |
Re: [lwip-users] netconn_write throughput stuck at 1024 bytes |
Date: |
Thu, 22 Jan 2009 18:56:38 -0800 (PST) |
Ok, looks like I had a good part of the TCP knowledge missing :-/ So, if I
was able to get ~65kbps on my other system, that was probably because the
processor unit was fast.
Then, I'll configure my MSS to 1460 in lwip. But, what are the other
parameters that I could tweak to achieve the maximum throughput from my
AVR32 (lwip) to my host (Windows)?
I identified those from researches:
#define TCP_SND_BUF TCP_MSS * 16
#define TCP_SND_QUEUELEN 16
#define TCP_WND 4096
Is TCP_WND only for receiving data? If I only receive small frames in my
lwip, do I have to still make it big?
Thanks again.
Downy
Kieran Mansley wrote:
>
> On Wed, 2009-01-21 at 07:18 -0800, DownyTif wrote:
>> >DownyTif wrote:
>> >>
>> >> first, I want to say that I'm new to this lwip world. I'm trying to
>> make
>> >> a
>> >> Ethernet speed test using the EVK1100 board from ATMEL (AVR32). The
>> >> communication will be between the board and a PC using 2 ports, one
>> >> dedicated to bidir requests/responses between the board and the host,
>> the
>> >> other dedicated to maximum speed data sending from the board to the
>> host.
>> >> I
>> >> would like to be able to send packets of 32768 bytes.
>>
>> >Do you really mean "packets" there? Is this ethernet? Ethernet's normal
>> >MTU is around 1500 bytes, unless you're going to be using jumbo frames.
>> >You can send larger IP packets, but they get fragmented down to the MTU
>> >size, which is inefficient.
>>
>> Yeah, I meant Ethernet frames. I didn't know about that MTU... So what
>> would
>> help me achieve the maximum throughput? On another system using the same
>> host but a different board, I was able to get about 65Mbps of throughput
>> sending Ethernet frames of ~450kb each (lot of data).
>
> No you didn't! Ethernet frames are usually limited to 1500 bytes each,
> sometimes up to 9000 bytes if jumbo frames are configured. IP also has
> a maximum datagram size (65535 bytes) and TCP has a maximum segment
> length (typically 1460 bytes, sometimes more if you're running on jumbo
> Ethernet frames). These limits are a *lot* less than 450KB. I think
> you misunderstand how API-level writes are translated into Ethernet
> frames.
>
>> Ok, that other board
>> is using a in-house IP stack (I don't have the code) and a dedicated
>> Ethernet MCU, so I don't expect to get those results with my AVR32 board.
>> But still, I'm looking for the fastest transfers. If I understand
>> correctly,
>> when I "netconn_write()" a frame of let's say 4096 bytes and my
>> configured
>> MSS is 1460, the lwip will divide my frame into 3 segments (1460, 1460
>> and
>> 284) and send to the host those 3 frames in one send right? Or will the
>> lwip
>> send 3 frames in 3 send actions resulting in many ACK hand-shaking? In
>> other
>> words, is there a difference in this:
>>
>> netconn_write(..., 4096, ...);
>>
>> or
>>
>> netconn_write(..., 1460, ...);
>> netconn_write(..., 1460, ...);
>> netconn_write(..., 284, ...);
>
> The correct answer is "maybe". It depends on what traffic there is in
> flight, how much congestion there is in the network, if there has been
> any data loss, what buffers are available, how fast the other end
> acknowledges your packets, how fast the other end consumes the data,
> etc. In short, the TCP stack can segment and combine your
> netconn_writes however it likes, and you can't accurately predict what
> the Ethernet frames will look like. You can say that no single frame
> will be greater in size than the TCP MSS, IP datagram size, or ethernet
> MTU of either end that is communicating, and if you go over a larger
> network your packet may even be segmented by the network into multiple
> smaller ones.
>
> With UDP it's a bit different.
>
>> I traced the code and you are right. I found that until I accept the
>> connection, my mss is 2048, but the incoming connection puts it to 1460.
>> Unfortunatly, I don't think I can change that on the host, because it's a
>> Windows PC and I'm not sure I want to mess with those settings on the
>> client's computers.
>
> Think of it this way: your MSS setting says "I can handle packets up to
> 2048 bytes", and the Windows PC replies "I can only handle packets up to
> 1460 bytes". The stack therefore uses the smaller value of the two, as
> both ends need to agree on a value. This is entirely normal TCP
> behaviour though, and nothing special about lwIP.
>
> Kieran
>
>
>
> _______________________________________________
> lwip-users mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/lwip-users
>
>
--
View this message in context:
http://www.nabble.com/netconn_write-throughput-stuck-at-1024-bytes-tp21571019p21617708.html
Sent from the lwip-users mailing list archive at Nabble.com.