On Jan 21, 2005, at 8:49 PM, David S. Miller wrote:
The code can potentially get really messy and ugly if we start
preemptively building larger frames "hoping" the cwnd will be
large enough by the time we push it onto the wire. Segmenting
at send time is completely upside down to the way packets are
built currently for transmission. A bad guess also means that
we'll spend significant cycles chopping up TSO packets and
resegmenting the queue.
so if i'm parsing correctly, with TSO enabled, at user send time, the
send code builds "tso-sized" segments based on the value of cwnd at the
time of the send.
with TSO disabled, at user send time, the code will build a string of
MSS-sized segments and queue them.
then at transmit time, cwnd is consulted and either a group of
mss-sized segments is sent, or a tso-sized segment is sent down the
is it necessary to build TSO-sized segments at the time the user does
the send? could just a chain of mss-sized segments be used as the
admittedly, it is more buffers to manipulate by the NIC, and the large
DMA's don't happen, but it means that TSO can take full advantage of
cwnd at transmit time without much resegmentation.
there is no rest for the wicked, yet the virtuous have no pillows