linux_dsm_epyc7002/tools/perf
Stephane Eranian bec49a9e05 perf stat: Force error in fallback on :k events
When it is not possible for a non-privilege perf command to monitor at
the kernel level (:k), the fallback code forces a :u. That works if the
event was previously monitoring both levels.  But if the event was
already constrained to kernel only, then it does not make sense to
restrict it to user only.

Given the code works by exclusion, a kernel only event would have:

  attr->exclude_user = 1

The fallback code would add:

  attr->exclude_kernel = 1

In the end the end would not monitor in either the user level or kernel
level. In other words, it would count nothing.

An event programmed to monitor kernel only cannot be switched to user
only without seriously warning the user.

This patch forces an error in this case to make it clear the request
cannot really be satisfied.

Behavior with paranoid 1:

  $ sudo bash -c "echo 1 > /proc/sys/kernel/perf_event_paranoid"
  $ perf stat -e cycles:k sleep 1

   Performance counter stats for 'sleep 1':

           1,520,413      cycles:k

         1.002361664 seconds time elapsed

         0.002480000 seconds user
         0.000000000 seconds sys

Old behavior with paranoid 2:

  $ sudo bash -c "echo 2 > /proc/sys/kernel/perf_event_paranoid"
  $ perf stat -e cycles:k sleep 1
   Performance counter stats for 'sleep 1':

                   0      cycles:ku

         1.002358127 seconds time elapsed

         0.002384000 seconds user
         0.000000000 seconds sys

New behavior with paranoid 2:

  $ sudo bash -c "echo 2 > /proc/sys/kernel/perf_event_paranoid"
  $ perf stat -e cycles:k sleep 1
  Error:
  You may not have permission to collect stats.

  Consider tweaking /proc/sys/kernel/perf_event_paranoid,
  which controls use of the performance events system by
  unprivileged users (without CAP_PERFMON or 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_PERFMON or CAP_SYS_ADMIN
        Disallow raw tracepoint access by users without CAP_SYS_PERFMON or CAP_SYS_ADMIN
  >= 1: Disallow CPU event access by users without CAP_PERFMON or CAP_SYS_ADMIN
  >= 2: Disallow kernel profiling by users without CAP_PERFMON or CAP_SYS_ADMIN

  To make this setting permanent, edit /etc/sysctl.conf too, e.g.:

          kernel.perf_event_paranoid = -1

v2 of this patch addresses the review feedback from jolsa@redhat.com.

Signed-off-by: Stephane Eranian <eranian@google.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20200414161550.225588-1-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-04-18 09:05:00 -03:00
..
arch tools headers: Update x86's syscall_64.tbl with the kernel sources 2020-04-14 11:02:52 -03:00
bench perf bench: Add event synthesis benchmark 2020-04-16 12:19:12 -03:00
Documentation perf tools: Add support for leader-sampling with AUX area events 2020-04-18 09:05:00 -03:00
examples/bpf
include/bpf
jvmti
pmu-events perf pmu-events x86: Use CPU_CLK_UNHALTED.THREAD in Kernel_Utilization metric 2020-04-03 09:37:56 -03:00
python
scripts perf script: Add flamegraph.py script 2020-04-16 12:19:14 -03:00
tests perf expr: Add expr_ prefix for parse_ctx and parse_id 2020-04-16 12:19:13 -03:00
trace tools headers UAPI: Sync linux/mman.h with the kernel 2020-04-14 09:04:53 -03:00
ui perf report/top TUI: Fix title line formatting 2020-04-03 09:37:55 -03:00
util perf stat: Force error in fallback on :k events 2020-04-18 09:05:00 -03:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Build
builtin-annotate.c
builtin-bench.c perf bench: Add event synthesis benchmark 2020-04-16 12:19:12 -03:00
builtin-buildid-cache.c
builtin-buildid-list.c
builtin-c2c.c
builtin-config.c
builtin-data.c
builtin-diff.c perf tools: Basic support for CGROUP event 2020-04-03 09:37:55 -03:00
builtin-evlist.c
builtin-ftrace.c perf tools: Support CAP_PERFMON capability 2020-04-16 12:19:08 -03:00
builtin-help.c
builtin-inject.c
builtin-kallsyms.c
builtin-kmem.c
builtin-kvm.c
builtin-list.c
builtin-lock.c
builtin-mem.c
builtin-probe.c
builtin-record.c perf record: Add --all-cgroups option 2020-04-03 09:37:55 -03:00
builtin-report.c perf auxtrace: Add an option to synthesize callchains for regular events 2020-04-16 12:19:15 -03:00
builtin-sched.c
builtin-script.c perf auxtrace: Add an option to synthesize callchains for regular events 2020-04-16 12:19:15 -03:00
builtin-stat.c perf stat: Honour --timeout for forked workloads 2020-04-16 12:17:41 -03:00
builtin-timechart.c
builtin-top.c perf top: Support hotkey to change sort order 2020-04-03 09:37:55 -03:00
builtin-trace.c
builtin-version.c
builtin.h
check-headers.sh tools headers: Synchronize linux/bits.h with the kernel sources 2020-04-14 11:40:05 -03:00
command-list.txt
CREDITS
design.txt perf tools: Support CAP_PERFMON capability 2020-04-16 12:19:08 -03:00
Makefile
Makefile.config perf tools: Support Python 3.8+ in Makefile 2020-04-03 10:03:44 -03:00
Makefile.perf perf: Normalize gcc parameter when generating arch errno table 2020-03-26 11:04:01 -03:00
MANIFEST
perf-archive.sh
perf-completion.sh
perf-read-vdso.c
perf-sys.h
perf-with-kcore.sh
perf.c
perf.h