• Alban Crequy's avatar
    tracing/kprobes: expose maxactive for kretprobe in kprobe_events · 696ced4f
    Alban Crequy authored
    When a kretprobe is installed on a kernel function, there is a maximum
    limit of how many calls in parallel it can catch (aka "maxactive"). A
    kernel module could call register_kretprobe() and initialize maxactive
    (see example in samples/kprobes/kretprobe_example.c).
    
    But that is not exposed to userspace and it is currently not possible to
    choose maxactive when writing to /sys/kernel/debug/tracing/kprobe_events
    
    The default maxactive can be as low as 1 on single-core with a
    non-preemptive kernel. This is too low and we need to increase it not
    only for recursive functions, but for functions that sleep or resched.
    
    This patch updates the format of the command that can be written to
    kprobe_events so that maxactive can be optionally specified.
    
    I need this for a bpf program attached to the kretprobe of
    inet_csk_accept, which can sleep for a long time.
    
    This patch includes a basic selftest:
    
    > # ./ftracetest -v  test.d/kprobe/
    > === Ftrace unit tests ===
    > [1] Kprobe dynamic event - adding and removing	[PASS]
    > [2] Kprobe dynamic event - busy event check	[PASS]
    > [3] Kprobe dynamic event with arguments	[PASS]
    > [4] Kprobes event arguments with types	[PASS]
    > [5] Kprobe dynamic event with function tracer	[PASS]
    > [6] Kretprobe dynamic event with arguments	[PASS]
    > [7] Kretprobe dynamic event with maxactive	[PASS]
    >
    > # of passed:  7
    > # of failed:  0
    > # of unresolved:  0
    > # of untested:  0
    > # of unsupported:  0
    > # of xfailed:  0
    > # of undefined(test bug):  0
    
    BugLink: https://github.com/iovisor/bcc/issues/1072
    Link: http://lkml.kernel.org/r/1491215782-15490-1-git-send-email-alban@kinvolk.ioAcked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarAlban Crequy <alban@kinvolk.io>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    696ced4f
trace_kprobe.c 37.8 KB