Thread (2 messages) 2 messages, 2 authors, 2021-06-24

Re: [PATCH] perf top: Add cgroup support for perf top (-G)

From: Ian Rogers <irogers@google.com>
Date: 2021-06-24 05:56:32
Also in: lkml

On Wed, Jun 16, 2021 at 4:18 PM Joshua Martinez [off-list ref] wrote:
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: Joshua Martinez <redacted>
Reviewed-by: Ian Rogers <irogers@google.com>

Thanks!
Ian
quoted hunk ↗ jump to hunk
---
 tools/perf/Documentation/perf-top.txt | 12 ++++++++++++
 tools/perf/builtin-top.c              |  8 ++++++++
 2 files changed, 20 insertions(+)
diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt
index bba5ffb05463..9898a32b8d9c 100644
--- a/tools/perf/Documentation/perf-top.txt
+++ b/tools/perf/Documentation/perf-top.txt
@@ -277,6 +277,18 @@ Default is to monitor all CPUS.
        Record events of type PERF_RECORD_NAMESPACES and display it with the
        '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::
        Record events of type PERF_RECORD_CGROUP and display it with the
        'cgroup' sort key.
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 69cb3635f5ef..2d570bfe7a56 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -22,6 +22,7 @@

 #include "util/annotate.h"
 #include "util/bpf-event.h"
+#include "util/cgroup.h"
 #include "util/config.h"
 #include "util/color.h"
 #include "util/dso.h"
@@ -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_UINTEGER(0, "num-thread-synthesize", &top.nr_threads_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,
                    "Record namespaces events"),
        OPT_BOOLEAN(0, "all-cgroups", &opts->record_cgroup,
@@ -1646,6 +1649,11 @@ int cmd_top(int argc, const char **argv)
                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)
                symbol_conf.show_branchflag_count = true;

--
2.32.0.272.g935e593368-goog
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help