[20061124]
|
TCPv6 Transmit Segment Offload (TSO) support in hardware
Work performed by TCP/IP networking stacks include many tasks, among them
are calculation of packet checksums and splitting of "big" packets that exceed the
hardware's maximum transport unit (MTU) into smaller, MTU-sized packets.
The latter process is called fragmentation, and re-assembly of the
fragmented packet on the receiving side has to be done as well, before
the original 'big' packet can be processed.
Modern network cards can do a lot of things in hardware today, and
-- depending on the card! -- some do support calculating checksums
for IP, TCP and UDP for both IPv4 and IPv6, and some even support
packet fragmentation. The latter is known as
TCP segmentation offloading (TSO),
as it reduces the load on the hosts's CPU by moving the
job to the network card.
NetBSD supports calculating of various checksums in hardware for
quite some time now (see the {ip,tcp,udp}{4,6}sum options in
ifconfig(8)), and support for TSO is available for TCP/IPv4
for some time, too, see the 'tso4' option of ifconfig(8).
In the past weeks, Matthias Scheler and Yamamoto Takashi have worked
on adding support for TCP/IPv6 TSO and the wm(4) driver, and the code
is now available in NetBSD-current, it can be enabled via the 'tso6' option
of ifconfig(8).
According to measurements by Matthias,
load on the host CPU
was reduced from ~16% to ~12%, while
throughput went up at the same time
from ~710MBit/s to ~806MBit/s.
For comparison: TSO for IPv4 bumps the throughput
from ~624MBit/s to ~713MBit/s.
[Tags: ipv6, networking, tso]
|