How GRO (generic receive offload) works on more advanced NICs?

Solution 1:

I've found this article amazingly useful: JLS2009: Generic receive offload. It gives a great overview of how GRO works.

  1. Some adapters might do it, but the associated drivers have to be aware of it as well. Also, drivers themselves can do this in software. As this happens before entering the Kernel TCP/IP stack, by the time the kernel-space TCP/IP stack is fully entered the packets have been resequenced.
  2. The timeout is defined by the GRO spec as one TCP/IP 'tick' (increment of the Time Stamp field), which is a very small number but on fast networks multiple packets may still be received.
  3. GRO will come into play on the receiving side of the forwarder, and in fact GRO was created so the more greedy LRO method would stop screwing up packets on forwarders.
  4. That article I linked to above really helps.

Ethtool may be able to enable/disable GRO on specific interfaces. Depends on the version.