20 Dec, 2011

7 commits

  • The order of freeing comm_list and dso_list should be reversed.

    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1323703017-6060-4-git-send-email-namhyung@gmail.com
    Signed-off-by: Namhyung Kim
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     
  • The 'path' variable is set on a upper line, don't need to do it again.

    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1323703017-6060-3-git-send-email-namhyung@gmail.com
    Signed-off-by: Namhyung Kim
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     
  • On failure, perf_evlist__mmap_per_{cpu,thread} will try to munmap()
    every map that doesn't have a NULL base. This will fail with EINVAL if
    one of them has base == MAP_FAILED, clobbering errno, so that
    perf_evlist__map will return EINVAL on any failure regardless of the
    root cause.

    Fix this by resetting failed maps to a NULL base.

    Acked-by: Namhyung Kim
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1324301972-22740-2-git-send-email-nelhage@nelhage.com
    Signed-off-by: Nelson Elhage
    Signed-off-by: Arnaldo Carvalho de Melo

    Nelson Elhage
     
  • The '--call-graph' command line option can receive undocumented optional
    print_limit argument. Besides, use strtoul() to parse the option since
    its type is u32.

    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1323703017-6060-2-git-send-email-namhyung@gmail.com
    Signed-off-by: Namhyung Kim
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     
  • Memory in struct perf_sample is not fully initialized during parsing.
    Depending on sampling data some parts may left unchanged. Zero out
    struct perf_sample first to avoid access to uninitialized memory.

    Cc: Ingo Molnar
    Link: http://lkml.kernel.org/r/1323966762-8574-2-git-send-email-robert.richter@amd.com
    Signed-off-by: Robert Richter
    Signed-off-by: Arnaldo Carvalho de Melo

    Robert Richter
     
  • The problem is that when SAMPLE_PERIOD is not set, the kernel generates
    a number of samples in proportion to an event's period. Number of these
    samples may be too big and the kernel throttles all samples above a
    defined limit.

    E.g.: I want to trace when a process sleeps. I created a process which
    sleeps for 1ms and for 4ms. perf got 100 events in both cases.

    swapper 0 [000] 1141.371830: sched_stat_sleep: comm=foo pid=1801 delay=1386750 [ns]
    swapper 0 [000] 1141.369444: sched_stat_sleep: comm=foo pid=1801 delay=4499585 [ns]

    In the first case a kernel want to send 4499585 events and in the second
    case it wants to send 1386750 events. perf-reports shows that process
    sleeps in both places equal time.

    Instead of this we can get only one sample with an attribute period. As
    result we have less data transferring between kernel and user-space and
    we avoid throttling of samples.

    The patch "events: Don't divide events if it has field period" added a
    kernel part of this functionality.

    Acked-by: Arun Sharma
    Cc: Arun Sharma
    Cc: David Ahern
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: devel@openvz.org
    Link: http://lkml.kernel.org/r/1324391565-1369947-1-git-send-email-avagin@openvz.org
    Signed-off-by: Andrew Vagin
    Signed-off-by: Arnaldo Carvalho de Melo

    Andrew Vagin
     
  • Ingo Molnar
     

12 Dec, 2011

3 commits

  • It's the counterpart of perf_session__parse_sample.

    v2: fixed mistakes found by David Ahern.
    v3: s/data/sample/
    s/perf_event__change_sample/perf_event__synthesize_sample

    Reviewed-by: David Ahern
    Cc: Arun Sharma
    Cc: David Ahern
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: devel@openvz.org
    Link: http://lkml.kernel.org/r/1323266161-394927-3-git-send-email-avagin@openvz.org
    Signed-off-by: Andrew Vagin
    Signed-off-by: Arnaldo Carvalho de Melo

    Andrew Vagin
     
  • The option is documented in man perf-script but was not yet implemented:

    -a
    Force system-wide collection. Scripts run without a
    normally use -a by default, while scripts run
    with a normally don't - this option allows the
    latter to be run in system-wide mode.

    As with perf record you now can profile in system-wide mode for the
    runtime of a given command, e.g.:

    # perf script -a syscall-counts sleep 2

    Cc: Ingo Molnar
    Link: http://lkml.kernel.org/r/1322229925-10075-1-git-send-email-robert.richter@amd.com
    Signed-off-by: Robert Richter
    Signed-off-by: Arnaldo Carvalho de Melo

    Robert Richter
     
  • Fix mem leaks and missing NULL pointer checks after strdup().

    And get_script_path() did not free __script_root in case of continue.

    Introduce a helper function get_script_root().

    Cc: Ingo Molnar
    Link: http://lkml.kernel.org/r/1322217520-3287-1-git-send-email-robert.richter@amd.com
    Signed-off-by: Robert Richter
    Signed-off-by: Arnaldo Carvalho de Melo

    Robert Richter
     

