perf script: Print "cgroup" field on the same line as "comm"
authorIvan Babrou <ivan@cloudflare.com>
Tue, 18 Jul 2023 00:07:37 +0000 (17:07 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 8 Aug 2023 14:21:11 +0000 (11:21 -0300)
Commit 3fd7a168bf51 ("perf script: Add 'cgroup' field for output")
added support for printing cgroup path in perf script output.

It was okay if you didn't want any stacks:

    $ sudo perf script --comms jpegtran:23f4bf -F comm,tid,cpu,time,cgroup
    jpegtran:23f4bf 3321915 [013] 404718.587488:  /idle.slice/polish.service
    jpegtran:23f4bf 3321915 [031] 404718.592073:  /idle.slice/polish.service

With stacks it gets messier as cgroup is printed after the stack:

    $ perf script --comms jpegtran:23f4bf -F comm,tid,cpu,time,cgroup,ip,sym
    jpegtran:23f4bf 3321915 [013] 404718.587488:
                    5c554 compress_output
                    570d9 jpeg_finish_compress
                    3476e jpegtran_main
                    330ee jpegtran::main
                    326e2 core::ops::function::FnOnce::call_once (inlined)
                    326e2 std::sys_common::backtrace::__rust_begin_short_backtrace
    /idle.slice/polish.service
    jpegtran:23f4bf 3321915 [031] 404718.592073:
                    8474d jsimd_encode_mcu_AC_first_prepare_sse2.PADDING
                55af68e62fff [unknown]
    /idle.slice/polish.service

Let's instead print cgroup on the same line as comm:

    $ perf script --comms jpegtran:23f4bf -F comm,tid,cpu,time,cgroup,ip,sym
    jpegtran:23f4bf 3321915 [013] 404718.587488:  /idle.slice/polish.service
                    5c554 compress_output
                    570d9 jpeg_finish_compress
                    3476e jpegtran_main
                    330ee jpegtran::main
                    326e2 core::ops::function::FnOnce::call_once (inlined)
                    326e2 std::sys_common::backtrace::__rust_begin_short_backtrace

    jpegtran:23f4bf 3321915 [031] 404718.592073:  /idle.slice/polish.service
                    8474d jsimd_encode_mcu_AC_first_prepare_sse2.PADDING
                55af68e62fff [unknown]

Fixes: 3fd7a168bf514979 ("perf script: Add 'cgroup' field for output")
Signed-off-by: Ivan Babrou <ivan@cloudflare.com>
Acked-by: Ian Rogers <irogers@google.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: kernel-team@cloudflare.com
Link: https://lore.kernel.org/r/20230718000737.49077-1-ivan@cloudflare.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-script.c

index 200b3e7..517bf25 100644 (file)
@@ -2199,6 +2199,17 @@ static void process_event(struct perf_script *script,
        if (PRINT_FIELD(RETIRE_LAT))
                fprintf(fp, "%16" PRIu16, sample->retire_lat);
 
+       if (PRINT_FIELD(CGROUP)) {
+               const char *cgrp_name;
+               struct cgroup *cgrp = cgroup__find(machine->env,
+                                                  sample->cgroup);
+               if (cgrp != NULL)
+                       cgrp_name = cgrp->name;
+               else
+                       cgrp_name = "unknown";
+               fprintf(fp, " %s", cgrp_name);
+       }
+
        if (PRINT_FIELD(IP)) {
                struct callchain_cursor *cursor = NULL;
 
@@ -2243,17 +2254,6 @@ static void process_event(struct perf_script *script,
        if (PRINT_FIELD(CODE_PAGE_SIZE))
                fprintf(fp, " %s", get_page_size_name(sample->code_page_size, str));
 
-       if (PRINT_FIELD(CGROUP)) {
-               const char *cgrp_name;
-               struct cgroup *cgrp = cgroup__find(machine->env,
-                                                  sample->cgroup);
-               if (cgrp != NULL)
-                       cgrp_name = cgrp->name;
-               else
-                       cgrp_name = "unknown";
-               fprintf(fp, " %s", cgrp_name);
-       }
-
        perf_sample__fprintf_ipc(sample, attr, fp);
 
        fprintf(fp, "\n");