The --lock-cgroup option shows lock contention stats break down by cgroups. Add LOCK_AGGR_CGROUP mode and use it instead of use_cgroup field. $ sudo ./perf lock con -ab --lock-cgroup sleep 1 contended total wait max wait avg wait cgroup 8 15.70 us 6.34 us 1.96 us / 2 1.48 us 747 ns 738 ns /user.slice/.../app.slice/app-gnome-google\x2dchrome-6442.scope 1 848 ns 848 ns 848 ns /user.slice/.../session.slice/org.gnome.Shell@x11.service 1 220 ns 220 ns 220 ns /user.slice/.../session.slice/pipewire-pulse.service For now, the cgroup mode only works with BPF (-b). Committer notes: Remove -g as it is used in the other tools with a clear meaning of collect/show callchains. As agreed with Namhyung off list. Reviewed-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Hao Luo <haoluo@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Song Liu <song@kernel.org> Cc: bpf@vger.kernel.org Link: https://lore.kernel.org/r/20230906174903.346486-4-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
50 lines
966 B
C
50 lines
966 B
C
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
/* Data structures shared between BPF and tools. */
|
|
#ifndef UTIL_BPF_SKEL_LOCK_DATA_H
|
|
#define UTIL_BPF_SKEL_LOCK_DATA_H
|
|
|
|
struct contention_key {
|
|
u32 stack_id;
|
|
u32 pid;
|
|
u64 lock_addr_or_cgroup;
|
|
};
|
|
|
|
#define TASK_COMM_LEN 16
|
|
|
|
struct contention_task_data {
|
|
char comm[TASK_COMM_LEN];
|
|
};
|
|
|
|
/* default buffer size */
|
|
#define MAX_ENTRIES 16384
|
|
|
|
/*
|
|
* Upper bits of the flags in the contention_data are used to identify
|
|
* some well-known locks which do not have symbols (non-global locks).
|
|
*/
|
|
#define LCD_F_MMAP_LOCK (1U << 31)
|
|
#define LCD_F_SIGHAND_LOCK (1U << 30)
|
|
|
|
#define LCB_F_MAX_FLAGS (1U << 7)
|
|
|
|
struct contention_data {
|
|
u64 total_time;
|
|
u64 min_time;
|
|
u64 max_time;
|
|
u32 count;
|
|
u32 flags;
|
|
};
|
|
|
|
enum lock_aggr_mode {
|
|
LOCK_AGGR_ADDR = 0,
|
|
LOCK_AGGR_TASK,
|
|
LOCK_AGGR_CALLER,
|
|
LOCK_AGGR_CGROUP,
|
|
};
|
|
|
|
enum lock_class_sym {
|
|
LOCK_CLASS_NONE,
|
|
LOCK_CLASS_RQLOCK,
|
|
};
|
|
|
|
#endif /* UTIL_BPF_SKEL_LOCK_DATA_H */
|