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. */
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox