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