diff mbox series

perf tools: Store ids for events with their own cpus perf_event__synthesize_event_update_cpus

Message ID 20181003212052.GA32371@krava (mailing list archive)
State New, archived
Headers show
Series perf tools: Store ids for events with their own cpus perf_event__synthesize_event_update_cpus | expand

Commit Message

Jiri Olsa Oct. 3, 2018, 9:20 p.m. UTC
On Wed, Oct 03, 2018 at 04:16:27PM +0200, Jiri Olsa wrote:
> On Wed, Oct 03, 2018 at 03:08:10PM +0100, John Garry wrote:
> > On 03/10/2018 12:36, Jiri Olsa wrote:
> > > On Tue, Oct 02, 2018 at 01:16:21PM +0200, Jiri Olsa wrote:
> > > > On Tue, Oct 02, 2018 at 11:41:36AM +0100, John Garry wrote:
> > > > 
> > > > SNIP
> > > > 
> > > > > > 
> > > > > > 
> > > > > > ---
> > > > > > diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
> > > > > > index 1ec1d9bc2d63..fb2a0dab3978 100644
> > > > > > --- a/tools/perf/util/header.c
> > > > > > +++ b/tools/perf/util/header.c
> > > > > > @@ -29,6 +29,7 @@
> > > > > >  #include "symbol.h"
> > > > > >  #include "debug.h"
> > > > > >  #include "cpumap.h"
> > > > > > +#include "thread_map.h"
> > > > > >  #include "pmu.h"
> > > > > >  #include "vdso.h"
> > > > > >  #include "strbuf.h"
> > > > > > @@ -3579,6 +3580,11 @@ perf_event__synthesize_event_update_cpus(struct perf_tool *tool,
> > > > > > 	if (!evsel->own_cpus)
> > > > > > 		return 0;
> > > > > > 
> > > > > > +	if (!evsel->id ||
> > > > > 
> > > > > for my test, evsel->id is NULL
> > > > > 
> > > > > > +	    perf_evsel__alloc_id(evsel, cpu_map__nr(evsel->cpus),
> > > > > > +				 thread_map__nr(evsel->threads)))
> > > > > 
> > > > > and then this function is not called as we return immediately. So did you
> > > > > really want this:
> > > > > 
> > > > > if (!evsel->id && perf_evsel__alloc_id(...))
> > > > > 	return -ENOMEM;
> > > > 
> > > > ugh.. yes ;-) thanks for the fix.. I'll double
> > > > check the logic and post the patch this week
> > > 
> > > actualy, we also need to populate those ids ;-)
> > > so calling perf_evsel__store_ids instead..
> > > attaching the full patch
> > > 
> > > thanks,
> > > jirka
> > > 
> > 
> > Hi Jirka,
> > 
> > Can you please double-check your new patch, as I'm getting this now:
> > root@localhost:~# ./perf_debug record -e armv8_pmuv3_0/br_mis_pred/ sleep 1
> > [ perf record: Woken up 1 times to write data ]
> > [ perf record: Captured and wrote 0.001 MB perf.data (6 samples) ]
> > root@localhost:~# ./perf_debug report
> > 0xe8 [0]: failed to process type: 461
> > Error:
> > failed to process sample
> > # To display the perf.data header info, please use --header/--header-only
> > option
> > #
> > root@localhost:~#
> 
> ok, I need to get a machine to test this.. but it looks like
> any sample-able events with cpumask are in arm :-\ will try
> to get some..

got an arm server and patch below works for me.. could you please test?

thanks,
jirka


---

John reported crash when recording on an event under
pmu with cpumask defined:

  root@localhost:~# ./perf_debug_ record -e armv8_pmuv3_0/br_mis_pred/ sleep 1
  perf: Segmentation fault
  Obtained 9 stack frames.
  ./perf_debug_() [0x4c5ef8]
  [0xffff82ba267c]
  ./perf_debug_() [0x4bc5a8]
  ./perf_debug_() [0x419550]
  ./perf_debug_() [0x41a928]
  ./perf_debug_() [0x472f58]
  ./perf_debug_() [0x473210]
  ./perf_debug_() [0x4070f4]
  /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0xe0) [0xffff8294c8a0]
  Segmentation fault (core dumped)

We synthesize an update event that needs to touch the evsel
id array, which is not defined at that time. Fixing this by
forcing the id allocation for events with theeir own cpus.

Reported-by: John Garry <john.garry@huawei.com>
Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/builtin-report.c | 1 +
 tools/perf/util/evsel.c     | 3 +++
 2 files changed, 4 insertions(+)

Comments

John Garry Oct. 4, 2018, 9:20 a.m. UTC | #1
>>> Hi Jirka,
>>>
>>> Can you please double-check your new patch, as I'm getting this now:
>>> root@localhost:~# ./perf_debug record -e armv8_pmuv3_0/br_mis_pred/ sleep 1
>>> [ perf record: Woken up 1 times to write data ]
>>> [ perf record: Captured and wrote 0.001 MB perf.data (6 samples) ]
>>> root@localhost:~# ./perf_debug report
>>> 0xe8 [0]: failed to process type: 461
>>> Error:
>>> failed to process sample
>>> # To display the perf.data header info, please use --header/--header-only
>>> option
>>> #
>>> root@localhost:~#
>>
>> ok, I need to get a machine to test this.. but it looks like
>> any sample-able events with cpumask are in arm :-\ will try
>> to get some..
>
> got an arm server and patch below works for me.. could you please test?
>

Cool, so this works ok:
root@localhost:~# ./perf_debug record -e armv8_pmuv3_0/br_mis_pred/ sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.002 MB perf.data (6 samples) ]
root@localhost:~# ./perf_debug report
# To display the perf.data header info, please use 
--header/--header-only option
#
#
# Total Lost Samples: 0
#
# Samples: 6  of event 'armv8_pmuv3_0/br_mis_pred/'
# Event count (approx.): 3369
#
# Overhead  Command  Shared Object      Symbol
# ........  .......  .................  ...................
#
     94.81%  sleep    [kernel.kallsyms]  [k] memcmp
      4.87%  sleep    [kernel.kallsyms]  [k] tlb_flush_mmu
      0.33%  perf_de  [kernel.kallsyms]  [k] perf_event_exec


#
# (Cannot load tips.txt file, please install perf!)
#
root@localhost:~#


> thanks,
> jirka
>
>
> ---
>
> John reported crash when recording on an event under
> pmu with cpumask defined:
>
>   root@localhost:~# ./perf_debug_ record -e armv8_pmuv3_0/br_mis_pred/ sleep 1
>   perf: Segmentation fault
>   Obtained 9 stack frames.
>   ./perf_debug_() [0x4c5ef8]
>   [0xffff82ba267c]
>   ./perf_debug_() [0x4bc5a8]
>   ./perf_debug_() [0x419550]
>   ./perf_debug_() [0x41a928]
>   ./perf_debug_() [0x472f58]
>   ./perf_debug_() [0x473210]
>   ./perf_debug_() [0x4070f4]
>   /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0xe0) [0xffff8294c8a0]
>   Segmentation fault (core dumped)
>
> We synthesize an update event that needs to touch the evsel
> id array, which is not defined at that time. Fixing this by
> forcing the id allocation for events with theeir own cpus.
>
> Reported-by: John Garry <john.garry@huawei.com>
> Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org

Tested-by: John Garry <john.garry@huawei.com>

In terms of adding to stable, LT v4.14 is not affected, but 4.18.x is.

Thanks,
John

> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  tools/perf/builtin-report.c | 1 +
>  tools/perf/util/evsel.c     | 3 +++
>  2 files changed, 4 insertions(+)
>
> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> index c0703979c51d..257c9c18cb7e 100644
> --- a/tools/perf/builtin-report.c
> +++ b/tools/perf/builtin-report.c
> @@ -980,6 +980,7 @@ int cmd_report(int argc, const char **argv)
>  			.id_index	 = perf_event__process_id_index,
>  			.auxtrace_info	 = perf_event__process_auxtrace_info,
>  			.auxtrace	 = perf_event__process_auxtrace,
> +			.event_update	 = perf_event__process_event_update,
>  			.feature	 = process_feature_event,
>  			.ordered_events	 = true,
>  			.ordering_requires_timestamps = true,
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index ac6cfb8b085e..7a0d5fbaf3c1 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -1088,6 +1088,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
>  		attr->exclude_user   = 1;
>  	}
>
> +	if (evsel->own_cpus)
> +		evsel->attr.read_format |= PERF_FORMAT_ID;
> +
>  	/*
>  	 * Apply event specific term settings,
>  	 * it overloads any global configuration.
>
Jiri Olsa Oct. 9, 2018, 10 a.m. UTC | #2
On Thu, Oct 04, 2018 at 10:20:39AM +0100, John Garry wrote:

SNIP

> > We synthesize an update event that needs to touch the evsel
> > id array, which is not defined at that time. Fixing this by
> > forcing the id allocation for events with theeir own cpus.
> > 
> > Reported-by: John Garry <john.garry@huawei.com>
> > Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org
> 
> Tested-by: John Garry <john.garry@huawei.com>
> 
> In terms of adding to stable, LT v4.14 is not affected, but 4.18.x is.
> 
> Thanks,
> John

Arnaldo, could you please pick up this one

thanks,
jirka

> 
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> >  tools/perf/builtin-report.c | 1 +
> >  tools/perf/util/evsel.c     | 3 +++
> >  2 files changed, 4 insertions(+)
> > 
> > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> > index c0703979c51d..257c9c18cb7e 100644
> > --- a/tools/perf/builtin-report.c
> > +++ b/tools/perf/builtin-report.c
> > @@ -980,6 +980,7 @@ int cmd_report(int argc, const char **argv)
> >  			.id_index	 = perf_event__process_id_index,
> >  			.auxtrace_info	 = perf_event__process_auxtrace_info,
> >  			.auxtrace	 = perf_event__process_auxtrace,
> > +			.event_update	 = perf_event__process_event_update,
> >  			.feature	 = process_feature_event,
> >  			.ordered_events	 = true,
> >  			.ordering_requires_timestamps = true,
> > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > index ac6cfb8b085e..7a0d5fbaf3c1 100644
> > --- a/tools/perf/util/evsel.c
> > +++ b/tools/perf/util/evsel.c
> > @@ -1088,6 +1088,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
> >  		attr->exclude_user   = 1;
> >  	}
> > 
> > +	if (evsel->own_cpus)
> > +		evsel->attr.read_format |= PERF_FORMAT_ID;
> > +
> >  	/*
> >  	 * Apply event specific term settings,
> >  	 * it overloads any global configuration.
> > 
> 
>
John Garry Oct. 12, 2018, 1:25 p.m. UTC | #3
On 09/10/2018 11:00, Jiri Olsa wrote:
> On Thu, Oct 04, 2018 at 10:20:39AM +0100, John Garry wrote:
>
> SNIP
>
>>> We synthesize an update event that needs to touch the evsel
>>> id array, which is not defined at that time. Fixing this by
>>> forcing the id allocation for events with theeir own cpus.

/s/theeir/their/

>>>
>>> Reported-by: John Garry <john.garry@huawei.com>
>>> Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org
>>
>> Tested-by: John Garry <john.garry@huawei.com>
>>
>> In terms of adding to stable, LT v4.14 is not affected, but 4.18.x is.
>>
>> Thanks,
>> John
>
> Arnaldo, could you please pick up this one
>

Just a friendly reminder on this patch.

How about re-send with an updated commit message also?

Thanks,
John

> thanks,
> jirka
>
>>
>>> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
>>> ---
>>>  tools/perf/builtin-report.c | 1 +
>>>  tools/perf/util/evsel.c     | 3 +++
>>>  2 files changed, 4 insertions(+)
>>>
>>> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
>>> index c0703979c51d..257c9c18cb7e 100644
>>> --- a/tools/perf/builtin-report.c
>>> +++ b/tools/perf/builtin-report.c
>>> @@ -980,6 +980,7 @@ int cmd_report(int argc, const char **argv)
>>>  			.id_index	 = perf_event__process_id_index,
>>>  			.auxtrace_info	 = perf_event__process_auxtrace_info,
>>>  			.auxtrace	 = perf_event__process_auxtrace,
>>> +			.event_update	 = perf_event__process_event_update,
>>>  			.feature	 = process_feature_event,
>>>  			.ordered_events	 = true,
>>>  			.ordering_requires_timestamps = true,
>>> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
>>> index ac6cfb8b085e..7a0d5fbaf3c1 100644
>>> --- a/tools/perf/util/evsel.c
>>> +++ b/tools/perf/util/evsel.c
>>> @@ -1088,6 +1088,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
>>>  		attr->exclude_user   = 1;
>>>  	}
>>>
>>> +	if (evsel->own_cpus)
>>> +		evsel->attr.read_format |= PERF_FORMAT_ID;
>>> +
>>>  	/*
>>>  	 * Apply event specific term settings,
>>>  	 * it overloads any global configuration.
>>>
>>
>>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
> .
>
Arnaldo Carvalho de Melo Oct. 15, 2018, 7:15 p.m. UTC | #4
Em Fri, Oct 12, 2018 at 02:25:49PM +0100, John Garry escreveu:
> On 09/10/2018 11:00, Jiri Olsa wrote:
> > On Thu, Oct 04, 2018 at 10:20:39AM +0100, John Garry wrote:
> > 
> > SNIP
> > 
> > > > We synthesize an update event that needs to touch the evsel
> > > > id array, which is not defined at that time. Fixing this by
> > > > forcing the id allocation for events with theeir own cpus.
> 
> /s/theeir/their/
> 
> > > > 
> > > > Reported-by: John Garry <john.garry@huawei.com>
> > > > Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org
> > > 
> > > Tested-by: John Garry <john.garry@huawei.com>
> > > 
> > > In terms of adding to stable, LT v4.14 is not affected, but 4.18.x is.
> > > 
> > > Thanks,
> > > John
> > 
> > Arnaldo, could you please pick up this one
> > 
> 
> Just a friendly reminder on this patch.
> 
> How about re-send with an updated commit message also?

I'll fix up the commit message and apply, thanks.

- Arnaldo
 
> Thanks,
> John
> 
> > thanks,
> > jirka
> > 
> > > 
> > > > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > > > ---
> > > >  tools/perf/builtin-report.c | 1 +
> > > >  tools/perf/util/evsel.c     | 3 +++
> > > >  2 files changed, 4 insertions(+)
> > > > 
> > > > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> > > > index c0703979c51d..257c9c18cb7e 100644
> > > > --- a/tools/perf/builtin-report.c
> > > > +++ b/tools/perf/builtin-report.c
> > > > @@ -980,6 +980,7 @@ int cmd_report(int argc, const char **argv)
> > > >  			.id_index	 = perf_event__process_id_index,
> > > >  			.auxtrace_info	 = perf_event__process_auxtrace_info,
> > > >  			.auxtrace	 = perf_event__process_auxtrace,
> > > > +			.event_update	 = perf_event__process_event_update,
> > > >  			.feature	 = process_feature_event,
> > > >  			.ordered_events	 = true,
> > > >  			.ordering_requires_timestamps = true,
> > > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > > > index ac6cfb8b085e..7a0d5fbaf3c1 100644
> > > > --- a/tools/perf/util/evsel.c
> > > > +++ b/tools/perf/util/evsel.c
> > > > @@ -1088,6 +1088,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
> > > >  		attr->exclude_user   = 1;
> > > >  	}
> > > > 
> > > > +	if (evsel->own_cpus)
> > > > +		evsel->attr.read_format |= PERF_FORMAT_ID;
> > > > +
> > > >  	/*
> > > >  	 * Apply event specific term settings,
> > > >  	 * it overloads any global configuration.
> > > > 
> > > 
> > > 
> > 
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> > 
> > .
> > 
>
John Garry Oct. 16, 2018, 9:10 a.m. UTC | #5
On 15/10/2018 20:15, Arnaldo Carvalho de Melo wrote:
> Em Fri, Oct 12, 2018 at 02:25:49PM +0100, John Garry escreveu:
>> On 09/10/2018 11:00, Jiri Olsa wrote:
>>> On Thu, Oct 04, 2018 at 10:20:39AM +0100, John Garry wrote:
>>>
>>> SNIP
>>>
>>>>> We synthesize an update event that needs to touch the evsel
>>>>> id array, which is not defined at that time. Fixing this by
>>>>> forcing the id allocation for events with theeir own cpus.
>>
>> /s/theeir/their/
>>
>>>>>
>>>>> Reported-by: John Garry <john.garry@huawei.com>
>>>>> Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org
>>>>
>>>> Tested-by: John Garry <john.garry@huawei.com>
>>>>
>>>> In terms of adding to stable, LT v4.14 is not affected, but 4.18.x is.
>>>>
>>>> Thanks,
>>>> John
>>>
>>> Arnaldo, could you please pick up this one
>>>
>>
>> Just a friendly reminder on this patch.
>>
>> How about re-send with an updated commit message also?
>
> I'll fix up the commit message and apply, thanks.
>

Much appreciated.

BTW, I think that we should add a fixes tag. But I'm not sure if this 
patch fixes the commit I bisected to earlier (bfd8f72c2778f5bd63d), or 
that same commit just exposed some latent bug.

Jirka, Andi, Do you know?

Thanks,
John

> - Arnaldo
>
>> Thanks,
>> John
>>
>>> thanks,
>>> jirka
>>>
>>>>
>>>>> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
>>>>> ---
>>>>>  tools/perf/builtin-report.c | 1 +
>>>>>  tools/perf/util/evsel.c     | 3 +++
>>>>>  2 files changed, 4 insertions(+)
>>>>>
>>>>> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
>>>>> index c0703979c51d..257c9c18cb7e 100644
>>>>> --- a/tools/perf/builtin-report.c
>>>>> +++ b/tools/perf/builtin-report.c
>>>>> @@ -980,6 +980,7 @@ int cmd_report(int argc, const char **argv)
>>>>>  			.id_index	 = perf_event__process_id_index,
>>>>>  			.auxtrace_info	 = perf_event__process_auxtrace_info,
>>>>>  			.auxtrace	 = perf_event__process_auxtrace,
>>>>> +			.event_update	 = perf_event__process_event_update,
>>>>>  			.feature	 = process_feature_event,
>>>>>  			.ordered_events	 = true,
>>>>>  			.ordering_requires_timestamps = true,
>>>>> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
>>>>> index ac6cfb8b085e..7a0d5fbaf3c1 100644
>>>>> --- a/tools/perf/util/evsel.c
>>>>> +++ b/tools/perf/util/evsel.c
>>>>> @@ -1088,6 +1088,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
>>>>>  		attr->exclude_user   = 1;
>>>>>  	}
>>>>>
>>>>> +	if (evsel->own_cpus)
>>>>> +		evsel->attr.read_format |= PERF_FORMAT_ID;
>>>>> +
>>>>>  	/*
>>>>>  	 * Apply event specific term settings,
>>>>>  	 * it overloads any global configuration.
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> linux-arm-kernel mailing list
>>> linux-arm-kernel@lists.infradead.org
>>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>>
>>> .
>>>
>>
>
> .
>
Jiri Olsa Oct. 16, 2018, 10:47 a.m. UTC | #6
On Tue, Oct 16, 2018 at 10:10:20AM +0100, John Garry wrote:
> On 15/10/2018 20:15, Arnaldo Carvalho de Melo wrote:
> > Em Fri, Oct 12, 2018 at 02:25:49PM +0100, John Garry escreveu:
> > > On 09/10/2018 11:00, Jiri Olsa wrote:
> > > > On Thu, Oct 04, 2018 at 10:20:39AM +0100, John Garry wrote:
> > > > 
> > > > SNIP
> > > > 
> > > > > > We synthesize an update event that needs to touch the evsel
> > > > > > id array, which is not defined at that time. Fixing this by
> > > > > > forcing the id allocation for events with theeir own cpus.
> > > 
> > > /s/theeir/their/
> > > 
> > > > > > 
> > > > > > Reported-by: John Garry <john.garry@huawei.com>
> > > > > > Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org
> > > > > 
> > > > > Tested-by: John Garry <john.garry@huawei.com>
> > > > > 
> > > > > In terms of adding to stable, LT v4.14 is not affected, but 4.18.x is.
> > > > > 
> > > > > Thanks,
> > > > > John
> > > > 
> > > > Arnaldo, could you please pick up this one
> > > > 
> > > 
> > > Just a friendly reminder on this patch.
> > > 
> > > How about re-send with an updated commit message also?
> > 
> > I'll fix up the commit message and apply, thanks.
> > 
> 
> Much appreciated.
> 
> BTW, I think that we should add a fixes tag. But I'm not sure if this patch
> fixes the commit I bisected to earlier (bfd8f72c2778f5bd63d), or that same
> commit just exposed some latent bug.
> 
> Jirka, Andi, Do you know?

yes, that commit moved it to record, which resulted in this fault

Arnaldo, could you please add:
Fixes: bfd8f72c2778 ("perf record: Synthesize unit/scale/... in event update")

thanks,
jirka
diff mbox series

Patch

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index c0703979c51d..257c9c18cb7e 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -980,6 +980,7 @@  int cmd_report(int argc, const char **argv)
 			.id_index	 = perf_event__process_id_index,
 			.auxtrace_info	 = perf_event__process_auxtrace_info,
 			.auxtrace	 = perf_event__process_auxtrace,
+			.event_update	 = perf_event__process_event_update,
 			.feature	 = process_feature_event,
 			.ordered_events	 = true,
 			.ordering_requires_timestamps = true,
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index ac6cfb8b085e..7a0d5fbaf3c1 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1088,6 +1088,9 @@  void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
 		attr->exclude_user   = 1;
 	}
 
+	if (evsel->own_cpus)
+		evsel->attr.read_format |= PERF_FORMAT_ID;
+
 	/*
 	 * Apply event specific term settings,
 	 * it overloads any global configuration.