• S
    tracing: Add TRACE_EVENT_CONDITIONAL() · 287050d3
    Steven Rostedt 提交于
    There are instances in the kernel that we only want to trace
    a tracepoint when a certain condition is set. But we do not
    want to test for that condition in the core kernel.
    If we test for that condition before calling the tracepoin, then
    we will be performing that test even when tracing is not enabled.
    This is 99.99% of the time.
    
    We currently can just filter out on that condition, but that happens
    after we write to the trace buffer. We just wasted time writing to
    the ring buffer for an event we never cared about.
    
    This patch adds:
    
       TRACE_EVENT_CONDITION() and DEFINE_EVENT_CONDITION()
    
    These have a new TP_CONDITION() argument that comes right after
    the TP_ARGS().  This condition can use the parameters of TP_ARGS()
    in the TRACE_EVENT() to determine if the tracepoint should be traced
    or not. The TP_CONDITION() will be placed in a if (cond) trace;
    
    For example, for the tracepoint sched_wakeup, it is useless to
    trace a wakeup event where the caller never actually wakes
    anything up (where success == 0). So adding:
    
    	TP_CONDITION(success),
    
    which uses the "success" parameter of the wakeup tracepoint
    will have it only trace when we have successfully woken up a
    task.
    Acked-by: NMathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Acked-by: NFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Arjan van de Ven <arjan@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
    287050d3
tracepoint.h 11.6 KB