lkml.org 
[lkml]   [2015]   [Jan]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 41/44] perf session: Do not fail on processing out of order event
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jiri Olsa <jolsa@kernel.org>

    commit f61ff6c06dc8f32c7036013ad802c899ec590607 upstream.

    Linus reported perf report command being interrupted due to processing
    of 'out of order' event, with following error:

    Timestamp below last timeslice flush
    0x5733a8 [0x28]: failed to process type: 3

    I could reproduce the issue and in my case it was caused by one CPU
    (mmap) being behind during record and userspace mmap reader seeing the
    data after other CPUs data were already stored.

    This is expected under some circumstances because we need to limit the
    number of events that we queue for reordering when we receive a
    PERF_RECORD_FINISHED_ROUND or when we force flush due to memory
    pressure.

    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Ingo Molnar <mingo@kernel.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matt Fleming <matt.fleming@intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/r/1417016371-30249-1-git-send-email-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    [zhangzhiqiang: backport to 3.10:
    - adjust context
    - commit f61ff6c06d struct events_stats was defined in tools/perf/util/event.h
    while 3.10 stable defined in tools/perf/util/hist.h.
    - 3.10 stable there is no pr_oe_time() which used for debug.
    - After the above adjustments, becomes same to the original patch:
    https://github.com/torvalds/linux/commit/f61ff6c06dc8f32c7036013ad802c899ec590607
    ]
    Signed-off-by: Zhiqiang Zhang <zhangzhiqiang.zhang@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/perf/util/hist.h | 1 +
    tools/perf/util/session.c | 5 +++--
    2 files changed, 4 insertions(+), 2 deletions(-)

    --- a/tools/perf/util/hist.h
    +++ b/tools/perf/util/hist.h
    @@ -34,6 +34,7 @@ struct events_stats {
    u32 nr_invalid_chains;
    u32 nr_unknown_id;
    u32 nr_unprocessable_samples;
    + u32 nr_unordered_events;
    };

    enum hist_column {
    --- a/tools/perf/util/session.c
    +++ b/tools/perf/util/session.c
    @@ -656,8 +656,7 @@ static int perf_session_queue_event(stru
    return -ETIME;

    if (timestamp < s->ordered_samples.last_flush) {
    - printf("Warning: Timestamp below last timeslice flush\n");
    - return -EINVAL;
    + s->stats.nr_unordered_events++;
    }

    if (!list_empty(sc)) {
    @@ -1057,6 +1056,8 @@ static void perf_session__warn_about_err
    "Do you have a KVM guest running and not using 'perf kvm'?\n",
    session->stats.nr_unprocessable_samples);
    }
    + if (session->stats.nr_unordered_events != 0)
    + ui__warning("%u out of order events recorded.\n", session->stats.nr_unordered_events);
    }

    #define session_done() (*(volatile int *)(&session_done))



    \
     
     \ /
      Last update: 2015-01-14 09:01    [W:2.976 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site