Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1633836 > unrolled thread
| Started by | Andi Kleen <andi@firstfloor.org> |
|---|---|
| First post | 2017-05-01 21:50 +0200 |
| Last post | 2017-05-08 00:30 +0200 |
| Articles | 6 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH] perf, tools, script: Allow adding and removing fields Andi Kleen <andi@firstfloor.org> - 2017-05-01 21:50 +0200
Re: [PATCH] perf, tools, script: Allow adding and removing fields Jiri Olsa <jolsa@redhat.com> - 2017-05-02 08:50 +0200
Re: [PATCH] perf, tools, script: Allow adding and removing fields Andi Kleen <andi@firstfloor.org> - 2017-05-05 00:30 +0200
Re: [PATCH] perf, tools, script: Allow adding and removing fields Jiri Olsa <jolsa@redhat.com> - 2017-05-05 10:00 +0200
Re: [PATCH] perf, tools, script: Allow adding and removing fields Andi Kleen <andi@firstfloor.org> - 2017-05-05 21:50 +0200
Re: [PATCH] perf, tools, script: Allow adding and removing fields Jiri Olsa <jolsa@redhat.com> - 2017-05-08 00:30 +0200
| From | Andi Kleen <andi@firstfloor.org> |
|---|---|
| Date | 2017-05-01 21:50 +0200 |
| Subject | [PATCH] perf, tools, script: Allow adding and removing fields |
| Message-ID | <tCpux-4NU-3@gated-at.bofh.it> |
From: Andi Kleen <ak@linux.intel.com>
With perf script it is common that we just want to add or remove a field.
Currently this requires figuring out the long list of default fields and
specifying them first, and then adding/removing the new field.
This patch adds a new + - syntax to merely add or remove fields,
that allows more succint and clearer command lines
For example to remove the comm field from PMU samples:
Previously
perf script -F pid,cpu,time,event,sym,ip,dso,period
0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms])
with the new syntax
perf script -F -comm
0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms])
The new syntax cannot be mixed with normal overriding.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
tools/perf/Documentation/perf-script.txt | 8 ++++++
tools/perf/builtin-script.c | 42 +++++++++++++++++++++++++++++---
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
index cb0eda3925e6..4547120c6ad3 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -130,6 +130,14 @@ OPTIONS
i.e., the specified fields apply to all event types if the type string
is not given.
+ In addition to overriding fields, it is also possible to add or remove
+ fields from the defaults. For example
+
+ -F -cpu,+insn
+
+ removes the cpu field and adds the insn field. Adding/removing fields
+ cannot be mixed with normal overriding.
+
The arguments are processed in the order received. A later usage can
reset a prior request. e.g.:
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index d05aec491cff..f2970b118cd2 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1727,6 +1727,7 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
int rc = 0;
char *str = strdup(arg);
int type = -1;
+ enum { DEFAULT, SET, ADD, REMOVE } change = DEFAULT;
if (!str)
return -ENOMEM;
@@ -1755,6 +1756,10 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
goto out;
}
+ /* Don't override defaults for +- */
+ if (strchr(str, '+') || strchr(str, '-'))
+ goto parse;
+
if (output[type].user_set)
pr_warning("Overriding previous field request for %s events.\n",
event_type(type));
@@ -1772,6 +1777,10 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
goto out;
}
+ /* Don't override defaults for +- */
+ if (strchr(str, '+') || strchr(str, '-'))
+ goto parse;
+
if (output_set_by_user())
pr_warning("Overriding previous field request for all events.\n");
@@ -1782,13 +1791,30 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
}
}
+parse:
for (tok = strtok_r(tok, ",", &strtok_saveptr); tok; tok = strtok_r(NULL, ",", &strtok_saveptr)) {
+ if (*tok == '+') {
+ if (change == SET)
+ goto out_badmix;
+ change = ADD;
+ tok++;
+ } else if (*tok == '-') {
+ if (change == SET)
+ goto out_badmix;
+ change = REMOVE;
+ tok++;
+ } else {
+ if (change != SET && change != DEFAULT)
+ goto out_badmix;
+ change = SET;
+ }
+
for (i = 0; i < imax; ++i) {
if (strcmp(tok, all_output_options[i].str) == 0)
break;
}
if (i == imax && strcmp(tok, "flags") == 0) {
- print_flags = true;
+ print_flags = change == REMOVE ? false : true;
continue;
}
if (i == imax) {
@@ -1805,8 +1831,12 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
if (output[j].invalid_fields & all_output_options[i].field) {
pr_warning("\'%s\' not valid for %s events. Ignoring.\n",
all_output_options[i].str, event_type(j));
- } else
- output[j].fields |= all_output_options[i].field;
+ } else {
+ if (change == REMOVE)
+ output[j].fields &= ~all_output_options[i].field;
+ else
+ output[j].fields |= all_output_options[i].field;
+ }
}
} else {
if (output[type].invalid_fields & all_output_options[i].field) {
@@ -1826,10 +1856,15 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
"Events will not be displayed.\n", event_type(type));
}
}
+ goto out;
+out_badmix:
+ fprintf(stderr, "Cannot mix +-field with overridden fields\n");
+ rc = -EINVAL;
out:
free(str);
return rc;
+
}
/* Helper function for filesystems that return a dent->d_type DT_UNKNOWN */
@@ -2444,6 +2479,7 @@ int cmd_script(int argc, const char **argv)
symbol__config_symfs),
OPT_CALLBACK('F', "fields", NULL, "str",
"comma separated output fields prepend with 'type:'. "
+ "+field to add and -field to remove."
"Valid types: hw,sw,trace,raw. "
"Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
"addr,symoff,period,iregs,brstack,brstacksym,flags,"
--
2.9.3
[toc] | [next] | [standalone]
| From | Jiri Olsa <jolsa@redhat.com> |
|---|---|
| Date | 2017-05-02 08:50 +0200 |
| Message-ID | <tCzNf-2NG-5@gated-at.bofh.it> |
| In reply to | #1633836 |
On Mon, May 01, 2017 at 12:47:46PM -0700, Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
>
> With perf script it is common that we just want to add or remove a field.
> Currently this requires figuring out the long list of default fields and
> specifying them first, and then adding/removing the new field.
>
> This patch adds a new + - syntax to merely add or remove fields,
> that allows more succint and clearer command lines
>
> For example to remove the comm field from PMU samples:
>
> Previously
>
> perf script -F pid,cpu,time,event,sym,ip,dso,period
> 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms])
>
> with the new syntax
>
> perf script -F -comm
> 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms])
I haven't checked deeply yet, but I'm getting different pids
with the new syntax, perhaps some mixing with tids column?
0 [002] 42615.004240: 2172 cycles: ffffffff86060c66 native_write_msr ([kernel.kallsyms])
0 [002] 42615.004242: 19857 cycles: ffffffff860abee0 irq_exit ([kernel.kallsyms])
0 [002] 42615.004250: 412618 cycles: ffffffff860d1429 ttwu_do_wakeup ([kernel.kallsyms])
- 1798 [001] 42615.008219: 46557 cycles: ffffffff860dc718 update_blocked_averages ([kernel.kallsyms])
- 1798 [001] 42615.008239: 46557 cycles: 7f313dff0684 [unknown] (/usr/lib64/firefox/libxul.so)
- 1798 [001] 42615.008258: 112387 cycles: 7f313e32c71a [unknown] (/usr/lib64/firefox/libxul.so)
+ 1861 [001] 42615.008219: 46557 cycles: ffffffff860dc718 update_blocked_averages ([kernel.kallsyms])
+ 1861 [001] 42615.008239: 46557 cycles: 7f313dff0684 [unknown] (/usr/lib64/firefox/libxul.so)
+ 1861 [001] 42615.008258: 112387 cycles: 7f313e32c71a [unknown] (/usr/lib64/firefox/libxul.so)
1687 [002] 42615.008268: 1711528 cycles: ffffffffc01e74c7 i915_gem_set_domain_ioctl ([i915])
- 1798 [001] 42615.008303: 281652 cycles: ffffffff860dc169 account_entity_dequeue ([kernel.kallsyms])
+ 1861 [001] 42615.008303: 281652 cycles: ffffffff860dc169 account_entity_dequeue ([kernel.kallsyms])
1798 [001] 42615.008440: 442473 cycles: 7f3147c6935b g_slice_free1 (/usr/lib64/libglib-2.0.so.0.5000.3)
- 1935 [001] 42615.009462: 487718 cycles: ffffffff860f25bc cpuacct_charge ([kernel.kallsyms])
- 1935 [002] 42615.009955: 1711528 cycles: 7fa2a2ac748f [unknown] (/usr/lib64/firefox/libmozavcodec.so)
- 1935 [001] 42615.009989: 441676 cycles: 559627e901da [unknown] (/usr/lib64/firefox/firefox)
- 1935 [000] 42615.010233: 79099 cycles: 7fa2c2a11fa9 [unknown] (/usr/lib64/firefox/libxul.so)
+24128 [001] 42615.009462: 487718 cycles: ffffffff860f25bc cpuacct_charge ([kernel.kallsyms])
+24182 [002] 42615.009955: 1711528 cycles: 7fa2a2ac748f [unknown] (/usr/lib64/firefox/libmozavcodec.so)
+24181 [001] 42615.009989: 441676 cycles: 559627e901da [unknown] (/usr/lib64/firefox/firefox)
+24112 [000] 42615.010233: 79099 cycles: 7fa2c2a11fa9 [unknown] (/usr/lib64/firefox/libxul.so)
thanks,
jirka
[toc] | [prev] | [next] | [standalone]
| From | Andi Kleen <andi@firstfloor.org> |
|---|---|
| Date | 2017-05-05 00:30 +0200 |
| Message-ID | <tDxq1-1bL-1@gated-at.bofh.it> |
| In reply to | #1634169 |
On Tue, May 02, 2017 at 08:41:47AM +0200, Jiri Olsa wrote: > On Mon, May 01, 2017 at 12:47:46PM -0700, Andi Kleen wrote: > > From: Andi Kleen <ak@linux.intel.com> > > > > With perf script it is common that we just want to add or remove a field. > > Currently this requires figuring out the long list of default fields and > > specifying them first, and then adding/removing the new field. > > > > This patch adds a new + - syntax to merely add or remove fields, > > that allows more succint and clearer command lines > > > > For example to remove the comm field from PMU samples: > > > > Previously > > > > perf script -F pid,cpu,time,event,sym,ip,dso,period > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms]) > > > > with the new syntax > > > > perf script -F -comm > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms]) > > > I haven't checked deeply yet, but I'm getting different pids > with the new syntax, perhaps some mixing with tids column? Cannot reproduce. Do you have an exact command line? The patch shouldn't really change any columns. -Andi
[toc] | [prev] | [next] | [standalone]
| From | Jiri Olsa <jolsa@redhat.com> |
|---|---|
| Date | 2017-05-05 10:00 +0200 |
| Message-ID | <tDGjD-7cy-3@gated-at.bofh.it> |
| In reply to | #1636064 |
On Thu, May 04, 2017 at 03:26:20PM -0700, Andi Kleen wrote:
> On Tue, May 02, 2017 at 08:41:47AM +0200, Jiri Olsa wrote:
> > On Mon, May 01, 2017 at 12:47:46PM -0700, Andi Kleen wrote:
> > > From: Andi Kleen <ak@linux.intel.com>
> > >
> > > With perf script it is common that we just want to add or remove a field.
> > > Currently this requires figuring out the long list of default fields and
> > > specifying them first, and then adding/removing the new field.
> > >
> > > This patch adds a new + - syntax to merely add or remove fields,
> > > that allows more succint and clearer command lines
> > >
> > > For example to remove the comm field from PMU samples:
> > >
> > > Previously
> > >
> > > perf script -F pid,cpu,time,event,sym,ip,dso,period
> > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms])
> > >
> > > with the new syntax
> > >
> > > perf script -F -comm
> > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms])
> >
> >
> > I haven't checked deeply yet, but I'm getting different pids
> > with the new syntax, perhaps some mixing with tids column?
>
> Cannot reproduce. Do you have an exact command line?
>
> The patch shouldn't really change any columns.
>
[jolsa@krava perf]$ ./perf record -a
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.527 MB perf.data (2533 samples) ]
[jolsa@krava perf]$ ./perf script -F pid,cpu,time,event,sym,ip,dso,period > 1
Failed to open /tmp/perf-1841.map, continuing without symbols
/run/user/1000/orcexec.1yoPtl was updated (is prelink enabled?). Restart the long running apps that use it!
[vdso] with build id 0b94eba680f6a3bb2e3efbde9a2551c1f5b27e34 not found, continuing without symbols
[jolsa@krava perf]$ ./perf script -F -comm > 2
Failed to open /tmp/perf-1841.map, continuing without symbols
/run/user/1000/orcexec.1yoPtl was updated (is prelink enabled?). Restart the long running apps that use it!
[vdso] with build id 0b94eba680f6a3bb2e3efbde9a2551c1f5b27e34 not found, continuing without symbols
[jolsa@krava perf]$ diff -puw 1 2 | head -20
--- 1 2017-05-05 09:56:00.088148174 +0200
+++ 2 2017-05-05 09:56:04.469166203 +0200
@@ -6,16 +6,16 @@
0 [000] 10374.768173: 1680 cycles: ffffffff94116904 __next_timer_interrupt ([kernel.kallsyms])
0 [000] 10374.768174: 32136 cycles: ffffffff94116904 __next_timer_interrupt ([kernel.kallsyms])
0 [000] 10374.768187: 846579 cycles: ffffffff9484f3f6 __schedule ([kernel.kallsyms])
- 1706 [000] 10374.774848: 2417537 cycles: 7f362deaaf5e [unknown] (/usr/lib64/firefox/libxul.so)
- 1706 [003] 10374.775161: 31151 cycles: ffffffff940dc520 update_blocked_averages ([kernel.kallsyms])
- 1841 [002] 10374.775163: 41524 cycles: ffffffff940f3ec9 queued_spin_lock_slowpath ([kernel.kallsyms])
+ 1769 [000] 10374.774848: 2417537 cycles: 7f362deaaf5e [unknown] (/usr/lib64/firefox/libxul.so)
+ 1723 [003] 10374.775161: 31151 cycles: ffffffff940dc520 update_blocked_averages ([kernel.kallsyms])
+ 1844 [002] 10374.775163: 41524 cycles: ffffffff940f3ec9 queued_spin_lock_slowpath ([kernel.kallsyms])
0 [001] 10374.775168: 24203 cycles: ffffffff940d7e24 sched_clock_idle_wakeup_event ([kernel.kallsyms])
- 1706 [003] 10374.775175: 31151 cycles: ffffffff94704227 copy_msghdr_from_user ([kernel.kallsyms])
+ 1723 [003] 10374.775175: 31151 cycles: ffffffff94704227 copy_msghdr_from_user ([kernel.kallsyms])
1841 [001] 10374.775178: 24203 cycles: 7f298cdb1d1b [unknown] (/usr/lib64/firefox/libxul.so)
- 1841 [002] 10374.775181: 41524 cycles: ffffffff940ead8e __wake_up_common ([kernel.kallsyms])
- 1706 [003] 10374.775188: 94430 cycles: ffffffff9438a7cb selinux_file_permission ([kernel.kallsyms])
+ 1844 [002] 10374.775181: 41524 cycles: ffffffff940ead8e __wake_up_common ([kernel.kallsyms])
+ 1723 [003] 10374.775188: 94430 cycles: ffffffff9438a7cb selinux_file_permission ([kernel.kallsyms])
[jolsa@krava perf]$
jirka
[toc] | [prev] | [next] | [standalone]
| From | Andi Kleen <andi@firstfloor.org> |
|---|---|
| Date | 2017-05-05 21:50 +0200 |
| Message-ID | <tDRoK-69K-13@gated-at.bofh.it> |
| In reply to | #1636219 |
On Fri, May 05, 2017 at 09:57:54AM +0200, Jiri Olsa wrote: > On Thu, May 04, 2017 at 03:26:20PM -0700, Andi Kleen wrote: > > On Tue, May 02, 2017 at 08:41:47AM +0200, Jiri Olsa wrote: > > > On Mon, May 01, 2017 at 12:47:46PM -0700, Andi Kleen wrote: > > > > From: Andi Kleen <ak@linux.intel.com> > > > > > > > > With perf script it is common that we just want to add or remove a field. > > > > Currently this requires figuring out the long list of default fields and > > > > specifying them first, and then adding/removing the new field. > > > > > > > > This patch adds a new + - syntax to merely add or remove fields, > > > > that allows more succint and clearer command lines > > > > > > > > For example to remove the comm field from PMU samples: > > > > > > > > Previously > > > > > > > > perf script -F pid,cpu,time,event,sym,ip,dso,period > > > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms]) > > > > > > > > with the new syntax > > > > > > > > perf script -F -comm > > > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms]) > > > > > > > > > I haven't checked deeply yet, but I'm getting different pids > > > with the new syntax, perhaps some mixing with tids column? > > > > Cannot reproduce. Do you have an exact command line? > > > > The patch shouldn't really change any columns. > > > > [jolsa@krava perf]$ ./perf record -a I looked at this, and I don't think it's different with my patch. Any time you set fields you get different output versus default: % perf script -F pid,cpu,time,event,sym,ip,dso,period,comm vs % perf script First gives PID second TID. It would be good to fix, but I don't think it should block my patch. -Andi
[toc] | [prev] | [next] | [standalone]
| From | Jiri Olsa <jolsa@redhat.com> |
|---|---|
| Date | 2017-05-08 00:30 +0200 |
| Message-ID | <tECQG-3x1-9@gated-at.bofh.it> |
| In reply to | #1636688 |
On Fri, May 05, 2017 at 12:43:40PM -0700, Andi Kleen wrote: > On Fri, May 05, 2017 at 09:57:54AM +0200, Jiri Olsa wrote: > > On Thu, May 04, 2017 at 03:26:20PM -0700, Andi Kleen wrote: > > > On Tue, May 02, 2017 at 08:41:47AM +0200, Jiri Olsa wrote: > > > > On Mon, May 01, 2017 at 12:47:46PM -0700, Andi Kleen wrote: > > > > > From: Andi Kleen <ak@linux.intel.com> > > > > > > > > > > With perf script it is common that we just want to add or remove a field. > > > > > Currently this requires figuring out the long list of default fields and > > > > > specifying them first, and then adding/removing the new field. > > > > > > > > > > This patch adds a new + - syntax to merely add or remove fields, > > > > > that allows more succint and clearer command lines > > > > > > > > > > For example to remove the comm field from PMU samples: > > > > > > > > > > Previously > > > > > > > > > > perf script -F pid,cpu,time,event,sym,ip,dso,period > > > > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms]) > > > > > > > > > > with the new syntax > > > > > > > > > > perf script -F -comm > > > > > 0 [000] 504345.383126: 1 cycles: ffffffff90060c66 native_write_msr ([kernel.kallsyms]) > > > > > > > > > > > > I haven't checked deeply yet, but I'm getting different pids > > > > with the new syntax, perhaps some mixing with tids column? > > > > > > Cannot reproduce. Do you have an exact command line? > > > > > > The patch shouldn't really change any columns. > > > > > > > [jolsa@krava perf]$ ./perf record -a > > I looked at this, and I don't think it's different with my patch. > > Any time you set fields you get different output versus default: > > > % perf script -F pid,cpu,time,event,sym,ip,dso,period,comm > > vs > > % perf script > > First gives PID second TID. > > It would be good to fix, but I don't think it should block my patch. your changelog says those 2 commands give same output, so either fix the changelog or provide related fix thanks, jirka
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web