From: Conor Dooley <conor@kernel.org>
To: Heiko Stuebner <heiko@sntech.de>,
linux-riscv@lists.infradead.org, palmer@dabbelt.com
Cc: christoph.muellner@vrull.eu, prabhakar.csengg@gmail.com,
conor@kernel.org, philipp.tomsich@vrull.eu,
ajones@ventanamicro.com, emil.renner.berthing@canonical.com,
ardb@kernel.org, linux-efi@vger.kernel.org,
Heiko Stuebner <heiko.stuebner@vrull.eu>
Subject: Re: [PATCH v3 0/14] Zbb string optimizations and call support in alternatives
Date: Thu, 1 Dec 2022 00:02:08 +0000 [thread overview]
Message-ID: <81679d42-7800-3f77-eac8-d7d942e3065f@kernel.org> (raw)
In-Reply-To: <20221130225614.1594256-1-heiko@sntech.de>
On 30/11/2022 22:56, Heiko Stuebner wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>
> From: Heiko Stuebner <heiko.stuebner@vrull.eu>
>
> The Zbb extension can be used to make string functions run a lot
> faster.
>
> To allow There are essentially two problems to solve:
> - making it possible for str* functions to replace what they do
> in a performant way
>
> This is done by inlining the core functions and then
> using alternatives to call the actual variant.
>
> This of course will need a more intelligent selection mechanism
> down the road when more variants may exist using different
> available extensions.
>
> - actually allowing calls in alternatives
> Function calls use auipc + jalr to reach those 32bit relative
> addresses but when they're compiled the offset will be wrong
> as alternatives live in a different section. So when the patch
> gets applied the address will point to the wrong location.
>
> So similar to arm64 the target addresses need to be updated.
>
> This is probably also helpful for other things needing more
> complex code in alternatives.
>
>
> In my half-scientific test-case of running the functions in question
> on a 95 character string in a loop of 10000 iterations, the Zbb
> variants shave off around 2/3 of the original runtime.
>
>
> For v2 I got into some sort of cleanup spree for the general instruction
> parsing that already existed. A number of places do their own
> instruction parsing and I tried consolidating some of them.
>
> Noteable, the kvm parts still do, but I had to stop somewhere :-)
>
> The series is based on v6.1-rc7 right now.
>
> changes since v2:
> - add patch fixing the c.jalr funct4 value
> - reword some commit messages
> - fix position of auipc addition patch (earlier)
> - fix compile errors from patch-reordering gone wrong
> (worked at the end of v2, but compiling individual patches
> caused issues) - patches are now tested individually
> - limit Zbb variants for GNU as for now
> (LLVM support for .option arch is still under review)
Still no good on that front chief:
ld.lld: error: undefined symbol: __strlen_generic
>>> referenced by ctype.c
>>> arch/riscv/purgatory/purgatory.ro:(strlcpy)
>>> referenced by ctype.c
>>> arch/riscv/purgatory/purgatory.ro:(strlcat)
>>> referenced by ctype.c
>>> arch/riscv/purgatory/purgatory.ro:(strlcat)
>>> referenced 3 more times
make[5]: *** [/stuff/linux/arch/riscv/purgatory/Makefile:85: arch/riscv/purgatory/purgatory.chk] Error 1
make[5]: Target 'arch/riscv/purgatory/' not remade because of errors.
make[4]: *** [/stuff/linux/scripts/Makefile.build:500: arch/riscv/purgatory] Error 2
allmodconfig, same toolchain as before.
> - prevent str-functions from getting optimized to builtin-variants
>
> changes since v1:
> - a number of generalizations/cleanups for instruction parsing
> - use accessor function to access instructions (Emil)
> - actually patch the correct location when having more than one
> instruction in an alternative block
> - string function cleanups (comments etc) (Conor)
> - move zbb extension above s* extensions in cpu.c lists
>
> changes since rfc:
> - make Zbb code actually work
> - drop some unneeded patches
> - a lot of cleanups
>
> Heiko Stuebner (14):
> RISC-V: fix funct4 definition for c.jalr in parse_asm.h
> RISC-V: add prefix to all constants/macros in parse_asm.h
> RISC-V: detach funct-values from their offset
> RISC-V: add ebreak instructions to definitions
> RISC-V: add auipc elements to parse_asm header
> RISC-V: Move riscv_insn_is_* macros into a common header
> RISC-V: rename parse_asm.h to insn.h
> RISC-V: kprobes: use central defined funct3 constants
> RISC-V: add U-type imm parsing to insn.h header
> RISC-V: add rd reg parsing to insn.h header
> RISC-V: fix auipc-jalr addresses in patched alternatives
> efi/riscv: libstub: mark when compiling libstub
> RISC-V: add infrastructure to allow different str* implementations
> RISC-V: add zbb support to string functions
>
> arch/riscv/Kconfig | 24 ++
> arch/riscv/Makefile | 3 +
> arch/riscv/include/asm/alternative.h | 3 +
> arch/riscv/include/asm/errata_list.h | 3 +-
> arch/riscv/include/asm/hwcap.h | 1 +
> arch/riscv/include/asm/insn.h | 292 +++++++++++++++++++++++
> arch/riscv/include/asm/parse_asm.h | 219 -----------------
> arch/riscv/include/asm/string.h | 83 +++++++
> arch/riscv/kernel/alternative.c | 72 ++++++
> arch/riscv/kernel/cpu.c | 1 +
> arch/riscv/kernel/cpufeature.c | 29 ++-
> arch/riscv/kernel/image-vars.h | 6 +-
> arch/riscv/kernel/kgdb.c | 63 ++---
> arch/riscv/kernel/probes/simulate-insn.c | 19 +-
> arch/riscv/kernel/probes/simulate-insn.h | 26 +-
> arch/riscv/lib/Makefile | 6 +
> arch/riscv/lib/strcmp.S | 38 +++
> arch/riscv/lib/strcmp_zbb.S | 96 ++++++++
> arch/riscv/lib/strlen.S | 29 +++
> arch/riscv/lib/strlen_zbb.S | 115 +++++++++
> arch/riscv/lib/strncmp.S | 41 ++++
> arch/riscv/lib/strncmp_zbb.S | 112 +++++++++
> drivers/firmware/efi/libstub/Makefile | 2 +-
> 23 files changed, 982 insertions(+), 301 deletions(-)
> create mode 100644 arch/riscv/include/asm/insn.h
> delete mode 100644 arch/riscv/include/asm/parse_asm.h
> create mode 100644 arch/riscv/lib/strcmp.S
> create mode 100644 arch/riscv/lib/strcmp_zbb.S
> create mode 100644 arch/riscv/lib/strlen.S
> create mode 100644 arch/riscv/lib/strlen_zbb.S
> create mode 100644 arch/riscv/lib/strncmp.S
> create mode 100644 arch/riscv/lib/strncmp_zbb.S
>
> --
> 2.35.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2022-12-01 0:14 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-30 22:56 [PATCH v3 0/14] Zbb string optimizations and call support in alternatives Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 01/14] RISC-V: fix funct4 definition for c.jalr in parse_asm.h Heiko Stuebner
2022-12-01 17:00 ` Andrew Jones
2022-12-01 17:05 ` Andrew Jones
2022-12-01 17:07 ` Heiko Stübner
2022-11-30 22:56 ` [PATCH v3 02/14] RISC-V: add prefix to all constants/macros " Heiko Stuebner
2022-12-05 14:00 ` Andrew Jones
2022-12-05 14:53 ` Andrew Jones
2022-12-05 15:30 ` Andrew Jones
2022-11-30 22:56 ` [PATCH v3 03/14] RISC-V: detach funct-values from their offset Heiko Stuebner
2022-12-01 17:36 ` Andrew Jones
2022-11-30 22:56 ` [PATCH v3 04/14] RISC-V: add ebreak instructions to definitions Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 05/14] RISC-V: add auipc elements to parse_asm header Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 06/14] RISC-V: Move riscv_insn_is_* macros into a common header Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 07/14] RISC-V: rename parse_asm.h to insn.h Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 08/14] RISC-V: kprobes: use central defined funct3 constants Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 09/14] RISC-V: add U-type imm parsing to insn.h header Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 10/14] RISC-V: add rd reg " Heiko Stuebner
2022-11-30 22:56 ` [PATCH v3 11/14] RISC-V: fix auipc-jalr addresses in patched alternatives Heiko Stuebner
2022-12-01 19:33 ` Andrew Jones
2022-12-06 15:56 ` Andrew Jones
2022-12-06 22:10 ` Heiko Stübner
2022-12-07 9:35 ` Heiko Stübner
2022-12-07 10:44 ` Andrew Jones
2022-12-07 11:19 ` Emil Renner Berthing
2022-12-07 11:29 ` Emil Renner Berthing
2022-12-07 11:32 ` Emil Renner Berthing
2022-11-30 22:56 ` [PATCH v3 12/14] efi/riscv: libstub: mark when compiling libstub Heiko Stuebner
2022-12-01 19:34 ` Andrew Jones
2022-12-01 20:57 ` Ard Biesheuvel
2022-12-01 22:39 ` Heiko Stübner
2022-12-02 16:37 ` Ard Biesheuvel
2023-01-04 15:21 ` Andrew Jones
2023-01-04 15:32 ` Heiko Stübner
2022-11-30 22:56 ` [PATCH v3 13/14] RISC-V: add infrastructure to allow different str* implementations Heiko Stuebner
2022-12-01 20:07 ` Andrew Jones
2022-12-01 20:14 ` Andrew Jones
2022-12-02 4:08 ` Palmer Dabbelt
2022-12-02 8:19 ` Ard Biesheuvel
2022-11-30 22:56 ` [PATCH v3 14/14] RISC-V: add zbb support to string functions Heiko Stuebner
2022-12-01 0:02 ` Conor Dooley [this message]
2022-12-01 11:42 ` [PATCH v3 0/14] Zbb string optimizations and call support in alternatives Heiko Stübner
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=81679d42-7800-3f77-eac8-d7d942e3065f@kernel.org \
--to=conor@kernel.org \
--cc=ajones@ventanamicro.com \
--cc=ardb@kernel.org \
--cc=christoph.muellner@vrull.eu \
--cc=emil.renner.berthing@canonical.com \
--cc=heiko.stuebner@vrull.eu \
--cc=heiko@sntech.de \
--cc=linux-efi@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=philipp.tomsich@vrull.eu \
--cc=prabhakar.csengg@gmail.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