• Kan Liang's avatar
    perf/x86/intel/uncore: Fix client IMC events return huge result · 8041ffd3
    Kan Liang authored
    The client IMC bandwidth events currently return very large values:
    
      $ 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.
    
    The patch intends to convert the old client IMC event encoding to the
    standard encoding format.
    
    Current common code uses event->attr.config which directly copy from
    user space. We should not implicitly modify it for a converted event.
    The event->hw.config is used to replace the event->attr.config in
    common code.
    
    For client IMC events, the event->attr.config is used to calculate a
    converted event with standard encoding format in the custom
    event_init(). The converted event is stored in event->hw.config.
    For other events of freerunning counters, they already use the standard
    encoding format. The same value as event->attr.config is assigned to
    event->hw.config in common event_init().
    Reported-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Tested-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: stable@kernel.org # v4.18+
    Fixes: 9aae1780 ("perf/x86/intel/uncore: Clean up client IMC uncore")
    Link: https://lkml.kernel.org/r/20190227165729.1861-1-kan.liang@linux.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    8041ffd3
uncore.c 35.2 KB