From: David Miller <davem@davemloft.net>
To: tom@herbertland.com
Cc: ecree@solarflare.com, netdev@vger.kernel.org
Subject: Re: [PATCH net-next 0/2] Local checksum offload for VXLAN
Date: Fri, 25 Dec 2015 23:41:46 -0500 (EST) [thread overview]
Message-ID: <20151225.234146.1839604131444627126.davem@davemloft.net> (raw)
In-Reply-To: <CALx6S360nGbiD0fV4ggE_XT9SVcP4MZy-yR0Gma4jMdNuSKkug@mail.gmail.com>
From: Tom Herbert <tom@herbertland.com>
Date: Thu, 17 Dec 2015 10:06:13 -0800
> On Thu, Dec 17, 2015 at 7:27 AM, Edward Cree <ecree@solarflare.com> wrote:
>> When the inner packet checksum is offloaded, the outer UDP checksum is easy
>> to calculate as it doesn't depend on the payload (because the inner checksum
>> cancels out everything from the inner packet except the pseudo header).
>> Thus, transmit checksums for VXLAN (and in principle other encapsulations,
>> but I haven't enabled it for / tested with those) can be offloaded on any
>> device supporting NETIF_F_HW_CSUM. Only the innermost checksum has to be
>> offloaded, the rest are filled in by the stack.
>> Tested by hacking a driver to report NETIF_F_HW_CSUM, call skb_checksum_help
>> before transmitting a packet, and not actually offload anything to the hw.
>> In principle it should also be possible to apply this technique when the
>> inner packet has been checksummed by software, but only if skb->csum_start
>> and skb->csum_offset have been filled in to describe the inner checksum.
>> However in this case it is easier to use skb->csum and skb->csum_start, as
>> gso_make_checksum() already does - a similar but simpler technique. It's
>> not clear to me where else this should be done, so this is out of scope for
>> this patch series.
>>
> Edward, it took me a while to understand how this works, but this
> really is an amazing trick! This implies that we don't need to worry
> about HW support for offloading multiple checksums.
>
> I'm not sure that we need bits in VXLAN or any other encapsulation. It
> should be sufficient in udp_set_csum that if we already have
> CHECKSUM_PARTIAL that can always be used to do local checksum offload.
> This is also should be independent as to whether the device does
> NETIF_F_HW_CSUM or can offload NETIF_F_IP[V6]_CSUM for encapsulated
> packets.
>
> It would be nice to have a more formal documentation also. This is a
> very powerful mechanism but the math behind it and requirements are
> subtle.
I also think this is amazing, but should be generalized.
Also the pseudo header bits should be optimized a bit, running
skb_checksum_help() on a two byte part of the packet can certainly be
improved for example. :-)
prev parent reply other threads:[~2015-12-26 4:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-17 15:27 [PATCH net-next 0/2] Local checksum offload for VXLAN Edward Cree
2015-12-17 15:29 ` [PATCH net-next 1/2] net: udp: local checksum offload for encapsulation Edward Cree
2015-12-17 15:30 ` [PATCH net-next 2/2] net: vxlan: enable local checksum offload on HW_CSUM devices Edward Cree
2015-12-17 18:06 ` [PATCH net-next 0/2] Local checksum offload for VXLAN Tom Herbert
2015-12-18 10:41 ` Edward Cree
2015-12-18 19:41 ` Tom Herbert
2016-01-06 19:23 ` Edward Cree
2015-12-26 4:41 ` David Miller [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151225.234146.1839604131444627126.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=ecree@solarflare.com \
--cc=netdev@vger.kernel.org \
--cc=tom@herbertland.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).