diff mbox series

[V4,10/11] perf intel-pt: Add documentation for pause / resume

Message ID 20240111081914.3123-11-adrian.hunter@intel.com (mailing list archive)
State New, archived
Headers show
Series perf/core: Add ability for an event to "pause" or "resume" AUX area tracing | expand

Commit Message

Adrian Hunter Jan. 11, 2024, 8:19 a.m. UTC
Document the use of aux-action config term and provide a simple example.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/Documentation/perf-intel-pt.txt | 70 ++++++++++++++++++++++
 1 file changed, 70 insertions(+)

Comments

Andi Kleen Jan. 16, 2024, 11:15 a.m. UTC | #1
Adrian Hunter <adrian.hunter@intel.com> writes:
> +
> +For example, to trace only the uname system call (sys_newuname) when running the
> +command line utility uname:
> +
> + $ perf record --kcore -e
> intel_pt/aux-action=start-paused/k,syscalls:sys_enter_newuname/aux-action=resume/,syscalls:sys_exit_newuname/aux-action=pause/
> uname

It's unclear if the syntax works for hardware break points, kprobes, uprobes too?
That would be most useful. If it works would be good to add examples for it.

-Andi
Adrian Hunter Jan. 16, 2024, 12:22 p.m. UTC | #2
On 16/01/24 13:15, Andi Kleen wrote:
> Adrian Hunter <adrian.hunter@intel.com> writes:
>> +
>> +For example, to trace only the uname system call (sys_newuname) when running the
>> +command line utility uname:
>> +
>> + $ perf record --kcore -e
>> intel_pt/aux-action=start-paused/k,syscalls:sys_enter_newuname/aux-action=resume/,syscalls:sys_exit_newuname/aux-action=pause/
>> uname
> 
> It's unclear if the syntax works for hardware break points, kprobes, uprobes too?

Yes, the perf tool syntax requires only that the group leader is
an AUX area event like intel_pt.  Note that an attempt is made to
automatically group AUX area events with events with aux-action,
so grouping syntax like '{...}' is not always necessary.

Note the current kernel implementation is called from
__perf_event_output() which is used in nearly all cases for the
output of samples, the exceptions being Intel BTS (which we do not
support at the same time as Intel PT, but wouldn't make much sense
anyway) and S390 cpumsf_output_event_pid().

> That would be most useful. If it works would be good to add examples for it.

OK
Namhyung Kim Jan. 19, 2024, 9:28 p.m. UTC | #3
Hello,

On Tue, Jan 16, 2024 at 4:22 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 16/01/24 13:15, Andi Kleen wrote:
> > Adrian Hunter <adrian.hunter@intel.com> writes:
> >> +
> >> +For example, to trace only the uname system call (sys_newuname) when running the
> >> +command line utility uname:
> >> +
> >> + $ perf record --kcore -e
> >> intel_pt/aux-action=start-paused/k,syscalls:sys_enter_newuname/aux-action=resume/,syscalls:sys_exit_newuname/aux-action=pause/
> >> uname
> >
> > It's unclear if the syntax works for hardware break points, kprobes, uprobes too?
>
> Yes, the perf tool syntax requires only that the group leader is
> an AUX area event like intel_pt.  Note that an attempt is made to
> automatically group AUX area events with events with aux-action,
> so grouping syntax like '{...}' is not always necessary.

Depends on the position, right?  Maybe there can be other events
without aux-action mixed with aux events.

Thanks,
Namhyung

>
> Note the current kernel implementation is called from
> __perf_event_output() which is used in nearly all cases for the
> output of samples, the exceptions being Intel BTS (which we do not
> support at the same time as Intel PT, but wouldn't make much sense
> anyway) and S390 cpumsf_output_event_pid().
>
> > That would be most useful. If it works would be good to add examples for it.
>
> OK
>
Adrian Hunter Jan. 22, 2024, 10:07 a.m. UTC | #4
On 19/01/24 23:28, Namhyung Kim wrote:
> Hello,
> 
> On Tue, Jan 16, 2024 at 4:22 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> On 16/01/24 13:15, Andi Kleen wrote:
>>> Adrian Hunter <adrian.hunter@intel.com> writes:
>>>> +
>>>> +For example, to trace only the uname system call (sys_newuname) when running the
>>>> +command line utility uname:
>>>> +
>>>> + $ perf record --kcore -e
>>>> intel_pt/aux-action=start-paused/k,syscalls:sys_enter_newuname/aux-action=resume/,syscalls:sys_exit_newuname/aux-action=pause/
>>>> uname
>>>
>>> It's unclear if the syntax works for hardware break points, kprobes, uprobes too?
>>
>> Yes, the perf tool syntax requires only that the group leader is
>> an AUX area event like intel_pt.  Note that an attempt is made to
>> automatically group AUX area events with events with aux-action,
>> so grouping syntax like '{...}' is not always necessary.
> 
> Depends on the position, right?  Maybe there can be other events
> without aux-action mixed with aux events.

