mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
perf lock: Add -E/--entries option
Like in '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> Acked-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20220924004221.841024-1-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
84838712e9
commit
6282a1f4f8
2 changed files with 25 additions and 5 deletions
|
@ -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
|
||||
--------
|
||||
|
|
|
@ -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)
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue