lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 23 Sep 2022 19:49:14 -0700 From: Ian Rogers <irogers@...gle.com> To: Namhyung Kim <namhyung@...nel.org> Cc: Arnaldo Carvalho de Melo <acme@...nel.org>, Jiri Olsa <jolsa@...nel.org>, Ingo Molnar <mingo@...nel.org>, Peter Zijlstra <peterz@...radead.org>, LKML <linux-kernel@...r.kernel.org>, Adrian Hunter <adrian.hunter@...el.com>, linux-perf-users@...r.kernel.org Subject: Re: [PATCH 1/3] perf lock: Add -E/--entries option On Fri, Sep 23, 2022 at 5:42 PM Namhyung Kim <namhyung@...nel.org> wrote: > > Like perf top, the -E option can limit number of entries to print. > It can be useful when users want to see top N contended locks only. > > Signed-off-by: Namhyung Kim <namhyung@...nel.org> Acked-by: Ian Rogers <irogers@...gle.com> Thanks, Ian > --- > tools/perf/Documentation/perf-lock.txt | 10 ++++++++++ > tools/perf/builtin-lock.c | 20 +++++++++++++++----- > 2 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/tools/perf/Documentation/perf-lock.txt b/tools/perf/Documentation/perf-lock.txt > index 5f2dc634258e..b23e76200ac2 100644 > --- a/tools/perf/Documentation/perf-lock.txt > +++ b/tools/perf/Documentation/perf-lock.txt > @@ -94,6 +94,11 @@ REPORT OPTIONS > EventManager_De 1845 1 636 > futex-default-S 1609 0 0 > > +-E:: > +--entries=<value>:: > + Display this many entries. > + > + > INFO OPTIONS > ------------ > > @@ -105,6 +110,7 @@ INFO OPTIONS > --map:: > dump map of lock instances (address:name table) > > + > CONTENTION OPTIONS > -------------- > > @@ -154,6 +160,10 @@ CONTENTION OPTIONS > --stack-skip > Number of stack depth to skip when finding a lock caller (default: 3). > > +-E:: > +--entries=<value>:: > + Display this many entries. > + > > SEE ALSO > -------- > diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c > index 25d75fa09b90..1c0d52384d9e 100644 > --- a/tools/perf/builtin-lock.c > +++ b/tools/perf/builtin-lock.c > @@ -58,6 +58,7 @@ static bool use_bpf; > static unsigned long bpf_map_entries = 10240; > static int max_stack_depth = CONTENTION_STACK_DEPTH; > static int stack_skip = CONTENTION_STACK_SKIP; > +static int print_nr_entries = INT_MAX / 2; > > static enum { > LOCK_AGGR_ADDR, > @@ -1266,14 +1267,14 @@ static void print_result(void) > struct lock_stat *st; > struct lock_key *key; > char cut_name[20]; > - int bad, total; > + int bad, total, printed; > > pr_info("%20s ", "Name"); > list_for_each_entry(key, &lock_keys, list) > pr_info("%*s ", key->len, key->header); > pr_info("\n\n"); > > - bad = total = 0; > + bad = total = printed = 0; > while ((st = pop_from_result())) { > total++; > if (st->broken) > @@ -1311,6 +1312,9 @@ static void print_result(void) > pr_info(" "); > } > pr_info("\n"); > + > + if (++printed >= print_nr_entries) > + break; > } > > print_bad_events(bad, total); > @@ -1476,7 +1480,7 @@ static void print_contention_result(struct lock_contention *con) > { > struct lock_stat *st; > struct lock_key *key; > - int bad, total; > + int bad, total, printed; > > list_for_each_entry(key, &lock_keys, list) > pr_info("%*s ", key->len, key->header); > @@ -1486,7 +1490,7 @@ static void print_contention_result(struct lock_contention *con) > else > pr_info(" %10s %s\n\n", "type", "caller"); > > - bad = total = 0; > + bad = total = printed = 0; > if (use_bpf) > bad = bad_hist[BROKEN_CONTENDED]; > > @@ -1507,7 +1511,7 @@ static void print_contention_result(struct lock_contention *con) > /* st->addr contains tid of thread */ > t = perf_session__findnew(session, pid); > pr_info(" %10d %s\n", pid, thread__comm_str(t)); > - continue; > + goto next; > } > > pr_info(" %10s %s\n", get_type_str(st), st->name); > @@ -1527,6 +1531,10 @@ static void print_contention_result(struct lock_contention *con) > pr_info("\t\t\t%#lx %s\n", (unsigned long)ip, buf); > } > } > + > +next: > + if (++printed >= print_nr_entries) > + break; > } > > print_bad_events(bad, total); > @@ -1878,6 +1886,7 @@ int cmd_lock(int argc, const char **argv) > "combine locks in the same class"), > OPT_BOOLEAN('t', "threads", &show_thread_stats, > "show per-thread lock stats"), > + OPT_INTEGER('E', "entries", &print_nr_entries, "display this many functions"), > OPT_PARENT(lock_options) > }; > > @@ -1905,6 +1914,7 @@ int cmd_lock(int argc, const char **argv) > OPT_INTEGER(0, "stack-skip", &stack_skip, > "Set the number of stack depth to skip when finding a lock caller, " > "Default: " __stringify(CONTENTION_STACK_SKIP)), > + OPT_INTEGER('E', "entries", &print_nr_entries, "display this many functions"), > OPT_PARENT(lock_options) > }; > > -- > 2.37.3.998.g577e59143f-goog >
Powered by blists - more mailing lists