Docker uses bridge/veth for its bridged network. veth sends tcp packets as big as 65536 (its default gso value), even when lower physical or synthetic devices expose a lower limit. This causes tcp fragmentation in the host, spinning more cpu cycles.
The proposed solution is to allow user to tune gso settings, via iproute utils for example. Note: this enables changing gso for all interfaces, not limited to veth only. This series rebases Stephen's original patches [1]. It also fixes a minor issue when validating maximum gso_max_size, which can be in the range [0,65536]. Changes are validated with and without docker use cases. [1] https://marc.info/?l=linux-netdev&m=151217101428494&w=2 Stephen Hemminger (2): rtnetlink: allow GSO maximums to be passed to device veth: allow configuring GSO maximums drivers/net/veth.c | 20 ++++++++++++++++++++ net/core/rtnetlink.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) -- 2.7.4