[RFC PATCH 00/19] riscv: ifunc support with optimized mem*/str*/cpu_relax routines
DJ Delorie
dj@redhat.com
Tue Feb 7 17:16:20 GMT 2023
Adhemerval Zanella Netto <adhemerval.zanella@linaro.org> writes:
> So now we have 3 different proposal mechanism to provide implementation runtime
> selection on riscv:
>
> 1. The sysdep mechanism to select optimized routines based on compiler/ABI
> done at build time. It is the current mechanism and it is also used
> on rvv routines [1].
>
> 2. A ifunc one using a new riscv syscall to query the kernel the required
> information.
>
> 3. Another ifunc one using riscv specific environment variable.
I'm also going to oppose #3 on principles. We've been removing the use
of environment variables for tuning, in favor of tunables.
If we have a way to auto-detect the best implementation without relying
on the user, that's my preference. Users are unreliable and require
documentation. The compiler likely doesn't have access to the
hardware[*], so must rely on the user. Thus, my preference is #2 - the
kernel has access to the hardware and its device tree, and can tell the
userspace what capabilities are available.
I would not be opposed to a tunable that overrides the autodetection; we
have something similar for x86. But the default (and should be) is
"works basically correctly without user intervention".
[*] you can run gcc on the "right" hardware, but typically we
build-once-run-everywhere.
More information about the Libc-alpha
mailing list