Yes it depends on position. Non-grouped events in between will get
grouped too. So:

-e intel_pt --filter=blah  -e not_grouped_event -e some_event/aux-action=resume/

would put those 3 in a group, but still allow --filter.

> 
> Thanks,
> Namhyung
> 
>>
>> Note the current kernel implementation is called from
>> __perf_event_output() which is used in nearly all cases for the
>> output of samples, the exceptions being Intel BTS (which we do not
>> support at the same time as Intel PT, but wouldn't make much sense
>> anyway) and S390 cpumsf_output_event_pid().
>>
>>> That would be most useful. If it works would be good to add examples for it.
>>
>> OK
>>
diff mbox series

Patch

diff --git a/tools/perf/Documentation/perf-intel-pt.txt b/tools/perf/Documentation/perf-intel-pt.txt
index b3d9fb29ffd3..3a0d73bf8bc2 100644
--- a/tools/perf/Documentation/perf-intel-pt.txt
+++ b/tools/perf/Documentation/perf-intel-pt.txt
@@ -551,6 +551,9 @@  Support for this feature is indicated by:
 which contains "1" if the feature is supported and
 "0" otherwise.
 
+*aux-action=start-paused*::
+Start tracing paused, refer to the section <<_pause_or_resume_tracing,Pause or Resume Tracing>>
+
 
 config terms on other events
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -566,6 +569,9 @@  and PEBS-via-PT.  In those cases, the other events can have config terms below:
 		Used to select PEBS-via-PT, refer to the
 		section <<_pebs_via_intel_pt,PEBS via Intel PT>>
 
+*aux-action*::
+		Used to pause or resume tracing, refer to the section
+		<<_pause_or_resume_tracing,Pause or Resume Tracing>>
 
 AUX area sampling option
 ~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1911,6 +1917,70 @@  For pipe mode, the order of events and timestamps can presumably
 be messed up.
 
 
+Pause or Resume Tracing
+-----------------------
+
+With newer Kernels, it is possible to use other selected events to pause
+or resume Intel PT tracing.  This is configured by using the "aux-action"
+config term:
+
+"aux-action=pause" is used with events that are to pause Intel PT tracing.
+
+"aux-action=resume" is used with events that are to resume Intel PT tracing.
+
+"aux-action=start-paused" is used with the Intel PT event to start in a
+paused state.
+
+For example, to trace only the uname system call (sys_newuname) when running the
+command line utility uname:
+
+ $ perf record --kcore -e intel_pt/aux-action=start-paused/k,syscalls:sys_enter_newuname/aux-action=resume/,syscalls:sys_exit_newuname/aux-action=pause/ uname
+ Linux
+ [ perf record: Woken up 1 times to write data ]
+ [ perf record: Captured and wrote 0.043 MB perf.data ]
+ $ perf script --call-trace
+ uname   30805 [000] 24001.058782799: name: 0x7ffc9c1865b0
+ uname   30805 [000] 24001.058784424:  psb offs: 0
+ uname   30805 [000] 24001.058784424:  cbr: 39 freq: 3904 MHz (139%)
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])        debug_smp_processor_id
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])        __x64_sys_newuname
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])            down_read
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])                __cond_resched
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])                preempt_count_add
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])                    in_lock_functions
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])                preempt_count_sub
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])            up_read
+ uname   30805 [000] 24001.058784629: ([kernel.kallsyms])                preempt_count_add
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])                    in_lock_functions
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])                preempt_count_sub
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])            _copy_to_user
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])        syscall_exit_to_user_mode
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])            syscall_exit_work
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])                perf_syscall_exit
+ uname   30805 [000] 24001.058784838: ([kernel.kallsyms])                    debug_smp_processor_id
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                    perf_trace_buf_alloc
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                        perf_swevent_get_recursion_context
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                            debug_smp_processor_id
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                        debug_smp_processor_id
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                    perf_tp_event
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                        perf_trace_buf_update
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                            tracing_gen_ctx_irq_test
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                        perf_swevent_event
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                            __perf_event_account_interrupt
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                                __this_cpu_preempt_check
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                            perf_event_output_forward
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                                perf_event_aux_pause
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                                    ring_buffer_get
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                                        __rcu_read_lock
+ uname   30805 [000] 24001.058785046: ([kernel.kallsyms])                                        __rcu_read_unlock
+ uname   30805 [000] 24001.058785254: ([kernel.kallsyms])                                    pt_event_stop
+ uname   30805 [000] 24001.058785254: ([kernel.kallsyms])                                        debug_smp_processor_id
+ uname   30805 [000] 24001.058785254: ([kernel.kallsyms])                                        debug_smp_processor_id
+ uname   30805 [000] 24001.058785254: ([kernel.kallsyms])                                        native_write_msr
+ uname   30805 [000] 24001.058785463: ([kernel.kallsyms])                                        native_write_msr
+ uname   30805 [000] 24001.058785639: 0x0
+
+
 EXAMPLE
 -------