Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1302302 > unrolled thread

[PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields

Started byNamhyung Kim <namhyung@kernel.org>
First post2016-01-06 02:00 +0100
Last post2016-01-07 00:50 +0100
Articles 5 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 02:00 +0100
    Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show  trace fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-07 00:20 +0100
      Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show  trace fields Namhyung Kim <namhyung@kernel.org> - 2016-01-07 00:30 +0100
        Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show  trace fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-07 00:40 +0100
          Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show  trace fields Namhyung Kim <namhyung@kernel.org> - 2016-01-07 00:50 +0100

#1302302 — [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields

FromNamhyung Kim <namhyung@kernel.org>
Date2016-01-06 02:00 +0100
Subject[PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields
Message-ID<qNKCe-299-17@gated-at.bofh.it>
To use dynamic sort keys, it might be good to add an option to see the
list of field names.

  $ perf evlist -i perf.data.sched
  sched:sched_switch
  sched:sched_stat_wait
  sched:sched_stat_sleep
  sched:sched_stat_iowait
  sched:sched_stat_runtime
  sched:sched_process_fork
  sched:sched_wakeup
  sched:sched_wakeup_new
  sched:sched_migrate_task
  # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events

  $ perf evlist -i perf.data.sched --trace-fields
  sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
  sched:sched_stat_wait: trace_fields=comm,pid,delay
  sched:sched_stat_sleep: trace_fields=comm,pid,delay
  sched:sched_stat_iowait: trace_fields=comm,pid,delay
  sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
  sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
  sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
  sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
  sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/Documentation/perf-evlist.txt |  3 +++
 tools/perf/builtin-evlist.c              | 11 ++++++++++-
 tools/perf/util/evsel.c                  | 23 +++++++++++++++++++++++
 tools/perf/util/evsel.h                  |  1 +
 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
index 1ceb3700ffbb..6f7200fb85cf 100644
--- a/tools/perf/Documentation/perf-evlist.txt
+++ b/tools/perf/Documentation/perf-evlist.txt
@@ -32,6 +32,9 @@ OPTIONS
 --group::
 	Show event group information.
 
+--trace-fields::
+	Show tracepoint field names.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-list[1],
diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
index 08a7d36a2cf8..8a31f511e1a0 100644
--- a/tools/perf/builtin-evlist.c
+++ b/tools/perf/builtin-evlist.c
@@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
 		.mode = PERF_DATA_MODE_READ,
 		.force = details->force,
 	};
+	bool has_tracepoint = false;
 
 	session = perf_session__new(&file, 0, NULL);
 	if (session == NULL)
 		return -1;
 
-	evlist__for_each(session->evlist, pos)
+	evlist__for_each(session->evlist, pos) {
 		perf_evsel__fprintf(pos, details, stdout);
 
+		if (pos->attr.type == PERF_TYPE_TRACEPOINT)
+			has_tracepoint = true;
+	}
+
+	if (has_tracepoint && !details->trace_fields)
+		printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
+
 	perf_session__delete(session);
 	return 0;
 }
@@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
 	OPT_BOOLEAN('g', "group", &details.event_group,
 		    "Show event group information"),
 	OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
+	OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
 	OPT_END()
 	};
 	const char * const evlist_usage[] = {
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 544e4400de13..b7822c98fcca 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
 		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
 					 term, (u64)evsel->attr.sample_freq);
 	}
