• Kalesh Singh's avatar
    tracing: Add support for creating hist trigger variables from literal · 52cfb373
    Kalesh Singh authored
    Currently hist trigger expressions don't support the use of numeric
    literals:
    	e.g. echo 'hist:keys=common_pid:x=$y-1234'
    		--> is not valid expression syntax
    
    Having the ability to use numeric constants in hist triggers supports
    a wider range of expressions for creating variables.
    
    Add support for creating trace event histogram variables from numeric
    literals.
    
    	e.g. echo 'hist:keys=common_pid:x=1234,y=size-1024' >> event/trigger
    
    A negative numeric constant is created, using unary minus operator
    (parentheses are required).
    
    	e.g. echo 'hist:keys=common_pid:z=-(2)' >> event/trigger
    
    Constants can be used with division/multiplication (added in the
    next patch in this series) to implement granularity filters for frequent
    trace events. For instance we can limit emitting the rss_stat
    trace event to when there is a 512KB cross over in the rss size:
    
      # Create a synthetic event to monitor instead of the high frequency
      # rss_stat event
      echo 'rss_stat_throttled unsigned int mm_id; unsigned int curr;
    	int member; long size' >> tracing/synthetic_events
    
      # Create a hist trigger that emits the synthetic rss_stat_throttled
      # event only when the rss size crosses a 512KB boundary.
      echo 'hist:keys=keys=mm_id,member:bucket=size/0x80000:onchange($bucket)
          .rss_stat_throttled(mm_id,curr,member,size)'
            >> events/kmem/rss_stat/trigger
    
    A use case for using constants with addition/subtraction is not yet
    known, but for completeness the use of constants are supported for all
    operators.
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-2-kaleshsingh@google.comSigned-off-by: default avatarKalesh Singh <kaleshsingh@google.com>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    52cfb373
trace_events_hist.c 148 KB