The following is a demonstration of the cpuwalk.d script,


cpuwalk.d is not that useful on a single CPU server,

   # cpuwalk.d
   Sampling... Hit Ctrl-C to end.
   ^C
   
        PID: 18843    CMD: bash
   
              value  ------------- Distribution ------------- count
                < 0 |                                         0
                  0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 30
                  1 |                                         0
   
        PID: 8079     CMD: mozilla-bin
   
              value  ------------- Distribution ------------- count
                < 0 |                                         0
                  0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10
                  1 |                                         0

The output above shows that PID 18843, "bash", was sampled on CPU 0 a total
of 30 times (we sample at 1000 hz).



The following is a demonstration of running cpuwalk.d with a 5 second
duration. This is on a 4 CPU server running a multithreaded CPU bound
application called "cputhread",

   # cpuwalk.d 5
   Sampling...
   
        PID: 3        CMD: fsflush
   
              value  ------------- Distribution ------------- count
                  1 |                                         0
                  2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 30
                  3 |                                         0
   
        PID: 12186    CMD: cputhread
   
              value  ------------- Distribution ------------- count
                < 0 |                                         0
                  0 |@@@@@@@@@@                               4900
                  1 |@@@@@@@@@@                               4900
                  2 |@@@@@@@@@@                               4860
                  3 |@@@@@@@@@@                               4890
                  4 |                                         0

As we are sampling at 1000 hz, the application cputhread is indeed running
concurrently across all available CPUs. We measured the applicaiton on
CPU 0 a total of 4900 times, on CPU 1 a total of 4900 times, etc. As there
are around 5000 samples per CPU available in this 5 second 1000 hz sample,
the application is using almost all the CPU capacity in this server well.



The following is a similar demonstration, this time running a multithreaded
CPU bound application called "cpuserial" that has a poor use of locking
such that the threads "serialise",


   # cpuwalk.d 5
   Sampling...
   
        PID: 12194    CMD: cpuserial
   
              value  ------------- Distribution ------------- count
                < 0 |                                         0
                  0 |@@@                                      470
                  1 |@@@@@@                                   920
                  2 |@@@@@@@@@@@@@@@@@@@@@@@@@                3840
                  3 |@@@@@@                                   850
                  4 |                                         0

In the above, we can see that this CPU bound application is not making
efficient use of the CPU resources available, only reaching 3840 samples
on CPU 2 out of a potential 5000. This problem was caused by a poor use
of locks.