+
+	if (details->trace_fields) {
+		struct format_field *field;
+
+		if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
+			printed += comma_fprintf(fp, &first, " (not a tracepoint)");
+			goto out;
+		}
+
+		field = evsel->tp_format->format.fields;
+		if (field == NULL) {
+			printed += comma_fprintf(fp, &first, " (no trace field)");
+			goto out;
+		}
+
+		printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
+
+		field = field->next;
+		while (field) {
+			printed += comma_fprintf(fp, &first, "%s", field->name);
+			field = field->next;
+		}
+	}
 out:
 	fputc('\n', fp);
 	return ++printed;
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 5ded1fc0341e..8e75434bd01c 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -369,6 +369,7 @@ struct perf_attr_details {
 	bool verbose;
 	bool event_group;
 	bool force;
+	bool trace_fields;
 };
 
 int perf_evsel__fprintf(struct perf_evsel *evsel,
-- 
2.6.4

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

[toc] | [next] | [standalone]


#1303140 — Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-01-07 00:20 +0100
SubjectRe: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields
Message-ID<qO5x1-7Pn-31@gated-at.bofh.it>
In reply to#1302302
Em Wed, Jan 06, 2016 at 09:55:01AM +0900, Namhyung Kim escreveu:
> To use dynamic sort keys, it might be good to add an option to see the
> list of field names.
> 
>   $ perf evlist -i perf.data.sched
>   sched:sched_switch
>   sched:sched_stat_wait
>   sched:sched_stat_sleep
>   sched:sched_stat_iowait
>   sched:sched_stat_runtime
>   sched:sched_process_fork
>   sched:sched_wakeup
>   sched:sched_wakeup_new
>   sched:sched_migrate_task
>   # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events

Ok, almost there, question is: if I ask explicitely for
"--trace-fields", why should we have the "trace_fields=" in all lines,
instead of just:

 
   $ perf evlist -i perf.data.sched --trace-fields
   sched:sched_switch: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
   sched:sched_stat_wait: comm,pid,delay

?

I like the lack of spaces after commans, this way we can double click
and select the whole list, then edit it, etc.

- Arnaldo
 
>   $ perf evlist -i perf.data.sched --trace-fields
>   sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
>   sched:sched_stat_wait: trace_fields=comm,pid,delay
>   sched:sched_stat_sleep: trace_fields=comm,pid,delay
>   sched:sched_stat_iowait: trace_fields=comm,pid,delay
>   sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
>   sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
>   sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
>   sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
>   sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu
> 
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  tools/perf/Documentation/perf-evlist.txt |  3 +++
>  tools/perf/builtin-evlist.c              | 11 ++++++++++-
>  tools/perf/util/evsel.c                  | 23 +++++++++++++++++++++++
>  tools/perf/util/evsel.h                  |  1 +
>  4 files changed, 37 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
> index 1ceb3700ffbb..6f7200fb85cf 100644
> --- a/tools/perf/Documentation/perf-evlist.txt
> +++ b/tools/perf/Documentation/perf-evlist.txt
> @@ -32,6 +32,9 @@ OPTIONS
>  --group::
>  	Show event group information.
>  
> +--trace-fields::
> +	Show tracepoint field names.
> +
>  SEE ALSO
>  --------
>  linkperf:perf-record[1], linkperf:perf-list[1],
> diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
> index 08a7d36a2cf8..8a31f511e1a0 100644
> --- a/tools/perf/builtin-evlist.c
> +++ b/tools/perf/builtin-evlist.c
> @@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
>  		.mode = PERF_DATA_MODE_READ,
>  		.force = details->force,
>  	};
> +	bool has_tracepoint = false;
>  
>  	session = perf_session__new(&file, 0, NULL);
>  	if (session == NULL)
>  		return -1;
>  
> -	evlist__for_each(session->evlist, pos)
> +	evlist__for_each(session->evlist, pos) {
>  		perf_evsel__fprintf(pos, details, stdout);
>  
> +		if (pos->attr.type == PERF_TYPE_TRACEPOINT)
> +			has_tracepoint = true;
> +	}
> +
> +	if (has_tracepoint && !details->trace_fields)
> +		printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
> +
>  	perf_session__delete(session);
>  	return 0;
>  }
> @@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
>  	OPT_BOOLEAN('g', "group", &details.event_group,
>  		    "Show event group information"),
>  	OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
> +	OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
>  	OPT_END()
>  	};
>  	const char * const evlist_usage[] = {
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index 544e4400de13..b7822c98fcca 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
>  		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
>  					 term, (u64)evsel->attr.sample_freq);
>  	}
> +
> +	if (details->trace_fields) {
> +		struct format_field *field;
> +
> +		if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
> +			printed += comma_fprintf(fp, &first, " (not a tracepoint)");
> +			goto out;
> +		}
> +
> +		field = evsel->tp_format->format.fields;
> +		if (field == NULL) {
> +			printed += comma_fprintf(fp, &first, " (no trace field)");
> +			goto out;
> +		}
> +
> +		printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
> +
> +		field = field->next;
> +		while (field) {
> +			printed += comma_fprintf(fp, &first, "%s", field->name);
> +			field = field->next;
> +		}
> +	}
>  out:
>  	fputc('\n', fp);
>  	return ++printed;
> diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> index 5ded1fc0341e..8e75434bd01c 100644
> --- a/tools/perf/util/evsel.h
> +++ b/tools/perf/util/evsel.h
> @@ -369,6 +369,7 @@ struct perf_attr_details {
>  	bool verbose;
>  	bool event_group;
>  	bool force;
> +	bool trace_fields;
>  };
>  
>  int perf_evsel__fprintf(struct perf_evsel *evsel,
> -- 
> 2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1303141 — Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields

FromNamhyung Kim <namhyung@kernel.org>
Date2016-01-07 00:30 +0100
SubjectRe: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields
Message-ID<qO5GG-7Vl-1@gated-at.bofh.it>
In reply to#1303140
On Wed, Jan 06, 2016 at 08:10:51PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Jan 06, 2016 at 09:55:01AM +0900, Namhyung Kim escreveu:
> > To use dynamic sort keys, it might be good to add an option to see the
> > list of field names.
> > 
> >   $ perf evlist -i perf.data.sched
> >   sched:sched_switch
> >   sched:sched_stat_wait
> >   sched:sched_stat_sleep
> >   sched:sched_stat_iowait
> >   sched:sched_stat_runtime
> >   sched:sched_process_fork
> >   sched:sched_wakeup
> >   sched:sched_wakeup_new
> >   sched:sched_migrate_task
> >   # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
> 
> Ok, almost there, question is: if I ask explicitely for
> "--trace-fields", why should we have the "trace_fields=" in all lines,
> instead of just:
> 
>  
>    $ perf evlist -i perf.data.sched --trace-fields
>    sched:sched_switch: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
>    sched:sched_stat_wait: comm,pid,delay
> 
> ?

I made it to work with other options too, like 'perf evlist --freq --trace-fields'.
In that case you may want to see it. :)

Thanks,
Namhyung


> 
> I like the lack of spaces after commans, this way we can double click
> and select the whole list, then edit it, etc.
> 
> - Arnaldo
>  
> >   $ perf evlist -i perf.data.sched --trace-fields
> >   sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
> >   sched:sched_stat_wait: trace_fields=comm,pid,delay
> >   sched:sched_stat_sleep: trace_fields=comm,pid,delay
> >   sched:sched_stat_iowait: trace_fields=comm,pid,delay
> >   sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
> >   sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
> >   sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
> >   sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
> >   sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu
> > 
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> > ---
> >  tools/perf/Documentation/perf-evlist.txt |  3 +++
> >  tools/perf/builtin-evlist.c              | 11 ++++++++++-
> >  tools/perf/util/evsel.c                  | 23 +++++++++++++++++++++++
> >  tools/perf/util/evsel.h                  |  1 +
> >  4 files changed, 37 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
> > index 1ceb3700ffbb..6f7200fb85cf 100644
> > --- a/tools/perf/Documentation/perf-evlist.txt
> > +++ b/tools/perf/Documentation/perf-evlist.txt
> > @@ -32,6 +32,9 @@ OPTIONS
> >  --group::
> >  	Show event group information.
> >  
> > +--trace-fields::
> > +	Show tracepoint field names.
> > +
> >  SEE ALSO
> >  --------
> >  linkperf:perf-record[1], linkperf:perf-list[1],
> > diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
> > index 08a7d36a2cf8..8a31f511e1a0 100644
> > --- a/tools/perf/builtin-evlist.c
> > +++ b/tools/perf/builtin-evlist.c
> > @@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
> >  		.mode = PERF_DATA_MODE_READ,
> >  		.force = details->force,
> >  	};
> > +	bool has_tracepoint = false;
> >  
> >  	session = perf_session__new(&file, 0, NULL);
> >  	if (session == NULL)
> >  		return -1;
> >  
> > -	evlist__for_each(session->evlist, pos)
> > +	evlist__for_each(session->evlist, pos) {
> >  		perf_evsel__fprintf(pos, details, stdout);
> >  
> > +		if (pos->attr.type == PERF_TYPE_TRACEPOINT)
> > +			has_tracepoint = true;
> > +	}
> > +
> > +	if (has_tracepoint && !details->trace_fields)
> > +		printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
> > +
> >  	perf_session__delete(session);
> >  	return 0;
> >  }
> > @@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
> >  	OPT_BOOLEAN('g', "group", &details.event_group,
> >  		    "Show event group information"),
> >  	OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
> > +	OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
> >  	OPT_END()
> >  	};
> >  	const char * const evlist_usage[] = {
> > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > index 544e4400de13..b7822c98fcca 100644
> > --- a/tools/perf/util/evsel.c
> > +++ b/tools/perf/util/evsel.c
> > @@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
> >  		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
> >  					 term, (u64)evsel->attr.sample_freq);
> >  	}
> > +
> > +	if (details->trace_fields) {
> > +		struct format_field *field;
> > +
> > +		if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
> > +			printed += comma_fprintf(fp, &first, " (not a tracepoint)");
> > +			goto out;
> > +		}
> > +
> > +		field = evsel->tp_format->format.fields;
> > +		if (field == NULL) {
> > +			printed += comma_fprintf(fp, &first, " (no trace field)");
> > +			goto out;
> > +		}
> > +
> > +		printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
> > +
> > +		field = field->next;
> > +		while (field) {
> > +			printed += comma_fprintf(fp, &first, "%s", field->name);
> > +			field = field->next;
> > +		}
> > +	}
> >  out:
> >  	fputc('\n', fp);
> >  	return ++printed;
> > diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> > index 5ded1fc0341e..8e75434bd01c 100644
> > --- a/tools/perf/util/evsel.h
> > +++ b/tools/perf/util/evsel.h
> > @@ -369,6 +369,7 @@ struct perf_attr_details {
> >  	bool verbose;
> >  	bool event_group;
> >  	bool force;
> > +	bool trace_fields;
> >  };
> >  
> >  int perf_evsel__fprintf(struct perf_evsel *evsel,
> > -- 
> > 2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1303152 — Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-01-07 00:40 +0100
SubjectRe: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields
Message-ID<qO5Ql-7Zi-1@gated-at.bofh.it>
In reply to#1303141
Em Thu, Jan 07, 2016 at 08:21:44AM +0900, Namhyung Kim escreveu:
> On Wed, Jan 06, 2016 at 08:10:51PM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Wed, Jan 06, 2016 at 09:55:01AM +0900, Namhyung Kim escreveu:
> > > To use dynamic sort keys, it might be good to add an option to see the
> > > list of field names.
> > > 
> > >   $ perf evlist -i perf.data.sched
> > >   sched:sched_switch
> > >   sched:sched_stat_wait
> > >   sched:sched_stat_sleep
> > >   sched:sched_stat_iowait
> > >   sched:sched_stat_runtime
> > >   sched:sched_process_fork
> > >   sched:sched_wakeup
> > >   sched:sched_wakeup_new
> > >   sched:sched_migrate_task
> > >   # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
> > 
> > Ok, almost there, question is: if I ask explicitely for
> > "--trace-fields", why should we have the "trace_fields=" in all lines,
> > instead of just:
> > 
> >  
> >    $ perf evlist -i perf.data.sched --trace-fields
> >    sched:sched_switch: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
> >    sched:sched_stat_wait: comm,pid,delay
> > 
> > ?
> 
> I made it to work with other options too, like 'perf evlist --freq --trace-fields'.
> In that case you may want to see it. :)

