Re: BUG in "perf: Suppress AUX/OVERWRITE records"?

From: Alexander Shishkin
Date: Tue Mar 26 2019 - 03:02:48 EST


Ben Gainey <Ben.Gainey@xxxxxxx> writes:

> Hi all
>
> Regarding commit 1627314fb54a33ebd23bd08f2e215eaed0f44712 "perf:
> Suppress AUX/OVERWRITE records", I have found that I no longer receive
> PERF_RECORD_AUX on context switch when collecting data from the arm_spe
> PMU driver. This is because, on context switch, the arm_spe driver
> calls perf_aux_output_end with `handle->aux_flags == 0`, failing the
> test added in this commit.
>
> This is a problem as it means when capturing data for multiple threads
> (using perf_event_open) where AUX data is written to a per-cpu buffer,
> I can no longer accurately attribute SPE AUX data to an individual
> thread.

Sounds like PERF_RECORD_SWITCH should be sufficient for your purposes,
have you considered that?

> If I read the intent of the commit as to remove OVERWRITE AUX records,
> then it seems the added if condition is incorrect and should probably
> be formulated as:
>
> if ((handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE) || !handle-
>>aux_flags)
>
> Is this correct (and would you like a patch?), or is my use of
> PERF_RECORD_AUX incorrect in this case?

No, the point of AUX records is to communicate useful things about the
data in AUX buffer. It was an unintentional side effect that it also
happened to coincide with context switches in the overwrite mode.

Thanks,
--
Alex