Re: [PATCH 16/18] perf tools: Add debug prints for ordered events queue

2014-06-29 Thread David Ahern

On 6/29/14, 10:46 AM, Jiri Olsa wrote:

On Fri, Jun 27, 2014 at 08:52:26PM -0600, David Ahern wrote:

On 6/18/14, 8:58 AM, Jiri Olsa wrote:

Adding some prints for ordered events queue, to help
debug issues.


went to enable this and it is really odd to have to edit a config file to
enable debugging. How about hooking it into verbose option? Maybe like
multiple levels of -v or -v  or -v queue.


seems like verbose option factoring.. in future ;-) I can live
without this patch though.. it was mainly for testing my changes


It was quite useful to see how various data sets were stressing the 
ordered samples queue. For example 'perf record -g' and a kernel build 
stressed it more than the record on the 'perf bench'.


David

--
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/


Re: [PATCH 16/18] perf tools: Add debug prints for ordered events queue

2014-06-29 Thread Jiri Olsa
On Fri, Jun 27, 2014 at 08:52:26PM -0600, David Ahern wrote:
> On 6/18/14, 8:58 AM, Jiri Olsa wrote:
> >Adding some prints for ordered events queue, to help
> >debug issues.
> 
> went to enable this and it is really odd to have to edit a config file to
> enable debugging. How about hooking it into verbose option? Maybe like
> multiple levels of -v or -v  or -v queue.

seems like verbose option factoring.. in future ;-) I can live
without this patch though.. it was mainly for testing my changes

thanks,
jirka
--
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/


Re: [PATCH 16/18] perf tools: Add debug prints for ordered events queue

2014-06-29 Thread Jiri Olsa
On Fri, Jun 27, 2014 at 08:52:26PM -0600, David Ahern wrote:
 On 6/18/14, 8:58 AM, Jiri Olsa wrote:
 Adding some prints for ordered events queue, to help
 debug issues.
 
 went to enable this and it is really odd to have to edit a config file to
 enable debugging. How about hooking it into verbose option? Maybe like
 multiple levels of -v or -v val or -v queue.

seems like verbose option factoring.. in future ;-) I can live
without this patch though.. it was mainly for testing my changes

thanks,
jirka
--
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/


Re: [PATCH 16/18] perf tools: Add debug prints for ordered events queue

2014-06-29 Thread David Ahern

On 6/29/14, 10:46 AM, Jiri Olsa wrote:

On Fri, Jun 27, 2014 at 08:52:26PM -0600, David Ahern wrote:

On 6/18/14, 8:58 AM, Jiri Olsa wrote:

Adding some prints for ordered events queue, to help
debug issues.


went to enable this and it is really odd to have to edit a config file to
enable debugging. How about hooking it into verbose option? Maybe like
multiple levels of -v or -v val or -v queue.


seems like verbose option factoring.. in future ;-) I can live
without this patch though.. it was mainly for testing my changes


It was quite useful to see how various data sets were stressing the 
ordered samples queue. For example 'perf record -g' and a kernel build 
stressed it more than the record on the 'perf bench'.


David

--
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/


Re: [PATCH 16/18] perf tools: Add debug prints for ordered events queue

2014-06-27 Thread David Ahern

On 6/18/14, 8:58 AM, Jiri Olsa wrote:

Adding some prints for ordered events queue, to help
debug issues.


went to enable this and it is really odd to have to edit a config file 
to enable debugging. How about hooking it into verbose option? Maybe 
like multiple levels of -v or -v  or -v queue.


David
--
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/


Re: [PATCH 16/18] perf tools: Add debug prints for ordered events queue

2014-06-27 Thread David Ahern

On 6/18/14, 8:58 AM, Jiri Olsa wrote:

Adding some prints for ordered events queue, to help
debug issues.


went to enable this and it is really odd to have to edit a config file 
to enable debugging. How about hooking it into verbose option? Maybe 
like multiple levels of -v or -v val or -v queue.


David
--
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 16/18] perf tools: Add debug prints for ordered events queue

2014-06-18 Thread Jiri Olsa
Adding some prints for ordered events queue, to help
debug issues.

