Re: [PATCH v5 1/1] mmap_lock: add tracepoints around lock acquisition

From: Vlastimil Babka
Date: Mon Nov 02 2020 - 07:49:18 EST


On 10/28/20 12:07 AM, Axel Rasmussen wrote:
The goal of these tracepoints is to be able to debug lock contention
issues. This lock is acquired on most (all?) mmap / munmap / page fault
operations, so a multi-threaded process which does a lot of these can
experience significant contention.

We trace just before we start acquisition, when the acquisition returns
(whether it succeeded or not), and when the lock is released (or
downgraded). The events are broken out by lock type (read / write).

The events are also broken out by memcg path. For container-based
workloads, users often think of several processes in a memcg as a single
logical "task", so collecting statistics at this level is useful.

The end goal is to get latency information. This isn't directly included
in the trace events. Instead, users are expected to compute the time
between "start locking" and "acquire returned", using e.g. synthetic
events or BPF. The benefit we get from this is simpler code.

Because we use tracepoint_enabled() to decide whether or not to trace,
this patch has effectively no overhead unless tracepoints are enabled at
runtime. If tracepoints are enabled, there is a performance impact, but
how much depends on exactly what e.g. the BPF program does.

[ rostedt@xxxxxxxxxxx: in-depth examples of tracepoint_enabled() usage,
and per-cpu-per-context buffer design ]

Great, thanks Steven.

Signed-off-by: Axel Rasmussen <axelrasmussen@xxxxxxxxxx>

Acked-by: Vlastimil Babka <vbabka@xxxxxxx>