I see... And then you want to show those at the same time... Would you
have an use case for that? Or would it be better to make them mutually
exclusive? /me unsure...

- Arnaldo
 
> Thanks,
> Namhyung
> 
> 
> > 
> > I like the lack of spaces after commans, this way we can double click
> > and select the whole list, then edit it, etc.
> > 
> > - Arnaldo
> >  
> > >   $ perf evlist -i perf.data.sched --trace-fields
> > >   sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
> > >   sched:sched_stat_wait: trace_fields=comm,pid,delay
> > >   sched:sched_stat_sleep: trace_fields=comm,pid,delay
> > >   sched:sched_stat_iowait: trace_fields=comm,pid,delay
> > >   sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
> > >   sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
> > >   sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
> > >   sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
> > >   sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu
> > > 
> > > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> > > ---
> > >  tools/perf/Documentation/perf-evlist.txt |  3 +++
> > >  tools/perf/builtin-evlist.c              | 11 ++++++++++-
> > >  tools/perf/util/evsel.c                  | 23 +++++++++++++++++++++++
> > >  tools/perf/util/evsel.h                  |  1 +
> > >  4 files changed, 37 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
> > > index 1ceb3700ffbb..6f7200fb85cf 100644
> > > --- a/tools/perf/Documentation/perf-evlist.txt
> > > +++ b/tools/perf/Documentation/perf-evlist.txt
> > > @@ -32,6 +32,9 @@ OPTIONS
> > >  --group::
> > >  	Show event group information.
> > >  
> > > +--trace-fields::
> > > +	Show tracepoint field names.
> > > +
> > >  SEE ALSO
> > >  --------
> > >  linkperf:perf-record[1], linkperf:perf-list[1],
> > > diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
> > > index 08a7d36a2cf8..8a31f511e1a0 100644
> > > --- a/tools/perf/builtin-evlist.c
> > > +++ b/tools/perf/builtin-evlist.c
> > > @@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
> > >  		.mode = PERF_DATA_MODE_READ,
> > >  		.force = details->force,
> > >  	};
> > > +	bool has_tracepoint = false;
> > >  
> > >  	session = perf_session__new(&file, 0, NULL);
> > >  	if (session == NULL)
> > >  		return -1;
> > >  
> > > -	evlist__for_each(session->evlist, pos)
> > > +	evlist__for_each(session->evlist, pos) {
> > >  		perf_evsel__fprintf(pos, details, stdout);
> > >  
> > > +		if (pos->attr.type == PERF_TYPE_TRACEPOINT)
> > > +			has_tracepoint = true;
> > > +	}
> > > +
> > > +	if (has_tracepoint && !details->trace_fields)
> > > +		printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
> > > +
> > >  	perf_session__delete(session);
> > >  	return 0;
> > >  }
> > > @@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
> > >  	OPT_BOOLEAN('g', "group", &details.event_group,
> > >  		    "Show event group information"),
> > >  	OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
> > > +	OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
> > >  	OPT_END()
> > >  	};
> > >  	const char * const evlist_usage[] = {
> > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > > index 544e4400de13..b7822c98fcca 100644
> > > --- a/tools/perf/util/evsel.c
> > > +++ b/tools/perf/util/evsel.c
> > > @@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
> > >  		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
> > >  					 term, (u64)evsel->attr.sample_freq);
> > >  	}
> > > +
> > > +	if (details->trace_fields) {
> > > +		struct format_field *field;
> > > +
> > > +		if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
> > > +			printed += comma_fprintf(fp, &first, " (not a tracepoint)");
> > > +			goto out;
> > > +		}
> > > +
> > > +		field = evsel->tp_format->format.fields;
> > > +		if (field == NULL) {
> > > +			printed += comma_fprintf(fp, &first, " (no trace field)");
> > > +			goto out;
> > > +		}
> > > +
> > > +		printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
> > > +
> > > +		field = field->next;
> > > +		while (field) {
> > > +			printed += comma_fprintf(fp, &first, "%s", field->name);
> > > +			field = field->next;
> > > +		}
> > > +	}
> > >  out:
> > >  	fputc('\n', fp);
> > >  	return ++printed;
> > > diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> > > index 5ded1fc0341e..8e75434bd01c 100644
> > > --- a/tools/perf/util/evsel.h
> > > +++ b/tools/perf/util/evsel.h
> > > @@ -369,6 +369,7 @@ struct perf_attr_details {
> > >  	bool verbose;
> > >  	bool event_group;
> > >  	bool force;
> > > +	bool trace_fields;
> > >  };
> > >  
> > >  int perf_evsel__fprintf(struct perf_evsel *evsel,
> > > -- 
> > > 2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1303154 — Re: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields

FromNamhyung Kim <namhyung@kernel.org>
Date2016-01-07 00:50 +0100
SubjectRe: [PATCH v3 5/5] perf evlist: Add --trace-fields option to show trace fields
Message-ID<qO601-84d-7@gated-at.bofh.it>
In reply to#1303152
On Wed, Jan 06, 2016 at 08:29:49PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Thu, Jan 07, 2016 at 08:21:44AM +0900, Namhyung Kim escreveu:
> > On Wed, Jan 06, 2016 at 08:10:51PM -0300, Arnaldo Carvalho de Melo wrote:
> > > Em Wed, Jan 06, 2016 at 09:55:01AM +0900, Namhyung Kim escreveu:
> > > > To use dynamic sort keys, it might be good to add an option to see the
> > > > list of field names.
> > > > 
> > > >   $ perf evlist -i perf.data.sched
> > > >   sched:sched_switch
> > > >   sched:sched_stat_wait
> > > >   sched:sched_stat_sleep
> > > >   sched:sched_stat_iowait
> > > >   sched:sched_stat_runtime
> > > >   sched:sched_process_fork
> > > >   sched:sched_wakeup
> > > >   sched:sched_wakeup_new
> > > >   sched:sched_migrate_task
> > > >   # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
> > > 
> > > Ok, almost there, question is: if I ask explicitely for
> > > "--trace-fields", why should we have the "trace_fields=" in all lines,
> > > instead of just:
> > > 
> > >  
> > >    $ perf evlist -i perf.data.sched --trace-fields
> > >    sched:sched_switch: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
> > >    sched:sched_stat_wait: comm,pid,delay
> > > 
> > > ?
> > 
> > I made it to work with other options too, like 'perf evlist --freq --trace-fields'.
> > In that case you may want to see it. :)
> 
> I see... And then you want to show those at the same time... Would you
> have an use case for that? Or would it be better to make them mutually
> exclusive? /me unsure...

