[PATCH] coresight: perf: Output trace id only once

Suzuki K Poulose suzuki.poulose at arm.com
Tue Jan 24 02:43:31 PST 2023


On 20/01/2023 15:43, James Clark wrote:
> 
> 
> On 20/01/2023 10:34, Suzuki K Poulose wrote:
>> With the dynamic traceid allocation scheme in, we output the
>> AUX_OUTPUT_HWID packet every time event->start() is called.
>> This could cause too many such records in the perf.data,
>> while only one per CPU throughout the life time of
>> the event is required. Make sure we only output it once.
>>
>> Before this patch:
>>    $ perf report -D | grep OUTPUT_HW_ID
>>    ...
>>    AUX_OUTPUT_HW_ID events:         55  (18.3%)
>>
>> After this patch:
>>
>>   $ perf report -D | grep OUTPUT_HW_ID
>>   ...
>>   AUX_OUTPUT_HW_ID events:          5  ( 1.9%)
>>
>> Cc: Mike Leach <mike.leach at linaro.org>
>> Cc: James Clark <james.clark at arm.com>
>> Cc: Leo Yan <leo.yan at linaro.org>
>> Signed-off-by: Suzuki K Poulose <suzuki.poulose at arm.com>
>> ---
>>   drivers/hwtracing/coresight/coresight-etm-perf.c | 16 ++++++++++++----
>>   drivers/hwtracing/coresight/coresight-etm-perf.h |  2 ++
>>   2 files changed, 14 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c
>> index 12fff661456e..a48c97da8165 100644
>> --- a/drivers/hwtracing/coresight/coresight-etm-perf.c
>> +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
>> @@ -495,10 +495,18 @@ static void etm_event_start(struct perf_event *event, int flags)
>>   	if (source_ops(csdev)->enable(csdev, event, CS_MODE_PERF))
>>   		goto fail_disable_path;
>>   
>> -	/* output cpu / trace ID in perf record */
>> -	hw_id = FIELD_PREP(CS_AUX_HW_ID_VERSION_MASK, CS_AUX_HW_ID_CURR_VERSION);
>> -	hw_id |= FIELD_PREP(CS_AUX_HW_ID_TRACE_ID_MASK, coresight_trace_id_read_cpu_id(cpu));
>> -	perf_report_aux_output_id(event, hw_id);
>> +	/*
>> +	 * output cpu / trace ID in perf record, once for the lifetime
>> +	 * of the event.
>> +	 */
>> +	if (!cpumask_test_cpu(cpu, &event_data->aux_hwid_done)) {
>> +		cpumask_set_cpu(cpu, &event_data->aux_hwid_done);
> 
> I had a look for somewhere that's only called once after the aux buffer
> is available to avoid the new tracking bit, but didn't find anywhere
> obvious. We can always move it later anyway.
> 
> Reviewed-by: James Clark <james.clark at arm.com>
> 

Thanks, pushed to next

https://git.kernel.org/coresight/c/a646ca099b18

Suzuki




More information about the linux-arm-kernel mailing list