Messages in this thread | | | Date | Thu, 26 Jan 2023 17:06:01 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH] perf script: Add 'cgroup' field for output |
| |
On January 26, 2023 4:42:30 PM GMT-03:00, Namhyung Kim <namhyung@kernel.org> wrote: >There's no field for the cgroup, let's add one. To do that, users need to >specify --all-cgroup option for perf record to capture the cgroup info.
This information about the new field being only available when --all-cgroup is specified should be in the documentation (man page) and probably in the tool itself, refusing it when the needed command line isn't present.
- Arnaldo
> > $ perf record --all-cgroups -- true > > $ perf script -F comm,pid,cgroup > true 337112 /user.slice/user-657345.slice/user@657345.service/... > true 337112 /user.slice/user-657345.slice/user@657345.service/... > true 337112 /user.slice/user-657345.slice/user@657345.service/... > true 337112 /user.slice/user-657345.slice/user@657345.service/... > >Signed-off-by: Namhyung Kim <namhyung@kernel.org> >--- > tools/perf/Documentation/perf-script.txt | 2 +- > tools/perf/builtin-script.c | 16 +++++++++++++++- > 2 files changed, 16 insertions(+), 2 deletions(-) > >diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt >index 8d77182fbf31..82c4dcb9c42e 100644 >--- a/tools/perf/Documentation/perf-script.txt >+++ b/tools/perf/Documentation/perf-script.txt >@@ -134,7 +134,7 @@ OPTIONS > srcline, period, iregs, uregs, brstack, brstacksym, flags, bpf-output, > brstackinsn, brstackinsnlen, brstackoff, callindent, insn, insnlen, synth, > phys_addr, metric, misc, srccode, ipc, data_page_size, code_page_size, ins_lat, >- machine_pid, vcpu. >+ machine_pid, vcpu, cgroup. > Field list can be prepended with the type, trace, sw or hw, > to indicate to which event type the field list applies. > e.g., -F sw:comm,tid,time,ip,sym and -F trace:time,cpu,trace >diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c >index 69394ac0a20d..79976dde99b3 100644 >--- a/tools/perf/builtin-script.c >+++ b/tools/perf/builtin-script.c >@@ -59,6 +59,7 @@ > #include "util/dlfilter.h" > #include "util/record.h" > #include "util/util.h" >+#include "util/cgroup.h" > #include "perf.h" > > #include <linux/ctype.h> >@@ -130,6 +131,7 @@ enum perf_output_field { > PERF_OUTPUT_BRSTACKINSNLEN = 1ULL << 36, > PERF_OUTPUT_MACHINE_PID = 1ULL << 37, > PERF_OUTPUT_VCPU = 1ULL << 38, >+ PERF_OUTPUT_CGROUP = 1ULL << 39, > }; > > struct perf_script { >@@ -200,6 +202,7 @@ struct output_option { > {.str = "brstackinsnlen", .field = PERF_OUTPUT_BRSTACKINSNLEN}, > {.str = "machine_pid", .field = PERF_OUTPUT_MACHINE_PID}, > {.str = "vcpu", .field = PERF_OUTPUT_VCPU}, >+ {.str = "cgroup", .field = PERF_OUTPUT_CGROUP}, > }; > > enum { >@@ -2220,6 +2223,17 @@ 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"); >@@ -3856,7 +3870,7 @@ int cmd_script(int argc, const char **argv) > "brstacksym,flags,data_src,weight,bpf-output,brstackinsn," > "brstackinsnlen,brstackoff,callindent,insn,insnlen,synth," > "phys_addr,metric,misc,srccode,ipc,tod,data_page_size," >- "code_page_size,ins_lat", >+ "code_page_size,ins_lat,machine_pid,vcpu,cgroup", > parse_output_fields), > OPT_BOOLEAN('a', "all-cpus", &system_wide, > "system-wide collection from all CPUs"),
| |