Message ID | 211eb876be50613e662c0f01c3de6735e23e9b97.1450885903.git.pabeni@redhat.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, Dec 23, 2015 at 04:54:27PM +0100, Paolo Abeni wrote: > Currently the needed_headroom field for the geneve device is left > to the default value. > > This patch set it to space required for basic geneve encapsulation, > so that we can avoid the skb head re-allocation on xmit. > > This give a 6% speedup for unsegment traffic on geneve tunnel. > > v1 -> v2: > - add ETH_HLEN for the lower device to the needed headroom > > Signed-off-by: Paolo Abeni <pabeni@redhat.com> > Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> This time I really mean it... ;-) Acked-by: John W. Linville <linville@tuxdriver.com>
From: Paolo Abeni <pabeni@redhat.com> Date: Wed, 23 Dec 2015 16:54:27 +0100 > Currently the needed_headroom field for the geneve device is left > to the default value. > > This patch set it to space required for basic geneve encapsulation, > so that we can avoid the skb head re-allocation on xmit. > > This give a 6% speedup for unsegment traffic on geneve tunnel. > > v1 -> v2: > - add ETH_HLEN for the lower device to the needed headroom > > Signed-off-by: Paolo Abeni <pabeni@redhat.com> > Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Applied, thank you. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index c2b79f5..58efdec 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -1155,7 +1155,7 @@ static int geneve_configure(struct net *net, struct net_device *dev, struct geneve_net *gn = net_generic(net, geneve_net_id); struct geneve_dev *t, *geneve = netdev_priv(dev); bool tun_collect_md, tun_on_same_port; - int err; + int err, encap_len; if (!remote) return -EINVAL; @@ -1187,6 +1187,14 @@ static int geneve_configure(struct net *net, struct net_device *dev, if (t) return -EBUSY; + /* make enough headroom for basic scenario */ + encap_len = GENEVE_BASE_HLEN + ETH_HLEN; + if (remote->sa.sa_family == AF_INET) + encap_len += sizeof(struct iphdr); + else + encap_len += sizeof(struct ipv6hdr); + dev->needed_headroom = encap_len + ETH_HLEN; + if (metadata) { if (tun_on_same_port) return -EPERM;