07 Dec, 2011

8 commits

  • With this patch the OProfile Basic Mode Sampling support for System z
    is enhanced with a counter file system. That way hardware sampling
    can be configured using the user space tools with only little
    modifications.

    With the patch by default new cpu_types (s390/z10, s390/z196) are
    returned in order to indicate that we are running a CPU which provides
    the hardware sampling facility. Existing user space tools will
    complain about an unknown cpu type. In order to be compatible with
    existing user space tools the `cpu_type' module parameter has been
    added. Setting the parameter to `timer' will force the module to
    return `timer' as cpu_type. The module will still try to use hardware
    sampling if available and the hwsampling virtual filesystem will be
    also be available for configuration. So this has a different effect
    than using the generic oprofile module parameter `timer=1'.

    If the basic mode sampling is enabled on the machine and the
    cpu_type=timer parameter is not used the kernel module will provide
    the following virtual filesystem:

    /dev/oprofile/0/enabled
    /dev/oprofile/0/event
    /dev/oprofile/0/count
    /dev/oprofile/0/unit_mask
    /dev/oprofile/0/kernel
    /dev/oprofile/0/user

    In the counter file system only the values of 'enabled', 'count',
    'kernel', and 'user' are evaluated by the kernel module. Everything
    else must contain fixed values.

    The 'event' value only supports a single event - HWSAMPLING with value
    0.

    The 'count' value specifies the hardware sampling rate as it is passed
    to the CPU measurement facility.

    The 'kernel' and 'user' flags can now be used to filter for samples
    when using hardware sampling.

    Additionally also the following file will be created:
    /dev/oprofile/timer/enabled

    This will always be the inverted value of /dev/oprofile/0/enabled. 0
    is not accepted without hardware sampling.

    Signed-off-by: Andreas Krebbel
    Signed-off-by: Robert Richter

    Andreas Krebbel
     
  • Removing remainings of oprofile_timer_exit() completly.

    Signed-off-by: Robert Richter

    Robert Richter
     
  • KVM needs to know perf capability to decide which PMU it can expose to a
    guest.

    Signed-off-by: Gleb Natapov
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1320929850-10480-8-git-send-email-gleb@redhat.com
    Signed-off-by: Ingo Molnar

    Gleb Natapov
     
  • Implement the disabling of arch events as a quirk so that we can print
    a message along with it. This creates some visibility into the problem
    space and could allow us to work on adding more work-around like the
    AAJ80 one.

    Requested-by: Ingo Molnar
    Cc: Gleb Natapov
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/n/tip-wcja2z48wklzu1b0nkz0a5y7@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • Intel CPUs report non-available architectural events in cpuid leaf
    0AH.EBX. Use it to disable events that are not available according
    to CPU.

    Signed-off-by: Gleb Natapov
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1320929850-10480-7-git-send-email-gleb@redhat.com
    Signed-off-by: Ingo Molnar

    Gleb Natapov
     
  • Provide two initializers for jump_label_key that initialize it enabled
    or disabled. Also modify all jump_label code to allow for jump_labels to be
    initialized enabled.

    Signed-off-by: Peter Zijlstra
    Cc: Jason Baron
    Link: http://lkml.kernel.org/n/tip-p40e3yj21b68y03z1yv825e7@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • WARNING: arch/x86/kernel/built-in.o(.text+0x4c71): Section mismatch in
    reference from the function arch_jump_label_transform_static() to the
    function .init.text:text_poke_early()
    The function arch_jump_label_transform_static() references
    the function __init text_poke_early().
    This is often because arch_jump_label_transform_static lacks a __init
    annotation or the annotation of text_poke_early is wrong.

    Signed-off-by: Peter Zijlstra
    Cc: Jason Baron
    Link: http://lkml.kernel.org/n/tip-9lefe89mrvurrwpqw5h8xm8z@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • …stedt/linux-trace into perf/core

    Ingo Molnar
     

