mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
perf lock: Add --map-nr-entries option
The --map-nr-entries option is to control number of max entries in the perf lock contention BPF maps. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Blake Jones <blakejones@google.com> Cc: Boqun Feng <boqun.feng@gmail.com> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Song Liu <songliubraving@fb.com> Cc: Waiman Long <longman@redhat.com> Cc: Will Deacon <will@kernel.org> Link: https://lore.kernel.org/r/20220802191004.347740-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
447ec4e5fa
commit
ceb13bfc01
4 changed files with 29 additions and 1 deletions
|
@ -145,6 +145,9 @@ CONTENTION OPTIONS
|
|||
--tid=::
|
||||
Record events on existing thread ID (comma separated list).
|
||||
|
||||
--map-nr-entries::
|
||||
Maximum number of BPF map entries (default: 10240).
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
|
|
|
@ -56,6 +56,7 @@ static struct rb_root thread_stats;
|
|||
static bool combine_locks;
|
||||
static bool show_thread_stats;
|
||||
static bool use_bpf;
|
||||
static unsigned long bpf_map_entries = 10240;
|
||||
|
||||
static enum {
|
||||
LOCK_AGGR_ADDR,
|
||||
|
@ -1598,6 +1599,7 @@ static int __cmd_contention(int argc, const char **argv)
|
|||
struct lock_contention con = {
|
||||
.target = &target,
|
||||
.result = &lockhash_table[0],
|
||||
.map_nr_entries = bpf_map_entries,
|
||||
};
|
||||
|
||||
session = perf_session__new(use_bpf ? NULL : &data, &eops);
|
||||
|
@ -1787,6 +1789,24 @@ setup_args:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int parse_map_entry(const struct option *opt, const char *str,
|
||||
int unset __maybe_unused)
|
||||
{
|
||||
unsigned long *len = (unsigned long *)opt->value;
|
||||
unsigned long val;
|
||||
char *endptr;
|
||||
|
||||
errno = 0;
|
||||
val = strtoul(str, &endptr, 0);
|
||||
if (*endptr != '\0' || errno != 0) {
|
||||
pr_err("invalid BPF map length: %s\n", str);
|
||||
return -1;
|
||||
}
|
||||
|
||||
*len = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmd_lock(int argc, const char **argv)
|
||||
{
|
||||
const struct option lock_options[] = {
|
||||
|
@ -1836,9 +1856,10 @@ int cmd_lock(int argc, const char **argv)
|
|||
"List of cpus to monitor"),
|
||||
OPT_STRING('p', "pid", &target.pid, "pid",
|
||||
"Trace on existing process id"),
|
||||
/* TODO: Add short option -t after -t/--tracer can be removed. */
|
||||
OPT_STRING(0, "tid", &target.tid, "tid",
|
||||
"Trace on existing thread id (exclusive to --pid)"),
|
||||
OPT_CALLBACK(0, "map-nr-entries", &bpf_map_entries, "num",
|
||||
"Max number of BPF map entries", parse_map_entry),
|
||||
OPT_PARENT(lock_options)
|
||||
};
|
||||
|
||||
|
|
|
@ -40,6 +40,9 @@ int lock_contention_prepare(struct lock_contention *con)
|
|||
return -1;
|
||||
}
|
||||
|
||||
bpf_map__set_max_entries(skel->maps.stacks, con->map_nr_entries);
|
||||
bpf_map__set_max_entries(skel->maps.lock_stat, con->map_nr_entries);
|
||||
|
||||
if (target__has_cpu(target))
|
||||
ncpus = perf_cpu_map__nr(evlist->core.user_requested_cpus);
|
||||
if (target__has_task(target))
|
||||
|
|
|
@ -112,6 +112,7 @@ struct lock_contention {
|
|||
struct target *target;
|
||||
struct machine *machine;
|
||||
struct hlist_head *result;
|
||||
unsigned long map_nr_entries;
|
||||
};
|
||||
|
||||
#ifdef HAVE_BPF_SKEL
|
||||
|
|
Loading…
Add table
Reference in a new issue