linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] perf annotate: Support '--group' option
@ 2018-05-21 14:57 Jin Yao
  2018-05-21 14:57 ` [PATCH v4 1/3] perf evlist: Create new function perf_evlist__force_leader Jin Yao
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jin Yao @ 2018-05-21 14:57 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

For non-explicit group, perf report has already supported a option
'--group' which can enable group output.

This patch-set will support perf annotate with the same '--group'.

For example,

    perf record -e cycles,branches ./div
    perf annotate main --stdio --group

                     :            Disassembly of section .text:
                     :
                     :            00000000004004b0 <main>:
                     :            main():
                     :
                     :                    return i;
                     :            }
                     :
                     :            int main(void)
                     :            {
        0.00    0.00 :   4004b0:       push   %rbx
                     :                    int i;
                     :                    int flag;
                     :                    volatile double x = 1212121212, y = 121212;
                     :
                     :                    s_randseed = time(0);
        0.00    0.00 :   4004b1:       xor    %edi,%edi
                     :                    srand(s_randseed);
        0.00    0.00 :   4004b3:       mov    $0x77359400,%ebx
                     :
                     :                    return i;
                     :            }
                     :

v4:
---
  Change function name from perf_evlist_forced_leader to
  perf_evlist__force_leader

Impact:
-------
  perf evlist: Create new function perf_evlist__force_leader
  perf report: Use perf_evlist__force_leader to support '--group'
  perf annotate: Support '--group' option

v3:
---------
Move the comment which was on setup_forced_leader() to the
new function perf_evlist_forced_leader().

Impact
------
  perf evlist: Create a new function perf_evlist_forced_leader
  perf report: Use perf_evlist_forced_leader to support '--group'

v2:
---------
Arnaldo points out that it should be done the way it is for
perf report --group. v2 refers to this way and the patch is
totally rewritten.

Init post:
----------
Post the patch 'perf annotate: Support multiple events without group'

Jin Yao (3):
  perf evlist: Create new function perf_evlist__force_leader
  perf report: Use perf_evlist__force_leader to support '--group'
  perf annotate: Support '--group' option

 tools/perf/builtin-annotate.c |  7 +++++++
 tools/perf/builtin-report.c   | 13 ++-----------
 tools/perf/util/evlist.c      | 15 +++++++++++++++
 tools/perf/util/evlist.h      |  3 +++
 4 files changed, 27 insertions(+), 11 deletions(-)

-- 
2.7.4

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

* [PATCH v4 1/3] perf evlist: Create new function perf_evlist__force_leader
  2018-05-21 14:57 [PATCH v4 0/3] perf annotate: Support '--group' option Jin Yao
@ 2018-05-21 14:57 ` Jin Yao
  2018-05-24  5:36   ` [tip:perf/core] perf evlist: Introduce force_leader() method tip-bot for Jin Yao
  2018-05-21 14:57 ` [PATCH v4 2/3] perf report: Use perf_evlist__force_leader to support '--group' Jin Yao
  2018-05-21 14:57 ` [PATCH v4 3/3] perf annotate: Support '--group' option Jin Yao
  2 siblings, 1 reply; 9+ messages in thread
From: Jin Yao @ 2018-05-21 14:57 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

For non-explicit group, perf report supports a option '--group'
which can enable group output. We also need to support perf annotate
with the same '--group'.

Create a new function perf_evlist__force_leader which contains
common code to force setting the group leader.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
 tools/perf/util/evlist.c | 15 +++++++++++++++
 tools/perf/util/evlist.h |  3 +++
 2 files changed, 18 insertions(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index a59281d..e7a4b31 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1795,3 +1795,18 @@ bool perf_evlist__exclude_kernel(struct perf_evlist *evlist)
 
 	return true;
 }
+
+/*
+ * Events in data file are not collect in groups, but we still want
+ * the group display. Set the artificial group and set the leader's
+ * forced_leader flag to notify the display code.
+ */
+void perf_evlist__force_leader(struct perf_evlist *evlist)
+{
+	if (!evlist->nr_groups) {
+		struct perf_evsel *leader = perf_evlist__first(evlist);
+
+		perf_evlist__set_leader(evlist);
+		leader->forced_leader = true;
+	}
+}
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 6c41b2f..dc66436 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -309,4 +309,7 @@ struct perf_evsel *perf_evlist__event2evsel(struct perf_evlist *evlist,
 					    union perf_event *event);
 
 bool perf_evlist__exclude_kernel(struct perf_evlist *evlist);
+
+void perf_evlist__force_leader(struct perf_evlist *evlist);
+
 #endif /* __PERF_EVLIST_H */
-- 
2.7.4

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

* [PATCH v4 2/3] perf report: Use perf_evlist__force_leader to support '--group'
  2018-05-21 14:57 [PATCH v4 0/3] perf annotate: Support '--group' option Jin Yao
  2018-05-21 14:57 ` [PATCH v4 1/3] perf evlist: Create new function perf_evlist__force_leader Jin Yao
