• Steven Rostedt (VMware)'s avatar
    tracing/histogram: Rename "cpu" to "common_cpu" · 1e3bac71
    Steven Rostedt (VMware) authored
    Currently the histogram logic allows the user to write "cpu" in as an
    event field, and it will record the CPU that the event happened on.
    
    The problem with this is that there's a lot of events that have "cpu"
    as a real field, and using "cpu" as the CPU it ran on, makes it
    impossible to run histograms on the "cpu" field of events.
    
    For example, if I want to have a histogram on the count of the
    workqueue_queue_work event on its cpu field, running:
    
     ># echo 'hist:keys=cpu' > events/workqueue/workqueue_queue_work/trigger
    
    Gives a misleading and wrong result.
    
    Change the command to "common_cpu" as no event should have "common_*"
    fields as that's a reserved name for fields used by all events. And
    this makes sense here as common_cpu would be a field used by all events.
    
    Now we can even do:
    
     ># echo 'hist:keys=common_cpu,cpu if cpu < 100' > events/workqueue/workqueue_queue_work/trigger
     ># cat events/workqueue/workqueue_queue_work/hist
     # event histogram
     #
     # trigger info: hist:keys=common_cpu,cpu:vals=hitcount:sort=hitcount:size=2048 if cpu < 100 [active]
     #
    
     { common_cpu:          0, cpu:          2 } hitcount:          1
     { common_cpu:          0, cpu:          4 } hitcount:          1
     { common_cpu:          7, cpu:          7 } hitcount:          1
     { common_cpu:          0, cpu:          7 } hitcount:          1
     { common_cpu:          0, cpu:          1 } hitcount:          1
     { common_cpu:          0, cpu:          6 } hitcount:          2
     { common_cpu:          0, cpu:          5 } hitcount:          2
     { common_cpu:          1, cpu:          1 } hitcount:          4
     { common_cpu:          6, cpu:          6 } hitcount:          4
     { common_cpu:          5, cpu:          5 } hitcount:         14
     { common_cpu:          4, cpu:          4 } hitcount:         26
     { common_cpu:          0, cpu:          0 } hitcount:         39
     { common_cpu:          2, cpu:          2 } hitcount:        184
    
    Now for backward compatibility, I added a trick. If "cpu" is used, and
    the field is not found, it will fall back to "common_cpu" and work as
    it did before. This way, it will still work for old programs that use
    "cpu" to get the actual CPU, but if the event has a "cpu" as a field, it
    will get that event's "cpu" field, which is probably what it wants
    anyway.
    
    I updated the tracefs/README to include documentation about both the
    common_timestamp and the common_cpu. This way, if that text is present in
    the README, then an application can know that common_cpu is supported over
    just plain "cpu".
    
    Link: https://lkml.kernel.org/r/20210721110053.26b4f641@oasis.local.home
    
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: stable@vger.kernel.org
    Fixes: 8b7622bf ("tracing: Add cpu field for hist triggers")
    Reviewed-by: default avatarTom Zanussi <zanussi@kernel.org>
    Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    1e3bac71
trace.c 246 KB