On 26/11/2025 2:44 pm, Leo Yan wrote:
On Wed, Nov 26, 2025 at 02:20:14PM +0000, Mike Leach wrote:
[...]
* - timestamp
- Session local version of the system wide setting::ref:`ETMv4_MODE_TIMESTAMP
<coresight-timestamp>`
- Controls generation and interval of timestamps.0 = off, 1 = minimum interval .. 15 = maximum interval.Values 1 - 14 use a counter that decrements every cycle to generate atimestamp on underflow. The reload value for the counter is 2 ^(interval
- 1). If the value is 1 then the reload value is 1, if the value is 11then the reload value is 1024 etc.Setting the maximum interval (15) will disable the counter generatedtimestamps, freeing the counter resource, leaving only ones emittedwhen
a SYNC packet is generated. The sync interval is controlled withTRCSYNCPR.PERIOD which is every 4096 bytes of trace by default.What is the default value?
From driver's pespective, the default value is 0 (disabled). We do set default values in perf: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tre e/tools/perf/arch/arm/util/cs-etm.c#n444
IIUC, the default value would be the same with or without this series.
As far as I recall when this command line parameter was a bool then: perf -e cs_etm/timestamp/ <program> is sufficient to turn on timestamping.
Hmm... with the latest perf, we must assign value to `timestamp`, otherwise perf will report error:
# /mnt/build/perf record -e cs_etm/timestamp/ -C 0 -- taskset -c 0 ls event syntax error: 'cs_etm/timestamp/' ___ Bad event or PMU
Unable to find PMU or event on a PMU of 'cs_etm'
event syntax error: 'cs_etm/timestamp/' ___ no value assigned for term
event syntax error: 'cs_etm/timestamp/' ___ no value assigned for term Run 'perf list' for a list of valid events
That's unfortunate and not what I expected. And I don't think it makes sense to remove that validation from Perf. The test uses "timestamp=1" so I didn't notice.
Can we accept that people are most likely using the defaults so timestamps are already on and they wouldn't be using it? The only real use case of that at the moment is to do timestamp=0 and that doesn't fail.
Although it's not the default for per-thread mode and I did find the OpenCSD HOWTO.md uses it as an example. timestamps make less sense in per-thread mode as you don't need to correlate between CPUs or watch for context switches.
Timestamps have a more specialised use in per-thread mode, they are as you say less essential for switching in the right context to decode the trace, and less relevant to BOLT/AutoFDO style usage where the trace is collapsed into a heat-map profile.
But trace can also be used to get a detailed timeline of CPU activity - a non-invasive timeline that can trace even through interrupt-disabled kernel code. And for that, having a global constant-frequency timebase becomes more useful, both in its own right, and to line up traces from each CPU with other CPUs and system-level traces. It's also the only way we have to indirectly observe CPU frequency adjustments. (Intel's Processor Trace, which is generally similar to ETM/ETE, has specific packets that trace CPU frequency changes.)
Al
I suppose we need to choose what's worse, breaking some subset of Perf commands in a slightly annoying way or having two separate options to control timestamps that you have to use together. I think it's 50/50, maybe with the breakage being the slightly better option.
This is worth mentioning so users can correctly assess what happens for any existing scripts they might have.
Based on this then the same command must set the timestamp to 1 - which will have the same effect as before as we do not want to break existing behaviour.
Mike
* - cc_threshold - Cycle count threshold value. If nothing is provided here or the providedvalue is 0, then the
default value i.e 0x100 will be used. If provided value isless than minimum cycles threshold
-- 2.34.1
-- Mike Leach Principal Engineer, ARM Ltd. Manchester Design Centre. UK
CoreSight mailing list -- coresight@lists.linaro.org To unsubscribe send an email to coresight-leave@lists.linaro.org