Skip to contentSkip to conversation

perf sort: only insert overhead && overhead_children when no overhead* field given

PATCH Superseded [email protected] 2 participants 10 messages Jun 1, 2017 – Jul 6, 2017 perf events

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 perf sort: only insert overhead && overhead_children when no overhead* field given

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

---
 tools/perf/util/sort.c | 3 +++
 1 file changed, 3 insertions(+)
tools/perf/util/sort.c +3 -0
index 5762ae4..69eea3a 100644
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);
 
 	if (symbol_conf.cumulate_callchain)
Signature · 1 line
2.7.4
#1 lore raw
Quoted 21 lines · On Thu, Jun 01, 2017 at 05:03:21PM +0800, [email protected] wrote:

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

---
 tools/perf/util/sort.c | 3 +++
 1 file changed, 3 insertions(+)
tools/perf/util/sort.c +0 -0
index 5762ae4..69eea3a 100644

tools/perf/util/sort.c static char *setup_overhead(char *keys) · line 2641

Quoted 7 lines
tools/perf/util/sort.c +3 -0
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);

hum, you basicaly do what's at begining of prefix_if_not_in function:

static char *prefix_if_not_in(const char *pre, char *str)

{
        char *n;

        if (!str || strstr(str, pre))
                return str;
        ...

could you please provide the example described in changelog?

jirka

#2 lore raw
Quoted 16 lines · Jiri Olsa

tools/perf/util/sort.c static char *setup_overhead(char *keys) · line 2641

Quoted 12 lines · On Thu, Jun 01, 2017 at 05:03:21PM +0800, [email protected] wrote:
tools/perf/util/sort.c +3 -0
index 5762ae4..69eea3a 100644
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);

hum, you basicaly do what's at begining of prefix_if_not_in function:

Quoted 8 lines

static char *prefix_if_not_in(const char *pre, char *str)

{
        char *n;

        if (!str || strstr(str, pre))
                return str;
        ...

Thanks, will change it.

Quoted 3 lines

could you please provide the example described in changelog?

Will add example cmdline there, Thanks.

Quoted 1 line

jirka

Signature · 2 lines
Thanks,
Changbin Du
#3 lore raw
Quoted 21 lines · Changbin
Quoted 20 lines · Jiri Olsa

tools/perf/util/sort.c static char *setup_overhead(char *keys) · line 2641

Quoted 12 lines · On Thu, Jun 01, 2017 at 05:03:21PM +0800, [email protected] wrote:
tools/perf/util/sort.c +3 -0
index 5762ae4..69eea3a 100644
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);

hum, you basicaly do what's at begining of prefix_if_not_in function:

static char *prefix_if_not_in(const char *pre, char *str)

{
        char *n;
Quoted 6 lines
Quoted 4 lines
        if (!str || strstr(str, pre))
                return str;
        ...

Thanks, will change it.

Misunderstood your words. This is not equal to prefix_if_not_in.

# perf record -ag
# perf report -s overhead,sym

Samples: 7K of event 'cycles', Event count (approx.): 865138253
Children Self Symbol

  +   26.41%     0.00%  [k] verify_cpu
  +   26.37%     0.04%  [k] cpu_startup_entry
  +   25.93%     0.27%  [k] do_idle
  +   19.88%     0.00%  [k] start_secondary

....

'Children' should not be here.

Quoted 10 lines
Quoted 3 lines

could you please provide the example described in changelog?

Will add example cmdline there, Thanks.

Quoted 1 line

jirka

Signature · 2 lines
Thanks,
Changbin Du
Signature · 2 lines
Thanks,
Changbin Du
#4 lore raw

PATCH v2 1/1 perf sort: only insert overhead && overhead_children when no overhead* field given

In reply to [email protected]

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

Quoted 2 lines

perf record -ag
perf report -s overhead,sym

Samples: 7K of event 'cycles', Event count (approx.): 865138253
Children Self Symbol

  +   26.41%     0.00%  [k] verify_cpu
  +   26.37%     0.04%  [k] cpu_startup_entry
  +   25.93%     0.27%  [k] do_idle
  +   19.88%     0.00%  [k] start_secondary

....

I intend to sort as 'Self', but actually it sort as 'Children'.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

---
v2: Add the example in commit message.

---
 tools/perf/util/sort.c | 3 +++
 1 file changed, 3 insertions(+)
tools/perf/util/sort.c +3 -0
index 5762ae4..69eea3a 100644
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);
 
 	if (symbol_conf.cumulate_callchain)
Signature · 1 line
2.7.4
#5 lore raw

Hi, Jiri,
what is the status of this one? I didn't get a response of v2. thanks.

Quoted 49 lines · On Fri, Jun 02, 2017 at 12:22:00PM +0800, [email protected] wrote:

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

Quoted 2 lines

perf record -ag
perf report -s overhead,sym

Samples: 7K of event 'cycles', Event count (approx.): 865138253
Children Self Symbol

  +   26.41%     0.00%  [k] verify_cpu
  +   26.37%     0.04%  [k] cpu_startup_entry
  +   25.93%     0.27%  [k] do_idle
  +   19.88%     0.00%  [k] start_secondary

....

I intend to sort as 'Self', but actually it sort as 'Children'.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

---
v2: Add the example in commit message.

---
 tools/perf/util/sort.c | 3 +++
 1 file changed, 3 insertions(+)
tools/perf/util/sort.c +3 -0
index 5762ae4..69eea3a 100644
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);
 
 	if (symbol_conf.cumulate_callchain)
