TCP offload engine or TOE is a technology used in network interface cards (NIC) to offload processing of the entire TCP/IP stack to the network controller. It is primarily used with high-speed network interfaces, such as gigabit Ethernet and 10 Gigabit Ethernet, where processing overhead of the network stack becomes significant.
The term, TOE, is often used to refer to the NIC itself, although circuit board engineers may use it to refer only to the integrated circuit included on the card which processes the TCP headers. TOEs are often suggested as a way to reduce the overhead associated with IP storage protocols such as iSCSI and NFS.
TCP offload engine – what does it do?
The objectives of the TOE are essentially two:
- Freed-up CPU cycles
- Reduction of PCI traffic
In linux you can configure the TOE siomply using the ethtool package.
if you ask the man page for the ethtool program you can find something intersting:
# man ethtool
ethtool(8) - Linux man page
ethtool - Display or change ethernet card settings
ethtool is used for querying settings of an ethernet device and changing them.
ethX is the name of the ethernet device on which ethtool should operate.
ethtool with a single argument specifying the device name prints current settings of the specified device.
Queries the specified ethernet device for offload information.
Changes the offload parameters of the specified ethernet device.
Specifies whether RX checksumming should be enabled.
Specifies whether TX checksumming should be enabled.
Specifies whether scatter-gather should be enabled.
Specifies whether TCP segmentation offload should be enabled.
Specifies whether UDP fragmentation offload should be enabled
Specifies whether generic segmentation offload should be enabled
Specifies whether generic receive offload should be enabled
Specifies whether large receive offload should be enabled
So, if your NIC (for example the eth0 device) supports the TOE you can see its configuration, issueing the following command:
# ethtool -k eth0
Offload parameters for eth0:
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: on
To enable an offload, issue the following command:
# ethtool -K ethX <offload-option> on
For example, to enable the generic-receive-offload, run the following command:
# ethtool -K eth0 gro on