Attached are the 4 TCP TSO patches I have in my tree.
They are relative to Linus's current tree and also
available at:
bk://kernel.bkbits.net/davem/net-2.6
The quick summary is:
diff1) Smooth out TSO ack clocking by calling
tcp_trim_head() at tcp_tso_ack() time
and making tcp_trim_head() liberate
socket send buffer space.
diff2) URG fix in tcp_tso_ack()
diff3) Add tcp_tso_win_divisor sysctl knob.
diff4) Obey MSS in tso handling, shrink tcp_skb_cb
Existing known problems requiring a fix in
time for 2.6.9-final are:
1) Andi sees performance anomaly to 2.6.5 kernels.
Hopefully fixed by diff3 above, merely awaiting
retesting by him.
2) John Heffner sees some kind of weird transfer
hang, down/up'ing the interface makes transfer
finish successfully.
He has told me he will spend some time this weekend
trying to debug it.
Future enhancements which are not as critical as
the above:
1) Handle SACK tagging of TSO frames... somehow.
I don't have any brilliant ideas currently.
We could use bits, to represent sub-TSO SACK
regions. This would impose a hard limit of
something like 32 for the maximum TSO factor.
Another idea is to resegment a TSO frame when
SACKs cover portions. This approach is my
least favorite because SACKs can be common in
the presence of even minor packet reordering.
So we'd be splitting up + copying a lot.
2) Leave TSO enabled even during loss events.
#1 is pretty much a prerequisite for #2
If we don't do #1 first, most SACKs get entirely
ignored.
3) Fix up the packet counting once we have sub-TSO
SACK tagging in place.
Ok that's enough TSO hacking for me today.
diff1
Description: Binary data
diff2
Description: Binary data
diff3
Description: Binary data
diff4
Description: Binary data
|