File perf-evsel-fix-attr-exclude_kernel-setting-for-default-cycles-p.patch of Package perf
xxxxxxxxxx
1
From: Arnaldo Carvalho de Melo <acme@redhat.com>
2
Date: Fri, 22 Sep 2017 15:41:44 -0300
3
Subject: perf evsel: Fix attr.exclude_kernel setting for default cycles:p
4
Git-commit: f1e52f14a69386ac460a8d700df0647a631cf595
5
Patch-mainline: v4.14-rc3
6
References: bsc#1083691
7
8
[suse: adjust context, skip failed fix d37a3697 ]
9
10
Yet another fix for probing the max attr.precise_ip setting: it is not
11
enough settting attr.exclude_kernel for !root users, as they _can_
12
profile the kernel if the kernel.perf_event_paranoid sysctl is set to
13
-1, so check that as well.
14
15
Testing it:
16
17
As non root:
18
19
$ sysctl kernel.perf_event_paranoid
20
kernel.perf_event_paranoid = 2
21
$ perf record sleep 1
22
$ perf evlist -v
23
cycles:uppp: ..., exclude_kernel: 1, ... precise_ip: 3, ...
24
25
Now as non-root, but with kernel.perf_event_paranoid set set to the
26
most permissive value, -1:
27
28
$ sysctl kernel.perf_event_paranoid
29
kernel.perf_event_paranoid = -1
30
$ perf record sleep 1
31
$ perf evlist -v
32
cycles:ppp: ..., exclude_kernel: 0, ... precise_ip: 3, ...
33
$
34
35
I.e. non-root, default kernel.perf_event_paranoid: :uppp modifier = not allowed to sample the kernel,
36
non-root, most permissible kernel.perf_event_paranoid: :ppp = allowed to sample the kernel.
37
38
In both cases, use the highest available precision: attr.precise_ip = 3.
39
40
Reported-and-Tested-by: Ingo Molnar <mingo@kernel.org>
41
Cc: Adrian Hunter <adrian.hunter@intel.com>
42
Cc: Andy Lutomirski <luto@kernel.org>
43
Cc: David Ahern <dsahern@gmail.com>
44
Cc: Jiri Olsa <jolsa@kernel.org>
45
Cc: Namhyung Kim <namhyung@kernel.org>
46
Cc: Wang Nan <wangnan0@huawei.com>
47
Fixes: d37a36979077 ("perf evsel: Fix attr.exclude_kernel setting for default cycles:p")
48
Link: http://lkml.kernel.org/n/tip-nj2qkf75xsd6pw6hhjzfqqdx@git.kernel.org
49
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
50
Signed-off-by: Tony Jones <tonyj@suse.de>
51
---
52
tools/perf/util/evsel.c | 7 ++++++-
53
1 file changed, 6 insertions(+), 1 deletion(-)
54
55
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
56
index 4bb89373eb52..0dccdb89572c 100644
57
--- a/tools/perf/util/evsel.c
58
+++ b/tools/perf/util/evsel.c
59
60
return evsel;
61
}
62
63
+static bool perf_event_can_profile_kernel(void)
64
+{
65
+ return geteuid() == 0 || perf_event_paranoid() == -1;
66
+}
67
+
68
struct perf_evsel *perf_evsel__new_cycles(bool precise)
69
{
70
struct perf_event_attr attr = {
71
.type = PERF_TYPE_HARDWARE,
72
.config = PERF_COUNT_HW_CPU_CYCLES,
73
- .exclude_kernel = 1,
74
+ .exclude_kernel = !perf_event_can_profile_kernel(),
75
};
76
struct perf_evsel *evsel;
77
78