linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] perf record: Respect --no-switch-events
@ 2020-05-28 12:08 Adrian Hunter
  2020-05-28 12:08 ` [PATCH 2/2] perf intel-pt: Refine kernel decoding only warning message Adrian Hunter
  2020-05-28 14:37 ` [PATCH 1/2] perf record: Respect --no-switch-events Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 4+ messages in thread
From: Adrian Hunter @ 2020-05-28 12:08 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, Andi Kleen, linux-kernel, Mathieu Poirier

Context switch events are added automatically by Intel PT and Coresight.
Make it possible to suppress them. That is useful for tracing the
scheduler without the disturbance that the switch event processing
creates.

Example:

  Prerequisites:

    $ which perf
    ~/bin/perf
    $ sudo setcap "cap_sys_rawio,cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_ipc_lock=ep" ~/bin/perf
    $ sudo chmod +r /proc/kcore

  Before:

    $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.938 MB perf.data ]
    $ perf script -D | grep PERF_RECORD_SWITCH | wc -l
    572

  After:

    $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
    Warning:
    Intel Processor Trace decoding will not be possible except for kernel tracing!
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.838 MB perf.data ]
    $ perf script -D | grep PERF_RECORD_SWITCH | wc -l
    0

    $ sudo chmod go-r /proc/kcore
    $ sudo setcap -r ~/bin/perf

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/Documentation/perf-record.txt | 4 +++-
 tools/perf/arch/arm/util/cs-etm.c        | 3 ++-
 tools/perf/arch/x86/util/intel-pt.c      | 3 ++-
 tools/perf/builtin-record.c              | 5 +++--
 tools/perf/util/record.h                 | 6 ++++++
 5 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index 561ef55743e2..97b1a866ab22 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -458,7 +458,9 @@ This option sets the time out limit. The default value is 500 ms.
 
 --switch-events::
 Record context switch events i.e. events of type PERF_RECORD_SWITCH or
-PERF_RECORD_SWITCH_CPU_WIDE.
+PERF_RECORD_SWITCH_CPU_WIDE. In some cases (e.g. Intel PT or CoreSight)
+switch events will be enabled automatically, which can be suppressed by
+by the option --no-switch-events.
 
 --clang-path=PATH::
 Path to clang binary to use for compiling BPF scriptlets.
diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c
index 607499b41bea..cea5e33d61d2 100644
--- a/tools/perf/arch/arm/util/cs-etm.c
+++ b/tools/perf/arch/arm/util/cs-etm.c
@@ -265,7 +265,8 @@ static int cs_etm_recording_options(struct auxtrace_record *itr,
 	ptr->evlist = evlist;
 	ptr->snapshot_mode = opts->auxtrace_snapshot_mode;
 
-	if (perf_can_record_switch_events())
+	if (!record_opts__no_switch_events(opts) &&
+	    perf_can_record_switch_events())
 		opts->record_switch_events = true;
 
 	evlist__for_each_entry(evlist, evsel) {
diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index fdb917fcf511..3fc547769707 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -779,7 +779,8 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	 * Per-cpu recording needs sched_switch events to distinguish different
 	 * threads.
 	 */
-	if (have_timing_info && !perf_cpu_map__empty(cpus)) {
+	if (have_timing_info && !perf_cpu_map__empty(cpus) &&
+	    !record_opts__no_switch_events(opts)) {
 		if (perf_can_record_switch_events()) {
 			bool cpu_wide = !target__none(&opts->target) &&
 					!target__has_task(&opts->target);
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 02d85f4e4517..dc6d5ba2fff8 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -2490,8 +2490,9 @@ static struct option __record_options[] = {
 		    "Record namespaces events"),
 	OPT_BOOLEAN(0, "all-cgroups", &record.opts.record_cgroup,
 		    "Record cgroup events"),
-	OPT_BOOLEAN(0, "switch-events", &record.opts.record_switch_events,
-		    "Record context switch events"),
+	OPT_BOOLEAN_SET(0, "switch-events", &record.opts.record_switch_events,
+			&record.opts.record_switch_events_set,
+			"Record context switch events"),
 	OPT_BOOLEAN_FLAG(0, "all-kernel", &record.opts.all_kernel,
 			 "Configure all used events to run in kernel space.",
 			 PARSE_OPT_EXCLUSIVE),
diff --git a/tools/perf/util/record.h b/tools/perf/util/record.h
index dce6332f5071..84dbbc3f0204 100644
--- a/tools/perf/util/record.h
+++ b/tools/perf/util/record.h
@@ -36,6 +36,7 @@ struct record_opts {
 	bool	      record_namespaces;
 	bool	      record_cgroup;
 	bool	      record_switch_events;
+	bool	      record_switch_events_set;
 	bool	      all_kernel;
 	bool	      all_user;
 	bool	      kernel_callchains;
@@ -77,4 +78,9 @@ extern struct option *record_options;
 
 int record__parse_freq(const struct option *opt, const char *str, int unset);
 
+static inline bool record_opts__no_switch_events(const struct record_opts *opts)
+{
+	return opts->record_switch_events_set && !opts->record_switch_events;
+}
+
 #endif // _PERF_RECORD_H
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] perf intel-pt: Refine kernel decoding only warning message
  2020-05-28 12:08 [PATCH 1/2] perf record: Respect --no-switch-events Adrian Hunter
@ 2020-05-28 12:08 ` Adrian Hunter
  2020-05-28 14:38   ` Arnaldo Carvalho de Melo
  2020-05-28 14:37 ` [PATCH 1/2] perf record: Respect --no-switch-events Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 4+ messages in thread
From: Adrian Hunter @ 2020-05-28 12:08 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, Andi Kleen, linux-kernel, Mathieu Poirier

Stop the message displaying when user space is not being traced.

Example:

  Prerequisites:

    sudo setcap "cap_sys_rawio,cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_ipc_lock=ep" ~/bin/perf
    sudo chmod +r /proc/kcore

  Before:

    $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
    Warning:
    Intel Processor Trace decoding will not be possible except for kernel tracing!
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.838 MB perf.data ]

  After:

    $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 1.068 MB perf.data ]

    $ sudo chmod go-r /proc/kcore
    $ sudo setcap -r ~/bin/perf

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/arch/x86/util/intel-pt.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index 3fc547769707..9fb137282dc8 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -879,7 +879,8 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	 * per-cpu with no sched_switch (except workload-only).
 	 */
 	if (!ptr->have_sched_switch && !perf_cpu_map__empty(cpus) &&
-	    !target__none(&opts->target))
+	    !target__none(&opts->target) &&
+	    !intel_pt_evsel->core.attr.exclude_user)
 		ui__warning("Intel Processor Trace decoding will not be possible except for kernel tracing!\n");
 
 	return 0;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] perf record: Respect --no-switch-events
  2020-05-28 12:08 [PATCH 1/2] perf record: Respect --no-switch-events Adrian Hunter
  2020-05-28 12:08 ` [PATCH 2/2] perf intel-pt: Refine kernel decoding only warning message Adrian Hunter
@ 2020-05-28 14:37 ` Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-05-28 14:37 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, Andi Kleen, linux-kernel, Mathieu Poirier

Em Thu, May 28, 2020 at 03:08:58PM +0300, Adrian Hunter escreveu:
> Context switch events are added automatically by Intel PT and Coresight.
> Make it possible to suppress them. That is useful for tracing the
> scheduler without the disturbance that the switch event processing
> creates.
> 
> Example:
> 
>   Prerequisites:
> 
>     $ which perf
>     ~/bin/perf
>     $ sudo setcap "cap_sys_rawio,cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_ipc_lock=ep" ~/bin/perf
>     $ sudo chmod +r /proc/kcore
> 
>   Before:
> 
>     $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
>     [ perf record: Woken up 1 times to write data ]
>     [ perf record: Captured and wrote 0.938 MB perf.data ]
>     $ perf script -D | grep PERF_RECORD_SWITCH | wc -l
>     572
> 
>   After:
> 
>     $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
>     Warning:
>     Intel Processor Trace decoding will not be possible except for kernel tracing!
>     [ perf record: Woken up 1 times to write data ]
>     [ perf record: Captured and wrote 0.838 MB perf.data ]
>     $ perf script -D | grep PERF_RECORD_SWITCH | wc -l
>     0
> 
>     $ sudo chmod go-r /proc/kcore
>     $ sudo setcap -r ~/bin/perf

Thanks, tested as root and applied.

- Arnaldo
 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/perf/Documentation/perf-record.txt | 4 +++-
>  tools/perf/arch/arm/util/cs-etm.c        | 3 ++-
>  tools/perf/arch/x86/util/intel-pt.c      | 3 ++-
>  tools/perf/builtin-record.c              | 5 +++--
>  tools/perf/util/record.h                 | 6 ++++++
>  5 files changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
> index 561ef55743e2..97b1a866ab22 100644
> --- a/tools/perf/Documentation/perf-record.txt
> +++ b/tools/perf/Documentation/perf-record.txt
> @@ -458,7 +458,9 @@ This option sets the time out limit. The default value is 500 ms.
>  
>  --switch-events::
>  Record context switch events i.e. events of type PERF_RECORD_SWITCH or
> -PERF_RECORD_SWITCH_CPU_WIDE.
> +PERF_RECORD_SWITCH_CPU_WIDE. In some cases (e.g. Intel PT or CoreSight)
> +switch events will be enabled automatically, which can be suppressed by
> +by the option --no-switch-events.
>  
>  --clang-path=PATH::
>  Path to clang binary to use for compiling BPF scriptlets.
> diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c
> index 607499b41bea..cea5e33d61d2 100644
> --- a/tools/perf/arch/arm/util/cs-etm.c
> +++ b/tools/perf/arch/arm/util/cs-etm.c
> @@ -265,7 +265,8 @@ static int cs_etm_recording_options(struct auxtrace_record *itr,
>  	ptr->evlist = evlist;
>  	ptr->snapshot_mode = opts->auxtrace_snapshot_mode;
>  
> -	if (perf_can_record_switch_events())
> +	if (!record_opts__no_switch_events(opts) &&
> +	    perf_can_record_switch_events())
>  		opts->record_switch_events = true;
>  
>  	evlist__for_each_entry(evlist, evsel) {
> diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
> index fdb917fcf511..3fc547769707 100644
> --- a/tools/perf/arch/x86/util/intel-pt.c
> +++ b/tools/perf/arch/x86/util/intel-pt.c
> @@ -779,7 +779,8 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
>  	 * Per-cpu recording needs sched_switch events to distinguish different
>  	 * threads.
>  	 */
> -	if (have_timing_info && !perf_cpu_map__empty(cpus)) {
> +	if (have_timing_info && !perf_cpu_map__empty(cpus) &&
> +	    !record_opts__no_switch_events(opts)) {
>  		if (perf_can_record_switch_events()) {
>  			bool cpu_wide = !target__none(&opts->target) &&
>  					!target__has_task(&opts->target);
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 02d85f4e4517..dc6d5ba2fff8 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -2490,8 +2490,9 @@ static struct option __record_options[] = {
>  		    "Record namespaces events"),
>  	OPT_BOOLEAN(0, "all-cgroups", &record.opts.record_cgroup,
>  		    "Record cgroup events"),
> -	OPT_BOOLEAN(0, "switch-events", &record.opts.record_switch_events,
> -		    "Record context switch events"),
> +	OPT_BOOLEAN_SET(0, "switch-events", &record.opts.record_switch_events,
> +			&record.opts.record_switch_events_set,
> +			"Record context switch events"),
>  	OPT_BOOLEAN_FLAG(0, "all-kernel", &record.opts.all_kernel,
>  			 "Configure all used events to run in kernel space.",
>  			 PARSE_OPT_EXCLUSIVE),
> diff --git a/tools/perf/util/record.h b/tools/perf/util/record.h
> index dce6332f5071..84dbbc3f0204 100644
> --- a/tools/perf/util/record.h
> +++ b/tools/perf/util/record.h
> @@ -36,6 +36,7 @@ struct record_opts {
>  	bool	      record_namespaces;
>  	bool	      record_cgroup;
>  	bool	      record_switch_events;
> +	bool	      record_switch_events_set;
>  	bool	      all_kernel;
>  	bool	      all_user;
>  	bool	      kernel_callchains;
> @@ -77,4 +78,9 @@ extern struct option *record_options;
>  
>  int record__parse_freq(const struct option *opt, const char *str, int unset);
>  
> +static inline bool record_opts__no_switch_events(const struct record_opts *opts)
> +{
> +	return opts->record_switch_events_set && !opts->record_switch_events;
> +}
> +
>  #endif // _PERF_RECORD_H
> -- 
> 2.17.1
> 

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] perf intel-pt: Refine kernel decoding only warning message
  2020-05-28 12:08 ` [PATCH 2/2] perf intel-pt: Refine kernel decoding only warning message Adrian Hunter
@ 2020-05-28 14:38   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-05-28 14:38 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, Andi Kleen, linux-kernel, Mathieu Poirier

Em Thu, May 28, 2020 at 03:08:59PM +0300, Adrian Hunter escreveu:
> Stop the message displaying when user space is not being traced.
> 
> Example:
> 
>   Prerequisites:
> 
>     sudo setcap "cap_sys_rawio,cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_ipc_lock=ep" ~/bin/perf
>     sudo chmod +r /proc/kcore
> 
>   Before:
> 
>     $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
>     Warning:
>     Intel Processor Trace decoding will not be possible except for kernel tracing!
>     [ perf record: Woken up 1 times to write data ]
>     [ perf record: Captured and wrote 0.838 MB perf.data ]
> 
>   After:
> 
>     $ perf record --no-switch-events --kcore -a -e intel_pt//k -- sleep 0.001
>     [ perf record: Woken up 1 times to write data ]
>     [ perf record: Captured and wrote 1.068 MB perf.data ]
> 
>     $ sudo chmod go-r /proc/kcore
>     $ sudo setcap -r ~/bin/perf

Thanks, tested as root and applied.

- Arnaldo
 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/perf/arch/x86/util/intel-pt.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
> index 3fc547769707..9fb137282dc8 100644
> --- a/tools/perf/arch/x86/util/intel-pt.c
> +++ b/tools/perf/arch/x86/util/intel-pt.c
> @@ -879,7 +879,8 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
>  	 * per-cpu with no sched_switch (except workload-only).
>  	 */
>  	if (!ptr->have_sched_switch && !perf_cpu_map__empty(cpus) &&
> -	    !target__none(&opts->target))
> +	    !target__none(&opts->target) &&
> +	    !intel_pt_evsel->core.attr.exclude_user)
>  		ui__warning("Intel Processor Trace decoding will not be possible except for kernel tracing!\n");
>  
>  	return 0;
> -- 
> 2.17.1
> 

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-05-28 14:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-28 12:08 [PATCH 1/2] perf record: Respect --no-switch-events Adrian Hunter
2020-05-28 12:08 ` [PATCH 2/2] perf intel-pt: Refine kernel decoding only warning message Adrian Hunter
2020-05-28 14:38   ` Arnaldo Carvalho de Melo
2020-05-28 14:37 ` [PATCH 1/2] perf record: Respect --no-switch-events Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).