Coordinating TCP projects

Lawrence Stewart lastewart at swin.edu.au
Wed Jan 9 20:06:43 PST 2008


Hi Andre,

Andre Oppermann wrote:
> Lawrence Stewart wrote:

[snip]

>> Jim and I recently discussed the idea of implementing autotuning of 
>> the TCP reassembly queue size based on analysis of some experimental 
>> work we've been doing. It's a small project, but we feel it would be 
>> worth implementing. Details follow...
>>
>>
>> Problem description:
>>
>> Currently, "net.inet.tcp.reass.maxqlen" specifies the maximum number 
>> of segments that can be held in the reassembly queue for a TCP 
>> connection. The current default value is 48, which equates to approx. 
>> 69k of buffer space if MSS = 1448 bytes. This means that if the TCP 
>> window grows to be more than 48 segments wide, and a packet is lost, 
>> the receiver will buffer the next 48 segments in the reassembly queue 
>> and subsequently drop all the remaining segments in the window because 
>> the reassembly buffer is full i.e. 1 packet loss in the network can 
>> equate to many packet losses at the receiver because of insufficient 
>> buffering. This obviously has a negative impact on performance in 
>> environments where there is non-zero packet loss.
>>
>> With the addition of automatic socket buffer tuning in FreeBSD 7, the 
>> ability for the TCP window to grow above 48 segments is going to be 
>> even more prevalent than it is now, so this issue will continue to 
>> affect connections to FreeBSD based TCP receivers.
>>
>> We observed that the socket receive buffer size provides a good 
>> indication of the expected number of bytes in flight for a connection, 
>> and can therefore serve as the figure to base the size of the 
>> reassembly queue on.
> 
> I've got a rewritten and much more efficient tcp_reass() function
> in my local tree.  I'll import it into Perforce next week with all
> the other stuff.  You may want to base your auto-sizing work on it.
> The only missing parts are some statistics gathering.
> 

Where abouts is this code? A cursory browse through the Perforce web 
front-end reveals nothing. We're going to start work on the TCP 
reassembly queue autotuning patch now and if you think we should base it 
on your new tcp_reass() we need to have a look at it.

Cheers,
Lawrence



More information about the freebsd-net mailing list