xref: /aosp_15_r20/external/bcc/tools/cpuunclaimed_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of cpuunclaimed, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard WorkerThis tool samples the length of the CPU run queues and determine when there are
5*387f9dfdSAndroid Build Coastguard Workeridle CPUs, yet queued threads waiting their turn. It reports the amount of idle
6*387f9dfdSAndroid Build Coastguard Worker(yet unclaimed by waiting threads) CPU as a system-wide percentage. For
7*387f9dfdSAndroid Build Coastguard Workerexample:
8*387f9dfdSAndroid Build Coastguard Worker
9*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py
10*387f9dfdSAndroid Build Coastguard WorkerSampling run queues... Output every 1 seconds. Hit Ctrl-C to end.
11*387f9dfdSAndroid Build Coastguard Worker%CPU  83.00%, unclaimed idle 0.12%
12*387f9dfdSAndroid Build Coastguard Worker%CPU  87.25%, unclaimed idle 0.38%
13*387f9dfdSAndroid Build Coastguard Worker%CPU  85.00%, unclaimed idle 0.25%
14*387f9dfdSAndroid Build Coastguard Worker%CPU  85.00%, unclaimed idle 0.25%
15*387f9dfdSAndroid Build Coastguard Worker%CPU  80.88%, unclaimed idle 0.00%
16*387f9dfdSAndroid Build Coastguard Worker%CPU  82.25%, unclaimed idle 0.00%
17*387f9dfdSAndroid Build Coastguard Worker%CPU  83.50%, unclaimed idle 0.12%
18*387f9dfdSAndroid Build Coastguard Worker%CPU  81.50%, unclaimed idle 0.00%
19*387f9dfdSAndroid Build Coastguard Worker%CPU  81.38%, unclaimed idle 0.00%
20*387f9dfdSAndroid Build Coastguard Worker[...]
21*387f9dfdSAndroid Build Coastguard Worker
22*387f9dfdSAndroid Build Coastguard WorkerThis shows a system running at over 80% CPU utilization, and with less than
23*387f9dfdSAndroid Build Coastguard Worker0.5% unclaimed idle CPUs.
24*387f9dfdSAndroid Build Coastguard Worker
25*387f9dfdSAndroid Build Coastguard WorkerUnclaimed idle CPUs can happen for a number of reasons:
26*387f9dfdSAndroid Build Coastguard Worker
27*387f9dfdSAndroid Build Coastguard Worker- An application has been bound to some, but not all, CPUs, and has runnable
28*387f9dfdSAndroid Build Coastguard Worker  threads that cannot migrate to other CPUs due to this configuration.
29*387f9dfdSAndroid Build Coastguard Worker- CPU affinity: an optimization that leaves threads on CPUs where the CPU
30*387f9dfdSAndroid Build Coastguard Worker  caches are warm, even if this means short periods of waiting while other
31*387f9dfdSAndroid Build Coastguard Worker  CPUs are idle. The wait period is tunale (see sysctl, kernel.sched*).
32*387f9dfdSAndroid Build Coastguard Worker- Scheduler bugs.
33*387f9dfdSAndroid Build Coastguard Worker
34*387f9dfdSAndroid Build Coastguard WorkerAn unclaimed idle of < 1% is likely to be CPU affinity, and not usually a
35*387f9dfdSAndroid Build Coastguard Workercause for concern. By leaving the CPU idle, overall throughput of the system
36*387f9dfdSAndroid Build Coastguard Workermay be improved. This tool is best for identifying larger issues, > 2%, due
37*387f9dfdSAndroid Build Coastguard Workerto the coarseness of its 99 Hertz samples.
38*387f9dfdSAndroid Build Coastguard Worker
39*387f9dfdSAndroid Build Coastguard Worker
40*387f9dfdSAndroid Build Coastguard WorkerThis is an 8 CPU system, with an 8 CPU-bound threaded application running that
41*387f9dfdSAndroid Build Coastguard Workerhas been bound to one CPU (via taskset):
42*387f9dfdSAndroid Build Coastguard Worker
43*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py
44*387f9dfdSAndroid Build Coastguard WorkerSampling run queues... Output every 1 seconds. Hit Ctrl-C to end.
45*387f9dfdSAndroid Build Coastguard Worker%CPU  12.63%, unclaimed idle 86.36%
46*387f9dfdSAndroid Build Coastguard Worker%CPU  12.50%, unclaimed idle 87.50%
47*387f9dfdSAndroid Build Coastguard Worker%CPU  12.63%, unclaimed idle 87.37%
48*387f9dfdSAndroid Build Coastguard Worker%CPU  12.75%, unclaimed idle 87.25%
49*387f9dfdSAndroid Build Coastguard Worker%CPU  12.50%, unclaimed idle 87.50%
50*387f9dfdSAndroid Build Coastguard Worker%CPU  12.63%, unclaimed idle 87.37%
51*387f9dfdSAndroid Build Coastguard Worker%CPU  12.50%, unclaimed idle 87.50%
52*387f9dfdSAndroid Build Coastguard Worker%CPU  12.50%, unclaimed idle 87.50%
53*387f9dfdSAndroid Build Coastguard Worker[...]
54*387f9dfdSAndroid Build Coastguard Worker
55*387f9dfdSAndroid Build Coastguard WorkerIt shows that 7 of the 8 CPUs (87.5%) are idle at the same time there are
56*387f9dfdSAndroid Build Coastguard Workerqueued threads waiting to run on CPU. This is an artificial situation caused
57*387f9dfdSAndroid Build Coastguard Workerby binding threads to the same CPU, to demonstrate how the tool works.
58*387f9dfdSAndroid Build Coastguard Worker
59*387f9dfdSAndroid Build Coastguard Worker
60*387f9dfdSAndroid Build Coastguard WorkerThis is an 8 CPU system running a Linux kernel build with "make -j8", and -T
61*387f9dfdSAndroid Build Coastguard Workerto print timestamps:
62*387f9dfdSAndroid Build Coastguard Worker
63*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py -T
64*387f9dfdSAndroid Build Coastguard WorkerSampling run queues... Output every 1 seconds. Hit Ctrl-C to end.
65*387f9dfdSAndroid Build Coastguard Worker22:25:55 %CPU  98.88%, unclaimed idle 0.12%
66*387f9dfdSAndroid Build Coastguard Worker22:25:56 %CPU  99.75%, unclaimed idle 0.25%
67*387f9dfdSAndroid Build Coastguard Worker22:25:57 %CPU  99.50%, unclaimed idle 0.50%
68*387f9dfdSAndroid Build Coastguard Worker22:25:58 %CPU  99.25%, unclaimed idle 0.75%
69*387f9dfdSAndroid Build Coastguard Worker22:25:59 %CPU  99.75%, unclaimed idle 0.25%
70*387f9dfdSAndroid Build Coastguard Worker22:26:00 %CPU  99.50%, unclaimed idle 0.50%
71*387f9dfdSAndroid Build Coastguard Worker22:26:01 %CPU  99.25%, unclaimed idle 0.75%
72*387f9dfdSAndroid Build Coastguard Worker22:26:02 %CPU  99.25%, unclaimed idle 0.75%
73*387f9dfdSAndroid Build Coastguard Worker22:26:03 %CPU  99.01%, unclaimed idle 0.87%
74*387f9dfdSAndroid Build Coastguard Worker22:26:04 %CPU  99.88%, unclaimed idle 0.12%
75*387f9dfdSAndroid Build Coastguard Worker22:26:05 %CPU  99.38%, unclaimed idle 0.62%
76*387f9dfdSAndroid Build Coastguard Worker
77*387f9dfdSAndroid Build Coastguard WorkerThere's now a consistent, yet small, amount of unclaimed idle CPU. This is
78*387f9dfdSAndroid Build Coastguard Workerexpected to be deliberate: CPU affinity, as mentioned earlier.
79*387f9dfdSAndroid Build Coastguard Worker
80*387f9dfdSAndroid Build Coastguard Worker
81*387f9dfdSAndroid Build Coastguard WorkerThe -j option will print raw samples: around one hundred lines of output
82*387f9dfdSAndroid Build Coastguard Workerevery second. For the same system with a Linux kernel build of "make -j8":
83*387f9dfdSAndroid Build Coastguard Worker
84*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py -j
85*387f9dfdSAndroid Build Coastguard WorkerTIMESTAMP_ns,CPU0,CPU1,CPU2,CPU3,CPU4,CPU5,CPU6,CPU7
86*387f9dfdSAndroid Build Coastguard Worker514606928954752,1,1,1,1,1,1,1,1
87*387f9dfdSAndroid Build Coastguard Worker514606939054312,1,1,1,1,1,1,1,2
88*387f9dfdSAndroid Build Coastguard Worker514606949156518,1,1,1,1,1,1,1,1
89*387f9dfdSAndroid Build Coastguard Worker514606959256596,2,2,1,1,1,1,1,1
90*387f9dfdSAndroid Build Coastguard Worker514606969357989,1,1,1,1,1,2,1,1
91*387f9dfdSAndroid Build Coastguard Worker514606979459700,1,2,1,1,1,2,1,1
92*387f9dfdSAndroid Build Coastguard Worker514606989560481,1,1,1,1,1,1,1,1
93*387f9dfdSAndroid Build Coastguard Worker514606999661396,1,1,1,1,1,1,2,1
94*387f9dfdSAndroid Build Coastguard Worker514607009795601,1,1,1,1,1,1,1,2
95*387f9dfdSAndroid Build Coastguard Worker514607019862711,1,1,1,1,1,1,1,1
96*387f9dfdSAndroid Build Coastguard Worker514607029963734,1,1,1,1,1,1,1,1
97*387f9dfdSAndroid Build Coastguard Worker514607040062372,1,1,1,1,1,1,1,1
98*387f9dfdSAndroid Build Coastguard Worker514607050197735,1,1,1,2,1,1,1,1
99*387f9dfdSAndroid Build Coastguard Worker514607060266464,1,1,1,1,1,1,1,2
100*387f9dfdSAndroid Build Coastguard Worker514607070368025,1,1,1,1,1,2,1,1
101*387f9dfdSAndroid Build Coastguard Worker514607080468375,1,1,1,1,1,1,1,2
102*387f9dfdSAndroid Build Coastguard Worker514607090570292,3,2,1,1,1,1,1,1
103*387f9dfdSAndroid Build Coastguard Worker514607100670725,1,1,1,1,1,2,1,1
104*387f9dfdSAndroid Build Coastguard Worker514607110771946,1,2,1,1,1,1,1,1
105*387f9dfdSAndroid Build Coastguard Worker514607120873489,1,1,1,1,2,1,2,1
106*387f9dfdSAndroid Build Coastguard Worker514607130973857,2,1,1,1,3,1,1,1
107*387f9dfdSAndroid Build Coastguard Worker514607141080056,0,1,1,1,1,2,1,3
108*387f9dfdSAndroid Build Coastguard Worker514607151176312,1,1,1,2,1,1,1,1
109*387f9dfdSAndroid Build Coastguard Worker514607161277753,1,1,1,1,1,1,2,1
110*387f9dfdSAndroid Build Coastguard Worker514607171379095,1,1,1,1,1,1,1,1
111*387f9dfdSAndroid Build Coastguard Worker514607181479262,1,1,1,1,1,1,1,1
112*387f9dfdSAndroid Build Coastguard Worker514607191580794,3,1,1,1,1,1,1,1
113*387f9dfdSAndroid Build Coastguard Worker514607201680952,1,1,1,1,1,1,2,1
114*387f9dfdSAndroid Build Coastguard Worker514607211783683,1,1,1,1,1,1,1,1
115*387f9dfdSAndroid Build Coastguard Worker514607221883274,1,1,1,1,1,1,0,1
116*387f9dfdSAndroid Build Coastguard Worker514607231984244,1,1,1,1,1,1,1,1
117*387f9dfdSAndroid Build Coastguard Worker514607242085698,1,1,1,1,1,1,1,1
118*387f9dfdSAndroid Build Coastguard Worker514607252216898,1,2,1,1,1,1,1,1
119*387f9dfdSAndroid Build Coastguard Worker514607262289420,1,1,1,1,1,2,1,1
120*387f9dfdSAndroid Build Coastguard Worker514607272389922,1,1,1,1,1,1,1,1
121*387f9dfdSAndroid Build Coastguard Worker514607282489413,1,1,1,1,1,1,1,1
122*387f9dfdSAndroid Build Coastguard Worker514607292589950,1,3,1,1,1,1,1,1
123*387f9dfdSAndroid Build Coastguard Worker514607302693367,1,1,1,1,2,1,1,1
124*387f9dfdSAndroid Build Coastguard Worker514607312793792,1,1,1,1,1,1,1,1
125*387f9dfdSAndroid Build Coastguard Worker514607322895249,1,1,1,3,1,1,3,1
126*387f9dfdSAndroid Build Coastguard Worker514607332994278,1,0,1,1,1,2,1,2
127*387f9dfdSAndroid Build Coastguard Worker514607343095836,1,1,1,1,1,2,1,1
128*387f9dfdSAndroid Build Coastguard Worker514607353196533,1,1,1,1,2,1,1,1
129*387f9dfdSAndroid Build Coastguard Worker514607363297749,1,1,1,1,1,1,1,2
130*387f9dfdSAndroid Build Coastguard Worker514607373399011,1,1,1,1,1,1,1,2
131*387f9dfdSAndroid Build Coastguard Worker514607383499730,1,1,1,1,1,1,1,2
132*387f9dfdSAndroid Build Coastguard Worker514607393601510,1,1,1,1,1,1,1,2
133*387f9dfdSAndroid Build Coastguard Worker514607403704117,2,1,1,1,1,1,1,2
134*387f9dfdSAndroid Build Coastguard Worker514607413802700,1,1,1,1,2,1,0,1
135*387f9dfdSAndroid Build Coastguard Worker514607423904559,1,1,1,1,1,1,1,1
136*387f9dfdSAndroid Build Coastguard Worker[...]
137*387f9dfdSAndroid Build Coastguard Worker
138*387f9dfdSAndroid Build Coastguard WorkerThe output is verbose: printing out a timestamp, and then the length of each
139*387f9dfdSAndroid Build Coastguard WorkerCPU's run queue. The second last line, of timestamp 514607413802700, is an
140*387f9dfdSAndroid Build Coastguard Workerexample of what this tool detects: CPU 4 has a run queue length of 4, which
141*387f9dfdSAndroid Build Coastguard Workermeans one thread running and one thread queued, while CPU 6 has a run queue
142*387f9dfdSAndroid Build Coastguard Workerlength of 0: idle. The very next sample shows all CPUs busy.
143*387f9dfdSAndroid Build Coastguard Worker
144*387f9dfdSAndroid Build Coastguard Worker
145*387f9dfdSAndroid Build Coastguard WorkerThe -J option prints raw samples with time offsets showing when the samples
146*387f9dfdSAndroid Build Coastguard Workerwere collected on each CPU. It's mostly useful for debugging the tool itself.
147*387f9dfdSAndroid Build Coastguard WorkerFor example, during a Linux kernel build:
148*387f9dfdSAndroid Build Coastguard Worker
149*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py -J
150*387f9dfdSAndroid Build Coastguard WorkerTIMESTAMP_ns,CPU0,CPU1,CPU2,CPU3,CPU4,CPU5,CPU6,CPU7,OFFSET_ns_CPU0,OFFSET_ns_CPU1,OFFSET_ns_CPU2,OFFSET_ns_CPU3,OFFSET_ns_CPU4,OFFSET_ns_CPU5,OFFSET_ns_CPU6,OFFSET_ns_CPU7
151*387f9dfdSAndroid Build Coastguard Worker514722625198188,1,1,1,1,1,1,1,2,0,28321,51655,73396,89654,111172,132803,159792
152*387f9dfdSAndroid Build Coastguard Worker514722635299034,1,1,1,1,1,2,1,1,0,28809,51999,74183,89552,110011,131995,153519
153*387f9dfdSAndroid Build Coastguard Worker514722645400274,1,1,1,1,1,1,1,2,0,28024,51333,73652,88964,110075,131973,153568
154*387f9dfdSAndroid Build Coastguard Worker514722655501816,1,2,1,1,1,1,1,1,0,28893,51671,75233,89496,109430,131945,153694
155*387f9dfdSAndroid Build Coastguard Worker514722665602594,1,1,2,1,1,2,1,1,0,28623,50988,73866,89383,109186,131786,154555
156*387f9dfdSAndroid Build Coastguard Worker514722675703498,1,1,1,1,1,1,1,1,0,27379,51031,73175,89625,110380,131482,104811
157*387f9dfdSAndroid Build Coastguard Worker514722685804942,1,1,1,1,1,2,1,1,0,27213,50501,72183,88797,108780,130659,152153
158*387f9dfdSAndroid Build Coastguard Worker514722695906294,1,1,1,1,1,1,1,1,0,27036,51182,73420,87861,109585,130364,155089
159*387f9dfdSAndroid Build Coastguard Worker514722706005778,1,1,1,1,1,1,1,1,0,28492,51851,74138,89744,110208,132462,154060
160*387f9dfdSAndroid Build Coastguard Worker514722716060705,1,1,1,1,1,1,1,1,0,154499,152528,155232,155046,154502,178746,200001
161*387f9dfdSAndroid Build Coastguard Worker514722726209615,1,1,1,1,1,1,1,1,0,28170,49580,72605,87741,108144,130723,152138
162*387f9dfdSAndroid Build Coastguard Worker514722736309475,1,2,1,1,1,1,1,1,0,27421,51386,73061,89358,109457,131273,153005
163*387f9dfdSAndroid Build Coastguard Worker514722746410845,1,2,1,1,1,2,1,1,0,27788,50840,72720,88920,109111,131143,152979
164*387f9dfdSAndroid Build Coastguard Worker514722756511363,1,1,1,1,1,1,2,1,0,28280,50977,73559,89848,109659,131579,152693
165*387f9dfdSAndroid Build Coastguard Worker514722766613044,1,1,1,1,1,1,1,1,0,28046,50812,72754,89160,110108,130735,152948
166*387f9dfdSAndroid Build Coastguard Worker514722776712932,1,1,1,2,1,1,1,1,0,28586,51177,73974,89588,109947,132376,154162
167*387f9dfdSAndroid Build Coastguard Worker514722786815477,1,1,1,1,1,1,1,1,0,27973,71104,72539,88302,108896,130414,152236
168*387f9dfdSAndroid Build Coastguard Worker514722796914955,1,1,1,1,1,1,1,1,0,29054,52354,74214,89592,110615,132586,153925
169*387f9dfdSAndroid Build Coastguard Worker514722807044060,1,1,1,1,1,1,1,1,1587130,0,24079,46633,61787,82325,104706,125278
170*387f9dfdSAndroid Build Coastguard Worker514722817117432,2,1,2,1,1,1,1,1,0,27628,51038,75138,89724,109340,132426,155348
171*387f9dfdSAndroid Build Coastguard Worker514722827218254,1,1,1,1,1,1,2,1,0,29111,51868,74347,88904,109911,132764,153851
172*387f9dfdSAndroid Build Coastguard Worker514722837340158,1,1,1,1,1,1,1,1,0,7366,30760,53528,68622,89317,111095,132319
173*387f9dfdSAndroid Build Coastguard Worker514722847421305,1,1,1,1,1,1,1,1,0,28257,51105,73841,89037,110820,131605,153368
174*387f9dfdSAndroid Build Coastguard Worker514722857521112,1,1,1,1,1,1,1,1,0,28544,51441,73857,89530,110497,131915,153513
175*387f9dfdSAndroid Build Coastguard Worker514722867626129,0,2,1,1,1,1,1,1,0,24621,47917,70568,85391,106670,128081,150329
176*387f9dfdSAndroid Build Coastguard Worker514722877727183,2,1,1,1,1,1,1,1,0,24869,47630,71547,84761,106048,128444,149285
177*387f9dfdSAndroid Build Coastguard Worker514722887824589,1,1,1,1,1,1,2,1,0,28793,51212,73863,89584,109773,132348,153194
178*387f9dfdSAndroid Build Coastguard Worker514722897925481,1,1,1,1,1,1,2,1,0,29278,51163,73961,89774,109592,132029,153715
179*387f9dfdSAndroid Build Coastguard Worker514722908026097,1,1,1,1,1,1,1,1,0,30630,35595,36210,188001,190815,190072,190732
180*387f9dfdSAndroid Build Coastguard Worker514722918127439,1,1,1,1,1,1,1,1,0,28544,51885,73948,89987,109763,132632,154083
181*387f9dfdSAndroid Build Coastguard Worker514722928227399,1,1,1,1,1,1,1,1,0,31882,51574,74769,89939,110578,132951,154356
182*387f9dfdSAndroid Build Coastguard Worker514722938329471,1,1,1,1,1,1,1,1,0,28498,51304,74101,89670,110278,132653,153176
183*387f9dfdSAndroid Build Coastguard Worker514722948430589,1,1,1,1,1,1,1,1,0,27868,50925,73477,89676,109583,132360,153014
184*387f9dfdSAndroid Build Coastguard Worker514722958531802,1,1,1,1,1,1,1,1,0,28505,50886,73729,89919,109618,131988,152896
185*387f9dfdSAndroid Build Coastguard Worker514722968632181,1,1,1,1,1,1,1,1,0,28492,51749,73977,90334,109816,132897,152890
186*387f9dfdSAndroid Build Coastguard Worker514722978733584,1,1,1,1,1,1,1,1,0,28847,50957,74121,90014,110019,132377,152978
187*387f9dfdSAndroid Build Coastguard Worker514722988834321,1,1,1,1,1,1,1,1,0,28601,51437,74021,89968,110252,132233,153623
188*387f9dfdSAndroid Build Coastguard Worker514722998937170,1,1,2,1,1,1,1,1,0,27007,50044,73259,87725,108663,132194,152459
189*387f9dfdSAndroid Build Coastguard Worker514723009036821,1,2,1,2,1,1,1,1,0,28226,50937,73983,89110,110476,131740,153663
190*387f9dfdSAndroid Build Coastguard Worker514723019137577,1,1,1,1,1,1,1,1,0,30261,52357,75657,87803,61823,131850,153585
191*387f9dfdSAndroid Build Coastguard Worker514723029238745,1,1,1,1,1,1,1,1,0,28030,50752,74452,89240,110791,132187,153327
192*387f9dfdSAndroid Build Coastguard Worker514723039339069,1,1,1,1,1,1,1,1,0,29791,52636,75996,90475,110414,132232,154714
193*387f9dfdSAndroid Build Coastguard Worker514723049439822,1,1,1,1,2,1,1,1,0,29133,56662,74153,89520,110683,132740,154708
194*387f9dfdSAndroid Build Coastguard Worker514723059541617,1,1,1,1,1,1,1,1,0,27932,51480,74644,89656,109176,131499,153732
195*387f9dfdSAndroid Build Coastguard Worker514723069642500,1,1,2,1,1,1,2,1,0,27678,51509,73984,90136,110124,131554,153459
196*387f9dfdSAndroid Build Coastguard Worker514723079743525,2,1,1,1,1,1,1,1,0,28029,51424,74394,90056,110087,132383,152963
197*387f9dfdSAndroid Build Coastguard Worker514723089844091,2,1,1,2,1,1,1,1,0,28944,51692,74440,90339,110402,132722,154083
198*387f9dfdSAndroid Build Coastguard Worker514723099945957,1,1,2,1,1,1,1,1,0,28425,51267,73164,89322,115048,114630,115187
199*387f9dfdSAndroid Build Coastguard Worker514723110047020,1,1,2,0,1,1,1,2,0,28192,50811,76814,89835,109370,131265,153511
200*387f9dfdSAndroid Build Coastguard Worker514723120216662,1,1,2,1,1,2,1,1,29,34,0,4514,19268,40293,62674,84009
201*387f9dfdSAndroid Build Coastguard Worker[...]
202*387f9dfdSAndroid Build Coastguard Worker
203*387f9dfdSAndroid Build Coastguard WorkerThis is a Xen guest system, and it shows that CPU 0 usually completes first (an
204*387f9dfdSAndroid Build Coastguard Workeroffset of 0), followed by CPU 1 around 28000 nanoseconds later, and so on.
205*387f9dfdSAndroid Build Coastguard WorkerThe spread of offsets is triggered by the bcc Python library that initializes
206*387f9dfdSAndroid Build Coastguard Workerthe timers, which steps through the CPUs in sequence, with a small delay
207*387f9dfdSAndroid Build Coastguard Workerbetween them merely from executing its own loop code.
208*387f9dfdSAndroid Build Coastguard Worker
209*387f9dfdSAndroid Build Coastguard WorkerHere's more output during a Linux kernel build:
210*387f9dfdSAndroid Build Coastguard Worker
211*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py -J
212*387f9dfdSAndroid Build Coastguard WorkerTIMESTAMP_ns,CPU0,CPU1,CPU2,CPU3,CPU4,CPU5,CPU6,CPU7,OFFSET_ns_CPU0,OFFSET_ns_CPU1,OFFSET_ns_CPU2,OFFSET_ns_CPU3,OFFSET_ns_CPU4,OFFSET_ns_CPU5,OFFSET_ns_CPU6,OFFSET_ns_CPU7
213*387f9dfdSAndroid Build Coastguard Worker514722625198188,1,1,1,1,1,1,1,2,0,28321,51655,73396,89654,111172,132803,159792
214*387f9dfdSAndroid Build Coastguard Worker515700745758947,2,1,1,1,1,1,1,1,0,19835,34891,49397,59364,71988,87571,102769
215*387f9dfdSAndroid Build Coastguard Worker515700755860451,2,1,1,1,1,1,1,2,0,19946,34323,49855,59844,72741,87925,102891
216*387f9dfdSAndroid Build Coastguard Worker515700765960560,1,1,1,1,1,1,1,1,0,20805,35339,50436,59677,73557,88661,104796
217*387f9dfdSAndroid Build Coastguard Worker515700776061744,1,1,1,1,1,1,1,1,1626,77,0,190,153452,154665,178218,154116
218*387f9dfdSAndroid Build Coastguard Worker515700786162017,1,1,1,1,1,1,1,1,0,20497,35361,51552,59787,74451,147789,104545
219*387f9dfdSAndroid Build Coastguard Worker515700796262811,1,1,1,1,1,1,1,2,0,20910,35657,50805,60175,73953,88492,103527
220*387f9dfdSAndroid Build Coastguard Worker515700806364951,1,1,1,1,1,1,1,1,0,20140,35023,50074,59726,72757,88040,102421
221*387f9dfdSAndroid Build Coastguard Worker515700816465253,1,1,1,1,1,1,2,1,0,20952,34899,50262,60048,72890,88067,103545
222*387f9dfdSAndroid Build Coastguard Worker515700826566573,1,1,1,1,1,1,1,1,0,20898,35490,50609,59805,74060,88550,103354
223*387f9dfdSAndroid Build Coastguard Worker515700836667480,1,1,1,1,1,1,2,1,0,20548,34760,50959,59490,73059,87820,103006
224*387f9dfdSAndroid Build Coastguard Worker515700846768182,1,1,1,1,1,1,2,1,0,20571,35113,50777,59962,74139,88543,103192
225*387f9dfdSAndroid Build Coastguard Worker515700856869468,1,1,2,1,1,2,2,1,0,20932,35382,50510,60106,73739,91818,103684
226*387f9dfdSAndroid Build Coastguard Worker515700866971905,1,1,1,2,1,1,1,1,0,19780,33018,49075,58375,71949,86537,102136
227*387f9dfdSAndroid Build Coastguard Worker515700877073459,2,1,1,1,1,1,1,1,0,20065,73966,48989,58832,71408,85714,101067
228*387f9dfdSAndroid Build Coastguard Worker515700887172772,1,1,1,1,1,1,1,1,0,20909,34608,51493,59890,73564,88668,103454
229*387f9dfdSAndroid Build Coastguard Worker515700897273292,1,2,1,1,1,1,1,1,0,20353,35292,50114,59773,73948,88615,103383
230*387f9dfdSAndroid Build Coastguard Worker515700907374341,1,1,2,1,1,1,1,1,0,20816,35206,50915,60062,73878,88857,103794
231*387f9dfdSAndroid Build Coastguard Worker515700917475331,1,1,6,1,1,2,1,1,0,20752,34931,50280,59764,73781,88329,103234
232*387f9dfdSAndroid Build Coastguard Worker515700927576958,1,1,1,1,1,1,1,1,0,19929,34703,50181,59364,73004,88053,103127
233*387f9dfdSAndroid Build Coastguard Worker515700937677298,1,1,2,2,1,1,1,1,0,21178,34724,50740,61193,73452,89030,103390
234*387f9dfdSAndroid Build Coastguard Worker515700947778409,2,1,1,1,1,1,1,1,0,21059,35604,50853,60098,73919,88675,103506
235*387f9dfdSAndroid Build Coastguard Worker515700957879196,2,1,1,1,1,1,1,1,0,21326,35939,51492,60083,74249,89474,103761
236*387f9dfdSAndroid Build Coastguard Worker[...]
237*387f9dfdSAndroid Build Coastguard Worker
238*387f9dfdSAndroid Build Coastguard WorkerNotice the tighter range of offsets? I began executing cpuunclaimed when the
239*387f9dfdSAndroid Build Coastguard Workersystem was idle, and it initialized the CPU timers more quickly, and then I
240*387f9dfdSAndroid Build Coastguard Workerbegan the Linux kernel build.
241*387f9dfdSAndroid Build Coastguard Worker
242*387f9dfdSAndroid Build Coastguard WorkerHere's some different output, this time from a physical system with 4 CPUs,
243*387f9dfdSAndroid Build Coastguard Workeralso doing a kernel build,
244*387f9dfdSAndroid Build Coastguard Worker
245*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py -J
246*387f9dfdSAndroid Build Coastguard WorkerTIMESTAMP_ns,CPU0,CPU1,CPU2,CPU3,OFFSET_ns_CPU0,OFFSET_ns_CPU1,OFFSET_ns_CPU2,OFFSET_ns_CPU3
247*387f9dfdSAndroid Build Coastguard Worker4429382557480,1,1,1,1,0,6011,10895,16018
248*387f9dfdSAndroid Build Coastguard Worker4429392655042,2,1,1,1,0,8217,13661,19378
249*387f9dfdSAndroid Build Coastguard Worker4429402757604,1,1,1,1,0,6879,12433,18000
250*387f9dfdSAndroid Build Coastguard Worker4429412857809,1,1,1,1,0,8303,13190,18719
251*387f9dfdSAndroid Build Coastguard Worker4429422960709,2,1,1,1,0,6095,11234,17079
252*387f9dfdSAndroid Build Coastguard Worker4429433060391,1,1,1,2,0,6747,12480,18070
253*387f9dfdSAndroid Build Coastguard Worker4429443161699,1,1,1,1,0,6560,12264,17945
254*387f9dfdSAndroid Build Coastguard Worker4429453262002,1,2,1,1,0,6992,12644,18341
255*387f9dfdSAndroid Build Coastguard Worker4429463363706,1,2,1,1,0,6211,12071,17853
256*387f9dfdSAndroid Build Coastguard Worker4429473465571,1,1,1,1,0,5766,11495,17638
257*387f9dfdSAndroid Build Coastguard Worker4429483566920,1,1,1,1,0,5223,11736,16358
258*387f9dfdSAndroid Build Coastguard Worker4429493666279,1,1,1,1,0,6964,12653,18410
259*387f9dfdSAndroid Build Coastguard Worker4429503769113,1,1,1,1,0,5161,11399,16612
260*387f9dfdSAndroid Build Coastguard Worker4429513870744,1,1,1,1,0,5943,10583,15768
261*387f9dfdSAndroid Build Coastguard Worker4429523969826,1,1,1,1,0,6533,12336,18189
262*387f9dfdSAndroid Build Coastguard Worker4429534070311,1,1,1,1,0,6834,12816,18488
263*387f9dfdSAndroid Build Coastguard Worker4429544170456,1,1,1,1,0,7284,13401,19129
264*387f9dfdSAndroid Build Coastguard Worker4429554274467,1,2,1,1,0,5941,11160,16594
265*387f9dfdSAndroid Build Coastguard Worker4429564372365,1,2,1,1,0,7514,13618,19190
266*387f9dfdSAndroid Build Coastguard Worker4429574474406,1,2,1,1,0,6687,12650,18248
267*387f9dfdSAndroid Build Coastguard Worker4429584574220,1,2,1,1,0,7912,13705,19136
268*387f9dfdSAndroid Build Coastguard Worker[...]
269*387f9dfdSAndroid Build Coastguard Worker
270*387f9dfdSAndroid Build Coastguard WorkerIf the offset range becomes too great, we can no longer conclude about when
271*387f9dfdSAndroid Build Coastguard Workersome CPUs were idle and others had queued work. The tool will detect this,
272*387f9dfdSAndroid Build Coastguard Workerand print an error message and exit.
273*387f9dfdSAndroid Build Coastguard Worker
274*387f9dfdSAndroid Build Coastguard Worker
275*387f9dfdSAndroid Build Coastguard WorkerSome systems can power down CPUs when idle, and when they wake up again the
276*387f9dfdSAndroid Build Coastguard Workertimed samples may resume from different offsets. If this happens, this tool
277*387f9dfdSAndroid Build Coastguard Workercan no longer draw conclusions about when some CPUs were idle and others
278*387f9dfdSAndroid Build Coastguard Workerhad queued work, so it prints an error, and exits. Eg:
279*387f9dfdSAndroid Build Coastguard Worker
280*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py 1
281*387f9dfdSAndroid Build Coastguard WorkerSampling run queues... Output every 1 seconds. Hit Ctrl-C to end.
282*387f9dfdSAndroid Build Coastguard Worker%CPU   0.25%, unclaimed idle 0.00%
283*387f9dfdSAndroid Build Coastguard Worker%CPU   0.75%, unclaimed idle 0.00%
284*387f9dfdSAndroid Build Coastguard Worker%CPU   0.25%, unclaimed idle 0.00%
285*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
286*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
287*387f9dfdSAndroid Build Coastguard Worker%CPU   0.12%, unclaimed idle 0.00%
288*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
289*387f9dfdSAndroid Build Coastguard Worker%CPU   0.25%, unclaimed idle 0.00%
290*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
291*387f9dfdSAndroid Build Coastguard Worker%CPU   0.12%, unclaimed idle 0.00%
292*387f9dfdSAndroid Build Coastguard Worker%CPU   0.13%, unclaimed idle 0.00%
293*387f9dfdSAndroid Build Coastguard Worker%CPU   0.12%, unclaimed idle 0.00%
294*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
295*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
296*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
297*387f9dfdSAndroid Build Coastguard Worker%CPU   0.00%, unclaimed idle 0.00%
298*387f9dfdSAndroid Build Coastguard WorkerERROR: CPU samples arrived at skewed offsets (CPUs may have powered down when idle), spanning 4328176 ns (expected < 4040404 ns). Debug with -J, and see the man page. As output may begin to be unreliable, exiting.
299*387f9dfdSAndroid Build Coastguard Worker
300*387f9dfdSAndroid Build Coastguard WorkerIt's expected that this will only really occur on idle systems.
301*387f9dfdSAndroid Build Coastguard Worker
302*387f9dfdSAndroid Build Coastguard WorkerUSAGE:
303*387f9dfdSAndroid Build Coastguard Worker
304*387f9dfdSAndroid Build Coastguard Worker# ./cpuunclaimed.py -h
305*387f9dfdSAndroid Build Coastguard Workerusage: cpuunclaimed.py [-h] [-j] [-J] [-T] [interval] [count]
306*387f9dfdSAndroid Build Coastguard Worker
307*387f9dfdSAndroid Build Coastguard WorkerSample CPU run queues and calculate unclaimed idle CPU
308*387f9dfdSAndroid Build Coastguard Worker
309*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
310*387f9dfdSAndroid Build Coastguard Worker  interval         output interval, in seconds
311*387f9dfdSAndroid Build Coastguard Worker  count            number of outputs
312*387f9dfdSAndroid Build Coastguard Worker
313*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
314*387f9dfdSAndroid Build Coastguard Worker  -h, --help       show this help message and exit
315*387f9dfdSAndroid Build Coastguard Worker  -j, --csv        print sample summaries (verbose) as comma-separated values
316*387f9dfdSAndroid Build Coastguard Worker  -J, --fullcsv    print sample summaries with extra fields: CPU sample
317*387f9dfdSAndroid Build Coastguard Worker                   offsets
318*387f9dfdSAndroid Build Coastguard Worker  -T, --timestamp  include timestamp on output
319*387f9dfdSAndroid Build Coastguard Worker
320*387f9dfdSAndroid Build Coastguard Workerexamples:
321*387f9dfdSAndroid Build Coastguard Worker    ./cpuunclaimed            # sample and calculate unclaimed idle CPUs,
322*387f9dfdSAndroid Build Coastguard Worker                              # output every 1 second (default)
323*387f9dfdSAndroid Build Coastguard Worker    ./cpuunclaimed 5 10       # print 5 second summaries, 10 times
324*387f9dfdSAndroid Build Coastguard Worker    ./cpuunclaimed -T 1       # 1s summaries and timestamps
325*387f9dfdSAndroid Build Coastguard Worker    ./cpuunclaimed -j         # raw dump of all samples (verbose), CSV
326