From: David Laight <David.Laight@ACULAB.COM>
To: 'David Howells' <dhowells@redhat.com>, Jens Axboe <axboe@kernel.dk>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
Linus Torvalds <torvalds@linux-foundation.org>,
Christoph Hellwig <hch@lst.de>,
"Christian Brauner" <christian@brauner.io>,
Matthew Wilcox <willy@infradead.org>,
"Jeff Layton" <jlayton@kernel.org>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v5 00/11] iov_iter: Convert the iterator macros into inline funcs
Date: Thu, 21 Sep 2023 14:04:59 +0000 [thread overview]
Message-ID: <591a70bf016b4317add2d936696abc0f@AcuMS.aculab.com> (raw)
In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com>
From: David Howells
> Sent: 20 September 2023 23:22
...
> (8) Move the copy-and-csum code to net/ where it can be in proximity with
> the code that uses it. This eliminates the code if CONFIG_NET=n and
> allows for the slim possibility of it being inlined.
>
> (9) Fold memcpy_and_csum() in to its two users.
>
> (10) Move csum_and_copy_from_iter_full() out of line and merge in
> csum_and_copy_from_iter() since the former is the only caller of the
> latter.
I thought that the real idea behind these was to do the checksum
at the same time as the copy to avoid loading the data into the L1
data-cache twice - especially for long buffers.
I wonder how often there are multiple iov[] that actually make
it better than just check summing the linear buffer?
I had a feeling that check summing of udp data was done during
copy_to/from_user, but the code can't be the copy-and-csum here
for that because it is missing support form odd-length buffers.
Intel x86 desktop chips can easily checksum at 8 bytes/clock
(But probably not with the current code!).
(I've got ~12 bytes/clock using adox and adcx but that loop
is entirely horrid and it would need run-time patching.
Especially since I think some AMD cpu execute them very slowly.)
OTOH 'rep movs[bq]' copy will copy 16 bytes/clock (32 if the
destination is 32 byte aligned - it pretty much won't be).
So you'd need a csum-and-copy loop that did 16 bytes every
three clocks to get the same throughput for long buffers.
In principle splitting the 'adc memory' into two instructions
is the same number of u-ops - but I'm sure I've tried to do
that and failed and the extra memory write can happen in
parallel with everything else.
So I don't think you'll get 16 bytes in two clocks - but you
might get it is three.
OTOH for a cpu where memcpy is code loop summing the data in
the copy loop is likely to be a gain.
But I suspect doing the checksum and copy at the same time
got 'all to complicated' to actually implement fully.
With most modern ethernet chips checksumming receive pacakets
does it really get used enough for the additional complexity?
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
next prev parent reply other threads:[~2023-09-21 14:05 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-20 22:22 David Howells
2023-09-20 22:22 ` [PATCH v5 01/11] sound: Fix snd_pcm_readv()/writev() to use iov access functions David Howells
2023-09-21 6:08 ` Jaroslav Kysela
2023-09-21 13:14 ` Takashi Iwai
2023-09-21 15:03 ` David Howells
2023-09-21 15:10 ` Takashi Iwai
2023-09-20 22:22 ` [PATCH v5 02/11] infiniband: Use user_backed_iter() to see if iterator is UBUF/IOVEC David Howells
2023-09-20 22:22 ` [PATCH v5 03/11] iov_iter: Renumber ITER_* constants David Howells
2023-09-20 22:22 ` [PATCH v5 04/11] iov_iter: Derive user-backedness from the iterator type David Howells
2023-09-20 22:22 ` [PATCH v5 05/11] iov_iter: Convert iterate*() to inline funcs David Howells
2023-09-22 9:32 ` Simon Horman
2023-09-22 11:38 ` David Howells
2023-09-20 22:22 ` [PATCH v5 06/11] iov_iter: Don't deal with iter->copy_mc in memcpy_from_iter_mc() David Howells
2023-09-20 22:22 ` [PATCH v5 07/11] iov_iter: Add a kernel-type iterator-only iteration function David Howells
2023-09-22 9:34 ` Simon Horman
2023-09-20 22:22 ` [PATCH v5 08/11] iov_iter, net: Move csum_and_copy_to/from_iter() to net/ David Howells
2023-09-20 22:22 ` [PATCH v5 09/11] iov_iter, net: Fold in csum_and_memcpy() David Howells
2023-09-20 22:22 ` [PATCH v5 10/11] iov_iter, net: Merge csum_and_copy_from_iter{,_full}() together David Howells
2023-09-20 22:22 ` [PATCH v5 11/11] iov_iter, net: Move hash_and_copy_to_iter() to net/ David Howells
2023-09-21 14:04 ` David Laight [this message]
2023-09-22 12:01 ` [PATCH v5 00/11] iov_iter: Convert the iterator macros into inline funcs David Howells
2023-09-23 6:59 ` Willem de Bruijn
2023-09-23 10:31 ` David Laight
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=591a70bf016b4317add2d936696abc0f@AcuMS.aculab.com \
--to=david.laight@aculab.com \
--cc=axboe@kernel.dk \
--cc=christian@brauner.io \
--cc=dhowells@redhat.com \
--cc=hch@lst.de \
--cc=jlayton@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=netdev@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
/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