• Kan Liang's avatar
    perf: Add sample_flags to indicate the PMU-filled sample data · 3aac580d
    Kan Liang authored
    On some platforms, some data e.g., timestamps, can be retrieved from
    the PMU driver. Usually, the data from the PMU driver is more accurate.
    The current perf kernel should output the PMU-filled sample data if
    it's available.
    
    To check the availability of the PMU-filled sample data, the current
    perf kernel initializes the related fields in the
    perf_sample_data_init(). When outputting a sample, the perf checks
    whether the field is updated by the PMU driver. If yes, the updated
    value will be output. If not, the perf uses an SW way to calculate the
    value or just outputs the initialized value if an SW way is unavailable
    either.
    
    With more and more data being provided by the PMU driver, more fields
    has to be initialized in the perf_sample_data_init(). That will
    increase the number of cache lines touched in perf_sample_data_init()
    and be harmful to the performance.
    
    Add new "sample_flags" to indicate the PMU-filled sample data. The PMU
    driver should set the corresponding PERF_SAMPLE_ flag when the field is
    updated. The initialization of the corresponding field is not required
    anymore. The following patches will make use of it and remove the
    corresponding fields from the perf_sample_data_init(), which will
    further minimize the number of cache lines touched.
    
    Only clear the sample flags that have already been done by the PMU
    driver in the perf_prepare_sample() for the PERF_RECORD_SAMPLE. For the
    other PERF_RECORD_ event type, the sample data is not available.
    Suggested-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20220901130959.1285717-2-kan.liang@linux.intel.com
    3aac580d
core.c 323 KB