06 Dec, 2011

14 commits

  • jump_lable patching is very expensive operation that involves pausing all
    cpus. The patching of perf_sched_events jump_label is easily controllable
    from userspace by unprivileged user.

    When te user runs a loop like this:

    "while true; do perf stat -e cycles true; done"

    ... the performance of my test application that just increments a counter
    for one second drops by 4%.

    This is on a 16 cpu box with my test application using only one of
    them. An impact on a real server doing real work will be worse.

    Performance of KVM PMU drops nearly 50% due to jump_lable for "perf
    record" since KVM PMU implementation creates and destroys perf event
    frequently.

    This patch introduces a way to rate limit jump_label patching and uses
    it to fix the above problem.

    I believe that as jump_label use will spread the problem will become more
    common and thus solving it in a generic code is appropriate. Also fixing
    it in the perf code would result in moving jump_label accounting logic to
    perf code with all the ifdefs in case of JUMP_LABEL=n kernel. With this
    patch all details are nicely hidden inside jump_label code.

    Signed-off-by: Gleb Natapov
    Acked-by: Jason Baron
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20111127155909.GO2557@redhat.com
    Signed-off-by: Ingo Molnar

    Gleb Natapov
     
  • Deng-Cheng Zhu reported that sibling events that were created disabled
    with enable_on_exec would never get enabled. Iterate all events
    instead of the group lists.

    Reported-by: Deng-Cheng Zhu
    Tested-by: Deng-Cheng Zhu
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1322048382.14799.41.camel@twins
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/n/tip-yv4o74vh90suyghccgykbnry@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • This avoids a scheduling failure for cases like:

    cycles, cycles, instructions, instructions (on Core2)

    Which would end up being programmed like:

    PMC0, PMC1, FP-instructions, fail

    Because all events will have the same weight.

    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/n/tip-8tnwb92asqj7xajqqoty4gel@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • The current x86 event scheduler fails to resolve scheduling problems
    of certain combinations of events and constraints. This happens if the
    counter mask of such an event is not a subset of any other counter
    mask of a constraint with an equal or higher weight, e.g. constraints
    of the AMD family 15h pmu:

    counter mask weight

    amd_f15_PMC30 0x09 2 overlap.
    * Reimplementation using perf scheduling helper functions.

    V3:
    * Added WARN_ON_ONCE() if out of save states.
    * Changed function interface of perf_sched_restore_state() to use bool
    as return value.

    Signed-off-by: Robert Richter
    Signed-off-by: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/1321616122-1533-3-git-send-email-robert.richter@amd.com
    Signed-off-by: Ingo Molnar

    Robert Richter
     
  • This patch introduces x86 perf scheduler code helper functions. We
    need this to later add more complex functionality to support
    overlapping counter constraints (next patch).

    The algorithm is modified so that the range of weight values is now
    generated from the constraints. There shouldn't be other functional
    changes.

    With the helper functions the scheduler is controlled. There are
    functions to initialize, traverse the event list, find unused counters
    etc. The scheduler keeps its own state.

    V3:
    * Added macro for_each_set_bit_cont().
    * Changed functions interfaces of perf_sched_find_counter() and
    perf_sched_next_event() to use bool as return value.
    * Added some comments to make code better understandable.

    V4:
    * Fix broken event assignment if weight of the first event is not
    wmin (perf_sched_init()).

    Signed-off-by: Robert Richter
    Signed-off-by: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/1321616122-1533-2-git-send-email-robert.richter@amd.com
    Signed-off-by: Ingo Molnar

    Robert Richter
     
  • Gleb writes:

    > Currently pmu is disabled and re-enabled on each timer interrupt even
    > when no rotation or frequency adjustment is needed. On Intel CPU this
    > results in two writes into PERF_GLOBAL_CTRL MSR per tick. On bare metal
    > it does not cause significant slowdown, but when running perf in a virtual
    > machine it leads to 20% slowdown on my machine.

    Cure this by keeping a perf_event_context::nr_freq counter that counts the
    number of active events that require frequency adjustments and use this in a
    similar fashion to the already existing nr_events != nr_active test in
    perf_rotate_context().

    By being able to exclude both rotation and frequency adjustments a-priory for
    the common case we can avoid the otherwise superfluous PMU disable.

    Suggested-by: Gleb Natapov
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/n/tip-515yhoatehd3gza7we9fapaa@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • Merge reason: Add these cherry-picked commits so that future changes
    on perf/core don't conflict.

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • If the set_ftrace_filter is cleared by writing just whitespace to
    it, then the filter hash refcounts will be decremented but not
    updated. This causes two bugs:

    1) No functions will be enabled for tracing when they all should be

    2) If the users clears the set_ftrace_filter twice, it will crash ftrace:

    ------------[ cut here ]------------
    WARNING: at /home/rostedt/work/git/linux-trace.git/kernel/trace/ftrace.c:1384 __ftrace_hash_rec_update.part.27+0x157/0x1a7()
    Modules linked in:
    Pid: 2330, comm: bash Not tainted 3.1.0-test+ #32
    Call Trace:
    [] warn_slowpath_common+0x83/0x9b
    [] warn_slowpath_null+0x1a/0x1c
    [] __ftrace_hash_rec_update.part.27+0x157/0x1a7
    [] ? ftrace_regex_release+0xa7/0x10f
    [] ? kfree+0xe5/0x115
    [] ftrace_hash_move+0x2e/0x151
    [] ftrace_regex_release+0xba/0x10f
    [] fput+0xfd/0x1c2
    [] filp_close+0x6d/0x78
    [] sys_dup3+0x197/0x1c1
    [] sys_dup2+0x4f/0x54
    [] system_call_fastpath+0x16/0x1b
    ---[ end trace 77a3a7ee73794a02 ]---

    Link: http://lkml.kernel.org/r/20111101141420.GA4918@debian

    Reported-by: Rabin Vincent
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     
  • A update is made to the sched:sched_switch event that adds some
    logic to the first parameter of the __print_flags() that shows the
    state of tasks. This change cause perf to fail parsing the flags.

    A simple fix is needed to have the parser be able to process ops
    within the argument.

    Cc: stable@vger.kernel.org
    Reported-by: Andrew Vagin
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     
  • If cpu A calls jump_label_inc() just after atomic_add_return() is
    called by cpu B, atomic_inc_not_zero() will return value greater then
    zero and jump_label_inc() will return to a caller before jump_label_update()
    finishes its job on cpu B.

    Link: http://lkml.kernel.org/r/20111018175551.GH17571@redhat.com

    Cc: stable@vger.kernel.org
    Cc: Peter Zijlstra
    Acked-by: Jason Baron
    Signed-off-by: Gleb Natapov
    Signed-off-by: Steven Rostedt

    Gleb Natapov
     
  • A forced undef of a config value was used for testing and was
    accidently left in during the final commit. This causes x86 to
    run slower than needed while running function tracing as well
    as causes the function graph selftest to fail when DYNMAIC_FTRACE
    is not set. This is because the code in MCOUNT expects the ftrace
    code to be processed with the config value set that happened to
    be forced not set.

    The forced config option was left in by:
    commit 6331c28c962561aee59e5a493b7556a4bb585957
    ftrace: Fix dynamic selftest failure on some archs

    Link: http://lkml.kernel.org/r/20111102150255.GA6973@debian

    Cc: stable@vger.kernel.org
    Reported-by: Rabin Vincent
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     
  • Though not all events have field 'prev_pid', it was allowed to do this:

    # echo 'prev_pid == 100' > events/sched/filter

    but commit 75b8e98263fdb0bfbdeba60d4db463259f1fe8a2 (tracing/filter: Swap
    entire filter of events) broke it without any reason.

    Link: http://lkml.kernel.org/r/4EAF46CF.8040408@cn.fujitsu.com

    Signed-off-by: Li Zefan
    Signed-off-by: Steven Rostedt

    Li Zefan
     
  • Fix a bug introduced by e9dbfae5, which prevents event_subsystem from
    ever being released.

    Ref_count was added to keep track of subsystem users, not for counting
    events. Subsystem is created with ref_count = 1, so there is no need to
    increment it for every event, we have nr_events for that. Fix this by
    touching ref_count only when we actually have a new user -
    subsystem_open().

    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov
    Link: http://lkml.kernel.org/r/1320052062-7846-1-git-send-email-idryomov@gmail.com
    Signed-off-by: Steven Rostedt

    Ilya Dryomov
     

05 Dec, 2011

8 commits

  • Add instruction dump mode to insn_sanity tool for
    checking decoder really decoded instructions.

    This mode is enabled when passing double -v (-vv) to
    insn_sanity. It is useful for who wants to check whether
    the decoder can decode some instructions correctly.
    e.g.
    $ echo 0f 73 10 11 | ./insn_sanity -y -vv -i -
    Instruction = {
    .prefixes = {
    .value = 0, bytes[] = {0, 0, 0, 0},
    .got = 1, .nbytes = 0},
    .rex_prefix = {
    .value = 0, bytes[] = {0, 0, 0, 0},
    .got = 1, .nbytes = 0},
    .vex_prefix = {
    .value = 0, bytes[] = {0, 0, 0, 0},
    .got = 1, .nbytes = 0},
    .opcode = {
    .value = 29455, bytes[] = {f, 73, 0, 0},
    .got = 1, .nbytes = 2},
    .modrm = {
    .value = 16, bytes[] = {10, 0, 0, 0},
    .got = 1, .nbytes = 1},
    .sib = {
    .value = 0, bytes[] = {0, 0, 0, 0},
    .got = 1, .nbytes = 0},
    .displacement = {
    .value = 0, bytes[] = {0, 0, 0, 0},
    .got = 1, .nbytes = 0},
    .immediate1 = {
    .value = 17, bytes[] = {11, 0, 0, 0},
    .got = 1, .nbytes = 1},
    .immediate2 = {
    .value = 0, bytes[] = {0, 0, 0, 0},
    .got = 0, .nbytes = 0},
    .attr = 44800, .opnd_bytes = 4, .addr_bytes = 8,
    .length = 4, .x86_64 = 1, .kaddr = 0x7fff0f7d9430}
    Success: decoded and checked 1 given instructions with 0 errors (seed:0x0)

    Signed-off-by: Masami Hiramatsu
    Cc: "H. Peter Anvin"
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20111205120603.15475.91192.stgit@cloud
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Since new Intel software developers manual introduces
    new format for AVX instruction set (including AVX2),
    it is important to update x86-opcode-map.txt to fit
    those changes.

    Signed-off-by: Masami Hiramatsu
    Cc: "H. Peter Anvin"
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20111205120557.15475.13236.stgit@cloud
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Fix x86 instruction decoder test to dump all error messages
    to stderr and others to stdout.

    Signed-off-by: Masami Hiramatsu
    Cc: "H. Peter Anvin"
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20111205120550.15475.70149.stgit@cloud
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Fix instruction decoder test (insn_sanity), so that
    it doesn't show both info and error messages twice on
    same instruction. (In that case, show only error message)

    Signed-off-by: Masami Hiramatsu
    Cc: "H. Peter Anvin"
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20111205120545.15475.7928.stgit@cloud
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • For reducing memory usage of attribute table, x86 instruction
    decoder puts "Group" attribute only on "no-last-prefix"
    attribute table (same as vex_p == 0 case).

    Thus, the decoder should look no-last-prefix table first, and
    then only if it is not a group, move on to "with-last-prefix"
    table (vex_p != 0).

    However, current implementation, inat_get_avx_attribute()
    looks with-last-prefix directly. So, when decoding
    a grouped AVX instruction, the decoder fails to find correct
    group because there is no "Group" attribute on the table.
    This ends up with the mis-decoding of instructions, as Ingo
    reported in http://thread.gmane.org/gmane.linux.kernel/1214103

    This patch fixes it to check no-last-prefix table first
    even if that is an AVX instruction, and get an attribute from
    "with last-prefix" table only if that is not a group.

    Reported-by: Ingo Molnar
    Signed-off-by: Masami Hiramatsu
    Cc: "H. Peter Anvin"
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20111205120539.15475.91428.stgit@cloud
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Fix arch/x86/tools/Makefile to compile both test tools
    correctly. This bug leads build error.

    Signed-off-by: Masami Hiramatsu
    Cc: "H. Peter Anvin"
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20111205120533.15475.62047.stgit@cloud
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • …rostedt/linux-trace into perf/urgent

    Ingo Molnar
     
  • Ingo Molnar