Signature · 1 line
2.7.4
Signature · 2 lines
Thanks,
Changbin Du
#6 lore raw
Quoted 45 lines · Changbin

Hi, Jiri,
what is the status of this one? I didn't get a response of v2. thanks.

Quoted 40 lines · On Fri, Jun 02, 2017 at 12:22:00PM +0800, [email protected] wrote:

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

Quoted 2 lines

perf record -ag
perf report -s overhead,sym

Samples: 7K of event 'cycles', Event count (approx.): 865138253
Children Self Symbol

  +   26.41%     0.00%  [k] verify_cpu
  +   26.37%     0.04%  [k] cpu_startup_entry
  +   25.93%     0.27%  [k] do_idle
  +   19.88%     0.00%  [k] start_secondary

....

I intend to sort as 'Self', but actually it sort as 'Children'.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

---
v2: Add the example in commit message.

---
 tools/perf/util/sort.c | 3 +++
 1 file changed, 3 insertions(+)
tools/perf/util/sort.c +0 -0
index 5762ae4..69eea3a 100644
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
Quoted 3 lines

tools/perf/util/sort.c static char *setup_overhead(char *keys) · line 2640

Quoted 3 lines
tools/perf/util/sort.c +3 -0
+	if (strstr(keys, "overhead"))
+		return keys;
+

ah ok, I think it's right.. basically you're forcing precedence of the -s option over the --children option

you could have your example working by running:

  $ perf report -s overhead,sym --no-children

please state something like:

/*
* User already stated overhead within -s option,
* do not mangle with that.
*/

thanks,
jirka

#7 lore raw
Quoted 13 lines · Jiri Olsa
Quoted 9 lines

tools/perf/util/sort.c static char *setup_overhead(char *keys) · line 2640

Quoted 9 lines
tools/perf/util/sort.c +3 -0
@@ -2635,6 +2635,9 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	if (strstr(keys, "overhead"))
+		return keys;
+

ah ok, I think it's right.. basically you're forcing precedence of the -s option over the --children option

Quoted 3 lines

you could have your example working by running:

  $ perf report -s overhead,sym --no-children

Thanks for the knowledge.

Quoted 7 lines

please state something like:

/*
* User already stated overhead within -s option,
* do not mangle with that.
*/

I'll add this as comment around the change for v3.

Quoted 2 lines

thanks,
jirka

Signature · 2 lines
Thanks,
Changbin Du
#8 lore raw

PATCH v3 1/1 perf sort: only insert overhead && overhead_children when no overhead* field given

In reply to [email protected]

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

Quoted 2 lines

perf record -ag
perf report -s overhead,sym

Samples: 7K of event 'cycles', Event count (approx.): 865138253
Children Self Symbol

  +   26.41%     0.00%  [k] verify_cpu
  +   26.37%     0.04%  [k] cpu_startup_entry
  +   25.93%     0.27%  [k] do_idle
  +   19.88%     0.00%  [k] start_secondary

....

I intend to sort as 'Self', but actually it sort as 'Children'.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

---
v3: Add comment in code from Jiri
v2: Add the example in commit message.

---
 tools/perf/util/sort.c | 7 +++++++
 1 file changed, 7 insertions(+)
tools/perf/util/sort.c +7 -0
index 8b327c9..9e087fb 100644
@@ -2635,6 +2635,13 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	/**
+	 * User already stated overhead within -s option,
+	 * do not mangle with that.
+	 */
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);
 
 	if (symbol_conf.cumulate_callchain)
Signature · 1 line
2.7.4
Acked-by on v3 1/1
#9 lore raw
Quoted 17 lines · On Wed, Jul 05, 2017 at 11:35:52AM +0800, [email protected] wrote:

From: Changbin Du <[email protected]>

If we always insert 'overhead' and 'overhead_children' as sort keys, this make it impossible to sort as overhead (which displayed as Self) first.Ths will be a problem if the data is collected with call-graph enabled. Then we never can sort the result as self-overhead on this data. And sometimes the data is hard to collect.

Quoted 2 lines

perf record -ag
perf report -s overhead,sym

Samples: 7K of event 'cycles', Event count (approx.): 865138253
Children Self Symbol

  +   26.41%     0.00%  [k] verify_cpu
  +   26.37%     0.04%  [k] cpu_startup_entry
  +   25.93%     0.27%  [k] do_idle
  +   19.88%     0.00%  [k] start_secondary
Quoted 8 lines

....

I intend to sort as 'Self', but actually it sort as 'Children'.

This patch fix this by only insert overhead && overhead_children when no overhead* field given.

thanks,
jirka

Quoted 29 lines

---
v3: Add comment in code from Jiri
v2: Add the example in commit message.

---
 tools/perf/util/sort.c | 7 +++++++
 1 file changed, 7 insertions(+)
tools/perf/util/sort.c +7 -0
index 8b327c9..9e087fb 100644
@@ -2635,6 +2635,13 @@ static char *setup_overhead(char *keys)
 	if (sort__mode == SORT_MODE__DIFF)
 		return keys;
 
+	/**
+	 * User already stated overhead within -s option,
+	 * do not mangle with that.
+	 */
+	if (strstr(keys, "overhead"))
+		return keys;
+
 	keys = prefix_if_not_in("overhead", keys);
 
 	if (symbol_conf.cumulate_callchain)
Signature · 1 line
2.7.4