I don't have one.  But I think I sometimes want to see it with
-v/--verbose option.  Hmm.. do you think --verbose should imply
--trace-fields?

Thanks,
Namhyung


> > > 
> > > I like the lack of spaces after commans, this way we can double click
> > > and select the whole list, then edit it, etc.
> > > 
> > > - Arnaldo
> > >  
> > > >   $ perf evlist -i perf.data.sched --trace-fields
> > > >   sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
> > > >   sched:sched_stat_wait: trace_fields=comm,pid,delay
> > > >   sched:sched_stat_sleep: trace_fields=comm,pid,delay
> > > >   sched:sched_stat_iowait: trace_fields=comm,pid,delay
> > > >   sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
> > > >   sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
> > > >   sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
> > > >   sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
> > > >   sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu
> > > > 
> > > > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> > > > ---
> > > >  tools/perf/Documentation/perf-evlist.txt |  3 +++
> > > >  tools/perf/builtin-evlist.c              | 11 ++++++++++-
> > > >  tools/perf/util/evsel.c                  | 23 +++++++++++++++++++++++
> > > >  tools/perf/util/evsel.h                  |  1 +
> > > >  4 files changed, 37 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
> > > > index 1ceb3700ffbb..6f7200fb85cf 100644
> > > > --- a/tools/perf/Documentation/perf-evlist.txt
> > > > +++ b/tools/perf/Documentation/perf-evlist.txt
> > > > @@ -32,6 +32,9 @@ OPTIONS
> > > >  --group::
> > > >  	Show event group information.
> > > >  
> > > > +--trace-fields::
> > > > +	Show tracepoint field names.
> > > > +
> > > >  SEE ALSO
> > > >  --------
> > > >  linkperf:perf-record[1], linkperf:perf-list[1],
> > > > diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
> > > > index 08a7d36a2cf8..8a31f511e1a0 100644
> > > > --- a/tools/perf/builtin-evlist.c
> > > > +++ b/tools/perf/builtin-evlist.c
> > > > @@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
> > > >  		.mode = PERF_DATA_MODE_READ,
> > > >  		.force = details->force,
> > > >  	};
> > > > +	bool has_tracepoint = false;
> > > >  
> > > >  	session = perf_session__new(&file, 0, NULL);
> > > >  	if (session == NULL)
> > > >  		return -1;
> > > >  
> > > > -	evlist__for_each(session->evlist, pos)
> > > > +	evlist__for_each(session->evlist, pos) {
> > > >  		perf_evsel__fprintf(pos, details, stdout);
> > > >  
> > > > +		if (pos->attr.type == PERF_TYPE_TRACEPOINT)
> > > > +			has_tracepoint = true;
> > > > +	}
> > > > +
> > > > +	if (has_tracepoint && !details->trace_fields)
> > > > +		printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
> > > > +
> > > >  	perf_session__delete(session);
> > > >  	return 0;
> > > >  }
> > > > @@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
> > > >  	OPT_BOOLEAN('g', "group", &details.event_group,
> > > >  		    "Show event group information"),
> > > >  	OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
> > > > +	OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
> > > >  	OPT_END()
> > > >  	};
> > > >  	const char * const evlist_usage[] = {
> > > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > > > index 544e4400de13..b7822c98fcca 100644
> > > > --- a/tools/perf/util/evsel.c
> > > > +++ b/tools/perf/util/evsel.c
> > > > @@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
> > > >  		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
> > > >  					 term, (u64)evsel->attr.sample_freq);
> > > >  	}
> > > > +
> > > > +	if (details->trace_fields) {
> > > > +		struct format_field *field;
> > > > +
> > > > +		if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
> > > > +			printed += comma_fprintf(fp, &first, " (not a tracepoint)");
> > > > +			goto out;
> > > > +		}
> > > > +
> > > > +		field = evsel->tp_format->format.fields;
> > > > +		if (field == NULL) {
> > > > +			printed += comma_fprintf(fp, &first, " (no trace field)");
> > > > +			goto out;
> > > > +		}
> > > > +
> > > > +		printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
> > > > +
> > > > +		field = field->next;
> > > > +		while (field) {
> > > > +			printed += comma_fprintf(fp, &first, "%s", field->name);
> > > > +			field = field->next;
> > > > +		}
> > > > +	}
> > > >  out:
> > > >  	fputc('\n', fp);
> > > >  	return ++printed;
> > > > diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> > > > index 5ded1fc0341e..8e75434bd01c 100644
> > > > --- a/tools/perf/util/evsel.h
> > > > +++ b/tools/perf/util/evsel.h
> > > > @@ -369,6 +369,7 @@ struct perf_attr_details {
> > > >  	bool verbose;
> > > >  	bool event_group;
> > > >  	bool force;
> > > > +	bool trace_fields;
> > > >  };
> > > >  
> > > >  int perf_evsel__fprintf(struct perf_evsel *evsel,
> > > > -- 
> > > > 2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web