• David Carrillo-Cisneros's avatar
    perf/core: Do not set cpuctx->cgrp for unscheduled cgroups · 864c2357
    David Carrillo-Cisneros authored
    Commit:
    
      db4a8356 ("perf/core: Set cgroup in CPU contexts for new cgroup events")
    
    failed to verify that event->cgrp is actually the scheduled cgroup
    in a CPU before setting cpuctx->cgrp. This patch fixes that.
    
    Now that there is a different path for scheduled and unscheduled
    cgroup, add a warning to catch when cpuctx->cgrp is still set after
    the last cgroup event has been unsheduled.
    
    To verify the bug:
    
      # Create 2 cgroups.
      mkdir /dev/cgroups/devices/g1
      mkdir /dev/cgroups/devices/g2
    
      # launch a task, bind it to a cpu and move it to g1
      CPU=2
      while :; do : ; done &
      P=$!
    
      taskset -pc $CPU $P
      echo $P > /dev/cgroups/devices/g1/tasks
    
      # monitor g2 (it runs no tasks) and observe output
      perf stat -e cycles -I 1000 -C $CPU -G g2
    
      #           time             counts unit events
         1.000091408          7,579,527      cycles                    g2
         2.000350111      <not counted>      cycles                    g2
         3.000589181      <not counted>      cycles                    g2
         4.000771428      <not counted>      cycles                    g2
    
      # note first line that displays that a task run in g2, despite
      # g2 having no tasks. This is because cpuctx->cgrp was wrongly
      # set when context of new event was installed.
      # After applying the fix we obtain the right output:
    
      perf stat -e cycles -I 1000 -C $CPU -G g2
      #           time             counts unit events
         1.000119615      <not counted>      cycles                    g2
         2.000389430      <not counted>      cycles                    g2
         3.000590962      <not counted>      cycles                    g2
    Signed-off-by: default avatarDavid Carrillo-Cisneros <davidcc@google.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Nilay Vaish <nilayvaish@gmail.com>
    Cc: Paul Turner <pjt@google.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vegard Nossum <vegard.nossum@gmail.com>
    Link: http://lkml.kernel.org/r/1478026378-86083-1-git-send-email-davidcc@google.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    864c2357
core.c 253 KB