@ 2018-05-21 14:57 ` Jin Yao
  2018-05-24  5:37   ` [tip:perf/core] " tip-bot for Jin Yao
  2018-05-21 14:57 ` [PATCH v4 3/3] perf annotate: Support '--group' option Jin Yao
  2 siblings, 1 reply; 9+ messages in thread
From: Jin Yao @ 2018-05-21 14:57 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

Since we have created a new function perf_evlist__force_leader,
so now remove the old code and use perf_evlist__force_leader
instead.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
 tools/perf/builtin-report.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 4c931af..ad978e3 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -194,20 +194,11 @@ static int hist_iter__branch_callback(struct hist_entry_iter *iter,
 	return err;
 }
 
-/*
- * Events in data file are not collect in groups, but we still want
- * the group display. Set the artificial group and set the leader's
- * forced_leader flag to notify the display code.
- */
 static void setup_forced_leader(struct report *report,
 				struct perf_evlist *evlist)
 {
-	if (report->group_set && !evlist->nr_groups) {
-		struct perf_evsel *leader = perf_evlist__first(evlist);
-
-		perf_evlist__set_leader(evlist);
-		leader->forced_leader = true;
-	}
+	if (report->group_set)
+		perf_evlist__force_leader(evlist);
 }
 
 static int process_feature_event(struct perf_tool *tool,
-- 
2.7.4

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

* [PATCH v4 3/3] perf annotate: Support '--group' option
  2018-05-21 14:57 [PATCH v4 0/3] perf annotate: Support '--group' option Jin Yao
  2018-05-21 14:57 ` [PATCH v4 1/3] perf evlist: Create new function perf_evlist__force_leader Jin Yao
  2018-05-21 14:57 ` [PATCH v4 2/3] perf report: Use perf_evlist__force_leader to support '--group' Jin Yao
@ 2018-05-21 14:57 ` Jin Yao
  2018-05-21 17:43   ` Arnaldo Carvalho de Melo
  2018-05-24  5:37   ` [tip:perf/core] " tip-bot for Jin Yao
  2 siblings, 2 replies; 9+ messages in thread
From: Jin Yao @ 2018-05-21 14:57 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

With the '--group' option, even for non-explicit group, perf annotate
will enable the group output.

For example,

perf record -e cycles,branches ./div
perf annotate main --stdio --group

                 :            Disassembly of section .text:
                 :
                 :            00000000004004b0 <main>:
                 :            main():
                 :
                 :                    return i;
                 :            }
                 :
                 :            int main(void)
                 :            {
    0.00    0.00 :   4004b0:       push   %rbx
                 :                    int i;
                 :                    int flag;
                 :                    volatile double x = 1212121212, y = 121212;
                 :
                 :                    s_randseed = time(0);
    0.00    0.00 :   4004b1:       xor    %edi,%edi
                 :                    srand(s_randseed);
    0.00    0.00 :   4004b3:       mov    $0x77359400,%ebx
                 :
                 :                    return i;
                 :            }
                 :

But if without --group, there is only one event reported.

