Section 2.15. DTrace Probes for CPU States


2.15. DTrace Probes for CPU States

The sched provider makes available probes related to CPU scheduling. Because CPUs are the one resource that all threads must consume, the sched provider is very useful for understanding systemic behavior. For example, using the sched provider, you can understand when and why threads sleep, run, change priority, or wake other threads.

As an example, one common question you might want answered is which CPUs are running threads and for how long. You can use the on-cpu and off-cpu probes to easily answer this question systemwide as shown in the following example.

#!/usr/sbin/dtrace -s sched:::on-cpu {               self->ts = timestamp; } sched:::off-cpu /self->ts/ {               @[cpu] = quantize(timestamp - self->ts);               self->ts = 0; } 


The CPU overhead for the tracing of the probe events is proportional to their frequency. The on-cpu and off-cpu probes occur for each context switch, so the CPU overhead increases as the rate of context switches per second increases. Compare this to the previous DTrace scripts that sampled at 1000 hertztheir probe frequency is fixed. Either way, the CPU cost for running these scripts should be negligible.

The following is an example of running this script.

# ./where.d dtrace: script './where.d' matched 5 probes ^C         0            value  ------------- Distribution ------------- count             2048 |                                         0             4096 |@@                                       37             8192 |@@@@@@@@@@@@@                            212            16384 |@                                        30            32768 |                                         10            65536 |@                                        17           131072 |                                         12           262144 |                                         9           524288 |                                         6          1048576 |                                         5          2097152 |                                         1          4194304 |                                         3          8388608 |@@@@                                     75         16777216 |@@@@@@@@@@@@                             201         33554432 |                                         6         67108864 |                                         0         1            value  ------------- Distribution ------------- count             2048 |                                         0             4096 |@                                        6             8192 |@@@@                                     23            16384 |@@@                                      18            32768 |@@@@                                     22            65536 |@@@@                                     22           131072 |@                                        7           262144 |                                         5           524288 |                                         2          1048576 |                                         3          2097152 |@                                        9          4194304 |                                         4          8388608 |@@@                                      18         16777216 |@@@                                      19         33554432 |@@@                                      16         67108864 |@@@@                                     21        134217728 |@@                                       14        268435456 |                                         0 


The value is nanoseconds, and the count is the number of occurrences a thread ran for this duration without leaving the CPU. The floating integer above the Distribution plot is the CPU ID.

For CPU 0, a thread ran for between 8 and 16 microseconds on 212 occasions, shown by a small spike in the distribution plot. The other spike was for the 16 to 32 millisecond duration (sounds like TS class quantasee Chapter 3 in Solaris Internals), for which threads ran 201 times.

The sched provider is discussed in Section 10.6.3.




Solaris Performance and Tools(c) Dtrace and Mdb Techniques for Solaris 10 and Opensolaris
Solaris Performance and Tools: DTrace and MDB Techniques for Solaris 10 and OpenSolaris
ISBN: 0131568191
EAN: 2147483647
Year: 2007
Pages: 180

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net