[PATCH 3.14 72/77] perf session: Do not fail on processing out of order event

2015-01-13 Thread Greg Kroah-Hartman
3.14-stable review patch.  If anyone has any objections, please let me know.

--

From: Jiri Olsa 

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 
Signed-off-by: Jiri Olsa 
Acked-by: Ingo Molnar 
Cc: Andi Kleen 
Cc: Corey Ashford 
Cc: David Ahern 
Cc: Frederic Weisbecker 
Cc: Ingo Molnar 
Cc: Linus Torvalds 
Cc: Matt Fleming 
Cc: Namhyung Kim 
Cc: Paul Mackerras 
Cc: Peter Zijlstra 
Cc: Stephane Eranian 
Link: 
http://lkml.kernel.org/r/1417016371-30249-1-git-send-email-jo...@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo 
[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 
Signed-off-by: Greg Kroah-Hartman 
---
 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
@@ -36,6 +36,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
@@ -638,8 +638,7 @@ int perf_session_queue_event(struct perf
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)) {
@@ -1135,6 +1134,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);
 }
 
 volatile int session_done;


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3.14 72/77] perf session: Do not fail on processing out of order event

2015-01-13 Thread Greg Kroah-Hartman
3.14-stable review patch.  If anyone has any objections, please let me know.

--

From: Jiri Olsa jo...@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 torva...@linux-foundation.org
Signed-off-by: Jiri Olsa jo...@kernel.org
Acked-by: Ingo Molnar mi...@kernel.org
Cc: Andi Kleen a...@linux.intel.com
Cc: Corey Ashford cjash...@linux.vnet.ibm.com
Cc: David Ahern dsah...@gmail.com
Cc: Frederic Weisbecker fweis...@gmail.com
Cc: Ingo Molnar mi...@kernel.org
Cc: Linus Torvalds torva...@linux-foundation.org
Cc: Matt Fleming matt.flem...@intel.com
Cc: Namhyung Kim namhy...@kernel.org
Cc: Paul Mackerras pau...@samba.org
Cc: Peter Zijlstra a.p.zijls...@chello.nl
Cc: Stephane Eranian eran...@google.com
Link: 
http://lkml.kernel.org/r/1417016371-30249-1-git-send-email-jo...@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo a...@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.zh...@huawei.com
Signed-off-by: Greg Kroah-Hartman gre...@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
@@ -36,6 +36,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
@@ -638,8 +638,7 @@ int perf_session_queue_event(struct perf
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)) {
@@ -1135,6 +1134,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);
 }
 
 volatile int session_done;


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/