• A
    perf tools: Save some loops using perf_evlist__id2evsel · ee29be62
    Arnaldo Carvalho de Melo 提交于
    Since we already ask for PERF_SAMPLE_ID and use it to quickly find the
    associated evsel, add handler func + data to struct perf_evsel to avoid
    using chains of if(strcmp(event_name)) and also to avoid all the linear
    list searches via trace_event_find.
    
    To demonstrate the technique convert 'perf sched' to it:
    
     # perf sched record sleep 5m
    
    And then:
    
     Performance counter stats for '/tmp/oldperf sched lat':
    
            646.929438 task-clock                #    0.999 CPUs utilized
                     9 context-switches          #    0.000 M/sec
                     0 CPU-migrations            #    0.000 M/sec
                20,901 page-faults               #    0.032 M/sec
         1,290,144,450 cycles                    #    1.994 GHz
       <not supported> stalled-cycles-frontend
       <not supported> stalled-cycles-backend
         1,606,158,439 instructions              #    1.24  insns per cycle
           339,088,395 branches                  #  524.151 M/sec
             4,550,735 branch-misses             #    1.34% of all branches
    
           0.647524759 seconds time elapsed
    
    Versus:
    
     Performance counter stats for 'perf sched lat':
    
            473.564691 task-clock                #    0.999 CPUs utilized
                     9 context-switches          #    0.000 M/sec
                     0 CPU-migrations            #    0.000 M/sec
                20,903 page-faults               #    0.044 M/sec
           944,367,984 cycles                    #    1.994 GHz
       <not supported> stalled-cycles-frontend
       <not supported> stalled-cycles-backend
         1,442,385,571 instructions              #    1.53  insns per cycle
           308,383,106 branches                  #  651.195 M/sec
             4,481,784 branch-misses             #    1.45% of all branches
    
           0.474215751 seconds time elapsed
    
    [root@emilia ~]#
    
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/n/tip-1kbzpl74lwi6lavpqke2u2p3@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    ee29be62
builtin-sched.c 43.8 KB