On Fri, May 20, 2016 at 5:53 PM, Jesse Gross <je...@kernel.org> wrote: > On Wed, May 4, 2016 at 4:35 PM, Pravin B Shelar <pshe...@ovn.org> wrote: >> Following patch backports updated iptunnel pull function. >> Also brings in following upstream fix: >> >> commit a09a4c8dd1ec7f830e1fb9e59eb72bddc965d168 >> Author: Jesse Gross <je...@kernel.org> >> Date: Sat Mar 19 09:32:02 2016 -0700 >> >> tunnels: Remove encapsulation offloads on decap. >> >> If a packet is either locally encapsulated or processed through GRO >> it is marked with the offloads that it requires. However, when it is >> decapsulated these tunnel offload indications are not removed. This >> means that if we receive an encapsulated TCP packet, aggregate it with >> GRO, decapsulate, and retransmit the resulting frame on a NIC that does >> not support encapsulation, we won't be able to take advantage of hardware >> offloads even though it is just a simple TCP packet at this point. >> >> This fixes the problem by stripping off encapsulation offload indications >> when packets are decapsulated. >> >> The performance impacts of this bug are significant. In a test where a >> Geneve encapsulated TCP stream is sent to a hypervisor, GRO'ed, >> decapsulated, >> and bridged to a VM performance is improved by 60% (5Gbps->8Gbps) as a >> result of avoiding unnecessary segmentation at the VM tap interface. >> >> Reported-by: Ramu Ramamurthy <srama...@linux.vnet.ibm.com> >> Fixes: 68c33163 ("v4 GRE: Add TCP segmentation offload for GRE") >> Signed-off-by: Jesse Gross <je...@kernel.org> >> Signed-off-by: David S. Miller <da...@davemloft.net> >> >> Signed-off-by: Pravin B Shelar <pshe...@ovn.org> > > I think in order for this bug fix to be fully useful, we'll need to > bump up the range of kernels where we backport tunnel implementations > to < 4.7. That's kind of annoying but it's probably important since it > comes up in common OVS use cases. > ok.
>> diff --git a/datapath/linux/compat/geneve.c b/datapath/linux/compat/geneve.c >> index f38d4a3..0f6bda0 100644 >> --- a/datapath/linux/compat/geneve.c >> +++ b/datapath/linux/compat/geneve.c >> @@ -247,7 +247,7 @@ static int geneve_udp_encap_recv(struct sock *sk, struct >> sk_buff *skb) >> >> opts_len = geneveh->opt_len * 4; >> if (iptunnel_pull_header(skb, GENEVE_BASE_HLEN + opts_len, >> - htons(ETH_P_TEB))) >> + htons(ETH_P_TEB), false)) > > Even though these devices are created by OVS, I think it's possible > that someone could move them to another namespace - the same as with > the upstream version. > Later patch does bring in the change. To check namespace here in this patch I will need to pull in lot of unrelated code. so I will keep it as it is in this patch. >> static struct gre_cisco_protocol __rcu *gre_cisco_proto; >> diff --git a/datapath/linux/compat/include/linux/skbuff.h >> b/datapath/linux/compat/include/linux/skbuff.h >> index 376dfda..03ea707 100644 >> --- a/datapath/linux/compat/include/linux/skbuff.h >> +++ b/datapath/linux/compat/include/linux/skbuff.h >> +#ifndef HAVE_SKB_CLEAR_HASH_IF_NOT_L4 >> +static inline void skb_clear_hash_if_not_l4(struct sk_buff *skb) >> +{ >> + skb_clear_hash(skb); >> +} > > 3.10 actually has skb->l4_rxhash, so we should be able to implement > this fully even on kernels that don't otherwise support it. > ok. >> diff --git a/datapath/linux/compat/ip_tunnels_core.c >> b/datapath/linux/compat/ip_tunnels_core.c >> index 0858d02..2d91abb 100644 >> --- a/datapath/linux/compat/ip_tunnels_core.c >> +++ b/datapath/linux/compat/ip_tunnels_core.c >> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0) > [...] >> +static inline int iptunnel_pull_offloads(struct sk_buff *skb) > > Should this go in the header file to be consistent with upstream? sure, I moved it to the header file. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev