[V4,00/11] perf/core: Add ability for an event to "pause" or "resume" AUX area tracing

Message ID 20240111081914.3123-1-adrian.hunter@intel.com
Headers
Series perf/core: Add ability for an event to "pause" or "resume" AUX area tracing |

Message

Adrian Hunter Jan. 11, 2024, 8:19 a.m. UTC
  Hi

Hardware traces, such as instruction traces, can produce a vast amount of
trace data, so being able to reduce tracing to more specific circumstances
can be useful.

The ability to pause or resume tracing when another event happens, can do
that.

These patches add such a facilty and show how it would work for Intel
Processor Trace.

Maintainers of other AUX area tracing implementations are requested to
consider if this is something they might employ and then whether or not
the ABI would work for them.

Changes to perf tools are now (since V4) fleshed out.


Changes in V4:

    perf/core: Add aux_pause, aux_resume, aux_start_paused
	Rename aux_output_cfg -> aux_action
	Reorder aux_action bits from:
		aux_pause, aux_resume, aux_start_paused
	to:
		aux_start_paused, aux_pause, aux_resume
	Fix aux_action bits __u64 -> __u32

    coresight: Have a stab at support for pause / resume
	Dropped

    perf tools
	All new patches

Changes in RFC V3:

    coresight: Have a stab at support for pause / resume
	'mode' -> 'flags' so it at least compiles

Changes in RFC V2:

	Use ->stop() / ->start() instead of ->pause_resume()
	Move aux_start_paused bit into aux_output_cfg
	Tighten up when Intel PT pause / resume is allowed
	Add an example of how it might work for CoreSight


Adrian Hunter (11):
      perf/core: Add aux_pause, aux_resume, aux_start_paused
      perf/x86/intel/pt: Add support for pause / resume
      perf tools: Enable evsel__is_aux_event() to work for ARM/ARM64
      perf tools: Enable evsel__is_aux_event() to work for S390_CPUMSF
      perf tools: Add aux_start_paused, aux_pause and aux_resume
      perf tools: Add aux-action config term
      perf tools: Parse aux-action
      perf tools: Add missing_features for aux_start_paused, aux_pause, aux_resume
      perf intel-pt: Improve man page format
      perf intel-pt: Add documentation for pause / resume
      perf intel-pt: Add a test for pause / resume

 arch/x86/events/intel/pt.c                 |  63 +++-
 arch/x86/events/intel/pt.h                 |   4 +
 include/linux/perf_event.h                 |  15 +
 include/uapi/linux/perf_event.h            |  11 +-
 kernel/events/core.c                       |  72 +++-
 kernel/events/internal.h                   |   1 +
 tools/include/uapi/linux/perf_event.h      |  11 +-
 tools/perf/Documentation/perf-intel-pt.txt | 558 +++++++++++++++++------------
 tools/perf/Documentation/perf-record.txt   |   4 +
 tools/perf/arch/arm/util/pmu.c             |   3 +
 tools/perf/builtin-record.c                |   4 +-
 tools/perf/tests/shell/test_intel_pt.sh    |  28 ++
 tools/perf/util/auxtrace.c                 |  67 +++-
 tools/perf/util/auxtrace.h                 |   6 +-
 tools/perf/util/evsel.c                    |  13 +-
 tools/perf/util/evsel.h                    |   1 +
 tools/perf/util/evsel_config.h             |   1 +
 tools/perf/util/parse-events.c             |  10 +
 tools/perf/util/parse-events.h             |   1 +
 tools/perf/util/parse-events.l             |   1 +
 tools/perf/util/perf_event_attr_fprintf.c  |   3 +
 tools/perf/util/pmu.c                      |   6 +-
 22 files changed, 645 insertions(+), 238 deletions(-)


Regards
Adrian
  

Comments

Adrian Hunter Jan. 29, 2024, 12:48 p.m. UTC | #1
On 11/01/24 10:19, Adrian Hunter wrote:
> Hi
> 
> Hardware traces, such as instruction traces, can produce a vast amount of
> trace data, so being able to reduce tracing to more specific circumstances
> can be useful.
> 
> The ability to pause or resume tracing when another event happens, can do
> that.
> 
> These patches add such a facilty and show how it would work for Intel
> Processor Trace.
> 
> Maintainers of other AUX area tracing implementations are requested to
> consider if this is something they might employ and then whether or not
> the ABI would work for them.
> 
> Changes to perf tools are now (since V4) fleshed out.
> 
> 
> Changes in V4:
> 
>     perf/core: Add aux_pause, aux_resume, aux_start_paused
> 	Rename aux_output_cfg -> aux_action
> 	Reorder aux_action bits from:
> 		aux_pause, aux_resume, aux_start_paused
> 	to:
> 		aux_start_paused, aux_pause, aux_resume
> 	Fix aux_action bits __u64 -> __u32
> 
>     coresight: Have a stab at support for pause / resume
> 	Dropped
> 
>     perf tools
> 	All new patches
> 
> Changes in RFC V3:
> 
>     coresight: Have a stab at support for pause / resume
> 	'mode' -> 'flags' so it at least compiles
> 
> Changes in RFC V2:
> 
> 	Use ->stop() / ->start() instead of ->pause_resume()
> 	Move aux_start_paused bit into aux_output_cfg
> 	Tighten up when Intel PT pause / resume is allowed
> 	Add an example of how it might work for CoreSight

Any more comments?
  
Ian Rogers Jan. 31, 2024, 4:53 p.m. UTC | #2
On Mon, Jan 29, 2024 at 4:49 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 11/01/24 10:19, Adrian Hunter wrote:
> > Hi
> >
> > Hardware traces, such as instruction traces, can produce a vast amount of
> > trace data, so being able to reduce tracing to more specific circumstances
> > can be useful.
> >
> > The ability to pause or resume tracing when another event happens, can do
> > that.
> >
> > These patches add such a facilty and show how it would work for Intel
> > Processor Trace.
> >
> > Maintainers of other AUX area tracing implementations are requested to
> > consider if this is something they might employ and then whether or not
> > the ABI would work for them.
> >
> > Changes to perf tools are now (since V4) fleshed out.
> >
> >
> > Changes in V4:
> >
> >     perf/core: Add aux_pause, aux_resume, aux_start_paused
> >       Rename aux_output_cfg -> aux_action
> >       Reorder aux_action bits from:
> >               aux_pause, aux_resume, aux_start_paused
> >       to:
> >               aux_start_paused, aux_pause, aux_resume
> >       Fix aux_action bits __u64 -> __u32
> >
> >     coresight: Have a stab at support for pause / resume
> >       Dropped
> >
> >     perf tools
> >       All new patches
> >
> > Changes in RFC V3:
> >
> >     coresight: Have a stab at support for pause / resume
> >       'mode' -> 'flags' so it at least compiles
> >
> > Changes in RFC V2:
> >
> >       Use ->stop() / ->start() instead of ->pause_resume()
> >       Move aux_start_paused bit into aux_output_cfg
> >       Tighten up when Intel PT pause / resume is allowed
> >       Add an example of how it might work for CoreSight
>
> Any more comments?

I think the tools side looks good. The parsing changes match the
existing style. I wonder if it wouldn't be better to handle the valid
strings (pause, resume, etc.) in the lexer rather than a separate
parse function, but the pattern used matches the existing one. You can
have my Acked-by on the tools changes, although the subtleties of ARM
PMUs makes me somewhat nervous in this regard.

Thanks,
Ian
  
