+CC David Christensen (IBM POWER maintainer) and Stanislaw Kardach (RISC-V 
maintainer)
+CC Stanislaw Kardach (RISC-V maintainer)
+CC Wathsala Vithanage (ARM maintainer)
+CC Vipin Varghese (AMD x86 maintainer)

> From: Tomasz Duszynski [mailto:tduszyn...@marvell.com]
> Sent: Friday, 17 January 2025 10.00
> 
> This series adds self monitoring support i.e allows to configure and
> read performance measurement unit (PMU) counters in runtime without
> using perf utility. This has certain advantages when application runs
> on
> isolated cores running dedicated tasks.
> 
> Events can be read directly using rte_pmu_read() or using dedicated
> tracepoint rte_eal_trace_pmu_read(). The latter will cause events to be
> stored inside CTF file.
> 
> By design, all enabled events are grouped together and the same group
> is attached to lcores that use self monitoring funtionality.
> 
> Events are enabled by names, which need to be read from standard
> location under sysfs i.e
> 
> /sys/bus/event_source/devices/PMU/events
> 
> where PMU is a core pmu i.e one measuring cpu events. As of today
> raw events are not supported.
> 
> v17:
> - improve docs
> - use safer strtok_r()
> v16:
> - fix build issue related to ALLOW_EXPERIMENTAL_API not always defined
> - rename tracepoints upfront to make it easier to decouple for tracing
> - minor doc improvements
> - make sure non EAL threads can't read PMU
> v15:
> - add some basic logs related to API failures
> - get rid of thread-local-storage
> - do not support MT-safety (which was buggy anyway) in management APIs
> (rte_pmu_init(),
>   rte_pmu_fini(), rte_pmu_add_{event,events_by_pattern}() as it impacts
> rte_pmu_read()
>   performance because more logic needs to be incorporated to handle all
> corner cases
> - improve documentation slightly
> - various other improvements here and there
> v14:
> - replace __atomic_xxx with rte_atomic_xxx
> - rebase to dpdk/main since that's a new feature
> v13:
> - allow init/fini calling from multiple contexts
> - get rid of conditional compilation and return erors in case APIs are
>   used on unsupported OS
> v12:
> - rebase old series
> - slightly refresh existing documentation
> - make sure compiler won't optimize accesses to certain variables
> during
>   event readout
> - drop previous Acked-by to respin a fresh review cycle
> v11:
> - skip fast test in case init fails
> v10:
> - check permissions before using counters
> - do not use internal symbols in exported functions
> - address review comments
> v9:
> - fix 'maybe-uninitialized' warning reported by CI
> v8:
> - just rebase series
> v7:
> - use per-lcore event group instead of global table index by lcore-id
> - don't add pmu_autotest to fast tests because due to lack of suported
>   on every arch
> v6:
> - move codebase to the separate library
> - address review comments
> v5:
> - address review comments
> - fix sign extension while reading pmu on x86
> - fix regex mentioned in doc
> - various minor changes/improvements here and there
> v4:
> - fix freeing mem detected by debug_autotest
> v3:
> - fix shared build
> v2:
> - fix problems reported by test build infra
> 
> Tomasz Duszynski (4):
>   lib: add generic support for reading PMU events
>   pmu: support reading ARM PMU events in runtime
>   pmu: support reading Intel x86_64 PMU events in runtime
>   eal: add PMU support to tracing library
> 
>  MAINTAINERS                              |   5 +
>  app/test/meson.build                     |   1 +
>  app/test/test_pmu.c                      |  55 +++
>  app/test/test_trace_perf.c               |  10 +
>  doc/api/doxy-api-index.md                |   3 +-
>  doc/api/doxy-api.conf.in                 |   1 +
>  doc/guides/prog_guide/glossary.rst       |   3 +
>  doc/guides/prog_guide/profile_app.rst    |  38 ++
>  doc/guides/prog_guide/trace_lib.rst      |  32 ++
>  doc/guides/rel_notes/release_25_03.rst   |   7 +
>  lib/eal/common/eal_common_trace.c        |   5 +-
>  lib/eal/common/eal_common_trace_pmu.c    |  38 ++
>  lib/eal/common/eal_common_trace_points.c |   5 +
>  lib/eal/common/eal_trace.h               |   4 +
>  lib/eal/common/meson.build               |   1 +
>  lib/eal/include/rte_eal_trace.h          |  11 +
>  lib/eal/meson.build                      |   3 +
>  lib/eal/version.map                      |   1 +
>  lib/meson.build                          |   1 +
>  lib/pmu/meson.build                      |  22 +
>  lib/pmu/pmu_arm64.c                      |  94 ++++
>  lib/pmu/pmu_private.h                    |  32 ++
>  lib/pmu/rte_pmu.c                        | 537 +++++++++++++++++++++++
>  lib/pmu/rte_pmu.h                        | 251 +++++++++++
>  lib/pmu/rte_pmu_pmc_arm64.h              |  30 ++
>  lib/pmu/rte_pmu_pmc_x86_64.h             |  24 +
>  lib/pmu/version.map                      |  15 +
>  27 files changed, 1227 insertions(+), 2 deletions(-)
>  create mode 100644 app/test/test_pmu.c
>  create mode 100644 lib/eal/common/eal_common_trace_pmu.c
>  create mode 100644 lib/pmu/meson.build
>  create mode 100644 lib/pmu/pmu_arm64.c
>  create mode 100644 lib/pmu/pmu_private.h
>  create mode 100644 lib/pmu/rte_pmu.c
>  create mode 100644 lib/pmu/rte_pmu.h
>  create mode 100644 lib/pmu/rte_pmu_pmc_arm64.h
>  create mode 100644 lib/pmu/rte_pmu_pmc_x86_64.h
>  create mode 100644 lib/pmu/version.map
> 
> --
> 2.34.1

Series-acked-by: Morten Brørup <m...@smartsharesystems.com>

I think the PMU library will be useful, and hope it gets into the 25.11 LTS 
release.
Let's see if it can go into 25.07 to begin with.

NB: Although this is Linux only, consider using rte_ffs64() instead of 
__builtin_ffsll() in the FIELD_PREP() macro.

Reply via email to