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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP-5=fUb9muc-5ncaOvWjciXydOhiS7S+5y_L8QR=A-PDU2jCw@mail.gmail.com>
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