Re: [PATCH 0/4] riscv: Allow userspace to directly access perf counters

Atish Patra
2023-04-13T19:19:08Z

On Thu, Apr 13, 2023 at 9:47 PM Alexandre Ghiti <alexghiti@rivosinc.com> wrote:
>
> riscv used to allow direct access to cycle/time/instret counters,
> bypassing the perf framework, this patchset intends to allow the user to
> mmap any counter when accessed through perf. But we can't break the
> existing behaviour so we introduce a sysctl perf_user_access like arm64
> does, which defaults to the legacy mode described above.
>

It would be good provide additional direction for user space packages:

The legacy behavior is supported for now in order to avoid breaking
existing software.
However, reading counters directly without perf interaction may
provide incorrect values which
the userspace software must avoid. We are hoping that the user space
packages which
read the cycle/instret directly, will move to the proper interface
eventually if they actually need it.
Most of the users are supposed to read "time" instead of "cycle" if
they intend to read timestamps.

The legacy sysctl option will be removed in the future. The plan is
that the distros will
set the default option to SYSCTL_USER_ACCESS which enables user
counters only through perf
sooner (as soon as they make sure the packages built for that distro
don't read cycle/instret) directly.

> The core of this patchset lies in patch 4, the first 3 patches are
> simple fixes.
>
> base-commit-tag: v6.3-rc1
>
> Alexandre Ghiti (4):
> perf: Fix wrong comment about default event_idx
> include: riscv: Fix wrong include guard in riscv_pmu.h
> riscv: Make legacy counter enum match the HW numbering
> riscv: Enable perf counters user access only through perf
>
> Documentation/admin-guide/sysctl/kernel.rst | 23 +++-
> arch/riscv/include/asm/perf_event.h | 3 +
> arch/riscv/kernel/Makefile | 2 +-
> arch/riscv/kernel/perf_event.c | 65 +++++++++++
> drivers/perf/riscv_pmu.c | 42 ++++++++
> drivers/perf/riscv_pmu_legacy.c | 24 ++++-
> drivers/perf/riscv_pmu_sbi.c | 113 ++++++++++++++++++--
> include/linux/perf/riscv_pmu.h | 9 +-
> include/linux/perf_event.h | 3 +-
> tools/lib/perf/mmap.c | 65 +++++++++++
> 10 files changed, 332 insertions(+), 17 deletions(-)
> create mode 100644 arch/riscv/kernel/perf_event.c
>
> --
> 2.37.2
>

--
Regards,
Atish