From: Tomasz Duszynski <tduszynski@marvell.com>
To: Konstantin Ananyev <konstantin.ananyev@huawei.com>,
Jerin Jacob <jerinj@marvell.com>,
Sunil Kumar Kori <skori@marvell.com>,
Tyler Retzlaff <roretzla@linux.microsoft.com>
Cc: "Ruifeng.Wang@arm.com" <Ruifeng.Wang@arm.com>,
"bruce.richardson@intel.com" <bruce.richardson@intel.com>,
"david.marchand@redhat.com" <david.marchand@redhat.com>,
"dev@dpdk.org" <dev@dpdk.org>,
"konstantin.v.ananyev@yandex.ru" <konstantin.v.ananyev@yandex.ru>,
"mattias.ronnblom@ericsson.com" <mattias.ronnblom@ericsson.com>,
"mb@smartsharesystems.com" <mb@smartsharesystems.com>,
"stephen@networkplumber.org" <stephen@networkplumber.org>,
"thomas@monjalon.net" <thomas@monjalon.net>,
"zhoumin@loongson.cn" <zhoumin@loongson.cn>
Subject: RE: [PATCH v15 4/4] eal: add PMU support to tracing library
Date: Fri, 8 Nov 2024 11:44:35 +0000 [thread overview]
Message-ID: <CH0PR18MB4353708DF5054E565D205F7BD25D2@CH0PR18MB4353.namprd18.prod.outlook.com> (raw)
In-Reply-To: <09bdc335511040c1915fd26cea86c3c8@huawei.com>
>> In order to profile app one needs to store significant amount of
>> samples somewhere for an analysis later on. Since trace library
>> supports storing data in a CTF format lets take advantage of that and
>> add a dedicated PMU tracepoint.
>>
>> Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
>> ---
>> app/test/test_trace_perf.c | 10 ++++
>> doc/guides/prog_guide/profile_app.rst | 5 ++
>> doc/guides/prog_guide/trace_lib.rst | 32 +++++++++++
>> 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/version.map | 1 +
>> lib/pmu/rte_pmu.c | 67 +++++++++++++++++++++++-
>> lib/pmu/rte_pmu.h | 24 +++++++--
>> lib/pmu/version.map | 1 +
>> 13 files changed, 198 insertions(+), 6 deletions(-) create mode
>> 100644 lib/eal/common/eal_common_trace_pmu.c
>>
>> diff --git a/app/test/test_trace_perf.c b/app/test/test_trace_perf.c
>> index 8257cc02be..8a0730943e 100644
>> --- a/app/test/test_trace_perf.c
>> +++ b/app/test/test_trace_perf.c
>> @@ -114,6 +114,10 @@ worker_fn_##func(void *arg) \ #define
>> GENERIC_DOUBLE rte_eal_trace_generic_double(3.66666)
>> #define GENERIC_STR rte_eal_trace_generic_str("hello world") #define
>> VOID_FP app_dpdk_test_fp()
>> +#ifdef RTE_LIB_PMU
>> +/* 0 corresponds first event passed via --trace= */ #define READ_PMU
>> +rte_eal_trace_pmu_read(0) #endif
>>
>> WORKER_DEFINE(GENERIC_VOID)
>> WORKER_DEFINE(GENERIC_U64)
>> @@ -122,6 +126,9 @@ WORKER_DEFINE(GENERIC_FLOAT)
>> WORKER_DEFINE(GENERIC_DOUBLE)
>> WORKER_DEFINE(GENERIC_STR)
>> WORKER_DEFINE(VOID_FP)
>> +#ifdef RTE_LIB_PMU
>> +WORKER_DEFINE(READ_PMU)
>> +#endif
>>
>> static void
>> run_test(const char *str, lcore_function_t f, struct test_data *data,
>> size_t sz) @@ -174,6 +181,9 @@ test_trace_perf(void)
>> run_test("double", worker_fn_GENERIC_DOUBLE, data, sz);
>> run_test("string", worker_fn_GENERIC_STR, data, sz);
>> run_test("void_fp", worker_fn_VOID_FP, data, sz);
>> +#ifdef RTE_LIB_PMU
>> + run_test("read_pmu", worker_fn_READ_PMU, data, sz); #endif
>>
>> rte_free(data);
>> return TEST_SUCCESS;
>> diff --git a/doc/guides/prog_guide/profile_app.rst
>> b/doc/guides/prog_guide/profile_app.rst
>> index 854c515a61..1ab6fb9eaa 100644
>> --- a/doc/guides/prog_guide/profile_app.rst
>> +++ b/doc/guides/prog_guide/profile_app.rst
>> @@ -36,6 +36,11 @@ As of now implementation imposes certain limitations:
>>
>> * Each EAL lcore measures same group of events
>>
>> +Alternatively tracing library can be used which offers dedicated
>> +tracepoint ``rte_eal_trace_pmu_event()``.
>> +
>> +Refer to :doc:`../prog_guide/trace_lib` for more details.
>> +
>>
>> Profiling on x86
>> ----------------
>> diff --git a/doc/guides/prog_guide/trace_lib.rst
>> b/doc/guides/prog_guide/trace_lib.rst
>> index d9b17abe90..378abccd72 100644
>> --- a/doc/guides/prog_guide/trace_lib.rst
>> +++ b/doc/guides/prog_guide/trace_lib.rst
>> @@ -46,6 +46,7 @@ DPDK tracing library features
>> trace format and is compatible with ``LTTng``.
>> For detailed information, refer to
>> `Common Trace Format <https://urldefense.proofpoint.com/v2/url?u=https-
>3A__diamon.org_ctf_&d=DwIFAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=PZNXgrbjdlXxVEEGYkxIxRndyEUwWU_ad5ce22YI6Is
>&m=sUalf-TsyEi-
>hdbFm4eACDHmnQ9BrqmS_1Df11kPLuDK3_xxQZoVjxp2ZFNsHPnb&s=JntIuAUv6IrRBlS92bo8iPsQ66IVHHPouJ4S82GCNyI&
>e=>`_.
>> +- Support reading PMU events on ARM64 and x86-64 (Intel)
>>
>> How to add a tracepoint?
>> ------------------------
>> @@ -139,6 +140,37 @@ the user must use ``RTE_TRACE_POINT_FP`` instead of ``RTE_TRACE_POINT``.
>> ``RTE_TRACE_POINT_FP`` is compiled out by default and it can be
>> enabled using the ``enable_trace_fp`` option for meson build.
>>
>> +PMU tracepoint
>> +--------------
>> +
>> +Performance monitoring unit (PMU) event values can be read from
>> +hardware registers using predefined ``rte_pmu_read`` tracepoint.
>> +
>> +Tracing is enabled via ``--trace`` EAL option by passing both
>> +expression matching PMU tracepoint name i.e ``lib.eal.pmu.read`` and
>> +expression ``e=ev1[,ev2,...]`` matching particular events::
>> +
>> + --trace='.*pmu.read\|e=cpu_cycles,l1d_cache'
>> +
>> +Event names are available under
>> +``/sys/bus/event_source/devices/PMU/events``
>> +directory, where ``PMU`` is a placeholder for either a ``cpu`` or a
>> +directory containing ``cpus``.
>> +
>> +In contrary to other tracepoints this does not need any extra
>> +variables added to source files. Instead, caller passes index which
>> +follows the order of events specified via ``--trace`` parameter. In
>> +the following example index ``0`` corresponds to ``cpu_cyclces`` while index ``1`` corresponds
>to ``l1d_cache``.
>> +
>> +.. code-block:: c
>> +
>> + ...
>> + rte_eal_trace_pmu_read(0);
>> + rte_eal_trace_pmu_read(1);
>> + ...
>> +
>> +PMU tracing support must be explicitly enabled using the
>> +``enable_trace_fp`` option for meson build.
>> +
>> Event record mode
>> -----------------
>>
>> diff --git a/lib/eal/common/eal_common_trace.c
>> b/lib/eal/common/eal_common_trace.c
>> index 918f49bf4f..9be8724ec4 100644
>> --- a/lib/eal/common/eal_common_trace.c
>> +++ b/lib/eal/common/eal_common_trace.c
>> @@ -72,8 +72,10 @@ eal_trace_init(void)
>> goto free_meta;
>>
>> /* Apply global configurations */
>> - STAILQ_FOREACH(arg, &trace.args, next)
>> + STAILQ_FOREACH(arg, &trace.args, next) {
>> trace_args_apply(arg->val);
>> + trace_pmu_args_apply(arg->val);
>> + }
>>
>> rte_trace_mode_set(trace.mode);
>>
>> @@ -89,6 +91,7 @@ eal_trace_init(void) void
>> eal_trace_fini(void)
>> {
>> + trace_pmu_args_free();
>> trace_mem_free();
>> trace_metadata_destroy();
>> eal_trace_args_free();
>> diff --git a/lib/eal/common/eal_common_trace_pmu.c
>> b/lib/eal/common/eal_common_trace_pmu.c
>> new file mode 100644
>> index 0000000000..b3ab41e8a2
>> --- /dev/null
>> +++ b/lib/eal/common/eal_common_trace_pmu.c
>> @@ -0,0 +1,38 @@
>> +/* SPDX-License-Identifier: BSD-3-Clause
>> + * Copyright(C) 2024 Marvell International Ltd.
>> + */
>> +
>> +#include <rte_common.h>
>> +
>> +#include "eal_trace.h"
>> +
>> +#ifdef RTE_LIB_PMU
>> +
>> +#include <rte_pmu.h>
>> +
>> +void
>> +trace_pmu_args_apply(const char *arg) {
>> + static bool once;
>> +
>> + if (!once) {
>> + if (rte_pmu_init())
>> + return;
>> + once = true;
>> + }
>> +
>> + rte_pmu_add_events_by_pattern(arg);
>> +}
>> +
>> +void
>> +trace_pmu_args_free(void)
>> +{
>> + rte_pmu_fini();
>> +}
>> +
>> +#else /* !RTE_LIB_PMU */
>> +
>> +void trace_pmu_args_apply(const char *arg __rte_unused) { return; }
>> +void trace_pmu_args_free(void) { return; }
>> +
>> +#endif /* RTE_LIB_PMU */
>> diff --git a/lib/eal/common/eal_common_trace_points.c
>> b/lib/eal/common/eal_common_trace_points.c
>> index 0f1240ea3a..c99eab92f4 100644
>> --- a/lib/eal/common/eal_common_trace_points.c
>> +++ b/lib/eal/common/eal_common_trace_points.c
>> @@ -100,3 +100,8 @@ RTE_TRACE_POINT_REGISTER(rte_eal_trace_intr_enable,
>> lib.eal.intr.enable)
>> RTE_TRACE_POINT_REGISTER(rte_eal_trace_intr_disable,
>> lib.eal.intr.disable)
>> +
>> +#ifdef RTE_LIB_PMU
>> +RTE_TRACE_POINT_REGISTER(rte_eal_trace_pmu_read,
>> + lib.eal.pmu.read)
>> +#endif
>> diff --git a/lib/eal/common/eal_trace.h b/lib/eal/common/eal_trace.h
>> index 55262677e0..58fa43472a 100644
>> --- a/lib/eal/common/eal_trace.h
>> +++ b/lib/eal/common/eal_trace.h
>> @@ -104,6 +104,10 @@ int trace_epoch_time_save(void); void
>> trace_mem_free(void); void trace_mem_per_thread_free(void);
>>
>> +/* PMU wrappers */
>> +void trace_pmu_args_apply(const char *arg); void
>> +trace_pmu_args_free(void);
>> +
>> /* EAL interface */
>> int eal_trace_init(void);
>> void eal_trace_fini(void);
>> diff --git a/lib/eal/common/meson.build b/lib/eal/common/meson.build
>> index c1bbf26654..59d5b15708 100644
>> --- a/lib/eal/common/meson.build
>> +++ b/lib/eal/common/meson.build
>> @@ -27,6 +27,7 @@ sources += files(
>> 'eal_common_tailqs.c',
>> 'eal_common_thread.c',
>> 'eal_common_timer.c',
>> + 'eal_common_trace_pmu.c',
>> 'eal_common_trace_points.c',
>> 'eal_common_uuid.c',
>> 'malloc_elem.c',
>> diff --git a/lib/eal/include/rte_eal_trace.h
>> b/lib/eal/include/rte_eal_trace.h index 9ad2112801..9c78f63ff5 100644
>> --- a/lib/eal/include/rte_eal_trace.h
>> +++ b/lib/eal/include/rte_eal_trace.h
>> @@ -127,6 +127,17 @@ RTE_TRACE_POINT(
>>
>> #define RTE_EAL_TRACE_GENERIC_FUNC
>> rte_eal_trace_generic_func(__func__)
>>
>> +#ifdef RTE_LIB_PMU
>> +#include <rte_pmu.h>
>> +
>> +RTE_TRACE_POINT_FP(
>> + rte_eal_trace_pmu_read,
>> + RTE_TRACE_POINT_ARGS(unsigned int index),
>> + uint64_t val = rte_pmu_read(index);
>> + rte_trace_point_emit_u64(val);
>> +)
>> +#endif
>> +
>> #ifdef __cplusplus
>> }
>> #endif
>> diff --git a/lib/eal/version.map b/lib/eal/version.map index
>> f493cd1ca7..3dc147f848 100644
>> --- a/lib/eal/version.map
>> +++ b/lib/eal/version.map
>> @@ -399,6 +399,7 @@ EXPERIMENTAL {
>>
>> # added in 24.11
>> rte_bitset_to_str;
>> + __rte_eal_trace_pmu_read; # WINDOWS_NO_EXPORT
>> };
>>
>> INTERNAL {
>> diff --git a/lib/pmu/rte_pmu.c b/lib/pmu/rte_pmu.c index
>> dd57961627..b65f08c75b 100644
>> --- a/lib/pmu/rte_pmu.c
>> +++ b/lib/pmu/rte_pmu.c
>> @@ -412,12 +412,75 @@ rte_pmu_add_event(const char *name)
>> return event->index;
>> }
>>
>> +static int
>> +add_events(const char *pattern)
>> +{
>> + char *token, *copy;
>> + int ret = 0;
>> +
>> + copy = strdup(pattern);
>> + if (copy == NULL)
>> + return -ENOMEM;
>> +
>> + token = strtok(copy, ",");
>> + while (token) {
>> + ret = rte_pmu_add_event(token);
>> + if (ret < 0)
>> + break;
>> +
>> + token = strtok(NULL, ",");
>> + }
>> +
>> + free(copy);
>> +
>> + return ret >= 0 ? 0 : ret;
>> +}
>> +
>> +int
>> +rte_pmu_add_events_by_pattern(const char *pattern) {
>> + regmatch_t rmatch;
>> + char buf[BUFSIZ];
>> + unsigned int num;
>> + regex_t reg;
>> + int ret;
>> +
>> + /* events are matched against occurrences of e=ev1[,ev2,..] pattern */
>> + ret = regcomp(®, "e=([_[:alnum:]-],?)+", REG_EXTENDED);
>> + if (ret) {
>> + PMU_LOG(ERR, "Failed to compile event matching regexp");
>> + return -EINVAL;
>> + }
>> +
>> + for (;;) {
>> + if (regexec(®, pattern, 1, &rmatch, 0))
>> + break;
>> +
>> + num = rmatch.rm_eo - rmatch.rm_so;
>> + if (num > sizeof(buf))
>> + num = sizeof(buf);
>> +
>> + /* skip e= pattern prefix */
>> + memcpy(buf, pattern + rmatch.rm_so + 2, num - 2);
>> + buf[num - 2] = '\0';
>> + ret = add_events(buf);
>> + if (ret)
>> + break;
>> +
>> + pattern += rmatch.rm_eo;
>> + }
>> +
>> + regfree(®);
>> +
>> + return ret;
>> +}
>> +
>> int
>> rte_pmu_init(void)
>> {
>> int ret;
>>
>> - if (rte_pmu.initialized)
>> + if (rte_pmu.initialized && ++rte_pmu.initialized)
>
>Stupid q, why not:
>if (rte_pmu.initialized++ > 0) return 0?
>
If you call rte_pmu_init() and it fails, then rte_pmu.initialized stays at 1. It means that libpmu is initialized
but obviously that's not the case. On the other hand 1 means that there's one user, since this variable serves
both as a flag and reference counter, which is true in fact. So only half of the story is true but we want the
whole story to be true.
Besides, if first call fails then second one will return early hence caller won’t be able to initialize libpmu but this time due to a different reason.
And last thing, that expression resembles one used in rte_pmu_fini().
>Also increment/decrement counter implies that init()/fini() can be called multiple times, correct?
>If so, there is still an implicit assumption that it always will happen in a sequential manner?
>
Yes, that should happen in sequential manner. Frankly, that counter should stay at 1 for the most of the time.
The only exception is when you configure DPDK with -Denable_trace_fp=true and run functional test (pmu_autotest).
Then that counter jumps to 2 during test and gets pulled down to 1 at the end.
>> return 0;
>>
>> ret = scan_pmus();
>> @@ -450,7 +513,7 @@ rte_pmu_fini(void)
>> struct rte_pmu_event_group *group;
>> unsigned int i;
>>
>> - if (!rte_pmu.initialized)
>> + if (!rte_pmu.initialized || --rte_pmu.initialized)
>> return;
>>
>> RTE_TAILQ_FOREACH_SAFE(event, &rte_pmu.event_list, next, tmp_event)
>> { diff --git a/lib/pmu/rte_pmu.h b/lib/pmu/rte_pmu.h index
>> 85f9127911..df571f0a2f 100644
>> --- a/lib/pmu/rte_pmu.h
>> +++ b/lib/pmu/rte_pmu.h
>> @@ -135,7 +135,7 @@ __rte_pmu_enable_group(struct rte_pmu_event_group *group);
>> * @warning
>> * @b EXPERIMENTAL: this API may change without prior notice
>> *
>> - * Initialize PMU library.
>> + * Initialize PMU library. It's safe to call it multiple times.
>> *
>> * @return
>> * 0 in case of success, negative value otherwise.
>> @@ -148,7 +148,9 @@ rte_pmu_init(void);
>> * @warning
>> * @b EXPERIMENTAL: this API may change without prior notice
>> *
>> - * Finalize PMU library.
>> + * Finalize PMU library. Number of calls must match number
>> + * of times rte_pmu_init() was called. Otherwise memory
>> + * won't be freed properly.
>> */
>> __rte_experimental
>> void
>> @@ -173,7 +175,23 @@ rte_pmu_add_event(const char *name);
>> * @warning
>> * @b EXPERIMENTAL: this API may change without prior notice
>> *
>> - * Read hardware counter configured to count occurrences of an event.
>> + * Add events matching pattern to the group of enabled events.
>> + *
>> + * @param pattern
>> + * Pattern e=ev1[,ev2,...] matching events, where evX is a placeholder for an event listed
>under
>> + * /sys/bus/event_source/devices/<pmu>/events.
>> + */
>> +__rte_experimental
>> +int
>> +rte_pmu_add_events_by_pattern(const char *pattern);
>> +
>> +/**
>> + * @warning
>> + * @b EXPERIMENTAL: this API may change without prior notice
>> + *
>> + * Read hardware counter configured to count occurrences of an event.
>> +This is called by an lcore
>> + * binded exclusively to particular cpu and may not work as expected if gets migrated elsewhere.
>> + * Reason being event group is pinned hence not supposed to be multiplexed with any other
>events.
>> *
>> * @param index
>> * Index of an event to be read.
>> diff --git a/lib/pmu/version.map b/lib/pmu/version.map index
>> d0f907d13d..f14d498b54 100644
>> --- a/lib/pmu/version.map
>> +++ b/lib/pmu/version.map
>> @@ -5,6 +5,7 @@ EXPERIMENTAL {
>> __rte_pmu_enable_group;
>> rte_pmu;
>> rte_pmu_add_event;
>> + rte_pmu_add_events_by_pattern;
>> rte_pmu_fini;
>> rte_pmu_init;
>> rte_pmu_read;
>> --
>> 2.34.1
next prev parent reply other threads:[~2024-11-08 11:44 UTC|newest]
Thread overview: 187+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-11 9:43 [PATCH 0/4] add support for self monitoring Tomasz Duszynski
2022-11-11 9:43 ` [PATCH 1/4] eal: add generic support for reading PMU events Tomasz Duszynski
2022-12-15 8:33 ` Mattias Rönnblom
2022-11-11 9:43 ` [PATCH 2/4] eal/arm: support reading ARM PMU events in runtime Tomasz Duszynski
2022-11-11 9:43 ` [PATCH 3/4] eal/x86: support reading Intel " Tomasz Duszynski
2022-11-11 9:43 ` [PATCH 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2022-11-21 12:11 ` [PATCH v2 0/4] add support for self monitoring Tomasz Duszynski
2022-11-21 12:11 ` [PATCH v2 1/4] eal: add generic support for reading PMU events Tomasz Duszynski
2022-11-21 12:11 ` [PATCH v2 2/4] eal/arm: support reading ARM PMU events in runtime Tomasz Duszynski
2022-11-21 12:11 ` [PATCH v2 3/4] eal/x86: support reading Intel " Tomasz Duszynski
2022-11-21 12:11 ` [PATCH v2 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2022-11-29 9:28 ` [PATCH v3 0/4] add support for self monitoring Tomasz Duszynski
2022-11-29 9:28 ` [PATCH v3 1/4] eal: add generic support for reading PMU events Tomasz Duszynski
2022-11-30 8:32 ` zhoumin
2022-12-13 8:05 ` [EXT] " Tomasz Duszynski
2022-11-29 9:28 ` [PATCH v3 2/4] eal/arm: support reading ARM PMU events in runtime Tomasz Duszynski
2022-11-29 9:28 ` [PATCH v3 3/4] eal/x86: support reading Intel " Tomasz Duszynski
2022-11-29 9:28 ` [PATCH v3 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2022-11-29 10:42 ` [PATCH v3 0/4] add support for self monitoring Morten Brørup
2022-12-13 8:23 ` Tomasz Duszynski
2022-12-13 10:43 ` [PATCH v4 " Tomasz Duszynski
2022-12-13 10:43 ` [PATCH v4 1/4] eal: add generic support for reading PMU events Tomasz Duszynski
2022-12-13 11:52 ` Morten Brørup
2022-12-14 9:38 ` Tomasz Duszynski
2022-12-14 10:41 ` Morten Brørup
2022-12-15 8:22 ` Morten Brørup
2022-12-16 7:33 ` Morten Brørup
2023-01-05 21:14 ` Tomasz Duszynski
2023-01-05 22:07 ` Morten Brørup
2023-01-08 15:41 ` Tomasz Duszynski
2023-01-08 16:30 ` Morten Brørup
2022-12-15 8:46 ` Mattias Rönnblom
2023-01-04 15:47 ` Tomasz Duszynski
2023-01-09 7:37 ` Ruifeng Wang
2023-01-09 15:40 ` Tomasz Duszynski
2022-12-13 10:43 ` [PATCH v4 2/4] eal/arm: support reading ARM PMU events in runtime Tomasz Duszynski
2022-12-13 10:43 ` [PATCH v4 3/4] eal/x86: support reading Intel " Tomasz Duszynski
2022-12-13 10:43 ` [PATCH v4 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-01-10 23:46 ` [PATCH v5 0/4] add support for self monitoring Tomasz Duszynski
2023-01-10 23:46 ` [PATCH v5 1/4] eal: add generic support for reading PMU events Tomasz Duszynski
2023-01-11 9:05 ` Morten Brørup
2023-01-11 16:20 ` Tomasz Duszynski
2023-01-11 16:54 ` Morten Brørup
2023-01-10 23:46 ` [PATCH v5 2/4] eal/arm: support reading ARM PMU events in runtime Tomasz Duszynski
2023-01-10 23:46 ` [PATCH v5 3/4] eal/x86: support reading Intel " Tomasz Duszynski
2023-01-10 23:46 ` [PATCH v5 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-01-11 0:32 ` [PATCH v5 0/4] add support for self monitoring Tyler Retzlaff
2023-01-11 9:31 ` Morten Brørup
2023-01-11 14:24 ` Tomasz Duszynski
2023-01-11 14:32 ` Bruce Richardson
2023-01-11 9:39 ` [EXT] " Tomasz Duszynski
2023-01-11 21:05 ` Tyler Retzlaff
2023-01-13 7:44 ` Tomasz Duszynski
2023-01-13 19:22 ` Tyler Retzlaff
2023-01-14 9:53 ` Morten Brørup
2023-01-19 23:39 ` [PATCH v6 " Tomasz Duszynski
2023-01-19 23:39 ` [PATCH v6 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2023-01-20 9:46 ` Morten Brørup
2023-01-26 9:40 ` Tomasz Duszynski
2023-01-26 12:29 ` Morten Brørup
2023-01-26 12:59 ` Bruce Richardson
2023-01-26 15:28 ` [EXT] " Tomasz Duszynski
2023-02-02 14:27 ` Morten Brørup
2023-01-26 15:17 ` Tomasz Duszynski
2023-01-20 18:29 ` Tyler Retzlaff
2023-01-26 9:05 ` [EXT] " Tomasz Duszynski
2023-01-19 23:39 ` [PATCH v6 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2023-01-19 23:39 ` [PATCH v6 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2023-01-19 23:39 ` [PATCH v6 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-02-01 13:17 ` [PATCH v7 0/4] add support for self monitoring Tomasz Duszynski
2023-02-01 13:17 ` [PATCH v7 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2023-02-01 13:17 ` [PATCH v7 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2023-02-01 13:17 ` [PATCH v7 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2023-02-01 13:17 ` [PATCH v7 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-02-01 13:51 ` [PATCH v7 0/4] add support for self monitoring Morten Brørup
2023-02-02 7:54 ` Tomasz Duszynski
2023-02-02 9:43 ` [PATCH v8 " Tomasz Duszynski
2023-02-02 9:43 ` [PATCH v8 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2023-02-02 10:32 ` Ruifeng Wang
2023-02-02 9:43 ` [PATCH v8 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2023-02-02 9:43 ` [PATCH v8 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2023-02-02 9:43 ` [PATCH v8 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-02-02 12:49 ` [PATCH v9 0/4] add support for self monitoring Tomasz Duszynski
2023-02-02 12:49 ` [PATCH v9 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2023-02-06 11:02 ` David Marchand
2023-02-09 11:09 ` [EXT] " Tomasz Duszynski
2023-02-02 12:49 ` [PATCH v9 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2023-02-02 12:49 ` [PATCH v9 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2023-02-02 12:49 ` [PATCH v9 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-02-13 11:31 ` [PATCH v10 0/4] add support for self monitoring Tomasz Duszynski
2023-02-13 11:31 ` [PATCH v10 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2023-02-16 7:39 ` Ruifeng Wang
2023-02-16 14:44 ` Tomasz Duszynski
2023-02-13 11:31 ` [PATCH v10 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2023-02-16 7:41 ` Ruifeng Wang
2023-02-13 11:31 ` [PATCH v10 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2023-02-13 11:31 ` [PATCH v10 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-02-16 17:54 ` [PATCH v11 0/4] add support for self monitoring Tomasz Duszynski
2023-02-16 17:54 ` [PATCH v11 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2023-02-16 23:50 ` Konstantin Ananyev
2023-02-17 8:49 ` [EXT] " Tomasz Duszynski
2023-02-17 10:14 ` Konstantin Ananyev
2023-02-19 14:23 ` Tomasz Duszynski
2023-02-20 14:31 ` Konstantin Ananyev
2023-02-20 16:59 ` Tomasz Duszynski
2023-02-20 17:21 ` Konstantin Ananyev
2023-02-20 20:42 ` Tomasz Duszynski
2023-02-21 0:48 ` Konstantin Ananyev
2023-02-27 8:12 ` Tomasz Duszynski
2023-02-28 11:35 ` Konstantin Ananyev
2023-02-21 12:15 ` Konstantin Ananyev
2023-02-21 2:17 ` Konstantin Ananyev
2023-02-27 9:19 ` [EXT] " Tomasz Duszynski
2023-02-27 20:53 ` Konstantin Ananyev
2023-02-28 8:25 ` Morten Brørup
2023-02-28 12:04 ` Konstantin Ananyev
2023-02-28 13:15 ` Morten Brørup
2023-02-28 16:22 ` Morten Brørup
2023-03-05 16:30 ` Konstantin Ananyev
2023-02-28 9:57 ` Tomasz Duszynski
2023-02-28 11:58 ` Konstantin Ananyev
2023-02-16 17:55 ` [PATCH v11 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2023-02-16 17:55 ` [PATCH v11 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2023-02-16 17:55 ` [PATCH v11 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2023-02-16 18:03 ` [PATCH v11 0/4] add support for self monitoring Ruifeng Wang
2023-05-04 8:02 ` David Marchand
2023-07-31 12:33 ` Thomas Monjalon
2023-08-07 8:11 ` [EXT] " Tomasz Duszynski
2023-09-21 8:26 ` David Marchand
2024-09-02 14:48 ` Morten Brørup
2024-09-05 3:49 ` Tomasz Duszynski
2024-09-27 22:06 ` [PATCH v12 " Tomasz Duszynski
2024-09-27 22:06 ` [PATCH v12 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2024-10-06 14:30 ` Morten Brørup
2024-10-09 9:17 ` Tomasz Duszynski
2024-10-07 6:59 ` Jerin Jacob
2024-10-09 7:50 ` [EXTERNAL] " Tomasz Duszynski
2024-09-27 22:06 ` [PATCH v12 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2024-09-27 22:06 ` [PATCH v12 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2024-09-27 22:06 ` [PATCH v12 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2024-10-04 11:00 ` [PATCH v12 0/4] add support for self monitoring David Marchand
2024-10-09 12:45 ` [EXTERNAL] " Tomasz Duszynski
2024-10-09 11:23 ` [PATCH v13 " Tomasz Duszynski
2024-10-09 11:23 ` [PATCH v13 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2024-10-09 11:23 ` [PATCH v13 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2024-10-09 11:23 ` [PATCH v13 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2024-10-09 11:23 ` [PATCH v13 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2024-10-09 12:50 ` Morten Brørup
2024-10-09 17:56 ` Stephen Hemminger
2024-10-10 7:24 ` [EXTERNAL] " Tomasz Duszynski
2024-10-10 12:48 ` Morten Brørup
2024-10-11 9:49 ` [PATCH v14 0/4] add support for self monitoring Tomasz Duszynski
2024-10-11 9:49 ` [PATCH v14 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2024-10-11 11:56 ` Konstantin Ananyev
2024-10-11 14:19 ` Stephen Hemminger
2024-10-15 9:14 ` [EXTERNAL] " Tomasz Duszynski
2024-10-15 9:08 ` Tomasz Duszynski
2024-10-16 8:49 ` Konstantin Ananyev
2024-10-17 7:11 ` Tomasz Duszynski
2024-10-11 9:49 ` [PATCH v14 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2024-10-11 9:49 ` [PATCH v14 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2024-10-11 9:49 ` [PATCH v14 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2024-10-11 13:29 ` David Marchand
2024-10-15 9:18 ` [EXTERNAL] " Tomasz Duszynski
2024-10-25 8:54 ` [PATCH v15 0/4] add support for self monitoring Tomasz Duszynski
2024-10-25 8:54 ` [PATCH v15 1/4] lib: add generic support for reading PMU events Tomasz Duszynski
2024-11-05 10:58 ` Konstantin Ananyev
2024-10-25 8:54 ` [PATCH v15 2/4] pmu: support reading ARM PMU events in runtime Tomasz Duszynski
2024-10-25 8:54 ` [PATCH v15 3/4] pmu: support reading Intel x86_64 " Tomasz Duszynski
2024-10-25 8:54 ` [PATCH v15 4/4] eal: add PMU support to tracing library Tomasz Duszynski
2024-10-25 11:02 ` Jerin Jacob
2024-10-28 10:32 ` [EXTERNAL] " Tomasz Duszynski
2024-11-05 7:41 ` Morten Brørup
2024-11-08 10:36 ` Tomasz Duszynski
2024-11-05 11:04 ` Konstantin Ananyev
2024-11-08 11:44 ` Tomasz Duszynski [this message]
2024-11-05 4:04 ` [PATCH v15 0/4] add support for self monitoring Tomasz Duszynski
2023-01-25 10:33 ` [PATCH 0/2] add platform bus Tomasz Duszynski
2023-01-25 10:33 ` [PATCH 1/2] lib: add helper to read strings from sysfs files Tomasz Duszynski
2023-01-25 10:39 ` Thomas Monjalon
2023-01-25 16:16 ` Tyler Retzlaff
2023-01-26 8:30 ` [EXT] " Tomasz Duszynski
2023-01-26 17:21 ` Tyler Retzlaff
2023-01-26 8:35 ` Tomasz Duszynski
2023-01-25 10:33 ` [PATCH 2/2] bus: add platform bus Tomasz Duszynski
2023-01-25 10:41 ` [PATCH 0/2] " Tomasz Duszynski
2023-02-16 20:56 ` [PATCH v5 0/4] add support for self monitoring Liang Ma
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=CH0PR18MB4353708DF5054E565D205F7BD25D2@CH0PR18MB4353.namprd18.prod.outlook.com \
--to=tduszynski@marvell.com \
--cc=Ruifeng.Wang@arm.com \
--cc=bruce.richardson@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=jerinj@marvell.com \
--cc=konstantin.ananyev@huawei.com \
--cc=konstantin.v.ananyev@yandex.ru \
--cc=mattias.ronnblom@ericsson.com \
--cc=mb@smartsharesystems.com \
--cc=roretzla@linux.microsoft.com \
--cc=skori@marvell.com \
--cc=stephen@networkplumber.org \
--cc=thomas@monjalon.net \
--cc=zhoumin@loongson.cn \
/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;
as well as URLs for NNTP newsgroup(s).