xref: /aosp_15_r20/external/bcc/tools/cpudist_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of cpudist.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard WorkerThis program summarizes task on-CPU time as a histogram, showing how long tasks
4*387f9dfdSAndroid Build Coastguard Workerspent on the CPU before being descheduled. This provides valuable information
5*387f9dfdSAndroid Build Coastguard Workerthat can indicate oversubscription (too many tasks for too few processors),
6*387f9dfdSAndroid Build Coastguard Workeroverhead due to excessive context switching (e.g. a common shared lock for
7*387f9dfdSAndroid Build Coastguard Workermultiple threads), uneven workload distribution, too-granular tasks, and more.
8*387f9dfdSAndroid Build Coastguard Worker
9*387f9dfdSAndroid Build Coastguard WorkerBy default CPU idle time are excluded by simply excluding PID 0.
10*387f9dfdSAndroid Build Coastguard Worker
11*387f9dfdSAndroid Build Coastguard WorkerAlternatively, the same options are available for summarizing task off-CPU
12*387f9dfdSAndroid Build Coastguard Workertime, which helps understand how often threads are being descheduled and how
13*387f9dfdSAndroid Build Coastguard Workerlong they spend waiting for I/O, locks, timers, and other causes of suspension.
14*387f9dfdSAndroid Build Coastguard Worker
15*387f9dfdSAndroid Build Coastguard Worker# ./cpudist.py
16*387f9dfdSAndroid Build Coastguard WorkerTracing on-CPU time... Hit Ctrl-C to end.
17*387f9dfdSAndroid Build Coastguard Worker^C
18*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
19*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
20*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1        |                                        |
21*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 1        |                                        |
22*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 13       |**                                      |
23*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 187      |****************************************|
24*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 89       |*******************                     |
25*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 26       |*****                                   |
26*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
27*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 1        |                                        |
28*387f9dfdSAndroid Build Coastguard Worker
29*387f9dfdSAndroid Build Coastguard WorkerThis is from a mostly idle system. Tasks wake up occasionally and run for only
30*387f9dfdSAndroid Build Coastguard Workera few dozen microseconds, and then get descheduled.
31*387f9dfdSAndroid Build Coastguard Worker
32*387f9dfdSAndroid Build Coastguard WorkerHere's some output from a system that is heavily loaded by threads that perform
33*387f9dfdSAndroid Build Coastguard Workercomputation but also compete for a lock:
34*387f9dfdSAndroid Build Coastguard Worker
35*387f9dfdSAndroid Build Coastguard Worker# ./cpudist.py
36*387f9dfdSAndroid Build Coastguard WorkerTracing on-CPU time... Hit Ctrl-C to end.
37*387f9dfdSAndroid Build Coastguard Worker^C
38*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
39*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 51       |*                                       |
40*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 395      |***********                             |
41*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 259      |*******                                 |
42*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 61       |*                                       |
43*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 75       |**                                      |
44*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 31       |                                        |
45*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 7        |                                        |
46*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 5        |                                        |
47*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 3        |                                        |
48*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 5        |                                        |
49*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 6        |                                        |
50*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 4        |                                        |
51*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 1361     |****************************************|
52*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 523      |***************                         |
53*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 3        |                                        |
54*387f9dfdSAndroid Build Coastguard Worker
55*387f9dfdSAndroid Build Coastguard WorkerA bimodal distribution is now clearly visible. Most of the time, tasks were
56*387f9dfdSAndroid Build Coastguard Workerable to run for 4-16ms before being descheduled (this is likely the quantum
57*387f9dfdSAndroid Build Coastguard Workerlength). Occasionally, tasks had to be descheduled a lot earlier -- possibly
58*387f9dfdSAndroid Build Coastguard Workerbecause they competed for a shared lock.
59*387f9dfdSAndroid Build Coastguard Worker
60*387f9dfdSAndroid Build Coastguard WorkerIf necessary, you can restrict the output to include only threads from a
61*387f9dfdSAndroid Build Coastguard Workerparticular process -- this helps reduce noise:
62*387f9dfdSAndroid Build Coastguard Worker
63*387f9dfdSAndroid Build Coastguard Worker# ./cpudist.py -p $(pidof parprimes)
64*387f9dfdSAndroid Build Coastguard WorkerTracing on-CPU time... Hit Ctrl-C to end.
65*387f9dfdSAndroid Build Coastguard Worker^C
66*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
67*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 3        |                                        |
68*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 17       |                                        |
69*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 39       |                                        |
70*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 52       |*                                       |
71*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 43       |                                        |
72*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 12       |                                        |
73*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 13       |                                        |
74*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
75*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 1        |                                        |
76*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 11       |                                        |
77*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 15       |                                        |
78*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 41       |                                        |
79*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 1134     |************************                |
80*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 1883     |****************************************|
81*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 65       |*                                       |
82*387f9dfdSAndroid Build Coastguard Worker
83*387f9dfdSAndroid Build Coastguard WorkerYou can also ask for output at predefined intervals, and include timestamps for
84*387f9dfdSAndroid Build Coastguard Workereasier interpretation. While we're at it, the -P switch will print a histogram
85*387f9dfdSAndroid Build Coastguard Workerseparately for each process:
86*387f9dfdSAndroid Build Coastguard Worker
87*387f9dfdSAndroid Build Coastguard Worker# ./cpudist.py -TP 5 3
88*387f9dfdSAndroid Build Coastguard WorkerTracing on-CPU time... Hit Ctrl-C to end.
89*387f9dfdSAndroid Build Coastguard Worker
90*387f9dfdSAndroid Build Coastguard Worker03:46:51
91*387f9dfdSAndroid Build Coastguard Worker
92*387f9dfdSAndroid Build Coastguard Workerpid = 0
93*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
94*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
95*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1        |**                                      |
96*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 17       |**********************************      |
97*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 11       |**********************                  |
98*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 20       |****************************************|
99*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 15       |******************************          |
100*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 9        |******************                      |
101*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 6        |************                            |
102*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
103*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 0        |                                        |
104*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 0        |                                        |
105*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 1        |**                                      |
106*387f9dfdSAndroid Build Coastguard Worker
107*387f9dfdSAndroid Build Coastguard Workerpid = 5068
108*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
109*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
110*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1        |*************                           |
111*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 3        |****************************************|
112*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
113*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
114*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 1        |*************                           |
115*387f9dfdSAndroid Build Coastguard Worker
116*387f9dfdSAndroid Build Coastguard Worker03:46:56
117*387f9dfdSAndroid Build Coastguard Worker
118*387f9dfdSAndroid Build Coastguard Workerpid = 0
119*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
120*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
121*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1        |**                                      |
122*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 19       |****************************************|
123*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 11       |***********************                 |
124*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 9        |******************                      |
125*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 3        |******                                  |
126*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 1        |**                                      |
127*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 3        |******                                  |
128*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
129*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 1        |**                                      |
130*387f9dfdSAndroid Build Coastguard Worker
131*387f9dfdSAndroid Build Coastguard Workerpid = 5068
132*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
133*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 1        |********************                    |
134*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
135*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 2        |****************************************|
136*387f9dfdSAndroid Build Coastguard Worker
137*387f9dfdSAndroid Build Coastguard Worker03:47:01
138*387f9dfdSAndroid Build Coastguard Worker
139*387f9dfdSAndroid Build Coastguard Workerpid = 0
140*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
141*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
142*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
143*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 12       |********************************        |
144*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 15       |****************************************|
145*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 15       |****************************************|
146*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
147*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 3        |********                                |
148*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 1        |**                                      |
149*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
150*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 1        |**                                      |
151*387f9dfdSAndroid Build Coastguard Worker
152*387f9dfdSAndroid Build Coastguard Workerpid = 5068
153*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
154*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
155*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1        |******                                  |
156*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 6        |****************************************|
157*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
158*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
159*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 2        |*************                           |
160*387f9dfdSAndroid Build Coastguard Worker
161*387f9dfdSAndroid Build Coastguard WorkerThis histogram was obtained while executing `dd if=/dev/zero of=/dev/null` with
162*387f9dfdSAndroid Build Coastguard Workerfairly large block sizes.
163*387f9dfdSAndroid Build Coastguard Worker
164*387f9dfdSAndroid Build Coastguard WorkerYou could also ask for an off-CPU report using the -O switch. Here's a
165*387f9dfdSAndroid Build Coastguard Workerhistogram of task block times while the system is heavily loaded:
166*387f9dfdSAndroid Build Coastguard Worker
167*387f9dfdSAndroid Build Coastguard Worker# ./cpudist -O -p $(parprimes)
168*387f9dfdSAndroid Build Coastguard WorkerTracing off-CPU time... Hit Ctrl-C to end.
169*387f9dfdSAndroid Build Coastguard Worker^C
170*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
171*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
172*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1        |                                        |
173*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
174*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
175*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
176*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 3        |                                        |
177*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 1        |                                        |
178*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 1        |                                        |
179*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
180*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 2        |                                        |
181*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 4        |                                        |
182*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 3        |                                        |
183*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 70       |***                                     |
184*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 867      |****************************************|
185*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 141      |******                                  |
186*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 8        |                                        |
187*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 0        |                                        |
188*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 1        |                                        |
189*387f9dfdSAndroid Build Coastguard Worker    262144 -> 524287     : 2        |                                        |
190*387f9dfdSAndroid Build Coastguard Worker    524288 -> 1048575    : 3        |                                        |
191*387f9dfdSAndroid Build Coastguard Worker
192*387f9dfdSAndroid Build Coastguard WorkerAs you can see, threads are switching out for relatively long intervals, even
193*387f9dfdSAndroid Build Coastguard Workerthough we know the workload doesn't have any significant blocking. This can be
194*387f9dfdSAndroid Build Coastguard Workera result of over-subscription -- too many threads contending over too few CPUs.
195*387f9dfdSAndroid Build Coastguard WorkerIndeed, there are four available CPUs and more than four runnable threads:
196*387f9dfdSAndroid Build Coastguard Worker
197*387f9dfdSAndroid Build Coastguard Worker# nproc
198*387f9dfdSAndroid Build Coastguard Worker4
199*387f9dfdSAndroid Build Coastguard Worker# cat /proc/loadavg
200*387f9dfdSAndroid Build Coastguard Worker0.04 0.11 0.06 9/147 7494
201*387f9dfdSAndroid Build Coastguard Worker
202*387f9dfdSAndroid Build Coastguard Worker(This shows we have 9 threads runnable out of 147 total. This is more than 4,
203*387f9dfdSAndroid Build Coastguard Workerthe number of available CPUs.)
204*387f9dfdSAndroid Build Coastguard Worker
205*387f9dfdSAndroid Build Coastguard WorkerFinally, let's ask for a per-thread report and values in milliseconds instead
206*387f9dfdSAndroid Build Coastguard Workerof microseconds:
207*387f9dfdSAndroid Build Coastguard Worker
208*387f9dfdSAndroid Build Coastguard Worker# ./cpudist.py -p $(pidof parprimes) -mL
209*387f9dfdSAndroid Build Coastguard WorkerTracing on-CPU time... Hit Ctrl-C to end.
210*387f9dfdSAndroid Build Coastguard Worker
211*387f9dfdSAndroid Build Coastguard Worker
212*387f9dfdSAndroid Build Coastguard Workertid = 5092
213*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
214*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 3        |                                        |
215*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 4        |                                        |
216*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 4        |                                        |
217*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 535      |****************************************|
218*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 14       |*                                       |
219*387f9dfdSAndroid Build Coastguard Worker
220*387f9dfdSAndroid Build Coastguard Workertid = 5093
221*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
222*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 8        |                                        |
223*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 6        |                                        |
224*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 4        |                                        |
225*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 534      |****************************************|
226*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 12       |                                        |
227*387f9dfdSAndroid Build Coastguard Worker
228*387f9dfdSAndroid Build Coastguard Workertid = 5094
229*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
230*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 38       |***                                     |
231*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 5        |                                        |
232*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 5        |                                        |
233*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 476      |****************************************|
234*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 25       |**                                      |
235*387f9dfdSAndroid Build Coastguard Worker
236*387f9dfdSAndroid Build Coastguard Workertid = 5095
237*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
238*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 31       |**                                      |
239*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 6        |                                        |
240*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 10       |                                        |
241*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 478      |****************************************|
242*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 20       |*                                       |
243*387f9dfdSAndroid Build Coastguard Worker
244*387f9dfdSAndroid Build Coastguard Workertid = 5096
245*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
246*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 21       |*                                       |
247*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 5        |                                        |
248*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 4        |                                        |
249*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 523      |****************************************|
250*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 16       |*                                       |
251*387f9dfdSAndroid Build Coastguard Worker
252*387f9dfdSAndroid Build Coastguard Workertid = 5097
253*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
254*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 11       |                                        |
255*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 7        |                                        |
256*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 7        |                                        |
257*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 502      |****************************************|
258*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 23       |*                                       |
259*387f9dfdSAndroid Build Coastguard Worker
260*387f9dfdSAndroid Build Coastguard Workertid = 5098
261*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
262*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 21       |*                                       |
263*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 5        |                                        |
264*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 3        |                                        |
265*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 494      |****************************************|
266*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 28       |**                                      |
267*387f9dfdSAndroid Build Coastguard Worker
268*387f9dfdSAndroid Build Coastguard Workertid = 5099
269*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
270*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 15       |*                                       |
271*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 4        |                                        |
272*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 6        |                                        |
273*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 521      |****************************************|
274*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 12       |                                        |
275*387f9dfdSAndroid Build Coastguard Worker
276*387f9dfdSAndroid Build Coastguard WorkerIt looks like all threads are more-or-less equally busy, and are typically
277*387f9dfdSAndroid Build Coastguard Workerswitched out after running for 8-15 milliseconds (again, this is the typical
278*387f9dfdSAndroid Build Coastguard Workerquantum length).
279*387f9dfdSAndroid Build Coastguard Worker
280*387f9dfdSAndroid Build Coastguard Worker
281*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
282*387f9dfdSAndroid Build Coastguard Worker
283*387f9dfdSAndroid Build Coastguard Worker# ./cpudist.py -h
284*387f9dfdSAndroid Build Coastguard Worker
285*387f9dfdSAndroid Build Coastguard Workerusage: cpudist.py [-h] [-O] [-T] [-m] [-P] [-L] [-p PID] [-I] [-e]
286*387f9dfdSAndroid Build Coastguard Worker                  [interval] [count]
287*387f9dfdSAndroid Build Coastguard Worker
288*387f9dfdSAndroid Build Coastguard WorkerSummarize on- and off-CPU time per task as a histogram.
289*387f9dfdSAndroid Build Coastguard Worker
290*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
291*387f9dfdSAndroid Build Coastguard Worker  interval            output interval, in seconds
292*387f9dfdSAndroid Build Coastguard Worker  count               number of outputs
293*387f9dfdSAndroid Build Coastguard Worker
294*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
295*387f9dfdSAndroid Build Coastguard Worker  -h, --help          show this help message and exit
296*387f9dfdSAndroid Build Coastguard Worker  -O, --offcpu        measure off-CPU time
297*387f9dfdSAndroid Build Coastguard Worker  -T, --timestamp     include timestamp on output
298*387f9dfdSAndroid Build Coastguard Worker  -m, --milliseconds  millisecond histogram
299*387f9dfdSAndroid Build Coastguard Worker  -P, --pids          print a histogram per process ID
300*387f9dfdSAndroid Build Coastguard Worker  -L, --tids          print a histogram per thread ID
301*387f9dfdSAndroid Build Coastguard Worker  -p PID, --pid PID   trace this PID only
302*387f9dfdSAndroid Build Coastguard Worker  -I, --include-idle  include CPU idle time
303*387f9dfdSAndroid Build Coastguard Worker  -e, --extension     show extension summary (average/total/count)
304*387f9dfdSAndroid Build Coastguard Worker
305*387f9dfdSAndroid Build Coastguard Workerexamples:
306*387f9dfdSAndroid Build Coastguard Worker    cpudist              # summarize on-CPU time as a histogram
307*387f9dfdSAndroid Build Coastguard Worker    cpudist -O           # summarize off-CPU time as a histogram
308*387f9dfdSAndroid Build Coastguard Worker    cpudist 1 10         # print 1 second summaries, 10 times
309*387f9dfdSAndroid Build Coastguard Worker    cpudist -mT 1        # 1s summaries, milliseconds, and timestamps
310*387f9dfdSAndroid Build Coastguard Worker    cpudist -P           # show each PID separately
311*387f9dfdSAndroid Build Coastguard Worker    cpudist -p 185       # trace PID 185 only
312*387f9dfdSAndroid Build Coastguard Worker    cpudist -I           # include CPU idle time
313*387f9dfdSAndroid Build Coastguard Worker    cpudist -e           # show extension summary (average/total/count)
314*387f9dfdSAndroid Build Coastguard Worker
315