Re: [PATCH 1/2] RISC-V: Probe for unaligned access speed
From: Conor Dooley
Date: Thu Jun 29 2023 - 10:03:57 EST
On Tue, Jun 27, 2023 at 12:11:25PM -0700, Evan Green wrote:
> On Mon, Jun 26, 2023 at 7:15 AM Conor Dooley <conor.dooley@xxxxxxxxxxxxx> wrote:
> > > +void check_misaligned_access(int cpu)
> > > +{
> > > + unsigned long j0, j1;
> > > + struct page *page;
> > > + void *dst;
> > > + void *src;
> > > + long word_copies = 0;
> > > + long byte_copies = 0;
> > > + long speed = RISCV_HWPROBE_MISALIGNED_SLOW;
> >
> > Is this not a change from current behaviour, that may actually lead to
> > incorrect reporting. Presently, only T-Head stuff sets a speed, so
> > hwprobe falls back to UNKNOWN for everything else. With this, we will
> > get slow set, for anything failing the test.
> > Slow is defined as "Misaligned accesses are supported in hardware, but
> > are slower than the cooresponding aligned accesses sequences (sic)", but
> > you have no way of knowing, based on the test you are performing, whether
> > the hardware supports it or if it is emulated by firmware.
> > Perhaps that is not relevant to userspace, but wanted to know your
> > thoughts.
> >
>
> Hm, that's true. EMULATED was an easy one when we were planning to get
> this info from the DT. It also might be an easy one in the future, if
> we get an SBI call that allows the kernel to take over misaligned trap
> handling. We'd then be able to do a misaligned access and see if our
> trap handler got called.
>
> One option is to leave the value alone if we fail the FAST test
> (rather than changing it from UNKNOWN to SLOW). This isn't great
> though, as it effectively makes UNKNOWN synonymous with SLOW, but in a
> way where usermode can't tell the difference between "I truly don't
> know" and "I tried the fast test and it failed".
>
> The alternative, as it is now, may mislabel some emulated systems as
> slow until the new SBI call shows up.
Make that "mislabel some emulated systems forever", existing systems
don't magically grow support for new extensions unfortunately.
Realistically though, does it matter to userspace if it is slow because
the hardware is slow, or if the emulation is slow, since there's not
really a way for userspace to tell from the syscall by how much it is
slower.
It can probably guess that emulation is worse, given how crap the
speed I see on mpfs is.
I'd rather we did say slow, rather than people start to interpret
UNKNOWN as slow.
> I'm not sure how bad this is in
> practice. We could add a subsequent performance bar below which we
> guess "emulated".
Nah, I don't really think that that is required.
> This probably matches what usermode will use that
> value for anyway (a synonym for "very slow"), but it's basically the
> same problem with reversed polarity (we mislabel some slow systems as
> emulated). I'm open to suggestions!
I think I just agreed with you, give or take. If it is fast, say fast.
If it is slow, we say it is slow. If we know it is emulated, then we can
report it being emulated. Is it too late to remove the "hardware" from
the syscall documentation, IOW s/supported in hardware/supported/?
Please actually describe the assumptions/subtleties in the commit
message though, so that the rationale for stuff is in the history :)
Cheers,
Conor.
Attachment:
signature.asc
Description: PGP signature