perf stat: Do not allow --for-each-cgroup without cpu
authorNamhyung Kim <namhyung@kernel.org>
Mon, 30 Aug 2021 17:02:00 +0000 (10:02 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 30 Aug 2021 21:22:23 +0000 (18:22 -0300)
The cgroup mode should work with cpu events.  Warn if --for-each-cgroup
option is used with a task target like existing -G option.

  # perf stat --for-each-cgroup . sleep 1
  both cgroup and no-aggregation modes only available in system-wide mode

   Usage: perf stat [<options>] [<command>]

      -G, --cgroup <name>   monitor event in cgroup name only
      -A, --no-aggr         disable CPU count aggregation
      -a, --all-cpus        system-wide collection from all CPUs
          --for-each-cgroup <name>
                            expand events for each cgroup

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20210830170200.55652-1-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-stat.c

index f4253ba..f6e87b7 100644 (file)
@@ -2386,7 +2386,8 @@ int cmd_stat(int argc, const char **argv)
         * --per-thread is aggregated per thread, we dont mix it with cpu mode
         */
        if (((stat_config.aggr_mode != AGGR_GLOBAL &&
-             stat_config.aggr_mode != AGGR_THREAD) || nr_cgroups) &&
+             stat_config.aggr_mode != AGGR_THREAD) ||
+            (nr_cgroups || stat_config.cgroup_list)) &&
            !target__has_cpu(&target)) {
                fprintf(stderr, "both cgroup and no-aggregation "
                        "modes only available in system-wide mode\n");
@@ -2394,6 +2395,7 @@ int cmd_stat(int argc, const char **argv)
                parse_options_usage(stat_usage, stat_options, "G", 1);
                parse_options_usage(NULL, stat_options, "A", 1);
                parse_options_usage(NULL, stat_options, "a", 1);
+               parse_options_usage(NULL, stat_options, "for-each-cgroup", 0);
                goto out;
        }