There are two main components in the sender-side implementation of TCP Autotuning socket buffers [SMM98]. The first component determines what socket buffer size a connection desires based on its congestion window, which reflects this connection's round trip time and its share of the available bandwidth. The second component is the algorithm that is used to determine a connection's fair share of the memory resources, since not all connections may be able to obtain the buffer sizes they desire. This document describes problems experienced in implementing the second component, the max-min fair share algorithm.
In this paper, the terms allocate and reserve are used to describe the conceptual assigning of memory to connections by the fair share algorithms. In the actual TCP Autotuning implementation, the fair share algorithms set upper limits of memory usage only. Actual memory allocation is independent of the algorithm and is performed on an as-needed basis.