hubertf's NetBSD Blog
Send interesting links to hubert at feyrer dot de!
[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: , , ]

Disclaimer: All opinion expressed here is purely my own. No responsibility is taken for anything.

Access count: 35494659
Copyright (c) Hubert Feyrer