lkml.org 
[lkml]   [2022]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 1/3] perf lock: Add -E/--entries option
Date
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@kernel.org>
---
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
\
 
 \ /
  Last update: 2022-09-24 02:42    [W:0.124 / U:0.272 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site