• S
    perf: aux: Add flags for the buffer format · 547b6098
    Suzuki K Poulose 提交于
    Allocate a byte for advertising the PMU specific format type
    of the given AUX record. A PMU could end up providing hardware
    trace data in multiple format in a single session.
    
    e.g, The format of hardware buffer produced by CoreSight ETM
    PMU depends on the type of the "sink" device used for collection
    for an event (Traditional TMC-ETR/Bs with formatting or
    TRBEs without any formatting).
    
     # Boring story of why this is needed. Goto The_End_of_Story for skipping.
    
    CoreSight ETM trace allows instruction level tracing of Arm CPUs.
    The ETM generates the CPU excecution trace and pumps it into CoreSight
    AMBA Trace Bus and is collected by a different CoreSight component
    (traditionally CoreSight TMC-ETR /ETB/ETF), called "sink".
    Important to note that there is no guarantee that every CPU has
    a dedicated sink.  Thus multiple ETMs could pump the trace data
    into the same "sink" and thus they apply additional formatting
    of the trace data for the user to decode it properly and attribute
    the trace data to the corresponding ETM.
    
    However, with the introduction of Arm Trace buffer Extensions (TRBE),
    we now have a dedicated per-CPU architected sink for collecting the
    trace. Since the TRBE is always per-CPU, it doesn't apply any formatting
    of the trace. The support for this driver is under review [1].
    
    Now a system could have a per-cpu TRBE and one or more shared
    TMC-ETRs on the system. A user could choose a "specific" sink
    for a perf session (e.g, a TMC-ETR) or the driver could automatically
    select the nearest sink for a given ETM. It is possible that
    some ETMs could end up using TMC-ETR (e.g, if the TRBE is not
    usable on the CPU) while the others using TRBE in a single
    perf session. Thus we now have "formatted" trace collected
    from TMC-ETR and "unformatted" trace collected from TRBE.
    However, we don't get into a situation where a single event
    could end up using TMC-ETR & TRBE. i.e, any AUX buffer is
    guaranteed to be either RAW or FORMATTED, but not a mix
    of both.
    
    As for perf decoding, we need to know the type of the data
    in the individual AUX buffers, so that it can set up the
    "OpenCSD" (library for decoding CoreSight trace) decoder
    instance appropriately. Thus the perf.data file must conatin
    the hints for the tool to decode the data correctly.
    
    Since this is a runtime variable, and perf tool doesn't have
    a control on what sink gets used (in case of automatic sink
    selection), we need this information made available from
    the PMU driver for each AUX record.
    
     # The_End_of_Story
    
    Cc: Peter Ziljstra <peterz@infradead.org>
    Cc: alexander.shishkin@linux.intel.com
    Cc: mingo@redhat.com
    Cc: will@kernel.org
    Cc: mark.rutland@arm.com
    Cc: mike.leach@linaro.org
    Cc: acme@kernel.org
    Cc: jolsa@redhat.com
    Cc: Mathieu Poirier <mathieu.poirer@linaro.org>
    Reviewed by: Mike Leach <mike.leach@linaro.org>
    Acked-by: NPeter Ziljstra <peterz@infradead.org>
    Signed-off-by: NSuzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20210405164307.1720226-2-suzuki.poulose@arm.comSigned-off-by: NMathieu Poirier <mathieu.poirier@linaro.org>
    547b6098
perf_event.h 37.5 KB