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 <[email protected]>
---
  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

Reply via email to