perf annotate main --stdio

         :            Disassembly of section .text:
         :
         :            00000000004004b0 <main>:
         :            main():
         :
         :                    return i;
         :            }
         :
         :            int main(void)
         :            {
    0.00 :   4004b0:       push   %rbx
         :                    int i;
         :                    int flag;
         :                    volatile double x = 1212121212, y = 121212;
         :
         :                    s_randseed = time(0);
    0.00 :   4004b1:       xor    %edi,%edi
         :                    srand(s_randseed);
    0.00 :   4004b3:       mov    $0x77359400,%ebx
         :
         :                    return i;
         :            }

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
 tools/perf/builtin-annotate.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index 6e5d9f7..da57042 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -45,6 +45,7 @@ struct perf_annotate {
 	bool	   print_line;
 	bool	   skip_missing;
 	bool	   has_br_stack;
+	bool	   group_set;
 	const char *sym_hist_filter;
 	const char *cpu_list;
 	DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
@@ -508,6 +509,9 @@ int cmd_annotate(int argc, const char **argv)
 		    "Don't shorten the displayed pathnames"),
 	OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing,
 		    "Skip symbols that cannot be annotated"),
+	OPT_BOOLEAN_SET(0, "group", &symbol_conf.event_group,
+			&annotate.group_set,
+			"Show event group information together"),
 	OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"),
 	OPT_CALLBACK(0, "symfs", NULL, "directory",
 		     "Look for files with symbols relative to this directory",
@@ -570,6 +574,9 @@ int cmd_annotate(int argc, const char **argv)
 	annotate.has_br_stack = perf_header__has_feat(&annotate.session->header,
 						      HEADER_BRANCH_STACK);
 
+	if (annotate.group_set)
+		perf_evlist__force_leader(annotate.session->evlist);
+
 	ret = symbol__annotation_init();
 	if (ret < 0)
 		goto out_delete;
-- 
2.7.4

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

* Re: [PATCH v4 3/3] perf annotate: Support '--group' option
  2018-05-21 14:57 ` [PATCH v4 3/3] perf annotate: Support '--group' option Jin Yao
@ 2018-05-21 17:43   ` Arnaldo Carvalho de Melo
  2018-05-22  0:26     ` Jin, Yao
  2018-05-24  5:37   ` [tip:perf/core] " tip-bot for Jin Yao
  1 sibling, 1 reply; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-05-21 17:43 UTC (permalink / raw)
  To: Jin Yao
  Cc: jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin

Em Mon, May 21, 2018 at 10:57:46PM +0800, Jin Yao escreveu:
> With the '--group' option, even for non-explicit group, perf annotate
> will enable the group output.
> 
> For example,
> 
> perf record -e cycles,branches ./div
> perf annotate main --stdio --group

You forgot to make the first line to include the group event string,
i.e. for cycles,instructions it will show only this:

 Percent         |      Source code & Disassembly of ld-2.26.so for cycles:u (1 samples)
----------------------------------------------------------------------------------------
                 :
                 :
                 :
                 :           Disassembly of section .text:
                 :
                 :           00000000000167e0 <__GI___tunables_init>:
                 :           __GI___tunables_init():
                 :           /* Initialize the tunables list from the environment.  For now we only use the
                 :              ENV_ALIAS to find values.  Later we will also use the tunable names to find
                 :              values.  */
                 :           void
                 :           __tunables_init (char **envp)
                 :           {
    0.00    0.00 :   167e0:       push   %r15
    0.00    0.00 :   167e2:       push   %r14

I'm applying the patch, this can be done on top,

- Arnaldo

> 
>                  :            Disassembly of section .text:
>                  :
>                  :            00000000004004b0 <main>:
>                  :            main():
>                  :
>                  :                    return i;
>                  :            }
>                  :
>                  :            int main(void)
>                  :            {
>     0.00    0.00 :   4004b0:       push   %rbx
>                  :                    int i;
>                  :                    int flag;
>                  :                    volatile double x = 1212121212, y = 121212;
>                  :
>                  :                    s_randseed = time(0);
>     0.00    0.00 :   4004b1:       xor    %edi,%edi
>                  :                    srand(s_randseed);
>     0.00    0.00 :   4004b3:       mov    $0x77359400,%ebx
>                  :
>                  :                    return i;
>                  :            }
>                  :
> 
> But if without --group, there is only one event reported.
> 
> perf annotate main --stdio
> 
>          :            Disassembly of section .text:
>          :
>          :            00000000004004b0 <main>:
>          :            main():
>          :
>          :                    return i;
>          :            }
>          :
>          :            int main(void)
>          :            {
>     0.00 :   4004b0:       push   %rbx
>          :                    int i;
>          :                    int flag;
>          :                    volatile double x = 1212121212, y = 121212;
>          :
>          :                    s_randseed = time(0);
>     0.00 :   4004b1:       xor    %edi,%edi
>          :                    srand(s_randseed);
>     0.00 :   4004b3:       mov    $0x77359400,%ebx
>          :
>          :                    return i;
>          :            }
> 
> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> ---
>  tools/perf/builtin-annotate.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
> index 6e5d9f7..da57042 100644
> --- a/tools/perf/builtin-annotate.c
> +++ b/tools/perf/builtin-annotate.c
> @@ -45,6 +45,7 @@ struct perf_annotate {
>  	bool	   print_line;
>  	bool	   skip_missing;
>  	bool	   has_br_stack;
> +	bool	   group_set;
>  	const char *sym_hist_filter;
>  	const char *cpu_list;
>  	DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
> @@ -508,6 +509,9 @@ int cmd_annotate(int argc, const char **argv)
>  		    "Don't shorten the displayed pathnames"),
>  	OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing,
>  		    "Skip symbols that cannot be annotated"),
> +	OPT_BOOLEAN_SET(0, "group", &symbol_conf.event_group,
> +			&annotate.group_set,
> +			"Show event group information together"),
>  	OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"),
>  	OPT_CALLBACK(0, "symfs", NULL, "directory",
>  		     "Look for files with symbols relative to this directory",
> @@ -570,6 +574,9 @@ int cmd_annotate(int argc, const char **argv)
>  	annotate.has_br_stack = perf_header__has_feat(&annotate.session->header,
>  						      HEADER_BRANCH_STACK);
>  
> +	if (annotate.group_set)
> +		perf_evlist__force_leader(annotate.session->evlist);
> +
>  	ret = symbol__annotation_init();
>  	if (ret < 0)
>  		goto out_delete;
> -- 
> 2.7.4

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

* Re: [PATCH v4 3/3] perf annotate: Support '--group' option
  2018-05-21 17:43   ` Arnaldo Carvalho de Melo
@ 2018-05-22  0:26     ` Jin, Yao
  0 siblings, 0 replies; 9+ messages in thread
From: Jin, Yao @ 2018-05-22  0:26 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin



On 5/22/2018 1:43 AM, Arnaldo Carvalho de Melo wrote:
> Em Mon, May 21, 2018 at 10:57:46PM +0800, Jin Yao escreveu:
>> With the '--group' option, even for non-explicit group, perf annotate
>> will enable the group output.
>>
>> For example,
>>
>> perf record -e cycles,branches ./div
>> perf annotate main --stdio --group
> 
> You forgot to make the first line to include the group event string,
> i.e. for cycles,instructions it will show only this:
> 
>   Percent         |      Source code & Disassembly of ld-2.26.so for cycles:u (1 samples)
> ----------------------------------------------------------------------------------------
>                   :
>                   :
>                   :
>                   :           Disassembly of section .text:
>                   :
>                   :           00000000000167e0 <__GI___tunables_init>:
>                   :           __GI___tunables_init():
>                   :           /* Initialize the tunables list from the environment.  For now we only use the
>                   :              ENV_ALIAS to find values.  Later we will also use the tunable names to find
>                   :              values.  */
>                   :           void
>                   :           __tunables_init (char **envp)
>                   :           {
>      0.00    0.00 :   167e0:       push   %r15
>      0.00    0.00 :   167e2:       push   %r14
> 
> I'm applying the patch, this can be done on top,
> 
> - Arnaldo
> 

Oh, 'perf annotate --group' can show the group string but 'perf annotate 
--group --stdio' shows only one event.

I will check the '--stdio' and post a followup patch to fix that.

Thanks
Jin Yao

>>
>>                   :            Disassembly of section .text:
>>                   :
>>                   :            00000000004004b0 <main>:
>>                   :            main():
>>                   :
>>                   :                    return i;
>>                   :            }
>>                   :
>>                   :            int main(void)
>>                   :            {
>>      0.00    0.00 :   4004b0:       push   %rbx
>>                   :                    int i;
>>                   :                    int flag;
>>                   :                    volatile double x = 1212121212, y = 121212;
>>                   :
>>                   :                    s_randseed = time(0);
>>      0.00    0.00 :   4004b1:       xor    %edi,%edi
>>                   :                    srand(s_randseed);
>>      0.00    0.00 :   4004b3:       mov    $0x77359400,%ebx
>>                   :
>>                   :                    return i;
>>                   :            }
>>                   :
>>
>> But if without --group, there is only one event reported.
>>
>> perf annotate main --stdio
>>
>>           :            Disassembly of section .text:
>>           :
>>           :            00000000004004b0 <main>:
>>           :            main():
>>           :
>>           :                    return i;
>>           :            }
>>           :
>>           :            int main(void)
>>           :            {
>>      0.00 :   4004b0:       push   %rbx
>>           :                    int i;
>>           :                    int flag;
>>           :                    volatile double x = 1212121212, y = 121212;
>>           :
>>           :                    s_randseed = time(0);
>>      0.00 :   4004b1:       xor    %edi,%edi
>>           :                    srand(s_randseed);
>>      0.00 :   4004b3:       mov    $0x77359400,%ebx
>>           :
>>           :                    return i;
>>           :            }
>>
>> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
>> ---
>>   tools/perf/builtin-annotate.c | 7 +++++++
>>   1 file changed, 7 insertions(+)
>>
>> diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
>> index 6e5d9f7..da57042 100644
>> --- a/tools/perf/builtin-annotate.c
>> +++ b/tools/perf/builtin-annotate.c
>> @@ -45,6 +45,7 @@ struct perf_annotate {
>>   	bool	   print_line;
>>   	bool	   skip_missing;
>>   	bool	   has_br_stack;
>> +	bool	   group_set;
>>   	const char *sym_hist_filter;
>>   	const char *cpu_list;
>>   	DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
>> @@ -508,6 +509,9 @@ int cmd_annotate(int argc, const char **argv)
>>   		    "Don't shorten the displayed pathnames"),
>>   	OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing,
>>   		    "Skip symbols that cannot be annotated"),
>> +	OPT_BOOLEAN_SET(0, "group", &symbol_conf.event_group,
>> +			&annotate.group_set,
>> +			"Show event group information together"),
>>   	OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"),
>>   	OPT_CALLBACK(0, "symfs", NULL, "directory",
>>   		     "Look for files with symbols relative to this directory",
>> @@ -570,6 +574,9 @@ int cmd_annotate(int argc, const char **argv)
>>   	annotate.has_br_stack = perf_header__has_feat(&annotate.session->header,
>>   						      HEADER_BRANCH_STACK);
>>   
>> +	if (annotate.group_set)
>> +		perf_evlist__force_leader(annotate.session->evlist);
>> +
>>   	ret = symbol__annotation_init();
>>   	if (ret < 0)
>>   		goto out_delete;
>> -- 
>> 2.7.4

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

* [tip:perf/core] perf evlist: Introduce force_leader() method
  2018-05-21 14:57 ` [PATCH v4 1/3] perf evlist: Create new function perf_evlist__force_leader Jin Yao
@ 2018-05-24  5:36   ` tip-bot for Jin Yao
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Jin Yao @ 2018-05-24  5:36 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, hpa, ak, alexander.shishkin, linux-kernel, kan.liang,
	yao.jin, jolsa, peterz, tglx, acme

Commit-ID:  e2bdbe80a0b7dea9ba73582701b8a67c01e1da4f
Gitweb:     https://git.kernel.org/tip/e2bdbe80a0b7dea9ba73582701b8a67c01e1da4f
Author:     Jin Yao <yao.jin@linux.intel.com>
AuthorDate: Mon, 21 May 2018 22:57:44 +0800
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 21 May 2018 14:40:54 -0300

perf evlist: Introduce force_leader() method

For non-explicit group (e.g. those created with -e '{eventA,eventB}'),
'perf report' supports a option '--group' which can enable group output.

We also need to support 'perf annotate' with the same '--group'.

Create a new function perf_evlist__force_leader() which contains common
code to force setting the group leader.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1526914666-31839-2-git-send-email-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 15 +++++++++++++++
 tools/perf/util/evlist.h |  3 +++
 2 files changed, 18 insertions(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index a59281d64368..e7a4b31a84fb 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1795,3 +1795,18 @@ bool perf_evlist__exclude_kernel(struct perf_evlist *evlist)
 
 	return true;
 }
+
+/*
+ * Events in data file are not collect in groups, but we still want
+ * the group display. Set the artificial group and set the leader's
+ * forced_leader flag to notify the display code.
+ */
+void perf_evlist__force_leader(struct perf_evlist *evlist)
+{
+	if (!evlist->nr_groups) {
+		struct perf_evsel *leader = perf_evlist__first(evlist);
+
+		perf_evlist__set_leader(evlist);
+		leader->forced_leader = true;
+	}
+}
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 6c41b2f78713..dc66436add98 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -309,4 +309,7 @@ struct perf_evsel *perf_evlist__event2evsel(struct perf_evlist *evlist,
 					    union perf_event *event);
 
 bool perf_evlist__exclude_kernel(struct perf_evlist *evlist);
+
+void perf_evlist__force_leader(struct perf_evlist *evlist);
+
 #endif /* __PERF_EVLIST_H */

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

* [tip:perf/core] perf report: Use perf_evlist__force_leader to support '--group'
  2018-05-21 14:57 ` [PATCH v4 2/3] perf report: Use perf_evlist__force_leader to support '--group' Jin Yao
@ 2018-05-24  5:37   ` tip-bot for Jin Yao
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Jin Yao @ 2018-05-24  5:37 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, mingo, tglx, linux-kernel, hpa, peterz, kan.liang,
	yao.jin, acme, ak, alexander.shishkin

Commit-ID:  a26bb0ba706aef4f42cc9377c0d4e849378574a4
Gitweb:     https://git.kernel.org/tip/a26bb0ba706aef4f42cc9377c0d4e849378574a4
Author:     Jin Yao <yao.jin@linux.intel.com>
AuthorDate: Mon, 21 May 2018 22:57:45 +0800
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 21 May 2018 14:41:01 -0300

perf report: Use perf_evlist__force_leader to support '--group'

Since we created a new function perf_evlist__force_leader(), remove the
old code and use that new evlist method.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1526914666-31839-3-git-send-email-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-report.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 4c931afb2e80..ad978e3ee2b8 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -194,20 +194,11 @@ out:
 	return err;
 }
 
