Re: [PATCH] perf record: Synthesize cgroup events only if needed
Hi Arnaldo, On Sat, Nov 28, 2020 at 2:30 AM Arnaldo Carvalho de Melo wrote: > > Em Fri, Nov 27, 2020 at 04:45:57PM +0100, Jiri Olsa escreveu: > > On Fri, Nov 27, 2020 at 02:43:56PM +0900, Namhyung Kim wrote: > > > It didn't check the tool->cgroup_events bit which is set when > > > the --all-cgroups option is given. Without it, samples will not have > > > cgroup info so no reason to synthesize. > > > > > > We can check the PERF_RECORD_CGROUP records after running perf record > > > *WITHOUT* the --all-cgroups option: > > > > > > Before: > > > $ perf report -D | grep CGROUP > > > 0 0 0x8430 [0x38]: PERF_RECORD_CGROUP cgroup: 1 / > > > CGROUP events: 1 > > > CGROUP events: 0 > > > CGROUP events: 0 > > > > > > After: > > > $ perf report -D | grep CGROUP > > > CGROUP events: 0 > > > CGROUP events: 0 > > > CGROUP events: 0 > > > > > > Fixes: 8fb4b67939e16 ("perf record: Add --all-cgroups option") > > > Signed-off-by: Namhyung Kim > > > --- > > > tools/perf/util/synthetic-events.c | 3 +++ > > > 1 file changed, 3 insertions(+) > > > > > > diff --git a/tools/perf/util/synthetic-events.c > > > b/tools/perf/util/synthetic-events.c > > > index 8a23391558cf..d9c624377da7 100644 > > > --- a/tools/perf/util/synthetic-events.c > > > +++ b/tools/perf/util/synthetic-events.c > > > @@ -563,6 +563,9 @@ int perf_event__synthesize_cgroups(struct perf_tool > > > *tool, > > > char cgrp_root[PATH_MAX]; > > > size_t mount_len; /* length of mount point in the path */ > > > > > > + if (!tool || !tool->cgroup_events) > > > + return 0; > > > > can !tool actually happen here? or it's just being extra cautious > > > > Acked-by: Jiri Olsa > > Thanks, tested with/without --all-cgroups and applied. Thanks for doing that! Namhyung
Re: [PATCH] perf record: Synthesize cgroup events only if needed
Hi Jiri, On Sat, Nov 28, 2020 at 12:46 AM Jiri Olsa wrote: > > On Fri, Nov 27, 2020 at 02:43:56PM +0900, Namhyung Kim wrote: > > It didn't check the tool->cgroup_events bit which is set when > > the --all-cgroups option is given. Without it, samples will not have > > cgroup info so no reason to synthesize. > > > > We can check the PERF_RECORD_CGROUP records after running perf record > > *WITHOUT* the --all-cgroups option: > > > > Before: > > $ perf report -D | grep CGROUP > > 0 0 0x8430 [0x38]: PERF_RECORD_CGROUP cgroup: 1 / > > CGROUP events: 1 > > CGROUP events: 0 > > CGROUP events: 0 > > > > After: > > $ perf report -D | grep CGROUP > > CGROUP events: 0 > > CGROUP events: 0 > > CGROUP events: 0 > > > > Fixes: 8fb4b67939e16 ("perf record: Add --all-cgroups option") > > Signed-off-by: Namhyung Kim > > --- > > tools/perf/util/synthetic-events.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/tools/perf/util/synthetic-events.c > > b/tools/perf/util/synthetic-events.c > > index 8a23391558cf..d9c624377da7 100644 > > --- a/tools/perf/util/synthetic-events.c > > +++ b/tools/perf/util/synthetic-events.c > > @@ -563,6 +563,9 @@ int perf_event__synthesize_cgroups(struct perf_tool > > *tool, > > char cgrp_root[PATH_MAX]; > > size_t mount_len; /* length of mount point in the path */ > > > > + if (!tool || !tool->cgroup_events) > > + return 0; > > can !tool actually happen here? or it's just being extra cautious Actually I just copied the namespace code. :). It's only called from perf record and top, and neither of them pass NULL. > > Acked-by: Jiri Olsa Thanks, Namhyung
Re: [PATCH] perf record: Synthesize cgroup events only if needed
Em Fri, Nov 27, 2020 at 04:45:57PM +0100, Jiri Olsa escreveu: > On Fri, Nov 27, 2020 at 02:43:56PM +0900, Namhyung Kim wrote: > > It didn't check the tool->cgroup_events bit which is set when > > the --all-cgroups option is given. Without it, samples will not have > > cgroup info so no reason to synthesize. > > > > We can check the PERF_RECORD_CGROUP records after running perf record > > *WITHOUT* the --all-cgroups option: > > > > Before: > > $ perf report -D | grep CGROUP > > 0 0 0x8430 [0x38]: PERF_RECORD_CGROUP cgroup: 1 / > > CGROUP events: 1 > > CGROUP events: 0 > > CGROUP events: 0 > > > > After: > > $ perf report -D | grep CGROUP > > CGROUP events: 0 > > CGROUP events: 0 > > CGROUP events: 0 > > > > Fixes: 8fb4b67939e16 ("perf record: Add --all-cgroups option") > > Signed-off-by: Namhyung Kim > > --- > > tools/perf/util/synthetic-events.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/tools/perf/util/synthetic-events.c > > b/tools/perf/util/synthetic-events.c > > index 8a23391558cf..d9c624377da7 100644 > > --- a/tools/perf/util/synthetic-events.c > > +++ b/tools/perf/util/synthetic-events.c > > @@ -563,6 +563,9 @@ int perf_event__synthesize_cgroups(struct perf_tool > > *tool, > > char cgrp_root[PATH_MAX]; > > size_t mount_len; /* length of mount point in the path */ > > > > + if (!tool || !tool->cgroup_events) > > + return 0; > > can !tool actually happen here? or it's just being extra cautious > > Acked-by: Jiri Olsa Thanks, tested with/without --all-cgroups and applied. - Arnaldo
Re: [PATCH] perf record: Synthesize cgroup events only if needed
On Fri, Nov 27, 2020 at 02:43:56PM +0900, Namhyung Kim wrote: > It didn't check the tool->cgroup_events bit which is set when > the --all-cgroups option is given. Without it, samples will not have > cgroup info so no reason to synthesize. > > We can check the PERF_RECORD_CGROUP records after running perf record > *WITHOUT* the --all-cgroups option: > > Before: > $ perf report -D | grep CGROUP > 0 0 0x8430 [0x38]: PERF_RECORD_CGROUP cgroup: 1 / > CGROUP events: 1 > CGROUP events: 0 > CGROUP events: 0 > > After: > $ perf report -D | grep CGROUP > CGROUP events: 0 > CGROUP events: 0 > CGROUP events: 0 > > Fixes: 8fb4b67939e16 ("perf record: Add --all-cgroups option") > Signed-off-by: Namhyung Kim > --- > tools/perf/util/synthetic-events.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/tools/perf/util/synthetic-events.c > b/tools/perf/util/synthetic-events.c > index 8a23391558cf..d9c624377da7 100644 > --- a/tools/perf/util/synthetic-events.c > +++ b/tools/perf/util/synthetic-events.c > @@ -563,6 +563,9 @@ int perf_event__synthesize_cgroups(struct perf_tool *tool, > char cgrp_root[PATH_MAX]; > size_t mount_len; /* length of mount point in the path */ > > + if (!tool || !tool->cgroup_events) > + return 0; can !tool actually happen here? or it's just being extra cautious Acked-by: Jiri Olsa thanks, jirka > + > if (cgroupfs_find_mountpoint(cgrp_root, PATH_MAX, "perf_event") < 0) { > pr_debug("cannot find cgroup mount point\n"); > return -1; > -- > 2.29.2.454.gaff20da3a2-goog >
[PATCH] perf record: Synthesize cgroup events only if needed
It didn't check the tool->cgroup_events bit which is set when the --all-cgroups option is given. Without it, samples will not have cgroup info so no reason to synthesize. We can check the PERF_RECORD_CGROUP records after running perf record *WITHOUT* the --all-cgroups option: Before: $ perf report -D | grep CGROUP 0 0 0x8430 [0x38]: PERF_RECORD_CGROUP cgroup: 1 / CGROUP events: 1 CGROUP events: 0 CGROUP events: 0 After: $ perf report -D | grep CGROUP CGROUP events: 0 CGROUP events: 0 CGROUP events: 0 Fixes: 8fb4b67939e16 ("perf record: Add --all-cgroups option") Signed-off-by: Namhyung Kim --- tools/perf/util/synthetic-events.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c index 8a23391558cf..d9c624377da7 100644 --- a/tools/perf/util/synthetic-events.c +++ b/tools/perf/util/synthetic-events.c @@ -563,6 +563,9 @@ int perf_event__synthesize_cgroups(struct perf_tool *tool, char cgrp_root[PATH_MAX]; size_t mount_len; /* length of mount point in the path */ + if (!tool || !tool->cgroup_events) + return 0; + if (cgroupfs_find_mountpoint(cgrp_root, PATH_MAX, "perf_event") < 0) { pr_debug("cannot find cgroup mount point\n"); return -1; -- 2.29.2.454.gaff20da3a2-goog