• Stephane Eranian's avatar
    perf stat: Fix per-pkg event reporting bug · 02d8dabc
    Stephane Eranian authored
    Per-pkg events need to be captured once per processor socket. The code
    in check_per_pkg() ensures only one value per processor package is used.
    However there is a problem with this function in case the first CPU of
    the package does not measure anything for the per-pkg event, but other
    CPUs do.
    
    Consider the following:
    
      $ create cgroup FOO; echo $$ >FOO/tasks; taskset -c 1 noploop &
      $ perf stat -a -I 1000 -e intel_cqm/llc_occupancy/ -G FOO sleep 100
        1.00000 <not counted> Bytes intel_cqm/llc_occupancy/  FOO
    
    The reason for this is that CPU0 in the cgroup has nothing running on it.
    Yet check_per_plg() will mark socket0 as processed and no other event
    value will be considered for the socket.
    
    This patch fixes the problem by having check_per_pkg() only consider
    events which actually ran.
    Signed-off-by: default avatarStephane Eranian <eranian@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1441286620-10117-1-git-send-email-eranian@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    02d8dabc
stat.c 7.25 KB