On Wed, Aug 3, 2016 at 9:00 AM, pravin shelar <pshe...@ovn.org> wrote:
> On Tue, Aug 2, 2016 at 4:55 PM, Jesse Gross <je...@kernel.org> wrote:
>> On Tue, Aug 2, 2016 at 3:55 PM, pravin shelar <pshe...@ovn.org> wrote:
>>> On Tue, Aug 2, 2016 at 3:11 PM, Jesse Gross <je...@kernel.org> wrote:
>>>> On Tue, Aug 2, 2016 at 2:17 PM, Pravin B Shelar <pshe...@ovn.org> wrote:
>>>>> Signed-off-by: Pravin B Shelar <pshe...@ovn.org>
>>>>> ---
>>>>>  datapath/linux/compat/include/net/udp.h |  2 +-
>>>>>  datapath/linux/compat/udp.c             | 19 ++-----------------
>>>>>  datapath/linux/compat/udp_tunnel.c      | 17 +----------------
>>>>>  3 files changed, 4 insertions(+), 34 deletions(-)
>>>>
>>>> Can you give some more information on this? Is it a bug fix,
>>>> performance improvement, or cleanup?
>>>
>>> How about following commit msg.
>>> Following patch simplifies UDP-checksum routine by unconditionally
>>> using checksum offload for non GSO packets. We might get some
>>> performance improvement due to code simplification.
>>
>> This is just the check for whether the device has the
>> NETIF_F_V[46]_CSUM feature? I wonder whether that is really enough of
>> a benefit to deviate from upstream. If it is noticeable then it seems
>> like this should be an upstream patch.
>>
>
> In UDP xmit dst_entry is set after calling this function, so for non
> goo packets this function always calculate checksum in software.

OK, I understand now. That's definitely a much bigger deal. I also see
that the upstream version of the function has already been changed, so
this is only an issue for backports. Can you add this information ot
the commit message as well? With that change:
Acked-by: Jesse Gross <je...@kernel.org>

At this point, the main difference between this function and the
current upstream one is the lack of LCO. Currently, this isn't a
regression since LCO was introduced in 4.6 and that's where we start
using upstream tunnels. However, I'm a bit concerned that we might
need to continue to bump up the kernel version where we use our own
tunnels in the future and we will lose this optimization. (Though
maybe things have stabilized upstream at this point, which would be
nice.)

Independent of the possible future regression, it seems like we could
backport LCO as an optimization. On kernels with
USE_UPSTREAM_TUNNEL_GSO and are using outer checksums, we could delay
and possibly avoid computing the inner checksum.

>> I think the biggest checksum related improvement for compat code would
>> be to make the checksum computation conditional on skb->encapsulation
>> being set in rpl_ip_local_out.
>
> I am not sure how that will help, In rpl_ip_local_out() GSO packet we
> can not generate checksum partial packets, udp_set_csum() can not
> handle it. non GSO packet's checksum is calculated in
> ovs_iptunnel_handle_offloads() and the skb is not touched in
> rpl_ip_local_out().

I'm not sure if it was clear but I was talking about outer UDP
checksums on kernels where we don't have USE_UPSTREAM_TUNNEL_GSO.

In the GSO case, it looks to me like we are already generating
checksum partial packets. tnl_skb_gso_segment() will first resolve the
inner checksum and then call ovs_udp_csum_gso(), which calls
udp_set_csum() to create a new checksum partial outer header. All of
that seems OK to me.

For the non-GSO case, I agree that we are currently allowing all
packets to be computed by the stack since fix_segment will always be
NULL in this case. However, as we talked about in relation to one of
the previous patches, this might not be safe on older kernels where
drivers make assumptions about encapsulated packets being VXLAN. If we
were to change this so that we computed checksum for packets with
skb->encapsulation set, then we should still allow packets to be
offloaded without that set.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to