Hi James,
On Tue, Jun 01, 2021 at 12:53:16PM +0300, James Clark wrote:
[...]
Hi Leo,
I was testing out snapshot mode (without your patch) and I noticed that it only ever collects from the last CPU. For example on a 4 core system, the CPU ID of the AUX records and the AUXTRACE buffers is always 3.
This is with systemwide tracing, and running "stress -m 2 -c 2". Is this something that your patch fixes, or am I doing something wrong, or is it just a coincidence?
No, I think it's quite likely caused by blow code:
static unsigned long tmc_update_etr_buffer(struct coresight_device *csdev, struct perf_output_handle *handle, void *config) { unsigned long flags, offset, size = 0;
...
/* Don't do anything if another tracer is using this sink */ if (atomic_read(csdev->refcnt) != 1) { spin_unlock_irqrestore(&drvdata->spinlock, flags); goto out; }
...
return size; }
When using the system wide tracing, it updates the AUX ring buffer until the last tracer is stopped. Thus whis is why it only records AUX ring buffer for the last CPU.
But this makes sense for me, this is because the last CPU is used to copy trace data to AUX ring buffer (so the perf event PERF_RECORD_AUX occurs on CPU3), but when you decode the trace data, you should can see the activities from other CPUs.
Thanks, Leo