From: Stephen Hemminger <stephen@networkplumber.org> Date: 2017-12-07 23:40:24
This is the more general way to solving the issue of GSO limits
not being set correctly for containers on Azure. If a GSO packet
is sent to host that exceeds the limit (reported by NDIS), then
the host is forced to do segmentation in software which has noticeable
performance impact.
The core rtnetlink infrastructure already has the messages and
infrastructure to allow changing gso limits. With an updated iproute2
the following already works:
# ip li set dev dummy0 gso_max_size 30000
These patches are about making it easier with veth.
Stephen Hemminger (2):
rtnetlink: allow GSO maximums to be set on device creation
veth: set peer GSO values
drivers/net/veth.c | 3 +++
net/core/rtnetlink.c | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
--
2.11.0
From: Stephen Hemminger <stephen@networkplumber.org> Date: 2017-12-07 23:40:25
From: Stephen Hemminger <stephen@networkplumber.org>
Netlink device already allows changing GSO sizes with
ip set command. The part that is missing is allowing overriding
GSO settings on device creation.
Signed-off-by: Stephen Hemminger <redacted>
allow set gso on create
---
net/core/rtnetlink.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
From: Stephen Hemminger <stephen@networkplumber.org> Date: 2017-12-07 23:40:26
When new veth is created, and GSO values have been configured
on one device, clone those values to the peer.
For example:
# ip link add dev vm1 gso_max_size 65530 type veth peer name vm2
This should create vm1 <--> vm2 with both having GSO maximum
size set to 65530.
Signed-off-by: Stephen Hemminger <redacted>
---
drivers/net/veth.c | 3 +++
1 file changed, 3 insertions(+)
From: David Miller <davem@davemloft.net> Date: 2017-12-08 19:23:25
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 7 Dec 2017 15:40:18 -0800
This is the more general way to solving the issue of GSO limits
not being set correctly for containers on Azure. If a GSO packet
is sent to host that exceeds the limit (reported by NDIS), then
the host is forced to do segmentation in software which has noticeable
performance impact.
The core rtnetlink infrastructure already has the messages and
infrastructure to allow changing gso limits. With an updated iproute2
the following already works:
# ip li set dev dummy0 gso_max_size 30000
These patches are about making it easier with veth.
Ok, this is definitely a step forward.
Series applied, thanks Stephen.
On Fri, Dec 08, 2017 at 02:23:23PM -0500, David Miller wrote:
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 7 Dec 2017 15:40:18 -0800
quoted
This is the more general way to solving the issue of GSO limits
not being set correctly for containers on Azure. If a GSO packet
is sent to host that exceeds the limit (reported by NDIS), then
the host is forced to do segmentation in software which has noticeable
performance impact.
The core rtnetlink infrastructure already has the messages and
infrastructure to allow changing gso limits. With an updated iproute2
the following already works:
# ip li set dev dummy0 gso_max_size 30000
These patches are about making it easier with veth.
Ok, this is definitely a step forward.
Series applied, thanks Stephen.
Thanks.
Still not seeing the iproute2 patch though, either master or net-next.
From: Stephen Hemminger <stephen@networkplumber.org> Date: 2017-12-09 00:15:27
On Fri, 8 Dec 2017 15:50:25 -0800
Solio Sarabia [off-list ref] wrote:
On Fri, Dec 08, 2017 at 02:23:23PM -0500, David Miller wrote:
quoted
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 7 Dec 2017 15:40:18 -0800
quoted
This is the more general way to solving the issue of GSO limits
not being set correctly for containers on Azure. If a GSO packet
is sent to host that exceeds the limit (reported by NDIS), then
the host is forced to do segmentation in software which has noticeable
performance impact.
The core rtnetlink infrastructure already has the messages and
infrastructure to allow changing gso limits. With an updated iproute2
the following already works:
# ip li set dev dummy0 gso_max_size 30000
These patches are about making it easier with veth.
Ok, this is definitely a step forward.
Series applied, thanks Stephen.
Thanks.
Still not seeing the iproute2 patch though, either master or net-next.
I held off on iproute2 until kernel change is accepted upstream.
@@ -410,6 +410,9 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,if(ifmp&&(dev->ifindex!=0))peer->ifindex=ifmp->ifi_index;+peer->gso_max_size=dev->gso_max_size;+peer->gso_max_segs=dev->gso_max_segs;+err=register_netdevice(peer);put_net(net);net=NULL;
What if gso changes are made after device create? They are not
propagated to the peer device like they are on link create.
This would be a nice addition after ongoing patches are merged,
since veth usually lives in another netns. For docker, it requires
a couple of extra commands to expose the peer's netns.