Home | History | Annotate | Line # | Download | only in Examples
      1 The following are examples of pl_cputime.d.
      2 
      3 This script traces the on-CPU time of Perl subroutines (functions) and
      4 prints a report. Here it traces the example program, Code/Perl/func_slow.pl.
      5 
      6    # pl_cputime.d
      7    Tracing... Hit Ctrl-C to end.
      8    ^C
      9    
     10    Count,
     11       FILE                 TYPE       NAME                                COUNT
     12       func_slow.pl         sub        func_a                                  1
     13       func_slow.pl         sub        func_b                                  1
     14       func_slow.pl         sub        func_c                                  1
     15       -                    total      -                                       3
     16    
     17    Exclusive subroutine on-CPU times (us),
     18       FILE                 TYPE       NAME                                TOTAL
     19       func_slow.pl         sub        func_a                             264193
     20       func_slow.pl         sub        func_b                             538498
     21       func_slow.pl         sub        func_c                             798961
     22       -                    total      -                                 1601653
     23    
     24    Inclusive subroutine on-CPU times (us),
     25       FILE                 TYPE       NAME                                TOTAL
     26       func_slow.pl         sub        func_c                             798961
     27       func_slow.pl         sub        func_b                            1337459
     28       func_slow.pl         sub        func_a                            1601653
     29 
     30 In total, 3 subroutines were called, one each of func_a(), func_b() and
     31 func_c().
     32 
     33 The exclusive subroutine on-CPU times show that func_a() spent around 264.2 ms
     34 on-CPU, func_b() spent 538.5 ms, and func_c() spent 799.0 ms. This exclusive
     35 times excludes time spent in other subroutines.
     36 
     37 The inclusive subroutine on-CPU times show that func_c() spent around 799.0 ms
     38 on-CPU, func_b() spent around 1.3 seconds, and func_a() spent around 1.6
     39 seconds. This inclusive time includes the time spent in other subroutines
     40 called, and since func_a() called func_b() which called func_c(), these
     41 times make perfect sense.
     42 
     43 These on-CPU times are the time the thread spent running on a CPU, from when
     44 the subroutine began to when it completed. This does not include time 
     45 spent off-CPU time such as sleeping for I/O or waiting for scheduling.
     46 
     47 On-CPU times are useful for showing who is causing the CPUs to be busy.
     48 See Notes/ALLoncpu_notes.txt for more details. Also see
     49 Notes/ALLexclusive_notes.txt and Notes/ALLinclusive_notes.txt for a
     50 detailed explanation of exclusive vs inclusive subroutine time.
     51 
     52 If you study the func_slow.pl program alongside the above output, the numbers
     53 should make sense. 
     54 
     55 
     56 
     57 The following traces a Perl network interface statistics tool, "nicstat"
     58 version 0.99,
     59 
     60 # pl_cputime.pl
     61 Tracing... Hit Ctrl-C to end.
     62 ^C
     63 
     64 Count,
     65    FILE                 TYPE       NAME                                COUNT
     66    Config.pm            sub        DESTROY                                 1
     67    Config.pm            sub        TIEHASH                                 1
     68    Config.pm            sub        import                                  1
     69    DynaLoader.pm        sub        bootstrap                               1
     70    DynaLoader.pm        sub        dl_load_flags                           1
     71    Std.pm               sub        getopts                                 1
     72    nicstat              sub        fetch_net_data                          1
     73    nicstat              sub        find_nets                               1
     74    register.pm          sub        import                                  1
     75    warnings.pm          sub        BEGIN                                   1
     76    Config.pm            sub        BEGIN                                   2
     77    DynaLoader.pm        sub        BEGIN                                   2
     78    Exporter.pm          sub        import                                  2
     79    register.pm          sub        mkMask                                  2
     80    vars.pm              sub        import                                  2
     81    Kstat.pm             sub        BEGIN                                   3
     82    nicstat              sub        BEGIN                                   3
     83    vars.pm              sub        BEGIN                                   3
     84    Config.pm            sub        FETCH                                   4
     85    strict.pm            sub        unimport                                4
     86    strict.pm            sub        import                                  5
     87    AutoLoader.pm        sub        BEGIN                                   6
     88    strict.pm            sub        bits                                    6
     89    nicstat              sub        print_neat                             18
     90    -                    total      -                                      72
     91 
     92 Exclusive subroutine on-CPU times (us),
     93    FILE                 TYPE       NAME                                TOTAL
     94    DynaLoader.pm        sub        dl_load_flags                           2
     95    Config.pm            sub        TIEHASH                                 2
     96    Config.pm            sub        DESTROY                                 6
     97    Config.pm            sub        BEGIN                                   7
     98    register.pm          sub        mkMask                                  8
     99    Config.pm            sub        import                                 11
    100    Config.pm            sub        FETCH                                  12
    101    strict.pm            sub        unimport                               17
    102    strict.pm            sub        import                                 21
    103    AutoLoader.pm        sub        BEGIN                                  22
    104    Std.pm               sub        getopts                                33
    105    strict.pm            sub        bits                                   40
    106    register.pm          sub        import                                 51
    107    vars.pm              sub        import                                 65
    108    Exporter.pm          sub        import                                 88
    109    nicstat              sub        print_neat                            426
    110    warnings.pm          sub        BEGIN                                 598
    111    DynaLoader.pm        sub        bootstrap                             677
    112    DynaLoader.pm        sub        BEGIN                                1015
    113    Kstat.pm             sub        BEGIN                                2627
    114    vars.pm              sub        BEGIN                                2642
    115    nicstat              sub        BEGIN                                3033
    116    nicstat              sub        fetch_net_data                      42018
    117    nicstat              sub        find_nets                           52094
    118    -                    total      -                                  105526
    119 
    120 Inclusive subroutine on-CPU times (us),
    121    FILE                 TYPE       NAME                                TOTAL
    122    DynaLoader.pm        sub        dl_load_flags                           2
    123    Config.pm            sub        TIEHASH                                 2
    124    Config.pm            sub        DESTROY                                 6
    125    register.pm          sub        mkMask                                  8
    126    Config.pm            sub        import                                 11
    127    Config.pm            sub        FETCH                                  12
    128    Config.pm            sub        BEGIN                                  19
    129    strict.pm            sub        import                                 28
    130    strict.pm            sub        unimport                               35
    131    strict.pm            sub        bits                                   40
    132    AutoLoader.pm        sub        BEGIN                                  51
    133    register.pm          sub        import                                 59
    134    Std.pm               sub        getopts                                63
    135    vars.pm              sub        import                                 65
    136    Exporter.pm          sub        import                                 88
    137    nicstat              sub        print_neat                            426
    138    warnings.pm          sub        BEGIN                                 598
    139    DynaLoader.pm        sub        bootstrap                             680
    140    vars.pm              sub        BEGIN                                3313
    141    DynaLoader.pm        sub        BEGIN                                4401
    142    Kstat.pm             sub        BEGIN                                7124
    143    nicstat              sub        BEGIN                               10916
    144    nicstat              sub        fetch_net_data                      42018
    145    nicstat              sub        find_nets                           52094
    146 
    147 The output showed that the most CPU time was spent in the subroutine
    148 find_nets(), with a total exclusive on-CPU time of 52.1 ms. This also matches
    149 the total inclusive time, suggesting that find_nets() didn't call other
    150 subroutines.
    151 
    152