• Ian Rogers's avatar
    perf evsel: Refactor tool events · 6828d692
    Ian Rogers authored
    Tool events unnecessarily open a dummy perf event which is useless
    even with `perf record` which will still open a dummy event. Change
    the behavior of tool events so:
    
     - duration_time - call `rdclock` on open and then report the count as
       a delta since the start in evsel__read_counter. This moves code out
       of builtin-stat making it more general purpose.
    
     - user_time/system_time - open the fd as either `/proc/pid/stat` or
       `/proc/stat` for cases like system wide. evsel__read_counter will
       read the appropriate field out of the procfs file. These values
       were previously supplied by wait4, if the procfs read fails then
       the wait4 values are used, assuming the process/thread terminated.
       By reading user_time and system_time this way, interval mode, per
       PID and per CPU can be supported although there are restrictions
       given what the files provide (e.g. per PID can't be combined with
       per CPU).
    
    Opening any of the tool events for `perf record` is changed to return
    invalid.
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Tested-by: default avatarWeilin Wang <weilin.wang@intel.com>
    Cc: Ravi Bangoria <ravi.bangoria@amd.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
    Cc: Ze Gao <zegao2021@gmail.com>
    Cc: Song Liu <song@kernel.org>
    Cc: Leo Yan <leo.yan@linux.dev>
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Link: https://lore.kernel.org/r/20240503232849.17752-1-irogers@google.com
    6828d692
evsel.c 87.7 KB