• Tom Zanussi's avatar
    tracing: add per-event filtering · 7ce7e424
    Tom Zanussi authored
    This patch adds per-event filtering to the event tracing subsystem.
    
    It adds a 'filter' debugfs file to each event directory.  This file can
    be written to to set filters; reading from it will display the current
    set of filters set for that event.
    
    Basically, any field listed in the 'format' file for an event can be
    filtered on (including strings, but not yet other array types) using
    either matching ('==') or non-matching ('!=') 'predicates'.  A
    'predicate' can be either a single expression:
    
     # echo pid != 0 > filter
    
     # cat filter
     pid != 0
    
    or a compound expression of up to 8 sub-expressions combined using '&&'
    or '||':
    
     # echo comm == Xorg > filter
     # echo "&& sig != 29" > filter
    
     # cat filter
     comm == Xorg
     && sig != 29
    
    Only events having field values matching an expression will be available
    in the trace output; non-matching events are discarded.
    
    Note that a compound expression is built up by echoing each
    sub-expression separately - it's not the most efficient way to do
    things, but it keeps the parser simple and assumes that compound
    expressions will be relatively uncommon.  In any case, a subsequent
    patch introducing a way to set filters for entire subsystems should
    mitigate any need to do this for lots of events.
    
    Setting a filter without an '&&' or '||' clears the previous filter
    completely and sets the filter to the new expression:
    
     # cat filter
     comm == Xorg
     && sig != 29
    
     # echo comm != Xorg
    
     # cat filter
     comm != Xorg
    
    To clear a filter, echo 0 to the filter file:
    
     # echo 0 > filter
     # cat filter
     none
    
    The limit of 8 predicates for a compound expression is arbitrary - for
    efficiency, it's implemented as an array of pointers to predicates, and
    8 seemed more than enough for any filter...
    Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
    Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    LKML-Reference: <1237710665.7703.48.camel@charm-linux>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    7ce7e424
trace.h 23.3 KB