Cc: Arnaldo Carvalho de Melo 
Cc: Corey Ashford 
Cc: David Ahern 
Cc: Frederic Weisbecker 
Cc: Ingo Molnar 
Cc: Jean Pihet 
Cc: Namhyung Kim 
Cc: Paul Mackerras 
Cc: Peter Zijlstra 
Signed-off-by: Jiri Olsa 
---
 tools/perf/builtin-report.c  |  4 +++
 tools/perf/util/ordered-events.c | 54 
 tools/perf/util/ordered-events.h |  2 ++
 3 files changed, 60 insertions(+)

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 09b9d0c..130ab5c 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -82,6 +82,10 @@ static int report__config(const char *var, const char 
*value, void *cb)
rep->queue_size = perf_config_u64(var, value);
return 0;
}
+   if (!strcmp(var, "report.queue-debug")) {
+   debug_sample_queue = perf_config_int(var, value);
+   return 0;
+   }
 
return perf_default_config(var, value, cb);
 }
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index 946619c..662ee0c 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -4,6 +4,37 @@
 #include "session.h"
 #include "asm/bug.h"
 
+int debug_sample_queue;
+
+static int pr_level(int level, const char *fmt, ...)
+{
+   int ret = 0;
+
+   if (unlikely(debug_sample_queue >= level)) {
+   va_list args;
+
+   va_start(args, fmt);
+   ret = vfprintf(stderr, fmt, args);
+   va_end(args);
+   }
+
+   return ret;
+}
+
+#define pr_N(n, fmt, ...) \
+   pr_level(n, fmt, ##__VA_ARGS__)
+#define pr(fmt, ...)  pr_N(1, pr_fmt(fmt), ##__VA_ARGS__)
+
+static int pr_time(const char *str, u64 time)
+{
+   u64 secs, usecs, nsecs = time;
+
+   secs = nsecs / NSECS_PER_SEC;
+   nsecs -= secs * NSECS_PER_SEC;
+   usecs = nsecs / NSECS_PER_USEC;
+   return fprintf(stderr, "\t[%13lu.%06lu] %s\n", secs, usecs, str);
+}
+
 static void queue_event(struct ordered_events_queue *q, struct ordered_event 
*new)
 {
struct ordered_event *last = q->last;
@@ -68,6 +99,9 @@ static struct ordered_event *alloc_event(struct 
ordered_events_queue *q)
if (!q->buffer)
return NULL;
 
+   pr("alloc size %" PRIu64 "B, max %" PRIu64 "B\n",
+  q->cur_alloc_size, q->max_alloc_size);
+
q->cur_alloc_size += size;
list_add(>buffer->list, >to_free);
 
@@ -183,6 +217,19 @@ int ordered_events_flush(struct perf_session *s, struct 
perf_tool *tool,
break;
};
 
+   if (unlikely(debug_sample_queue)) {
+   static const char * const str[] = {
+   "FINAL",
+   "ROUND",
+   "HALF ",
+   };
+
+   fprintf(stderr, "ordered_events_flush %s, nr_events %u\n",
+   str[how], q->nr_events);
+   pr_time("next_flush",q->next_flush);
+   pr_time("max_timestamp", q->max_timestamp);
+   }
+
err = __ordered_events_flush(s, tool);
 
if (!err) {
@@ -190,6 +237,13 @@ int ordered_events_flush(struct perf_session *s, struct 
perf_tool *tool,
q->next_flush = q->max_timestamp;
}
 
+   if (unlikely(debug_sample_queue)) {
+   fprintf(stderr, "ordered_events_flush nr_events %u\n",
+   q->nr_events);
+   pr_time("next_flush", q->next_flush);
+   pr_time("last_flush", q->last_flush);
+   }
+
return err;
 }
 
diff --git a/tools/perf/util/ordered-events.h b/tools/perf/util/ordered-events.h
index 04cb295..8a717de 100644
--- a/tools/perf/util/ordered-events.h
+++ b/tools/perf/util/ordered-events.h
@@ -48,4 +48,6 @@ ordered_events_queue_alloc_size(struct ordered_events_queue 
*q, u64 size)
 {
q->max_alloc_size = size;
 }
+
+extern int debug_sample_queue;
 #endif /* __ORDERED_EVENTS_H */
-- 
1.8.3.1

--
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 16/18] perf tools: Add debug prints for ordered events queue

2014-06-18 Thread Jiri Olsa
Adding some prints for ordered events queue, to help
debug issues.

Cc: Arnaldo Carvalho de Melo a...@kernel.org
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: Jean Pihet jean.pi...@linaro.org
Cc: Namhyung Kim namhy...@kernel.org
Cc: Paul Mackerras pau...@samba.org
Cc: Peter Zijlstra a.p.zijls...@chello.nl
Signed-off-by: Jiri Olsa jo...@kernel.org
---
 tools/perf/builtin-report.c  |  4 +++
 tools/perf/util/ordered-events.c | 54 
 tools/perf/util/ordered-events.h |  2 ++
 3 files changed, 60 insertions(+)

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 09b9d0c..130ab5c 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -82,6 +82,10 @@ static int report__config(const char *var, const char 
*value, void *cb)
rep-queue_size = perf_config_u64(var, value);
return 0;
}
+   if (!strcmp(var, report.queue-debug)) {
+   debug_sample_queue = perf_config_int(var, value);
+   return 0;
+   }
 
