1. 29 Mar, 2012 3 commits
    • Len Brown's avatar
      tools turbostat: harden against cpu online/offline · 15aaa346
      Len Brown authored
      
      
      Sometimes users have turbostat running in interval mode
      when they take processors offline/online.
      
      Previously, turbostat would survive, but not gracefully.
      
      Tighten up the error checking so turbostat notices
      changesn sooner, and print just 1 line on change:
      
      turbostat: re-initialized with num_cpus %d
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      15aaa346
    • Len Brown's avatar
      tools turbostat: reduce measurement overhead due to IPIs · 88c3281f
      Len Brown authored
      
      
      turbostat uses /dev/cpu/*/msr interface to read MSRs.
      For modern systems, it reads 10 MSR/CPU.  This can
      be observed as 10 "Function Call Interrupts"
      per CPU per sample added to /proc/interrupts.
      
      This overhead is measurable on large idle systems,
      and as Yoquan Song pointed out, it can even trick
      cpuidle into thinking the system is busy.
      
      Here turbostat re-schedules itself in-turn to each
      CPU so that its MSR reads will always be local.
      This replaces the 10 "Function Call Interrupts"
      with a single "Rescheduling interrupt" per sample
      per CPU.
      
      On an idle 32-CPU system, this shifts some residency from
      the shallow c1 state to the deeper c7 state:
      
       # ./turbostat.old -s
         %c0  GHz  TSC    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7
        0.27 1.29 2.29   0.95   0.02   0.00  98.77  20.23   0.00  77.41   0.00
        0.25 1.24 2.29   0.98   0.02   0.00  98.75  20.34   0.03  77.74   0.00
        0.27 1.22 2.29   0.54   0.00   0.00  99.18  20.64   0.00  77.70   0.00
        0.26 1.22 2.29   1.22   0.00   0.00  98.52  20.22   0.00  77.74   0.00
        0.26 1.38 2.29   0.78   0.02   0.00  98.95  20.51   0.05  77.56   0.00
      ^C
       i# ./turbostat.new -s
         %c0  GHz  TSC    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7
        0.27 1.20 2.29   0.24   0.01   0.00  99.49  20.58   0.00  78.20   0.00
        0.27 1.22 2.29   0.25   0.00   0.00  99.48  20.79   0.00  77.85   0.00
        0.27 1.20 2.29   0.25   0.02   0.00  99.46  20.71   0.03  77.89   0.00
        0.28 1.26 2.29   0.25   0.01   0.00  99.46  20.89   0.02  77.67   0.00
        0.27 1.20 2.29   0.24   0.01   0.00  99.48  20.65   0.00  78.04   0.00
      
      cc: Youquan Song <youquan.song@intel.com>
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      88c3281f
    • Len Brown's avatar
      tools turbostat: add summary option · e23da037
      Len Brown authored
      
      
      turbostat -s
      cuts down on the amount of output, per user request.
      
      also treak some output whitespace and the man page.
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      e23da037
  2. 14 Mar, 2012 3 commits
    • Ingo Molnar's avatar
      perf tools, x86: Build perf on older user-space as well · eae7a755
      Ingo Molnar authored
      On ancient systems I get this build failure:
      
        util/../../../arch/x86/include/asm/unistd.h:67:29: error: asm/unistd_64.h: No such file or directory
        In file included from util/cache.h:7,
                         from builtin-test.c:8:
        util/../perf.h: In function ‘sys_perf_event_open’:In file included from util/../perf.h:16
        perf.h:170: error: ‘__NR_perf_event_open’ undeclared (first use in this function)
      
      The reason is that this old system does not have the split
      unistd.h headers yet, from which to pick up the syscall
      definitions.
      
      Add the syscall numbers to the already existing i386 and x86_64
      blocks in perf.h, and also provide empty include file stubs.
      
      With this patch perf builds and works fine on 5 years old
      user-space as well.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Link: http://lkml.kernel.org/n/tip-jctwg64le1w47tuaoeyftsg9@git.kernel.org
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      eae7a755
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Use scnprintf where applicable · e7f01d1e
      Arnaldo Carvalho de Melo authored
      
      
      Several places were expecting that the value returned was the number of
      characters printed, not what would be printed if there was space.
      
      Fix it by using the scnprintf and vscnprintf variants we inherited from
      the kernel sources.
      
      Some corner cases where the number of printed characters were not
      accounted were fixed too.
      Reported-by: default avatarAnton Blanchard <anton@samba.org>
      Cc: Anton Blanchard <anton@samba.org>
      Cc: Eric B Munson <emunson@mgebm.net>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Yanmin Zhang <yanmin_zhang@linux.intel.com>
      Cc: stable@kernel.org
      Link: http://lkml.kernel.org/n/tip-kwxo2eh29cxmd8ilixi2005x@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e7f01d1e
    • Anton Blanchard's avatar
      perf tools: Incorrect use of snprintf results in SEGV · b832796c
      Anton Blanchard authored
      I have a workload where perf top scribbles over the stack and we SEGV.
      What makes it interesting is that an snprintf is causing this.
      
      The workload is a c++ gem that has method names over 3000 characters
      long, but snprintf is designed to avoid overrunning buffers. So what
      went wrong?
      
      The problem is we assume snprintf returns the number of characters
      written:
      
          ret += repsep_snprintf(bf + ret, size - ret, "[%c] ", self->level);
      ...
          ret += repsep_snprintf(bf + ret, size - ret, "%s", self->ms.sym->name);
      
      Unfortunately this is not how snprintf works. snprintf returns the
      number of characters that would have been written if there was enough
      space. In the above case, if the first snprintf returns a value larger
      than size, we pass a negative size into the second snprintf and happily
      scribble over the stack. If you have 3000 character c++ methods thats a
      lot of stack to trample.
      
      This patch fixes repsep_snprintf by clamping the value at size - 1 which
      is the maximum snprintf can write before adding the NULL terminator.
      
      I get the sinking feeling that there are a lot of other uses of snprintf
      that have this same bug, we should audit them all.
      
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Eric B Munson <emunson@mgebm.net>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Yanmin Zhang <yanmin_zhang@linux.intel.com>
      Cc: stable@kernel.org
      Link: http://lkml.kernel.org/r/20120307114249.44275ca3@kryten
      
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b832796c
  3. 13 Mar, 2012 1 commit
  4. 03 Mar, 2012 3 commits
  5. 29 Feb, 2012 4 commits
  6. 27 Feb, 2012 1 commit
    • Steven Rostedt's avatar
      ktest: Fix make_min_config test when build fails · bf1c95ab
      Steven Rostedt authored
      
      
      The make_min_config does not take into account when the build fails,
      resulting in a invalid MIN_CONFIG .config file. When the build fails,
      it is ignored and the boot test is executed, using the previous built
      kernel. The configs that should be tested are not tested and they may
      be added or removed depending on the result of the last kernel that
      succeeded to be built.
      
      If the build fails, mark the current config as a failure and the
      configs that were disabled may still be needed.
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      bf1c95ab
  7. 06 Feb, 2012 3 commits
  8. 30 Jan, 2012 3 commits
  9. 12 Jan, 2012 2 commits
    • Frederic Weisbecker's avatar
      selftests: new x86 breakpoints selftest · 85bbddc3
      Frederic Weisbecker authored
      
      
      Bring a first selftest in the relevant directory.  This tests several
      combinations of breakpoints and watchpoints in x86, as well as icebp traps
      and int3 traps.  Given the amount of breakpoint regressions we raised
      after we merged the generic breakpoint infrastructure, such selftest
      became necessary and can still serve today as a basis for new patches that
      touch the do_debug() path.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jason Wessel <jason.wessel@windriver.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      85bbddc3
    • Frederic Weisbecker's avatar
      selftests: new very basic kernel selftests directory · 274343ad
      Frederic Weisbecker authored
      
      
      Bring a new kernel selftests directory in tools/testing/selftests.  To
      add a new selftest, create a subdirectory with the sources and a
      makefile that creates a target named "run_test" then add the
      subdirectory name to the TARGET var in tools/testing/selftests/Makefile
      and tools/testing/selftests/run_tests script.
      
      This can help centralizing and maintaining any useful selftest that
      developers usually tend to let rust in peace on some random server.
      Suggested-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Cc: Jason Wessel <jason.wessel@windriver.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      274343ad
  10. 11 Jan, 2012 3 commits
  11. 10 Jan, 2012 1 commit
  12. 08 Jan, 2012 9 commits
  13. 06 Jan, 2012 4 commits