All of lore.kernel.org
 help / color / mirror / Atom feed
* Some bug fixes to the res sample / script code
@ 2019-03-12  3:52 Andi Kleen
  2019-03-12  3:52 ` [PATCH 1/3] perf, tools, report: Handle samples without time Andi Kleen
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Andi Kleen @ 2019-03-12  3:52 UTC (permalink / raw)
  To: acme; +Cc: jolsa, linux-perf-users, linux-kernel

Some minor bug fixes to the recently merged res sample / scripting
improvelement in perf report.

-Andi



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/3] perf, tools, report: Handle samples without time
  2019-03-12  3:52 Some bug fixes to the res sample / script code Andi Kleen
@ 2019-03-12  3:52 ` Andi Kleen
  2019-03-12 11:14   ` Jiri Olsa
  2019-03-12  3:52 ` [PATCH 2/3] perf, tools, report: Pass on -f to child perf script Andi Kleen
  2019-03-12  3:52 ` [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode Andi Kleen
  2 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2019-03-12  3:52 UTC (permalink / raw)
  To: acme; +Cc: jolsa, linux-perf-users, linux-kernel, Andi Kleen

From: Andi Kleen <ak@linux.intel.com>

When a sample doesn't have a time stamp (e.g. from --no-time),
show the beginning of the trace for res samples instead of generating
an impossible time range that errors out.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/ui/browsers/res_sample.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/ui/browsers/res_sample.c b/tools/perf/ui/browsers/res_sample.c
index c0dd73176d42..c450a3536f10 100644
--- a/tools/perf/ui/browsers/res_sample.c
+++ b/tools/perf/ui/browsers/res_sample.c
@@ -60,7 +60,9 @@ int res_sample_browse(struct res_sample *res_samples, int num_res,
 		return -1;
 	r = &res_samples[choice];
 
-	n = timestamp__scnprintf_nsec(r->time - context_len, trange, sizeof trange);
+	n = timestamp__scnprintf_nsec(r->time > context_len ?
+				      r->time - context_len : r->time,
+				      trange, sizeof trange);
 	trange[n++] = ',';
 	timestamp__scnprintf_nsec(r->time + context_len, trange + n, sizeof trange - n);
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] perf, tools, report: Pass on -f to child perf script
  2019-03-12  3:52 Some bug fixes to the res sample / script code Andi Kleen
  2019-03-12  3:52 ` [PATCH 1/3] perf, tools, report: Handle samples without time Andi Kleen
