Search code examples
performancecountertracetrace32lauterbach

Exporting BMC trace flow via Trace32


I am working with two HW platforms that include two ARM processors:

  • Cortex-A15 and
  • Cortex-R5.

I would like to export via Lauterbach Trace32 a mixed trace composed of program flow and BMC values (benchmark counters / performance counters). To clarify my intent, I provide the following synthetic example:

Instruction | Cache Misses | ... |
------------+--------------+------
 0x1234     | 1            | 0
 0x1235     | 1            | 0
 0x1236     | 2            | 0 

I tried to utilize the following commands to properly set the tracer:

bmc.PMN0 DCMISS
bmc.export ON
bmc.trace ON
bmc.select PMN0

Unfortunately, I am not able to export a trace containing the BMC I set. I already tried with some of the trace.export commands but I never succeeded.

Does anyone know how to produce such a trace? Thanks.


Solution

  • On Cortex-A and Cortex-R the performance counters (aka. "BenchMark Counters (BMC)") can usually not be transmitted via CoreSight trace.
    (Btw.: Some Cortex-M can export the BMC via CoreSight ITM. A list of these processors is listed in this table, DWT column).

    However the performance counters can be read during run-time, which allows to sample their values during run-time.

    To sample the performance counters during run-time enable the SNOOPer with SNOOP.OFF and SNOOP.AutoArm ON and select the BMC counters with SNOOPer.Mode BMC. View the results with SNOOPer.List.

    To save the results to hard drive for later analysis you can use SNOOPer.SAVE * and re-load it later with SNOOPer.LOAD *