• Axel Rasmussen's avatar
    mm: mmap_lock: add tracepoints around lock acquisition · 2b5067a8
    Axel Rasmussen authored
    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.
    
    [axelrasmussen@google.com: fix use-after-free race and css ref leak in tracepoints]
      Link: https://lkml.kernel.org/r/20201130233504.3725241-1-axelrasmussen@google.com
    [axelrasmussen@google.com: v3]
      Link: https://lkml.kernel.org/r/20201207213358.573750-1-axelrasmussen@google.com
    [rostedt@goodmis.org: in-depth examples of tracepoint_enabled() usage, and per-cpu-per-context buffer design]
    
    Link: https://lkml.kernel.org/r/20201105211739.568279-2-axelrasmussen@google.comSigned-off-by: default avatarAxel Rasmussen <axelrasmussen@google.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Michel Lespinasse <walken@google.com>
    Cc: Daniel Jordan <daniel.m.jordan@oracle.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Chinwen Chang <chinwen.chang@mediatek.com>
    Cc: Davidlohr Bueso <dbueso@suse.de>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Laurent Dufour <ldufour@linux.ibm.com>
    Cc: Yafang Shao <laoar.shao@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2b5067a8
Makefile 4.34 KB