@ 2019-03-12  3:52 ` Andi Kleen
  2019-03-12 11:13   ` Jiri Olsa
  2019-03-12  3:52 ` [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode Andi Kleen
  2 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2019-03-12  3:52 UTC (permalink / raw)
  To: acme; +Cc: jolsa, linux-perf-users, linux-kernel, Andi Kleen

From: Andi Kleen <ak@linux.intel.com>

Pass on -f to the child perf script, so that it can read the perf.data
file if it's owned by a different user.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/ui/browsers/res_sample.c | 3 ++-
 tools/perf/ui/browsers/scripts.c    | 5 +++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/tools/perf/ui/browsers/res_sample.c b/tools/perf/ui/browsers/res_sample.c
index c450a3536f10..6e17e11a2ab9 100644
--- a/tools/perf/ui/browsers/res_sample.c
+++ b/tools/perf/ui/browsers/res_sample.c
@@ -70,7 +70,7 @@ int res_sample_browse(struct res_sample *res_samples, int num_res,
 
 	attr_to_script(extra_format, &evsel->attr);
 
-	if (asprintf(&cmd, "%s script %s%s --time %s %s%s %s%s --ns %s %s %s %s %s | less +/%s",
+	if (asprintf(&cmd, "%s script %s%s --time %s %s%s %s%s --ns %s %s %s %s %s %s | less +/%s",
 		     perf,
 		     input_name ? "-i " : "",
 		     input_name ? input_name : "",
@@ -85,6 +85,7 @@ int res_sample_browse(struct res_sample *res_samples, int num_res,
 		     symbol_conf.inline_name ? "--inline" : "",
 		     "--show-lost-events ",
 		     r->tid ? "--show-switch-events --show-task-events " : "",
+		     symbol_conf.force ? "-f" : "",
 		     tsample) < 0)
 		return -1;
 	run_script(cmd);
diff --git a/tools/perf/ui/browsers/scripts.c b/tools/perf/ui/browsers/scripts.c
index 27cf3ab88d13..f4c438dead66 100644
--- a/tools/perf/ui/browsers/scripts.c
+++ b/tools/perf/ui/browsers/scripts.c
@@ -171,12 +171,13 @@ int script_browse(const char *script_opt, struct perf_evsel *evsel)
 	if (list_scripts(script_name, &custom, evsel))
 		return -1;
 
-	if (asprintf(&cmd, "%s%s %s %s%s 2>&1 | less",
+	if (asprintf(&cmd, "%s%s %s %s%s %s 2>&1 | less",
 			custom ? "perf script -s " : "",
 			script_name,
 			script_opt ? script_opt : "",
 			input_name ? "-i " : "",
-			input_name ? input_name : "") < 0)
+			input_name ? input_name : "",
+			symbol_conf.force ? "-f " : "") < 0)
 		return -1;
 
 	run_script(cmd);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode
  2019-03-12  3:52 Some bug fixes to the res sample / script code Andi Kleen
  2019-03-12  3:52 ` [PATCH 1/3] perf, tools, report: Handle samples without time Andi Kleen
  2019-03-12  3:52 ` [PATCH 2/3] perf, tools, report: Pass on -f to child perf script Andi Kleen
@ 2019-03-12  3:52 ` Andi Kleen
  2019-03-12 11:12   ` Jiri Olsa
  2 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2019-03-12  3:52 UTC (permalink / raw)
  To: acme; +Cc: jolsa, linux-perf-users, linux-kernel, Andi Kleen

From: Andi Kleen <ak@linux.intel.com>

In hierarchy mode the res samples need to be cloned from the parent
entry. Copy them in this case. This fixes res sample browsing
with --hierarchy.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/util/hist.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 1f230285d78a..dcf24581dfbd 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -437,8 +437,15 @@ static int hist_entry__init(struct hist_entry *he,
 	}
 
 	if (symbol_conf.res_sample) {
-		he->res_samples = calloc(sizeof(struct res_sample),
-					symbol_conf.res_sample);
+		if (he->res_samples) {
+			he->res_samples = memdup(he->res_samples,
+						sizeof(struct res_sample) *
+						symbol_conf.res_sample);
+		} else {
+			he->res_samples = calloc(sizeof(struct res_sample),
+						 symbol_conf.res_sample);
+			he->num_res = 0;
+		}
 		if (!he->res_samples)
 			goto err_srcline;
 	}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode
  2019-03-12  3:52 ` [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode Andi Kleen
@ 2019-03-12 11:12   ` Jiri Olsa
  2019-03-12 13:52     ` Andi Kleen
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Olsa @ 2019-03-12 11:12 UTC (permalink / raw)
  To: Andi Kleen; +Cc: acme, jolsa, linux-perf-users, linux-kernel, Andi Kleen

On Mon, Mar 11, 2019 at 08:52:24PM -0700, Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
> 
> In hierarchy mode the res samples need to be cloned from the parent
> entry. Copy them in this case. This fixes res sample browsing
> with --hierarchy.
> 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> ---
>  tools/perf/util/hist.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
> index 1f230285d78a..dcf24581dfbd 100644
> --- a/tools/perf/util/hist.c
> +++ b/tools/perf/util/hist.c
> @@ -437,8 +437,15 @@ static int hist_entry__init(struct hist_entry *he,
>  	}
>  
>  	if (symbol_conf.res_sample) {
> -		he->res_samples = calloc(sizeof(struct res_sample),
> -					symbol_conf.res_sample);
> +		if (he->res_samples) {

I dont think this leg will ever execute because we don't set
res_samples in template

jirka

> +			he->res_samples = memdup(he->res_samples,
> +						sizeof(struct res_sample) *
> +						symbol_conf.res_sample);
> +		} else {
> +			he->res_samples = calloc(sizeof(struct res_sample),
> +						 symbol_conf.res_sample);
> +			he->num_res = 0;
> +		}
>  		if (!he->res_samples)
>  			goto err_srcline;
>  	}
> -- 
> 2.20.1
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/3] perf, tools, report: Pass on -f to child perf script
  2019-03-12  3:52 ` [PATCH 2/3] perf, tools, report: Pass on -f to child perf script Andi Kleen
@ 2019-03-12 11:13   ` Jiri Olsa
  0 siblings, 0 replies; 9+ messages in thread
