Commit 51f38242 authored by Joshua Martinez's avatar Joshua Martinez Committed by Arnaldo Carvalho de Melo

perf top: Add cgroup support for perf top (-G)

Added callback option (-G) to support cgroups for 'perf top'.

Added condition to make sure -cgroup and --all-cgroups aren't both enabled.

Example:

  $perf top -e cycles -G system.slice/docker-6b95a5eb649c0d671eba3835f0d93973d05a088f3ae8602246bde37affb1ba3e.scope -a --stdio

   PerfTop:    3330 irqs/sec  kernel:68.2%  exact:  0.0% lost: 0/0 drop: 0/11075 [4000Hz cpu-clock],  (all, 4 CPUs)
   -------------------------------------------------------------------------------------------------------------------------------------------------------

    27.32%  [unknown]         [.] 0x00007f8ab7b69352
    11.44%  [kernel]          [k] 0xffffffff968cd657
     3.12%  [kernel]          [k] 0xffffffff96160e96
     2.63%  [kernel]          [k] 0xffffffff96160eb0
     1.96%  [kernel]          [k] 0xffffffff9615fcf6
     1.42%  [kernel]          [k] 0xffffffff964ddfc7
     1.09%  [kernel]          [k] 0xffffffff96160e90
     0.81%  [kernel]          [k] 0xffffffff96160eb3
     0.67%  [kernel]          [k] 0xffffffff9615fec1
     0.57%  [kernel]          [k] 0xffffffff961ee1d0
     0.53%  [unknown]         [.] 0x00007f8ab7b6666c
     0.53%  [kernel]          [k] 0xffffffff96160e64
     0.52%  [kernel]          [k] 0xffffffff9616c303
     0.51%  [kernel]          [k] 0xffffffffc08e7d50
     ...
Signed-off-by: default avatarJoshua Martinez <joshuamart@google.com>
Reviewed-by: default avatarIan Rogers <irogers@google.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>
Cc: joshua martinez <joshuamart@google.com>
Link: http://lore.kernel.org/lkml/20210616231829.3735671-1-joshuamart@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent b743b86c
...@@ -277,6 +277,18 @@ Default is to monitor all CPUS. ...@@ -277,6 +277,18 @@ Default is to monitor all CPUS.
Record events of type PERF_RECORD_NAMESPACES and display it with the Record events of type PERF_RECORD_NAMESPACES and display it with the
'cgroup_id' sort key. 'cgroup_id' sort key.
-G name::
--cgroup name::
monitor only in the container (cgroup) called "name". This option is available only
in per-cpu mode. The cgroup filesystem must be mounted. All threads belonging to
container "name" are monitored when they run on the monitored CPUs. Multiple cgroups
can be provided. Each cgroup is applied to the corresponding event, i.e., first cgroup
to first event, second cgroup to second event and so on. It is possible to provide
an empty cgroup (monitor all the time) using, e.g., -G foo,,bar. Cgroups must have
corresponding events, i.e., they always refer to events defined earlier on the command
line. If the user wants to track multiple events for a specific cgroup, the user can
use '-e e1 -e e2 -G foo,foo' or just use '-e e1 -e e2 -G foo'.
--all-cgroups:: --all-cgroups::
Record events of type PERF_RECORD_CGROUP and display it with the Record events of type PERF_RECORD_CGROUP and display it with the
'cgroup' sort key. 'cgroup' sort key.
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "util/annotate.h" #include "util/annotate.h"
#include "util/bpf-event.h" #include "util/bpf-event.h"
#include "util/cgroup.h"
#include "util/config.h" #include "util/config.h"
#include "util/color.h" #include "util/color.h"
#include "util/dso.h" #include "util/dso.h"
...@@ -1558,6 +1559,8 @@ int cmd_top(int argc, const char **argv) ...@@ -1558,6 +1559,8 @@ int cmd_top(int argc, const char **argv)
OPT_BOOLEAN(0, "force", &symbol_conf.force, "don't complain, do it"), OPT_BOOLEAN(0, "force", &symbol_conf.force, "don't complain, do it"),
OPT_UINTEGER(0, "num-thread-synthesize", &top.nr_threads_synthesize, OPT_UINTEGER(0, "num-thread-synthesize", &top.nr_threads_synthesize,
"number of thread to run event synthesize"), "number of thread to run event synthesize"),
OPT_CALLBACK('G', "cgroup", &top.evlist, "name",
"monitor event in cgroup name only", parse_cgroups),
OPT_BOOLEAN(0, "namespaces", &opts->record_namespaces, OPT_BOOLEAN(0, "namespaces", &opts->record_namespaces,
"Record namespaces events"), "Record namespaces events"),
OPT_BOOLEAN(0, "all-cgroups", &opts->record_cgroup, OPT_BOOLEAN(0, "all-cgroups", &opts->record_cgroup,
...@@ -1646,6 +1649,11 @@ int cmd_top(int argc, const char **argv) ...@@ -1646,6 +1649,11 @@ int cmd_top(int argc, const char **argv)
goto out_delete_evlist; goto out_delete_evlist;
} }
if (nr_cgroups > 0 && opts->record_cgroup) {
pr_err("--cgroup and --all-cgroups cannot be used together\n");
goto out_delete_evlist;
}
if (opts->branch_stack && callchain_param.enabled) if (opts->branch_stack && callchain_param.enabled)
symbol_conf.show_branchflag_count = true; symbol_conf.show_branchflag_count = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment