• Jiri Olsa's avatar
    perf script: Add stat-cpi.py script · b8a1962d
    Jiri Olsa authored
    Adding stat-cpi.py as an example of how to do stat scripting.
    
    It computes the CPI metrics from cycles and instructions events.
    
    The CPI is based performance metric showing the Cycles Per Instructions
    ratio, which helps to identify cycles-hungry code.
    
    Following stat record/report/script combinations could be used:
    
    - get CPI for given workload
    
        $ perf stat -e cycles,instructions record ls
    
        SNIP
    
         Performance counter stats for 'ls':
    
                 2,904,431      cycles
                 3,346,878      instructions              #    1.15  insns per cycle
    
               0.001782686 seconds time elapsed
    
        $ perf script -s ./scripts/python/stat-cpi.py
               0.001783: cpu -1, thread -1 -> cpi 0.867803 (2904431/3346878)
    
        $ perf stat -e cycles,instructions record ls | perf script -s ./scripts/python/stat-cpi.py
    
        SNIP
    
               0.001730: cpu -1, thread -1 -> cpi 0.869026 (2928292/3369627)
    
    - get CPI systemwide:
    
        $ perf stat -e cycles,instructions -a -I 1000 record sleep 3
        #           time             counts unit events
             1.000158618        594,274,711      cycles                     (100.00%)
             1.000158618        441,898,250      instructions
             2.000350973        567,649,705      cycles                     (100.00%)
             2.000350973        432,669,206      instructions
             3.000559210        561,940,430      cycles                     (100.00%)
             3.000559210        420,403,465      instructions
             3.000670798            780,105      cycles                     (100.00%)
             3.000670798            326,516      instructions
    
        $ perf script -s ./scripts/python/stat-cpi.py
               1.000159: cpu -1, thread -1 -> cpi 1.344823 (594274711/441898250)
               2.000351: cpu -1, thread -1 -> cpi 1.311972 (567649705/432669206)
               3.000559: cpu -1, thread -1 -> cpi 1.336669 (561940430/420403465)
               3.000671: cpu -1, thread -1 -> cpi 2.389178 (780105/326516)
    
        $ perf stat -e cycles,instructions -a -I 1000 record sleep 3 | perf script -s ./scripts/python/stat-cpi.py
               1.000202: cpu -1, thread -1 -> cpi 1.035091 (940778881/908885530)
               2.000392: cpu -1, thread -1 -> cpi 1.442600 (627493992/434974455)
               3.000545: cpu -1, thread -1 -> cpi 1.353612 (741463930/547766890)
               3.000622: cpu -1, thread -1 -> cpi 2.642110 (784083/296764)
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: default avatarKan Liang <kan.liang@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1452077397-31958-4-git-send-email-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b8a1962d
stat-cpi.py 2.33 KB