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