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