All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Jin Yao <yao.jin@linux.intel.com>
Cc: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
	mingo@redhat.com, alexander.shishkin@linux.intel.com,
	Linux-kernel@vger.kernel.org, ak@linux.intel.com,
	kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH] perf stat: Ignore error thread when enabling system-wide --per-thread
Date: Tue, 16 Jan 2018 13:51:32 +0100	[thread overview]
Message-ID: <20180116125132.GD26643@krava> (raw)
In-Reply-To: <1516117388-10120-1-git-send-email-yao.jin@linux.intel.com>

On Tue, Jan 16, 2018 at 11:43:08PM +0800, Jin Yao wrote:
> If we execute 'perf stat --per-thread' with non-root account
> (even set kernel.perf_event_paranoid = -1 yet), it reports the error:
> 
> jinyao@skl:~$ perf stat --per-thread
> Error:
> You may not have permission to collect system-wide stats.
> 
> Consider tweaking /proc/sys/kernel/perf_event_paranoid,
> which controls use of the performance events system by
> unprivileged users (without CAP_SYS_ADMIN).
> 
> The current value is 2:
> 
>   -1: Allow use of (almost) all events by all users
>       Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK
> >= 0: Disallow ftrace function tracepoint by users without CAP_SYS_ADMIN
>       Disallow raw tracepoint access by users without CAP_SYS_ADMIN
> >= 1: Disallow CPU event access by users without CAP_SYS_ADMIN
> >= 2: Disallow kernel profiling by users without CAP_SYS_ADMIN
> 
> To make this setting permanent, edit /etc/sysctl.conf too, e.g.:
> 
>         kernel.perf_event_paranoid = -1
> 
> Perhaps the ptrace rule doesn't allow to trace some processes. But anyway
> the global --per-thread mode had better ignore such errors and continue
> working on other threads.
> 
> This patch will record the index of error thread in perf_evsel__open()
> and remove this thread before retrying.
> 
> For example (run with non-root, kernel.perf_event_paranoid isn't set):
> 
> jinyao@skl:~$ perf stat --per-thread
> ^C
>  Performance counter stats for 'system wide':
> 
>           vmstat-3458               6.171984      cpu-clock:u (msec)        #    0.000 CPUs utilized
>             perf-3670               0.515599      cpu-clock:u (msec)        #    0.000 CPUs utilized
>           vmstat-3458              1,163,643      cycles:u                  #    0.189 GHz
>             perf-3670                 40,881      cycles:u                  #    0.079 GHz
>           vmstat-3458              1,410,238      instructions:u            #    1.21  insn per cycle
>             perf-3670                  3,536      instructions:u            #    0.09  insn per cycle
>           vmstat-3458                288,937      branches:u                #   46.814 M/sec
>             perf-3670                    936      branches:u                #    1.815 M/sec
>           vmstat-3458                 15,195      branch-misses:u           #    5.26% of all branches
>             perf-3670                     76      branch-misses:u           #    8.12% of all branches
> 
>       12.651675247 seconds time elapsed

could we use the existing code like in attached patch?

we might also swap following warning for some generic one:
  WARNING: Ignored open failure for pid 28392

jirka


---
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 98bf9d32f222..f9d4d3ad6fc5 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -276,6 +276,9 @@ static int create_perf_stat_counter(struct perf_evsel *evsel)
 			attr->enable_on_exec = 1;
 	}
 
+	if (stat_config.aggr_mode == AGGR_THREAD)
+		evsel->ignore_missing_thread = true;
+
 	if (target__has_cpu(&target) && !target__has_per_thread(&target))
 		return perf_evsel__open_per_cpu(evsel, perf_evsel__cpus(evsel));
 
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 8f971a2301d1..509ee175bc97 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1656,7 +1656,7 @@ static bool ignore_missing_thread(struct perf_evsel *evsel,
 		return false;
 
 	/* The -ESRCH is perf event syscall errno for pid's not found. */
-	if (err != -ESRCH)
+	if (err != -ESRCH && err != -EACCES)
 		return false;
 
 	/* If there's only one thread, let it fail. */

  reply	other threads:[~2018-01-16 12:51 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-16 15:43 [PATCH] perf stat: Ignore error thread when enabling system-wide --per-thread Jin Yao
2018-01-16 12:51 ` Jiri Olsa [this message]
2018-01-16 13:06   ` Jin, Yao
2018-01-16 13:17     ` Jiri Olsa
2018-01-16 14:10       ` Jin, Yao
2018-01-22  5:10       ` Jin, Yao
2018-01-23 14:19         ` Jiri Olsa
2018-02-27  0:53           ` Jin, Yao
2018-02-27 14:37             ` Arnaldo Carvalho de Melo
2018-03-06  6:42 ` [tip:perf/core] " tip-bot for Jin Yao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180116125132.GD26643@krava \
    --to=jolsa@redhat.com \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@intel.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=yao.jin@intel.com \
    --cc=yao.jin@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.