This patchset adds support to do GRO/GSO by chaining packets of the same flow at the SKB frag_list pointer. This avoids the overhead to merge payloads into one big packet, and on the other end, if GSO is needed it avoids the overhead of splitting the big packet back to the native form.
Patch 1 prepares GSO to handle fraglist GSO packets. Patch 2 adds the core infrastructure to do fraglist GRO/GSO. Patch 3 enables IPv4 UDP to use fraglist GRO/GSO if no GRO supported socket is found. I have only forwarding performance measurements so far: I used used my IPsec forwarding test setup for this: ------------ ------------ -->| router 1 |-------->| router 2 |-- | ------------ ------------ | | | | -------------------- | --------|Spirent Testcenter|<---------- -------------------- net-next (December 10th): Single stream UDP frame size 1460 Bytes: 1.341.700 fps (15.67 Gbps). ---------------------------------------------------------------------- net-next (December 10th) + hack to enable forwarding for standard UDP GRO: Single stream UDP frame size 1460 Bytes: 1.651.200 fps (19.28 Gbps). ---------------------------------------------------------------------- net-next (December 10th) + fraglist UDP GRO/GSO: Single stream UDP frame size 1460 Bytes: 2.742.500 fps (32.03 Gbps). -----------------------------------------------------------------------