Re: [PATCH] perf top: Use evsel's cpus to replace user_requested_cpus

Liang, Kan
2023-12-15T18:53:16Z

On 2023-12-15 1:26 p.m., Arnaldo Carvalho de Melo wrote:
> Em Fri, Dec 15, 2023 at 12:59:22PM -0500, Liang, Kan escreveu:
>> On 2023-12-15 10:36 a.m., Arnaldo Carvalho de Melo wrote:
>>
>> #perf report --header-only | grep event
>> # event : name = cpu_atom/cycles:P/, , id = { 7360, 7361, 7362, 7363,
>> 7364, 7365, 7366, 7367, 7368, 7369 }, type = 0 (PERF_TYPE_HARDWARE),
>> size = 136, config = 0xa00000000, { sample_period, sample_freq } = 3000,
>> sample_type = IP|TID|TIME|PERIOD|IDENTIFIER, read_format = ID|LOST,
>> disabled = 1, inherit = 1, freq = 1, enable_on_exec = 1, precise_ip = 3,
>> sample_id_all = 1
>> # event : name = cpu_core/cycles:P/, , id = { 7370, 7371, 7372, 7373,
>> 7374, 7375, 7376, 7377, 7378, 7379, 7380, 7381 }, type = 0
>> (PERF_TYPE_HARDWARE), size = 136, config = 0x400000000, { sample_period,
>> sample_freq } = 3000, sample_type = IP|TID|TIME|PERIOD|IDENTIFIER,
>> read_format = ID|LOST, disabled = 1, inherit = 1, freq = 1,
>> enable_on_exec = 1, precise_ip = 3, sample_id_all = 1
>>
>> I think we should move all the modifiers after the "/". The below patch
>> can fix it.
>>
>> https://lore.kernel.org/lkml/20231215175455.1300261-1-kan.liang@linux.intel.com/
>
> Right, I implemented it in a slightly different way, but end result
> should be the same:
>
> From 5dd1b7ab1ba69ebb8e070923dcc214b7b489ffc2 Mon Sep 17 00:00:00 2001
> From: Arnaldo Carvalho de Melo <acme@redhat.com>
> Date: Fri, 15 Dec 2023 15:23:30 -0300
> Subject: [PATCH 1/1] perf evlist: Move event attributes to after the / when
> uniquefying using the PMU name
>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Looks good to me and verified.

Tested-by: Kan Liang <kan.liang@linux.intel.com>

Thanks,
Kan
> ---
> tools/perf/util/evlist.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index 6f0892803c2249af..3a9505c99490b372 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -2522,7 +2522,7 @@ void evlist__warn_user_requested_cpus(struct evlist *evlist, const char *cpu_lis
> void evlist__uniquify_name(struct evlist *evlist)
> {
> struct evsel *pos;
> - char *new_name;
> + char *new_name, *attributes;
> int ret;
>
> if (perf_pmus__num_core_pmus() == 1)
> @@ -2535,8 +2535,16 @@ void evlist__uniquify_name(struct evlist *evlist)
> if (strchr(pos->name, '/'))
> continue;
>
> - ret = asprintf(&new_name, "%s/%s/",
> - pos->pmu_name, pos->name);
> + attributes = strchr(pos->name, ':');
> + if (attributes)
> + *attributes = '\0';
> +
> + ret = asprintf(&new_name, "%s/%s/%s",
> + pos->pmu_name, pos->name, attributes ? attributes + 1 : "");
> +
> + if (attributes)
> + *attributes = ':';
> +
> if (ret) {
> free(pos->name);
> pos->name = new_name;