Messages in this thread | | | From | Ian Rogers <> | Date | Wed, 1 Jun 2022 23:29:42 -0700 | Subject | Re: [PATCH 4/5] perf record: Allow to specify max stack depth of fp callchain |
| |
On Tue, May 31, 2022 at 11:58 PM Namhyung Kim <namhyung@kernel.org> wrote: > > Currently it has no interface to specify the max stack depth for perf > record. Extend the command line parameter to accept a number after > 'fp' to specify the depth like '--call-graph fp,32'.
It is valid to have call-graph=fp as a modifier on an event. To support a depth with that we couldn't use ',' as it is already the separator between modifiers. For consistency maybe a different separator should be used here?
Thanks, Ian
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > tools/perf/Documentation/perf-record.txt | 5 +++++ > tools/perf/util/callchain.c | 18 ++++++++++++------ > 2 files changed, 17 insertions(+), 6 deletions(-) > > diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt > index b4e9ef7edfef..d2759e2ccf9e 100644 > --- a/tools/perf/Documentation/perf-record.txt > +++ b/tools/perf/Documentation/perf-record.txt > @@ -275,6 +275,11 @@ OPTIONS > User can change the size by passing the size after comma like > "--call-graph dwarf,4096". > > + When "fp" recording is used, perf tries to save stack enties > + up to the number specified in sysctl.kernel.perf_event_max_stack > + by default. User can change the number by passing it after comma > + like "--call-graph fp,32". > + > -q:: > --quiet:: > Don't print any message, useful for scripting. > diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c > index 5c27a4b2e7a7..7e663673f79f 100644 > --- a/tools/perf/util/callchain.c > +++ b/tools/perf/util/callchain.c > @@ -31,6 +31,7 @@ > #include "callchain.h" > #include "branch.h" > #include "symbol.h" > +#include "util.h" > #include "../perf.h" > > #define CALLCHAIN_PARAM_DEFAULT \ > @@ -266,12 +267,17 @@ int parse_callchain_record(const char *arg, struct callchain_param *param) > do { > /* Framepointer style */ > if (!strncmp(name, "fp", sizeof("fp"))) { > - if (!strtok_r(NULL, ",", &saveptr)) { > - param->record_mode = CALLCHAIN_FP; > - ret = 0; > - } else > - pr_err("callchain: No more arguments " > - "needed for --call-graph fp\n"); > + ret = 0; > + param->record_mode = CALLCHAIN_FP; > + > + tok = strtok_r(NULL, ",", &saveptr); > + if (tok) { > + unsigned long size; > + > + size = strtoul(tok, &name, 0); > + if (size < (unsigned) sysctl__max_stack()) > + param->max_stack = size; > + } > break; > > /* Dwarf style */ > -- > 2.36.1.255.ge46751e96f-goog >
| |