-/*
- * Events in data file are not collect in groups, but we still want
- * the group display. Set the artificial group and set the leader's
- * forced_leader flag to notify the display code.
- */
 static void setup_forced_leader(struct report *report,
 				struct perf_evlist *evlist)
 {
-	if (report->group_set && !evlist->nr_groups) {
-		struct perf_evsel *leader = perf_evlist__first(evlist);
-
-		perf_evlist__set_leader(evlist);
-		leader->forced_leader = true;
-	}
+	if (report->group_set)
+		perf_evlist__force_leader(evlist);
 }
 
 static int process_feature_event(struct perf_tool *tool,

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

* [tip:perf/core] perf annotate: Support '--group' option
  2018-05-21 14:57 ` [PATCH v4 3/3] perf annotate: Support '--group' option Jin Yao
  2018-05-21 17:43   ` Arnaldo Carvalho de Melo
@ 2018-05-24  5:37   ` tip-bot for Jin Yao
  1 sibling, 0 replies; 9+ messages in thread
From: tip-bot for Jin Yao @ 2018-05-24  5:37 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: alexander.shishkin, yao.jin, peterz, jolsa, linux-kernel, ak,
	acme, hpa, kan.liang, tglx, mingo

Commit-ID:  7ebaf4890f63eb90856b76864a0847413cdf6c86
Gitweb:     https://git.kernel.org/tip/7ebaf4890f63eb90856b76864a0847413cdf6c86
Author:     Jin Yao <yao.jin@linux.intel.com>
AuthorDate: Mon, 21 May 2018 22:57:46 +0800
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 21 May 2018 14:41:25 -0300

perf annotate: Support '--group' option

With the '--group' option, even for non-explicit group, 'perf annotate'
will enable the group output.

For example,

  $ perf record -e cycles,branches ./div
  $ perf annotate main --stdio --group

                 :            Disassembly of section .text:
                 :
                 :            00000000004004b0 <main>:
                 :            main():
                 :
                 :                    return i;
                 :            }
                 :
                 :            int main(void)
                 :            {
    0.00    0.00 :   4004b0:       push   %rbx
                 :                    int i;
                 :                    int flag;
                 :                    volatile double x = 1212121212, y = 121212;
                 :
                 :                    s_randseed = time(0);
    0.00    0.00 :   4004b1:       xor    %edi,%edi
                 :                    srand(s_randseed);
    0.00    0.00 :   4004b3:       mov    $0x77359400,%ebx
                 :
                 :                    return i;
                 :            }
                 :

But if without --group, there is only one event reported.

  $ perf annotate main --stdio

         :            Disassembly of section .text:
         :
         :            00000000004004b0 <main>:
         :            main():
         :
         :                    return i;
         :            }
         :
         :            int main(void)
         :            {
    0.00 :   4004b0:       push   %rbx
         :                    int i;
         :                    int flag;
         :                    volatile double x = 1212121212, y = 121212;
         :
         :                    s_randseed = time(0);
    0.00 :   4004b1:       xor    %edi,%edi
         :                    srand(s_randseed);
    0.00 :   4004b3:       mov    $0x77359400,%ebx
         :
         :                    return i;
         :            }

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1526914666-31839-4-git-send-email-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-annotate.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index 6e5d9f718154..da5704240239 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -45,6 +45,7 @@ struct perf_annotate {
 	bool	   print_line;
 	bool	   skip_missing;
 	bool	   has_br_stack;
+	bool	   group_set;
 	const char *sym_hist_filter;
 	const char *cpu_list;
 	DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
@@ -508,6 +509,9 @@ int cmd_annotate(int argc, const char **argv)
 		    "Don't shorten the displayed pathnames"),
 	OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing,
 		    "Skip symbols that cannot be annotated"),
+	OPT_BOOLEAN_SET(0, "group", &symbol_conf.event_group,
+			&annotate.group_set,
+			"Show event group information together"),
 	OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"),
 	OPT_CALLBACK(0, "symfs", NULL, "directory",
 		     "Look for files with symbols relative to this directory",
@@ -570,6 +574,9 @@ int cmd_annotate(int argc, const char **argv)
 	annotate.has_br_stack = perf_header__has_feat(&annotate.session->header,
 						      HEADER_BRANCH_STACK);
 
+	if (annotate.group_set)
+		perf_evlist__force_leader(annotate.session->evlist);
+
 	ret = symbol__annotation_init();
 	if (ret < 0)
 		goto out_delete;

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

end of thread, other threads:[~2018-05-24  5:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-21 14:57 [PATCH v4 0/3] perf annotate: Support '--group' option Jin Yao
2018-05-21 14:57 ` [PATCH v4 1/3] perf evlist: Create new function perf_evlist__force_leader Jin Yao
2018-05-24  5:36   ` [tip:perf/core] perf evlist: Introduce force_leader() method tip-bot for Jin Yao
2018-05-21 14:57 ` [PATCH v4 2/3] perf report: Use perf_evlist__force_leader to support '--group' Jin Yao
2018-05-24  5:37   ` [tip:perf/core] " tip-bot for Jin Yao
2018-05-21 14:57 ` [PATCH v4 3/3] perf annotate: Support '--group' option Jin Yao
2018-05-21 17:43   ` Arnaldo Carvalho de Melo
2018-05-22  0:26     ` Jin, Yao
2018-05-24  5:37   ` [tip:perf/core] " tip-bot for Jin Yao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).