[V4,10/11] perf intel-pt: Add documentation for pause / resume
Commit Message
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
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
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
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
>
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
>>
@@ -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
-------