James Clark Feb. 1, 2024, 4:29 p.m. UTC | #3
On 31/01/2024 16:53, Ian Rogers wrote:
> On Mon, Jan 29, 2024 at 4:49 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> On 11/01/24 10:19, Adrian Hunter wrote:
>>> Hi
>>>
>>> Hardware traces, such as instruction traces, can produce a vast amount of
>>> trace data, so being able to reduce tracing to more specific circumstances
>>> can be useful.
>>>
>>> The ability to pause or resume tracing when another event happens, can do
>>> that.
>>>
>>> These patches add such a facilty and show how it would work for Intel
>>> Processor Trace.
>>>
>>> Maintainers of other AUX area tracing implementations are requested to
>>> consider if this is something they might employ and then whether or not
>>> the ABI would work for them.
>>>
>>> Changes to perf tools are now (since V4) fleshed out.
>>>
>>>
>>> Changes in V4:
>>>
>>>     perf/core: Add aux_pause, aux_resume, aux_start_paused
>>>       Rename aux_output_cfg -> aux_action
>>>       Reorder aux_action bits from:
>>>               aux_pause, aux_resume, aux_start_paused
>>>       to:
>>>               aux_start_paused, aux_pause, aux_resume
>>>       Fix aux_action bits __u64 -> __u32
>>>
>>>     coresight: Have a stab at support for pause / resume
>>>       Dropped
>>>
>>>     perf tools
>>>       All new patches
>>>
>>> Changes in RFC V3:
>>>
>>>     coresight: Have a stab at support for pause / resume
>>>       'mode' -> 'flags' so it at least compiles
>>>
>>> Changes in RFC V2:
>>>
>>>       Use ->stop() / ->start() instead of ->pause_resume()
>>>       Move aux_start_paused bit into aux_output_cfg
>>>       Tighten up when Intel PT pause / resume is allowed
>>>       Add an example of how it might work for CoreSight
>>
>> Any more comments?
> 
> I think the tools side looks good. The parsing changes match the
> existing style. I wonder if it wouldn't be better to handle the valid
> strings (pause, resume, etc.) in the lexer rather than a separate
> parse function, but the pattern used matches the existing one. You can
> have my Acked-by on the tools changes, although the subtleties of ARM
> PMUs makes me somewhat nervous in this regard.
> 
> Thanks,
> Ian

Acked-by: James Clark <james.clark@arm.com>

I will get round to adding the Coresight support at some point. I
checked the new parsing in this version and it seems to work ok.
  
Adrian Hunter Feb. 8, 2024, 11:40 a.m. UTC | #4
On 1/02/24 18:29, James Clark wrote:
> 
> 
> On 31/01/2024 16:53, Ian Rogers wrote:
>> On Mon, Jan 29, 2024 at 4:49 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>>
>>> On 11/01/24 10:19, Adrian Hunter wrote:
>>>> Hi
>>>>
>>>> Hardware traces, such as instruction traces, can produce a vast amount of
>>>> trace data, so being able to reduce tracing to more specific circumstances
>>>> can be useful.
>>>>
>>>> The ability to pause or resume tracing when another event happens, can do
>>>> that.
>>>>
>>>> These patches add such a facilty and show how it would work for Intel
>>>> Processor Trace.
>>>>
>>>> Maintainers of other AUX area tracing implementations are requested to
>>>> consider if this is something they might employ and then whether or not
>>>> the ABI would work for them.
>>>>
>>>> Changes to perf tools are now (since V4) fleshed out.
>>>>
>>>>
>>>> Changes in V4:
>>>>
>>>>     perf/core: Add aux_pause, aux_resume, aux_start_paused
>>>>       Rename aux_output_cfg -> aux_action
>>>>       Reorder aux_action bits from:
>>>>               aux_pause, aux_resume, aux_start_paused
>>>>       to:
>>>>               aux_start_paused, aux_pause, aux_resume
>>>>       Fix aux_action bits __u64 -> __u32
>>>>
>>>>     coresight: Have a stab at support for pause / resume
>>>>       Dropped
>>>>
>>>>     perf tools
>>>>       All new patches
>>>>
>>>> Changes in RFC V3:
>>>>
>>>>     coresight: Have a stab at support for pause / resume
>>>>       'mode' -> 'flags' so it at least compiles
>>>>
>>>> Changes in RFC V2:
>>>>
>>>>       Use ->stop() / ->start() instead of ->pause_resume()
>>>>       Move aux_start_paused bit into aux_output_cfg
>>>>       Tighten up when Intel PT pause / resume is allowed
>>>>       Add an example of how it might work for CoreSight
>>>
>>> Any more comments?
>>
>> I think the tools side looks good. The parsing changes match the
>> existing style. I wonder if it wouldn't be better to handle the valid
>> strings (pause, resume, etc.) in the lexer rather than a separate
>> parse function, but the pattern used matches the existing one. You can
>> have my Acked-by on the tools changes, although the subtleties of ARM
>> PMUs makes me somewhat nervous in this regard.
>>
>> Thanks,
>> Ian
> 
> Acked-by: James Clark <james.clark@arm.com>
> 
> I will get round to adding the Coresight support at some point. I
> checked the new parsing in this version and it seems to work ok.

Thanks James and Ian!