[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4c0170fa-5b6f-ff76-0eff-a83ffec9864d@gmail.com>
Date: Wed, 1 Dec 2021 14:31:27 +0000
From: Pavel Begunkov <asml.silence@...il.com>
To: io-uring@...r.kernel.org, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Cc: Jakub Kicinski <kuba@...nel.org>,
Jonathan Lemon <jonathan.lemon@...il.com>,
"David S . Miller" <davem@...emloft.net>,
Willem de Bruijn <willemb@...gle.com>,
Eric Dumazet <edumazet@...gle.com>,
Hideaki YOSHIFUJI <yoshfuji@...ux-ipv6.org>,
David Ahern <dsahern@...nel.org>, Jens Axboe <axboe@...nel.dk>
Subject: Re: [RFC 00/12] io_uring zerocopy send
On 11/30/21 15:18, Pavel Begunkov wrote:
> Early proof of concept for zerocopy send via io_uring. This is just
> an RFC, there are details yet to be figured out, but hope to gather
> some feedback.
For larger audience, registered buffers is an io_uring feature
where it pins in advance the userspace memory and keeps it as
an array of pages (bvec in particular).
There is extra logic to make sure the pages stay referenced when
there are inflight requests using it, so they can avoid grabbing
extra page references.
Also, as was asked, attaching a standalone .c version of the
benchmark. Requires any relatively up-to-date liburing installed.
gcc -luring -O2 -o send-zc ./send-zc.c
There are also a couple of options added:
./send-zc [options] [-r <nr_submit_batching>] [-f] udp
-r <nr_submit_batch> is @nr_reqs from the cover-letter, 8 by default,
-f sets @flush to true, false by default.
> Benchmarking udp (65435 bytes) with a dummy net device (mtu=0xffff):
> The best case io_uring=116079 MB/s vs msg_zerocopy=47421 MB/s,
> or 2.44 times faster.
>
> № | test: | BW (MB/s) | speedup
> 1 | msg_zerocopy (non-zc) | 18281 | 0.38
> 2 | msg_zerocopy -z (baseline) | 47421 | 1
> 3 | io_uring (@flush=false, nr_reqs=1) | 96534 | 2.03
> 4 | io_uring (@flush=true, nr_reqs=1) | 89310 | 1.88
> 5 | io_uring (@flush=false, nr_reqs=8) | 116079 | 2.44
> 6 | io_uring (@flush=true, nr_reqs=8) | 109722 | 2.31
>
> Based on selftests/.../msg_zerocopy but more limited. You can use
> msg_zerocopy -r as usual for receive side.
>
[...]
--
Pavel Begunkov
View attachment "send-zc.c" of type "text/x-csrc" (8122 bytes)
Powered by blists - more mailing lists