return perf_default_config(var, value, cb);
 }
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index 946619c..662ee0c 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -4,6 +4,37 @@
 #include session.h
 #include asm/bug.h
 
+int debug_sample_queue;
+
+static int pr_level(int level, const char *fmt, ...)
+{
+   int ret = 0;
+
+   if (unlikely(debug_sample_queue = level)) {
+   va_list args;
+
+   va_start(args, fmt);
+   ret = vfprintf(stderr, fmt, args);
+   va_end(args);
+   }
+
+   return ret;
+}
+
+#define pr_N(n, fmt, ...) \
+   pr_level(n, fmt, ##__VA_ARGS__)
+#define pr(fmt, ...)  pr_N(1, pr_fmt(fmt), ##__VA_ARGS__)
+
+static int pr_time(const char *str, u64 time)
+{
+   u64 secs, usecs, nsecs = time;
+
+   secs = nsecs / NSECS_PER_SEC;
+   nsecs -= secs * NSECS_PER_SEC;
+   usecs = nsecs / NSECS_PER_USEC;
+   return fprintf(stderr, \t[%13lu.%06lu] %s\n, secs, usecs, str);
+}
+
 static void queue_event(struct ordered_events_queue *q, struct ordered_event 
*new)
 {
struct ordered_event *last = q-last;
@@ -68,6 +99,9 @@ static struct ordered_event *alloc_event(struct 
ordered_events_queue *q)
if (!q-buffer)
return NULL;
 
+   pr(alloc size % PRIu64 B, max % PRIu64 B\n,
+  q-cur_alloc_size, q-max_alloc_size);
+
q-cur_alloc_size += size;
list_add(q-buffer-list, q-to_free);
 
@@ -183,6 +217,19 @@ int ordered_events_flush(struct perf_session *s, struct 
perf_tool *tool,
break;
};
 
+   if (unlikely(debug_sample_queue)) {
+   static const char * const str[] = {
+   FINAL,
+   ROUND,
+   HALF ,
+   };
+
+   fprintf(stderr, ordered_events_flush %s, nr_events %u\n,
+   str[how], q-nr_events);
+   pr_time(next_flush,q-next_flush);
+   pr_time(max_timestamp, q-max_timestamp);
+   }
+
err = __ordered_events_flush(s, tool);
 
if (!err) {
@@ -190,6 +237,13 @@ int ordered_events_flush(struct perf_session *s, struct 
perf_tool *tool,
q-next_flush = q-max_timestamp;
}
 
+   if (unlikely(debug_sample_queue)) {
+   fprintf(stderr, ordered_events_flush nr_events %u\n,
+   q-nr_events);
+   pr_time(next_flush, q-next_flush);
+   pr_time(last_flush, q-last_flush);
+   }
+
return err;
 }
 
diff --git a/tools/perf/util/ordered-events.h b/tools/perf/util/ordered-events.h
index 04cb295..8a717de 100644
--- a/tools/perf/util/ordered-events.h
+++ b/tools/perf/util/ordered-events.h
@@ -48,4 +48,6 @@ ordered_events_queue_alloc_size(struct ordered_events_queue 
*q, u64 size)
 {
q-max_alloc_size = size;
 }
+
+extern int debug_sample_queue;
 #endif /* __ORDERED_EVENTS_H */
-- 
1.8.3.1

--
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/