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 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.