perf cs-etm: Respect timestamp option
authorLeo Yan <leo.yan@linaro.org>
Sat, 14 Oct 2023 07:41:59 +0000 (15:41 +0800)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 17 Oct 2023 19:40:51 +0000 (12:40 -0700)
When users pass the option '--timestamp' or '-T' in the record command,
all events will set the PERF_SAMPLE_TIME bit in the attribution.  In
this case, the AUX event will record the kernel timestamp, but it
doesn't mean Arm CoreSight enables timestamp packets in its hardware
tracing.

If the option '--timestamp' or '-T' is set, this patch always enables
Arm CoreSight timestamp, as a result, the bit 28 in event's config is to
be set.

Before:

  # perf record -e cs_etm// --per-thread --timestamp -- ls
  # perf script --header-only
  ...
  # event : name = cs_etm//, , id = { 69 }, type = 12, size = 136,
  config = 0, { sample_period, sample_freq } = 1,
  sample_type = IP|TID|TIME|CPU|IDENTIFIER, read_format = ID|LOST,
  disabled = 1, enable_on_exec = 1, sample_id_all = 1, exclude_guest = 1
  ...

After:

  # perf record -e cs_etm// --per-thread --timestamp -- ls
  # perf script --header-only
  ...
  # event : name = cs_etm//, , id = { 49 }, type = 12, size = 136,
  config = 0x10000000, { sample_period, sample_freq } = 1,
  sample_type = IP|TID|TIME|CPU|IDENTIFIER, read_format = ID|LOST,
  disabled = 1, enable_on_exec = 1, sample_id_all = 1, exclude_guest = 1
  ...

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: James Clark <james.clark@arm.com>
Acked-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: John Garry <john.g.garry@oracle.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: coresight@lists.linaro.org
Link: https://lore.kernel.org/r/20231014074159.1667880-3-leo.yan@linaro.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/arch/arm/util/cs-etm.c

index 39ec6cae91edbda4471244ebc3e67b203d81c6dd..2cf873d71dff03730e62b31c299ed90c2c0a975e 100644 (file)
@@ -442,6 +442,15 @@ static int cs_etm_recording_options(struct auxtrace_record *itr,
                                           "contextid", 1);
        }
 
+       /*
+        * When the option '--timestamp' or '-T' is enabled, the PERF_SAMPLE_TIME
+        * bit is set for all events.  In this case, always enable Arm CoreSight
+        * timestamp tracing.
+        */
+       if (opts->sample_time_set)
+               evsel__set_config_if_unset(cs_etm_pmu, cs_etm_evsel,
+                                          "timestamp", 1);
+
        /* Add dummy event to keep tracking */
        err = parse_event(evlist, "dummy:u");
        if (err)