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