From: Jiri Olsa @ 2019-03-12 11:13 UTC (permalink / raw)
  To: Andi Kleen; +Cc: acme, jolsa, linux-perf-users, linux-kernel, Andi Kleen

On Mon, Mar 11, 2019 at 08:52:23PM -0700, Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
> 
> Pass on -f to the child perf script, so that it can read the perf.data
> file if it's owned by a different user.
> 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

> ---
>  tools/perf/ui/browsers/res_sample.c | 3 ++-
>  tools/perf/ui/browsers/scripts.c    | 5 +++--
>  2 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/ui/browsers/res_sample.c b/tools/perf/ui/browsers/res_sample.c
> index c450a3536f10..6e17e11a2ab9 100644
> --- a/tools/perf/ui/browsers/res_sample.c
> +++ b/tools/perf/ui/browsers/res_sample.c
> @@ -70,7 +70,7 @@ int res_sample_browse(struct res_sample *res_samples, int num_res,
>  
>  	attr_to_script(extra_format, &evsel->attr);
>  
> -	if (asprintf(&cmd, "%s script %s%s --time %s %s%s %s%s --ns %s %s %s %s %s | less +/%s",
> +	if (asprintf(&cmd, "%s script %s%s --time %s %s%s %s%s --ns %s %s %s %s %s %s | less +/%s",
>  		     perf,
>  		     input_name ? "-i " : "",
>  		     input_name ? input_name : "",
> @@ -85,6 +85,7 @@ int res_sample_browse(struct res_sample *res_samples, int num_res,
>  		     symbol_conf.inline_name ? "--inline" : "",
>  		     "--show-lost-events ",
>  		     r->tid ? "--show-switch-events --show-task-events " : "",
> +		     symbol_conf.force ? "-f" : "",
>  		     tsample) < 0)
>  		return -1;
>  	run_script(cmd);
> diff --git a/tools/perf/ui/browsers/scripts.c b/tools/perf/ui/browsers/scripts.c
> index 27cf3ab88d13..f4c438dead66 100644
> --- a/tools/perf/ui/browsers/scripts.c
> +++ b/tools/perf/ui/browsers/scripts.c
> @@ -171,12 +171,13 @@ int script_browse(const char *script_opt, struct perf_evsel *evsel)
>  	if (list_scripts(script_name, &custom, evsel))
>  		return -1;
>  
> -	if (asprintf(&cmd, "%s%s %s %s%s 2>&1 | less",
> +	if (asprintf(&cmd, "%s%s %s %s%s %s 2>&1 | less",
>  			custom ? "perf script -s " : "",
>  			script_name,
>  			script_opt ? script_opt : "",
>  			input_name ? "-i " : "",
> -			input_name ? input_name : "") < 0)
> +			input_name ? input_name : "",
> +			symbol_conf.force ? "-f " : "") < 0)
>  		return -1;
>  
>  	run_script(cmd);
> -- 
> 2.20.1
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] perf, tools, report: Handle samples without time
  2019-03-12  3:52 ` [PATCH 1/3] perf, tools, report: Handle samples without time Andi Kleen
@ 2019-03-12 11:14   ` Jiri Olsa
  0 siblings, 0 replies; 9+ messages in thread
From: Jiri Olsa @ 2019-03-12 11:14 UTC (permalink / raw)
  To: Andi Kleen; +Cc: acme, jolsa, linux-perf-users, linux-kernel, Andi Kleen

On Mon, Mar 11, 2019 at 08:52:22PM -0700, Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
> 
> When a sample doesn't have a time stamp (e.g. from --no-time),
> show the beginning of the trace for res samples instead of generating
> an impossible time range that errors out.
> 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

> ---
>  tools/perf/ui/browsers/res_sample.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/ui/browsers/res_sample.c b/tools/perf/ui/browsers/res_sample.c
> index c0dd73176d42..c450a3536f10 100644
> --- a/tools/perf/ui/browsers/res_sample.c
> +++ b/tools/perf/ui/browsers/res_sample.c
> @@ -60,7 +60,9 @@ int res_sample_browse(struct res_sample *res_samples, int num_res,
>  		return -1;
>  	r = &res_samples[choice];
>  
> -	n = timestamp__scnprintf_nsec(r->time - context_len, trange, sizeof trange);
> +	n = timestamp__scnprintf_nsec(r->time > context_len ?
> +				      r->time - context_len : r->time,
> +				      trange, sizeof trange);
>  	trange[n++] = ',';
>  	timestamp__scnprintf_nsec(r->time + context_len, trange + n, sizeof trange - n);
>  
> -- 
> 2.20.1
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode
  2019-03-12 11:12   ` Jiri Olsa
@ 2019-03-12 13:52     ` Andi Kleen
  2019-03-13  9:13       ` Jiri Olsa
  0 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2019-03-12 13:52 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Andi Kleen, acme, jolsa, linux-perf-users, linux-kernel, Andi Kleen

On Tue, Mar 12, 2019 at 12:12:59PM +0100, Jiri Olsa wrote:
> On Mon, Mar 11, 2019 at 08:52:24PM -0700, Andi Kleen wrote:
> > From: Andi Kleen <ak@linux.intel.com>
> > 
> > In hierarchy mode the res samples need to be cloned from the parent
> > entry. Copy them in this case. This fixes res sample browsing
> > with --hierarchy.
> > 
> > Signed-off-by: Andi Kleen <ak@linux.intel.com>
> > ---
> >  tools/perf/util/hist.c | 11 +++++++++--
> >  1 file changed, 9 insertions(+), 2 deletions(-)
> > 
> > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
> > index 1f230285d78a..dcf24581dfbd 100644
> > --- a/tools/perf/util/hist.c
> > +++ b/tools/perf/util/hist.c
> > @@ -437,8 +437,15 @@ static int hist_entry__init(struct hist_entry *he,
> >  	}
> >  
> >  	if (symbol_conf.res_sample) {
> > -		he->res_samples = calloc(sizeof(struct res_sample),
> > -					symbol_conf.res_sample);
> > +		if (he->res_samples) {
> 
> I dont think this leg will ever execute because we don't set
> res_samples in template

I originally thought this too, but ...

The hierarchy mode calls it with a hist entry that is not
a template.

-Andi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode
  2019-03-12 13:52     ` Andi Kleen
@ 2019-03-13  9:13       ` Jiri Olsa
  0 siblings, 0 replies; 9+ messages in thread
From: Jiri Olsa @ 2019-03-13  9:13 UTC (permalink / raw)
  To: Andi Kleen; +Cc: acme, jolsa, linux-perf-users, linux-kernel, Andi Kleen

On Tue, Mar 12, 2019 at 06:52:30AM -0700, Andi Kleen wrote:
> On Tue, Mar 12, 2019 at 12:12:59PM +0100, Jiri Olsa wrote:
> > On Mon, Mar 11, 2019 at 08:52:24PM -0700, Andi Kleen wrote:
> > > From: Andi Kleen <ak@linux.intel.com>
> > > 
> > > In hierarchy mode the res samples need to be cloned from the parent
> > > entry. Copy them in this case. This fixes res sample browsing
> > > with --hierarchy.
> > > 
> > > Signed-off-by: Andi Kleen <ak@linux.intel.com>
> > > ---
> > >  tools/perf/util/hist.c | 11 +++++++++--
> > >  1 file changed, 9 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
> > > index 1f230285d78a..dcf24581dfbd 100644
> > > --- a/tools/perf/util/hist.c
> > > +++ b/tools/perf/util/hist.c
> > > @@ -437,8 +437,15 @@ static int hist_entry__init(struct hist_entry *he,
> > >  	}
> > >  
> > >  	if (symbol_conf.res_sample) {
> > > -		he->res_samples = calloc(sizeof(struct res_sample),
> > > -					symbol_conf.res_sample);
> > > +		if (he->res_samples) {
> > 
> > I dont think this leg will ever execute because we don't set
> > res_samples in template
> 
> I originally thought this too, but ...
> 
> The hierarchy mode calls it with a hist entry that is not
> a template.

right, forgot about this

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-03-13  9:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-12  3:52 Some bug fixes to the res sample / script code Andi Kleen
2019-03-12  3:52 ` [PATCH 1/3] perf, tools, report: Handle samples without time Andi Kleen
2019-03-12 11:14   ` Jiri Olsa
2019-03-12  3:52 ` [PATCH 2/3] perf, tools, report: Pass on -f to child perf script Andi Kleen
2019-03-12 11:13   ` Jiri Olsa
2019-03-12  3:52 ` [PATCH 3/3] perf, tools, report: Set up samples correctly in hierarchy mode Andi Kleen
2019-03-12 11:12   ` Jiri Olsa
2019-03-12 13:52     ` Andi Kleen
2019-03-13  9:13       ` Jiri Olsa

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.