Re: [PATCH V2] perf/x86/intel/uncore: Fix client IMC events return huge result

From: Peter Zijlstra
Date: Mon Nov 19 2018 - 10:50:27 EST


On Fri, Nov 16, 2018 at 07:20:55AM -0800, kan.liang@xxxxxxxxxxxxxxx wrote:
> From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
>
> The client IMC bandwidth events return very huge result.
> perf stat -e uncore_imc/data_reads/ -e uncore_imc/data_writes/ -I
> 10000 -a
> 10.000117222 34,788.76 MiB uncore_imc/data_reads/
> 10.000117222 8.26 MiB uncore_imc/data_writes/
> 20.000374584 34,842.89 MiB uncore_imc/data_reads/
> 20.000374584 10.45 MiB uncore_imc/data_writes/
> 30.000633299 37,965.29 MiB uncore_imc/data_reads/
> 30.000633299 323.62 MiB uncore_imc/data_writes/
> 40.000891548 41,012.88 MiB uncore_imc/data_reads/
> 40.000891548 6.98 MiB uncore_imc/data_writes/
> 50.001142480 1,125,899,906,621,494.75 MiB uncore_imc/data_reads/
> 50.001142480 6.97 MiB uncore_imc/data_writes/
>
> The client IMC events are freerunning counters. They still use the
> old event encoding format (0x1 for data_read and 0x2 for data write).
> The counter bit width is calculated by common code, which assume that
> the standard encoding format is used for the freerunning counters.
> Error bit width information is calculated.

So far so good; some client IMC events have a different format and need
converting.

> The event->attr.config, which directly from user space, should not be
> used by the functions of freerunning counters.
> For client IMC events, the attr.config needs to be converted to the
> standard encoding format. The modified event config will be stored in
> event->hw.config.
> For other freerunning counters, the attr.config has the correct format.
> Just save it in event->hw.config.
> Using event->hw.config to replace event->attr.config for the functions
> of freerunning counters.

This above section seems unclear/confusing at best. The first sentence
is actively wrong; it lost the 'client IMC' specification.

Please restructure.