Generic Segmentation Offload (GSO)
In a June 2006 post to the
firstname.lastname@example.org mailing list
, Herbert Xu explained GSO (Generic Segmentation Offload). Before GSO, Linux had separate support for Large-Send Offload (LSO)
for TCP (called "TSO" or TCP Segmentation Offload) and for UDP (called "UFO" or UDP Fragmentation Offload
), but only for devices that have hardware "offloading" support for these features.
The idea behind GSO is that many of the performance benefits of LSO (TSO/UFO/...) can be obtained in a hardware-independent way, by passing large "superpackets" around for as long as possible, and deferring segmentation to the last possible moment - for devices without hardware segmentation/fragmentation support, this would be when data is actually handled to the device driver; for devices with hardware support, it could even be done in hardware.
The GSO code was added to the Linux kernel tree in 2.6.18.
* GSO Definition
, Networking Workgroup, Linux Foundation
* GSO: Generic Segmentation Offload
, Herbert Xu, LWN.net, June 2006