Implement TSO
authorAndrew Gallatin <gallatin@google.com>
Tue, 15 Jul 2014 16:00:22 +0000 (09:00 -0700)
committerAndrew Gallatin <gallatin@google.com>
Tue, 15 Jul 2014 17:00:58 +0000 (10:00 -0700)
commitde1ecf947b8aa5dacba2685268dac6b20f1aac48
tree1c4490f5aecc0471e29ea28ef083290a1aa5affd
parentfe429d4b63e37b0fb17bd3e0f603744e97dbbd10
Implement TSO

Implement TCP Segmentation Offload.  Part of this patch
involves adding a feat field to the output of the ether
stats so that etherbind can parse that, and set a flag
in the ipifc that can be used by TCP to check for TSO
support.  It is also nice to be able to see what offloads
a device supports:

feat: udpck tcppck padmin sg tso

I did it this way rather than just enabling TSO
everywhere & segmenting in software at the edge
for devices which don't support TSO (like I did for
checksum offload) because TSO may be inappropriate
for low bandwidth links.

This patch lets me send at line rate on my out-of-tree
10GbE NIC for message sizes larger than 8K
(an improvement from 6.9Gb/s -> 9.47Gb/s)

Signed-off-by: Andrew Gallatin <gallatin@google.com>
kern/drivers/dev/ether.c
kern/include/ip.h
kern/src/net/ethermedium.c
kern/src/net/netif.c
kern/src/net/tcp.c
kern/src/ns/qio.c