1The following are examples of pl_cpudist.d. 2 3This script traces the on-CPU time of Perl subroutines (functions) and 4prints a report containing distribution plots per subroutine. Here it 5traces the example program, Code/Perl/func_slow.pl. 6 7 # pl_cpudist.d 8 Tracing... Hit Ctrl-C to end. 9 ^C 10 11 Exclusive subroutine on-CPU times (us), 12 func_slow.pl, sub, func_a 13 value ------------- Distribution ------------- count 14 131072 | 0 15 262144 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 16 524288 | 0 17 18 func_slow.pl, sub, func_b 19 value ------------- Distribution ------------- count 20 262144 | 0 21 524288 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 22 1048576 | 0 23 24 func_slow.pl, sub, func_c 25 value ------------- Distribution ------------- count 26 262144 | 0 27 524288 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 28 1048576 | 0 29 30 31 Inclusive subroutine on-CPU times (us), 32 func_slow.pl, sub, func_c 33 value ------------- Distribution ------------- count 34 262144 | 0 35 524288 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 36 1048576 | 0 37 38 func_slow.pl, sub, func_a 39 value ------------- Distribution ------------- count 40 524288 | 0 41 1048576 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 42 2097152 | 0 43 44 func_slow.pl, sub, func_b 45 value ------------- Distribution ------------- count 46 524288 | 0 47 1048576 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 48 2097152 | 0 49 50The exclusive subroutine on-CPU times show that func_a() spent between 51262 ms and 524 ms on-CPU, while func_b() and func_c() both spent between 52524 ms and 1048 ms on-CPU. 53 54The inclusive subroutine on-CPU times show that func_c() spent between 0.5 and 551.0 seconds, and both func_b() and func_a() spent between 1.0 and 2.1 seconds 56of CPU time. This inclusive time includes the time spent in other subroutines 57called, and since func_a() called func_b() which called func_c(), these times 58make sense. 59 60These on-CPU times are the time the thread spent running on a CPU, from when 61the subroutine began to when it completed. This does not include time 62spent off-CPU time such as sleeping for I/O or waiting for scheduling. 63 64On-CPU times are useful for showing who is causing the CPUs to be busy. 65See Notes/ALLoncpu_notes.txt for more details. Also see 66Notes/ALLexclusive_notes.txt and Notes/ALLinclusive_notes.txt for a 67detailed explanation of exclusive vs inclusive subroutine time. 68 69 70The following traces a Perl network interface statistics tool, "nicstat" 71version 0.99, 72 73# pl_cpudist.pl 74Tracing... Hit Ctrl-C to end. 75^C 76 77Exclusive subroutine on-CPU times (us), 78 Config.pm, sub, TIEHASH 79 value ------------- Distribution ------------- count 80 1 | 0 81 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 82 4 | 0 83 84 DynaLoader.pm, sub, dl_load_flags 85 value ------------- Distribution ------------- count 86 1 | 0 87 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 88 4 | 0 89 90 Config.pm, sub, BEGIN 91 value ------------- Distribution ------------- count 92 1 | 0 93 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 94 4 | 0 95 96 Config.pm, sub, DESTROY 97 value ------------- Distribution ------------- count 98 2 | 0 99 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 100 8 | 0 101 102 register.pm, sub, mkMask 103 value ------------- Distribution ------------- count 104 1 | 0 105 2 |@@@@@@@@@@@@@@@@@@@@ 1 106 4 |@@@@@@@@@@@@@@@@@@@@ 1 107 8 | 0 108 109 Config.pm, sub, import 110 value ------------- Distribution ------------- count 111 4 | 0 112 8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 113 16 | 0 114 115 Config.pm, sub, FETCH 116 value ------------- Distribution ------------- count 117 1 | 0 118 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3 119 4 |@@@@@@@@@@ 1 120 8 | 0 121 122 strict.pm, sub, unimport 123 value ------------- Distribution ------------- count 124 2 | 0 125 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3 126 8 |@@@@@@@@@@ 1 127 16 | 0 128 129 Std.pm, sub, getopts 130 value ------------- Distribution ------------- count 131 16 | 0 132 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 133 64 | 0 134 135 register.pm, sub, import 136 value ------------- Distribution ------------- count 137 16 | 0 138 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 139 64 | 0 140 141 strict.pm, sub, import 142 value ------------- Distribution ------------- count 143 1 | 0 144 2 |@@@@@@@@@@@@@@@@ 2 145 4 |@@@@@@@@ 1 146 8 |@@@@@@@@ 1 147 16 |@@@@@@@@ 1 148 32 | 0 149 150 strict.pm, sub, bits 151 value ------------- Distribution ------------- count 152 2 | 0 153 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@ 4 154 8 |@@@@@@@ 1 155 16 |@@@@@@@ 1 156 32 | 0 157 158 AutoLoader.pm, sub, BEGIN 159 value ------------- Distribution ------------- count 160 0 | 0 161 1 |@@@@@@@ 1 162 2 |@@@@@@@@@@@@@ 2 163 4 |@@@@@@@@@@@@@ 2 164 8 | 0 165 16 | 0 166 32 |@@@@@@@ 1 167 64 | 0 168 169 vars.pm, sub, import 170 value ------------- Distribution ------------- count 171 16 | 0 172 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 173 64 | 0 174 175 Exporter.pm, sub, import 176 value ------------- Distribution ------------- count 177 8 | 0 178 16 |@@@@@@@@@@@@@@@@@@@@ 1 179 32 | 0 180 64 |@@@@@@@@@@@@@@@@@@@@ 1 181 128 | 0 182 183 nicstat, sub, print_neat 184 value ------------- Distribution ------------- count 185 8 | 0 186 16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16 187 32 |@@ 1 188 64 |@@ 1 189 128 | 0 190 191 DynaLoader.pm, sub, bootstrap 192 value ------------- Distribution ------------- count 193 256 | 0 194 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 195 1024 | 0 196 197 warnings.pm, sub, BEGIN 198 value ------------- Distribution ------------- count 199 256 | 0 200 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 201 1024 | 0 202 203 DynaLoader.pm, sub, BEGIN 204 value ------------- Distribution ------------- count 205 128 | 0 206 256 |@@@@@@@@@@@@@@@@@@@@ 1 207 512 |@@@@@@@@@@@@@@@@@@@@ 1 208 1024 | 0 209 210 vars.pm, sub, BEGIN 211 value ------------- Distribution ------------- count 212 0 | 0 213 1 |@@@@@@@@@@@@@ 1 214 2 |@@@@@@@@@@@@@ 1 215 4 | 0 216 8 | 0 217 16 | 0 218 32 | 0 219 64 | 0 220 128 | 0 221 256 | 0 222 512 | 0 223 1024 | 0 224 2048 |@@@@@@@@@@@@@ 1 225 4096 | 0 226 227 Kstat.pm, sub, BEGIN 228 value ------------- Distribution ------------- count 229 1 | 0 230 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 231 4 | 0 232 8 | 0 233 16 | 0 234 32 | 0 235 64 | 0 236 128 | 0 237 256 | 0 238 512 | 0 239 1024 | 0 240 2048 |@@@@@@@@@@@@@ 1 241 4096 | 0 242 243 nicstat, sub, BEGIN 244 value ------------- Distribution ------------- count 245 128 | 0 246 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 247 512 | 0 248 1024 | 0 249 2048 |@@@@@@@@@@@@@ 1 250 4096 | 0 251 252 nicstat, sub, fetch_net_data 253 value ------------- Distribution ------------- count 254 16384 | 0 255 32768 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 256 65536 | 0 257 258 nicstat, sub, find_nets 259 value ------------- Distribution ------------- count 260 16384 | 0 261 32768 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 262 65536 | 0 263 264 265Inclusive subroutine on-CPU times (us), 266 Config.pm, sub, TIEHASH 267 value ------------- Distribution ------------- count 268 1 | 0 269 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 270 4 | 0 271 272 DynaLoader.pm, sub, dl_load_flags 273 value ------------- Distribution ------------- count 274 1 | 0 275 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 276 4 | 0 277 278 Config.pm, sub, DESTROY 279 value ------------- Distribution ------------- count 280 2 | 0 281 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 282 8 | 0 283 284 register.pm, sub, mkMask 285 value ------------- Distribution ------------- count 286 1 | 0 287 2 |@@@@@@@@@@@@@@@@@@@@ 1 288 4 |@@@@@@@@@@@@@@@@@@@@ 1 289 8 | 0 290 291 Config.pm, sub, import 292 value ------------- Distribution ------------- count 293 4 | 0 294 8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 295 16 | 0 296 297 Config.pm, sub, FETCH 298 value ------------- Distribution ------------- count 299 1 | 0 300 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3 301 4 |@@@@@@@@@@ 1 302 8 | 0 303 304 Config.pm, sub, BEGIN 305 value ------------- Distribution ------------- count 306 2 | 0 307 4 |@@@@@@@@@@@@@@@@@@@@ 1 308 8 | 0 309 16 |@@@@@@@@@@@@@@@@@@@@ 1 310 32 | 0 311 312 strict.pm, sub, unimport 313 value ------------- Distribution ------------- count 314 4 | 0 315 8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 4 316 16 | 0 317 318 strict.pm, sub, import 319 value ------------- Distribution ------------- count 320 1 | 0 321 2 |@@@@@@@@@@@@@@@@ 2 322 4 | 0 323 8 |@@@@@@@@@@@@@@@@ 2 324 16 |@@@@@@@@ 1 325 32 | 0 326 327 strict.pm, sub, bits 328 value ------------- Distribution ------------- count 329 2 | 0 330 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@ 4 331 8 |@@@@@@@ 1 332 16 |@@@@@@@ 1 333 32 | 0 334 335 Std.pm, sub, getopts 336 value ------------- Distribution ------------- count 337 32 | 0 338 64 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 339 128 | 0 340 341 register.pm, sub, import 342 value ------------- Distribution ------------- count 343 32 | 0 344 64 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 345 128 | 0 346 347 vars.pm, sub, import 348 value ------------- Distribution ------------- count 349 16 | 0 350 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 351 64 | 0 352 353 AutoLoader.pm, sub, BEGIN 354 value ------------- Distribution ------------- count 355 0 | 0 356 1 |@@@@@@@ 1 357 2 | 0 358 4 |@@@@@@@ 1 359 8 |@@@@@@@@@@@@@ 2 360 16 |@@@@@@@ 1 361 32 |@@@@@@@ 1 362 64 | 0 363 364 Exporter.pm, sub, import 365 value ------------- Distribution ------------- count 366 8 | 0 367 16 |@@@@@@@@@@@@@@@@@@@@ 1 368 32 | 0 369 64 |@@@@@@@@@@@@@@@@@@@@ 1 370 128 | 0 371 372 nicstat, sub, print_neat 373 value ------------- Distribution ------------- count 374 8 | 0 375 16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16 376 32 |@@ 1 377 64 |@@ 1 378 128 | 0 379 380 DynaLoader.pm, sub, bootstrap 381 value ------------- Distribution ------------- count 382 256 | 0 383 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 384 1024 | 0 385 386 warnings.pm, sub, BEGIN 387 value ------------- Distribution ------------- count 388 256 | 0 389 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 390 1024 | 0 391 392 vars.pm, sub, BEGIN 393 value ------------- Distribution ------------- count 394 0 | 0 395 1 |@@@@@@@@@@@@@ 1 396 2 | 0 397 4 | 0 398 8 | 0 399 16 |@@@@@@@@@@@@@ 1 400 32 | 0 401 64 | 0 402 128 | 0 403 256 | 0 404 512 | 0 405 1024 | 0 406 2048 |@@@@@@@@@@@@@ 1 407 4096 | 0 408 409 DynaLoader.pm, sub, BEGIN 410 value ------------- Distribution ------------- count 411 256 | 0 412 512 |@@@@@@@@@@@@@@@@@@@@ 1 413 1024 | 0 414 2048 |@@@@@@@@@@@@@@@@@@@@ 1 415 4096 | 0 416 417 Kstat.pm, sub, BEGIN 418 value ------------- Distribution ------------- count 419 2 | 0 420 4 |@@@@@@@@@@@@@ 1 421 8 | 0 422 16 | 0 423 32 |@@@@@@@@@@@@@ 1 424 64 | 0 425 128 | 0 426 256 | 0 427 512 | 0 428 1024 | 0 429 2048 | 0 430 4096 |@@@@@@@@@@@@@ 1 431 8192 | 0 432 433 nicstat, sub, BEGIN 434 value ------------- Distribution ------------- count 435 128 | 0 436 256 |@@@@@@@@@@@@@ 1 437 512 | 0 438 1024 | 0 439 2048 |@@@@@@@@@@@@@ 1 440 4096 | 0 441 8192 |@@@@@@@@@@@@@ 1 442 16384 | 0 443 444 nicstat, sub, fetch_net_data 445 value ------------- Distribution ------------- count 446 16384 | 0 447 32768 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 448 65536 | 0 449 450 nicstat, sub, find_nets 451 value ------------- Distribution ------------- count 452 16384 | 0 453 32768 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 454 65536 | 0 455 456As an example of interpreting the output: the inclusive on-CPU time for 457the "print_neat" subroutine in "nicstat", 458 459 nicstat, sub, print_neat 460 value ------------- Distribution ------------- count 461 8 | 0 462 16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16 463 32 |@@ 1 464 64 |@@ 1 465 128 | 0 466 467shows that "print_neat" was called 18 times, 16 of which spent between 16 468and 31 microseconds on-CPU, once between 32 and 63 microseconds, and once 469between 64 and 127 microseconds. 470 471