From: Akira Tsukamoto <akira.tsukamoto@gmail.com>
To: Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Akira Tsukamoto <akira.tsukamoto@gmail.com>,
linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org
Subject: [PATCH v2 0/5] riscv: improving uaccess with logs from network bench
Date: Sat, 19 Jun 2021 20:21:17 +0900 [thread overview]
Message-ID: <5a5c07ac-8c11-79d3-46a3-a255d4148f76@gmail.com> (raw)
Optimizing copy_to_user and copy_from_user.
I rewrote the functions in v2, heavily influenced by Garry's memcpy
function [1].
The functions must be written in assembler to handle page faults manually
inside the function.
With the changes, improves in the percentage usage and some performance
of network speed in UDP packets.
Only patching copy_user. Using the original memcpy.
All results are from the same base kernel, same rootfs and same
BeagleV beta board.
Comparison by "perf top -Ue task-clock" while running iperf3.
--- TCP recv ---
* Before
40.40% [kernel] [k] memcpy
33.09% [kernel] [k] __asm_copy_to_user
* After
50.35% [kernel] [k] memcpy
13.76% [kernel] [k] __asm_copy_to_user
--- TCP send ---
* Before
19.96% [kernel] [k] memcpy
9.84% [kernel] [k] __asm_copy_to_user
* After
14.27% [kernel] [k] memcpy
7.37% [kernel] [k] __asm_copy_to_user
--- UDP send ---
* Before
25.18% [kernel] [k] memcpy
22.50% [kernel] [k] __asm_copy_to_user
* After
28.90% [kernel] [k] memcpy
9.49% [kernel] [k] __asm_copy_to_user
--- UDP recv ---
* Before
44.45% [kernel] [k] memcpy
31.04% [kernel] [k] __asm_copy_to_user
* After
55.62% [kernel] [k] memcpy
11.22% [kernel] [k] __asm_copy_to_user
Processing network packets require a lot of unaligned access for the packet
header, which is not able to change the design of the header format to be
aligned.
And user applications call system calls with a large buffer for send/recf()
and sendto/recvfrom() to repeat less function calls for the optimization.
v1 -> v2:
- Added shift copy
- Separated patches for readability of changes in assembler
- Using perf results
[1] https://lkml.org/lkml/2021/2/16/778
Akira Tsukamoto (5):
riscv: __asm_to/copy_from_user: delete existing code
riscv: __asm_to/copy_from_user: Adding byte copy first
riscv: __asm_to/copy_from_user: Copy until dst is aligned address
riscv: __asm_to/copy_from_user: Bulk copy while shifting misaligned
data
riscv: __asm_to/copy_from_user: Bulk copy when both src dst are
aligned
arch/riscv/lib/uaccess.S | 181 +++++++++++++++++++++++++++++++--------
1 file changed, 146 insertions(+), 35 deletions(-)
--
2.17.1
next reply other threads:[~2021-06-19 11:21 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-19 11:21 Akira Tsukamoto [this message]
2021-06-19 11:34 ` [PATCH 1/5] riscv: __asm_to/copy_from_user: delete existing code Akira Tsukamoto
2021-06-21 11:45 ` David Laight
2021-06-21 13:55 ` Akira Tsukamoto
2021-06-19 11:35 ` [PATCH 2/5] riscv: __asm_to/copy_from_user: Adding byte copy first Akira Tsukamoto
2021-06-19 11:36 ` [PATCH 3/5] riscv: __asm_to/copy_from_user: Copy until dst is aligned Akira Tsukamoto
2021-06-19 11:37 ` [PATCH 4/5] riscv: __asm_to/copy_from_user: Bulk copy while shifting Akira Tsukamoto
2021-06-19 11:43 ` [PATCH 5/5] riscv: __asm_to/copy_from_user: Bulk copy when both src, dst are aligned Akira Tsukamoto
2021-06-21 11:55 ` David Laight
2021-06-21 14:13 ` Akira Tsukamoto
2021-06-20 10:02 ` [PATCH v2 0/5] riscv: improving uaccess with logs from network bench Ben Dooks
2021-06-20 16:36 ` Akira Tsukamoto
2021-06-22 8:30 ` Ben Dooks
2021-06-22 12:05 ` Akira Tsukamoto
2021-06-22 17:45 ` Ben Dooks
2021-07-12 21:24 ` Ben Dooks
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=5a5c07ac-8c11-79d3-46a3-a255d4148f76@gmail.com \
--to=akira.tsukamoto@gmail.com \
--cc=aou@eecs.berkeley.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.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).