mirror of
https://github.com/torvalds/linux.git
synced 2026-09-19 00:58:02 +02:00
update_lock_stat() handles lock contentions that start but never reach a contention_end event (e.g., locks still held when profiling stops), but previously treated LOCK_AGGR_CGROUP as a no-op due to missing cgroup context in userspace. Fix this by adding a cgroup_id field to struct tstamp_data, recording it at contention_begin using get_current_cgroup_id() when aggr_mode is LOCK_AGGR_CGROUP. Capturing it at contention_begin is semantically correct, the contention cost is incurred by the task that had to wait, not by whatever task happens to be running at contention_end. It is also preferable from a performance standpoint, as contention_end runs just before the task enters the critical section. Update contention_end to use pelem->cgroup_id instead of calling get_current_cgroup_id() dynamically, ensuring both complete and incomplete contention events attribute the wait time to the cgroup at wait-start time consistently. Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Suchit Karunakaran <suchitkarunakaran@gmail.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Tycho Andersen (AMD) <tycho@kernel.org> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
||
|---|---|---|
| .. | ||
| vmlinux | ||
| .gitignore | ||
| augmented_raw_syscalls.bpf.c | ||
| bperf_cgroup.bpf.c | ||
| bperf_cgroup.h | ||
| bperf_follower.bpf.c | ||
| bperf_leader.bpf.c | ||
| bperf_u.h | ||
| bpf_prog_profiler.bpf.c | ||
| func_latency.bpf.c | ||
| kwork_top.bpf.c | ||
| kwork_trace.bpf.c | ||
| lock_contention.bpf.c | ||
| lock_data.h | ||
| off_cpu.bpf.c | ||
| perf_version.h | ||
| sample_filter.bpf.c | ||
| sample-filter.h | ||
| syscall_summary.bpf.c | ||
| syscall_summary.h | ||