Bring the following change from the illumos-joyent repository:
commit 78e24ab6803bbe11ba37642624e1498ede5b239d Author: Bryan Cantrill <bryan@joyent.com> Date: Thu Oct 31 01:20:54 2013 OS-1688 DTrace count() with histogram OS-2360 DTrace full width distribution histograms OS-2361 DTrace frequency trails MFC after: 2 weeks
This commit is contained in:
parent
b6cee71de3
commit
d8e37c5f72
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms of version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Joyent, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#pragma D option quiet
|
||||
#pragma D option encoding=utf8
|
||||
#pragma D option aggzoom
|
||||
|
||||
tick-1ms
|
||||
/i++ < 320/
|
||||
{
|
||||
@ = lquantize(i, 0, 640, 1, i);
|
||||
@ = lquantize(641 - i, 0, 640, 1, i);
|
||||
}
|
||||
|
||||
tick-1ms
|
||||
/i == 320/
|
||||
{
|
||||
printa(@);
|
||||
exit(0);
|
||||
}
|
@ -0,0 +1,646 @@
|
||||
|
||||
|
||||
value ------------- Distribution ------------- count
|
||||
0 | 0
|
||||
1 | 1
|
||||
2 |▏ 2
|
||||
3 |▎ 3
|
||||
4 |▍ 4
|
||||
5 |▌ 5
|
||||
6 |▋ 6
|
||||
7 |▊ 7
|
||||
8 |▉ 8
|
||||
9 |█ 9
|
||||
10 |█▏ 10
|
||||
11 |█▎ 11
|
||||
12 |█▍ 12
|
||||
13 |█▌ 13
|
||||
14 |█▋ 14
|
||||
15 |█▊ 15
|
||||
16 |█▉ 16
|
||||
17 |██ 17
|
||||
18 |██▏ 18
|
||||
19 |██▎ 19
|
||||
20 |██▍ 20
|
||||
21 |██▍ 21
|
||||
22 |██▌ 22
|
||||
23 |██▋ 23
|
||||
24 |██▊ 24
|
||||
25 |██▉ 25
|
||||
26 |███ 26
|
||||
27 |███▏ 27
|
||||
28 |███▎ 28
|
||||
29 |███▍ 29
|
||||
30 |███▌ 30
|
||||
31 |███▋ 31
|
||||
32 |███▊ 32
|
||||
33 |███▉ 33
|
||||
34 |████ 34
|
||||
35 |████▏ 35
|
||||
36 |████▎ 36
|
||||
37 |████▍ 37
|
||||
38 |████▌ 38
|
||||
39 |████▋ 39
|
||||
40 |████▊ 40
|
||||
41 |████▊ 41
|
||||
42 |████▉ 42
|
||||
43 |█████ 43
|
||||
44 |█████▏ 44
|
||||
45 |█████▎ 45
|
||||
46 |█████▍ 46
|
||||
47 |█████▌ 47
|
||||
48 |█████▋ 48
|
||||
49 |█████▊ 49
|
||||
50 |█████▉ 50
|
||||
51 |██████ 51
|
||||
52 |██████▏ 52
|
||||
53 |██████▎ 53
|
||||
54 |██████▍ 54
|
||||
55 |██████▌ 55
|
||||
56 |██████▋ 56
|
||||
57 |██████▊ 57
|
||||
58 |██████▉ 58
|
||||
59 |███████ 59
|
||||
60 |███████▏ 60
|
||||
61 |███████▏ 61
|
||||
62 |███████▎ 62
|
||||
63 |███████▍ 63
|
||||
64 |███████▌ 64
|
||||
65 |███████▋ 65
|
||||
66 |███████▊ 66
|
||||
67 |███████▉ 67
|
||||
68 |████████ 68
|
||||
69 |████████▏ 69
|
||||
70 |████████▎ 70
|
||||
71 |████████▍ 71
|
||||
72 |████████▌ 72
|
||||
73 |████████▋ 73
|
||||
74 |████████▊ 74
|
||||
75 |████████▉ 75
|
||||
76 |█████████ 76
|
||||
77 |█████████▏ 77
|
||||
78 |█████████▎ 78
|
||||
79 |█████████▍ 79
|
||||
80 |█████████▌ 80
|
||||
81 |█████████▌ 81
|
||||
82 |█████████▋ 82
|
||||
83 |█████████▊ 83
|
||||
84 |█████████▉ 84
|
||||
85 |██████████ 85
|
||||
86 |██████████▏ 86
|
||||
87 |██████████▎ 87
|
||||
88 |██████████▍ 88
|
||||
89 |██████████▌ 89
|
||||
90 |██████████▋ 90
|
||||
91 |██████████▊ 91
|
||||
92 |██████████▉ 92
|
||||
93 |███████████ 93
|
||||
94 |███████████▏ 94
|
||||
95 |███████████▎ 95
|
||||
96 |███████████▍ 96
|
||||
97 |███████████▌ 97
|
||||
98 |███████████▋ 98
|
||||
99 |███████████▊ 99
|
||||
100 |███████████▉ 100
|
||||
101 |███████████▉ 101
|
||||
102 |████████████ 102
|
||||
103 |████████████▏ 103
|
||||
104 |████████████▎ 104
|
||||
105 |████████████▍ 105
|
||||
106 |████████████▌ 106
|
||||
107 |████████████▋ 107
|
||||
108 |████████████▊ 108
|
||||
109 |████████████▉ 109
|
||||
110 |█████████████ 110
|
||||
111 |█████████████▏ 111
|
||||
112 |█████████████▎ 112
|
||||
113 |█████████████▍ 113
|
||||
114 |█████████████▌ 114
|
||||
115 |█████████████▋ 115
|
||||
116 |█████████████▊ 116
|
||||
117 |█████████████▉ 117
|
||||
118 |██████████████ 118
|
||||
119 |██████████████▏ 119
|
||||
120 |██████████████▎ 120
|
||||
121 |██████████████▎ 121
|
||||
122 |██████████████▍ 122
|
||||
123 |██████████████▌ 123
|
||||
124 |██████████████▋ 124
|
||||
125 |██████████████▊ 125
|
||||
126 |██████████████▉ 126
|
||||
127 |███████████████ 127
|
||||
128 |███████████████▏ 128
|
||||
129 |███████████████▎ 129
|
||||
130 |███████████████▍ 130
|
||||
131 |███████████████▌ 131
|
||||
132 |███████████████▋ 132
|
||||
133 |███████████████▊ 133
|
||||
134 |███████████████▉ 134
|
||||
135 |████████████████ 135
|
||||
136 |████████████████▏ 136
|
||||
137 |████████████████▎ 137
|
||||
138 |████████████████▍ 138
|
||||
139 |████████████████▌ 139
|
||||
140 |████████████████▋ 140
|
||||
141 |████████████████▋ 141
|
||||
142 |████████████████▊ 142
|
||||
143 |████████████████▉ 143
|
||||
144 |█████████████████ 144
|
||||
145 |█████████████████▏ 145
|
||||
146 |█████████████████▎ 146
|
||||
147 |█████████████████▍ 147
|
||||
148 |█████████████████▌ 148
|
||||
149 |█████████████████▋ 149
|
||||
150 |█████████████████▊ 150
|
||||
151 |█████████████████▉ 151
|
||||
152 |██████████████████ 152
|
||||
153 |██████████████████▏ 153
|
||||
154 |██████████████████▎ 154
|
||||
155 |██████████████████▍ 155
|
||||
156 |██████████████████▌ 156
|
||||
157 |██████████████████▋ 157
|
||||
158 |██████████████████▊ 158
|
||||
159 |██████████████████▉ 159
|
||||
160 |███████████████████ 160
|
||||
161 |███████████████████ 161
|
||||
162 |███████████████████▏ 162
|
||||
163 |███████████████████▎ 163
|
||||
164 |███████████████████▍ 164
|
||||
165 |███████████████████▌ 165
|
||||
166 |███████████████████▋ 166
|
||||
167 |███████████████████▊ 167
|
||||
168 |███████████████████▉ 168
|
||||
169 |████████████████████ 169
|
||||
170 |████████████████████▏ 170
|
||||
171 |████████████████████▎ 171
|
||||
172 |████████████████████▍ 172
|
||||
173 |████████████████████▌ 173
|
||||
174 |████████████████████▋ 174
|
||||
175 |████████████████████▊ 175
|
||||
176 |████████████████████▉ 176
|
||||
177 |█████████████████████ 177
|
||||
178 |█████████████████████▏ 178
|
||||
179 |█████████████████████▎ 179
|
||||
180 |█████████████████████▍ 180
|
||||
181 |█████████████████████▍ 181
|
||||
182 |█████████████████████▌ 182
|
||||
183 |█████████████████████▋ 183
|
||||
184 |█████████████████████▊ 184
|
||||
185 |█████████████████████▉ 185
|
||||
186 |██████████████████████ 186
|
||||
187 |██████████████████████▏ 187
|
||||
188 |██████████████████████▎ 188
|
||||
189 |██████████████████████▍ 189
|
||||
190 |██████████████████████▌ 190
|
||||
191 |██████████████████████▋ 191
|
||||
192 |██████████████████████▊ 192
|
||||
193 |██████████████████████▉ 193
|
||||
194 |███████████████████████ 194
|
||||
195 |███████████████████████▏ 195
|
||||
196 |███████████████████████▎ 196
|
||||
197 |███████████████████████▍ 197
|
||||
198 |███████████████████████▌ 198
|
||||
199 |███████████████████████▋ 199
|
||||
200 |███████████████████████▊ 200
|
||||
201 |███████████████████████▊ 201
|
||||
202 |███████████████████████▉ 202
|
||||
203 |████████████████████████ 203
|
||||
204 |████████████████████████▏ 204
|
||||
205 |████████████████████████▎ 205
|
||||
206 |████████████████████████▍ 206
|
||||
207 |████████████████████████▌ 207
|
||||
208 |████████████████████████▋ 208
|
||||
209 |████████████████████████▊ 209
|
||||
210 |████████████████████████▉ 210
|
||||
211 |█████████████████████████ 211
|
||||
212 |█████████████████████████▏ 212
|
||||
213 |█████████████████████████▎ 213
|
||||
214 |█████████████████████████▍ 214
|
||||
215 |█████████████████████████▌ 215
|
||||
216 |█████████████████████████▋ 216
|
||||
217 |█████████████████████████▊ 217
|
||||
218 |█████████████████████████▉ 218
|
||||
219 |██████████████████████████ 219
|
||||
220 |██████████████████████████▏ 220
|
||||
221 |██████████████████████████▏ 221
|
||||
222 |██████████████████████████▎ 222
|
||||
223 |██████████████████████████▍ 223
|
||||
224 |██████████████████████████▌ 224
|
||||
225 |██████████████████████████▋ 225
|
||||
226 |██████████████████████████▊ 226
|
||||
227 |██████████████████████████▉ 227
|
||||
228 |███████████████████████████ 228
|
||||
229 |███████████████████████████▏ 229
|
||||
230 |███████████████████████████▎ 230
|
||||
231 |███████████████████████████▍ 231
|
||||
232 |███████████████████████████▌ 232
|
||||
233 |███████████████████████████▋ 233
|
||||
234 |███████████████████████████▊ 234
|
||||
235 |███████████████████████████▉ 235
|
||||
236 |████████████████████████████ 236
|
||||
237 |████████████████████████████▏ 237
|
||||
238 |████████████████████████████▎ 238
|
||||
239 |████████████████████████████▍ 239
|
||||
240 |████████████████████████████▌ 240
|
||||
241 |████████████████████████████▌ 241
|
||||
242 |████████████████████████████▋ 242
|
||||
243 |████████████████████████████▊ 243
|
||||
244 |████████████████████████████▉ 244
|
||||
245 |█████████████████████████████ 245
|
||||
246 |█████████████████████████████▏ 246
|
||||
247 |█████████████████████████████▎ 247
|
||||
248 |█████████████████████████████▍ 248
|
||||
249 |█████████████████████████████▌ 249
|
||||
250 |█████████████████████████████▋ 250
|
||||
251 |█████████████████████████████▊ 251
|
||||
252 |█████████████████████████████▉ 252
|
||||
253 |██████████████████████████████ 253
|
||||
254 |██████████████████████████████▏ 254
|
||||
255 |██████████████████████████████▎ 255
|
||||
256 |██████████████████████████████▍ 256
|
||||
257 |██████████████████████████████▌ 257
|
||||
258 |██████████████████████████████▋ 258
|
||||
259 |██████████████████████████████▊ 259
|
||||
260 |██████████████████████████████▉ 260
|
||||
261 |██████████████████████████████▉ 261
|
||||
262 |███████████████████████████████ 262
|
||||
263 |███████████████████████████████▏ 263
|
||||
264 |███████████████████████████████▎ 264
|
||||
265 |███████████████████████████████▍ 265
|
||||
266 |███████████████████████████████▌ 266
|
||||
267 |███████████████████████████████▋ 267
|
||||
268 |███████████████████████████████▊ 268
|
||||
269 |███████████████████████████████▉ 269
|
||||
270 |████████████████████████████████ 270
|
||||
271 |████████████████████████████████▏ 271
|
||||
272 |████████████████████████████████▎ 272
|
||||
273 |████████████████████████████████▍ 273
|
||||
274 |████████████████████████████████▌ 274
|
||||
275 |████████████████████████████████▋ 275
|
||||
276 |████████████████████████████████▊ 276
|
||||
277 |████████████████████████████████▉ 277
|
||||
278 |█████████████████████████████████ 278
|
||||
279 |█████████████████████████████████▏ 279
|
||||
280 |█████████████████████████████████▎ 280
|
||||
281 |█████████████████████████████████▎ 281
|
||||
282 |█████████████████████████████████▍ 282
|
||||
283 |█████████████████████████████████▌ 283
|
||||
284 |█████████████████████████████████▋ 284
|
||||
285 |█████████████████████████████████▊ 285
|
||||
286 |█████████████████████████████████▉ 286
|
||||
287 |██████████████████████████████████ 287
|
||||
288 |██████████████████████████████████▏ 288
|
||||
289 |██████████████████████████████████▎ 289
|
||||
290 |██████████████████████████████████▍ 290
|
||||
291 |██████████████████████████████████▌ 291
|
||||
292 |██████████████████████████████████▋ 292
|
||||
293 |██████████████████████████████████▊ 293
|
||||
294 |██████████████████████████████████▉ 294
|
||||
295 |███████████████████████████████████ 295
|
||||
296 |███████████████████████████████████▏ 296
|
||||
297 |███████████████████████████████████▎ 297
|
||||
298 |███████████████████████████████████▍ 298
|
||||
299 |███████████████████████████████████▌ 299
|
||||
300 |███████████████████████████████████▋ 300
|
||||
301 |███████████████████████████████████▋ 301
|
||||
302 |███████████████████████████████████▊ 302
|
||||
303 |███████████████████████████████████▉ 303
|
||||
304 |████████████████████████████████████ 304
|
||||
305 |████████████████████████████████████▏ 305
|
||||
306 |████████████████████████████████████▎ 306
|
||||
307 |████████████████████████████████████▍ 307
|
||||
308 |████████████████████████████████████▌ 308
|
||||
309 |████████████████████████████████████▋ 309
|
||||
310 |████████████████████████████████████▊ 310
|
||||
311 |████████████████████████████████████▉ 311
|
||||
312 |█████████████████████████████████████ 312
|
||||
313 |█████████████████████████████████████▏ 313
|
||||
314 |█████████████████████████████████████▎ 314
|
||||
315 |█████████████████████████████████████▍ 315
|
||||
316 |█████████████████████████████████████▌ 316
|
||||
317 |█████████████████████████████████████▋ 317
|
||||
318 |█████████████████████████████████████▊ 318
|
||||
319 |█████████████████████████████████████▉ 319
|
||||
320 |██████████████████████████████████████ 320
|
||||
321 |██████████████████████████████████████ 320
|
||||
322 |█████████████████████████████████████▉ 319
|
||||
323 |█████████████████████████████████████▊ 318
|
||||
324 |█████████████████████████████████████▋ 317
|
||||
325 |█████████████████████████████████████▌ 316
|
||||
326 |█████████████████████████████████████▍ 315
|
||||
327 |█████████████████████████████████████▎ 314
|
||||
328 |█████████████████████████████████████▏ 313
|
||||
329 |█████████████████████████████████████ 312
|
||||
330 |████████████████████████████████████▉ 311
|
||||
331 |████████████████████████████████████▊ 310
|
||||
332 |████████████████████████████████████▋ 309
|
||||
333 |████████████████████████████████████▌ 308
|
||||
334 |████████████████████████████████████▍ 307
|
||||
335 |████████████████████████████████████▎ 306
|
||||
336 |████████████████████████████████████▏ 305
|
||||
337 |████████████████████████████████████ 304
|
||||
338 |███████████████████████████████████▉ 303
|
||||
339 |███████████████████████████████████▊ 302
|
||||
340 |███████████████████████████████████▋ 301
|
||||
341 |███████████████████████████████████▋ 300
|
||||
342 |███████████████████████████████████▌ 299
|
||||
343 |███████████████████████████████████▍ 298
|
||||
344 |███████████████████████████████████▎ 297
|
||||
345 |███████████████████████████████████▏ 296
|
||||
346 |███████████████████████████████████ 295
|
||||
347 |██████████████████████████████████▉ 294
|
||||
348 |██████████████████████████████████▊ 293
|
||||
349 |██████████████████████████████████▋ 292
|
||||
350 |██████████████████████████████████▌ 291
|
||||
351 |██████████████████████████████████▍ 290
|
||||
352 |██████████████████████████████████▎ 289
|
||||
353 |██████████████████████████████████▏ 288
|
||||
354 |██████████████████████████████████ 287
|
||||
355 |█████████████████████████████████▉ 286
|
||||
356 |█████████████████████████████████▊ 285
|
||||
357 |█████████████████████████████████▋ 284
|
||||
358 |█████████████████████████████████▌ 283
|
||||
359 |█████████████████████████████████▍ 282
|
||||
360 |█████████████████████████████████▎ 281
|
||||
361 |█████████████████████████████████▎ 280
|
||||
362 |█████████████████████████████████▏ 279
|
||||
363 |█████████████████████████████████ 278
|
||||
364 |████████████████████████████████▉ 277
|
||||
365 |████████████████████████████████▊ 276
|
||||
366 |████████████████████████████████▋ 275
|
||||
367 |████████████████████████████████▌ 274
|
||||
368 |████████████████████████████████▍ 273
|
||||
369 |████████████████████████████████▎ 272
|
||||
370 |████████████████████████████████▏ 271
|
||||
371 |████████████████████████████████ 270
|
||||
372 |███████████████████████████████▉ 269
|
||||
373 |███████████████████████████████▊ 268
|
||||
374 |███████████████████████████████▋ 267
|
||||
375 |███████████████████████████████▌ 266
|
||||
376 |███████████████████████████████▍ 265
|
||||
377 |███████████████████████████████▎ 264
|
||||
378 |███████████████████████████████▏ 263
|
||||
379 |███████████████████████████████ 262
|
||||
380 |██████████████████████████████▉ 261
|
||||
381 |██████████████████████████████▉ 260
|
||||
382 |██████████████████████████████▊ 259
|
||||
383 |██████████████████████████████▋ 258
|
||||
384 |██████████████████████████████▌ 257
|
||||
385 |██████████████████████████████▍ 256
|
||||
386 |██████████████████████████████▎ 255
|
||||
387 |██████████████████████████████▏ 254
|
||||
388 |██████████████████████████████ 253
|
||||
389 |█████████████████████████████▉ 252
|
||||
390 |█████████████████████████████▊ 251
|
||||
391 |█████████████████████████████▋ 250
|
||||
392 |█████████████████████████████▌ 249
|
||||
393 |█████████████████████████████▍ 248
|
||||
394 |█████████████████████████████▎ 247
|
||||
395 |█████████████████████████████▏ 246
|
||||
396 |█████████████████████████████ 245
|
||||
397 |████████████████████████████▉ 244
|
||||
398 |████████████████████████████▊ 243
|
||||
399 |████████████████████████████▋ 242
|
||||
400 |████████████████████████████▌ 241
|
||||
401 |████████████████████████████▌ 240
|
||||
402 |████████████████████████████▍ 239
|
||||
403 |████████████████████████████▎ 238
|
||||
404 |████████████████████████████▏ 237
|
||||
405 |████████████████████████████ 236
|
||||
406 |███████████████████████████▉ 235
|
||||
407 |███████████████████████████▊ 234
|
||||
408 |███████████████████████████▋ 233
|
||||
409 |███████████████████████████▌ 232
|
||||
410 |███████████████████████████▍ 231
|
||||
411 |███████████████████████████▎ 230
|
||||
412 |███████████████████████████▏ 229
|
||||
413 |███████████████████████████ 228
|
||||
414 |██████████████████████████▉ 227
|
||||
415 |██████████████████████████▊ 226
|
||||
416 |██████████████████████████▋ 225
|
||||
417 |██████████████████████████▌ 224
|
||||
418 |██████████████████████████▍ 223
|
||||
419 |██████████████████████████▎ 222
|
||||
420 |██████████████████████████▏ 221
|
||||
421 |██████████████████████████▏ 220
|
||||
422 |██████████████████████████ 219
|
||||
423 |█████████████████████████▉ 218
|
||||
424 |█████████████████████████▊ 217
|
||||
425 |█████████████████████████▋ 216
|
||||
426 |█████████████████████████▌ 215
|
||||
427 |█████████████████████████▍ 214
|
||||
428 |█████████████████████████▎ 213
|
||||
429 |█████████████████████████▏ 212
|
||||
430 |█████████████████████████ 211
|
||||
431 |████████████████████████▉ 210
|
||||
432 |████████████████████████▊ 209
|
||||
433 |████████████████████████▋ 208
|
||||
434 |████████████████████████▌ 207
|
||||
435 |████████████████████████▍ 206
|
||||
436 |████████████████████████▎ 205
|
||||
437 |████████████████████████▏ 204
|
||||
438 |████████████████████████ 203
|
||||
439 |███████████████████████▉ 202
|
||||
440 |███████████████████████▊ 201
|
||||
441 |███████████████████████▊ 200
|
||||
442 |███████████████████████▋ 199
|
||||
443 |███████████████████████▌ 198
|
||||
444 |███████████████████████▍ 197
|
||||
445 |███████████████████████▎ 196
|
||||
446 |███████████████████████▏ 195
|
||||
447 |███████████████████████ 194
|
||||
448 |██████████████████████▉ 193
|
||||
449 |██████████████████████▊ 192
|
||||
450 |██████████████████████▋ 191
|
||||
451 |██████████████████████▌ 190
|
||||
452 |██████████████████████▍ 189
|
||||
453 |██████████████████████▎ 188
|
||||
454 |██████████████████████▏ 187
|
||||
455 |██████████████████████ 186
|
||||
456 |█████████████████████▉ 185
|
||||
457 |█████████████████████▊ 184
|
||||
458 |█████████████████████▋ 183
|
||||
459 |█████████████████████▌ 182
|
||||
460 |█████████████████████▍ 181
|
||||
461 |█████████████████████▍ 180
|
||||
462 |█████████████████████▎ 179
|
||||
463 |█████████████████████▏ 178
|
||||
464 |█████████████████████ 177
|
||||
465 |████████████████████▉ 176
|
||||
466 |████████████████████▊ 175
|
||||
467 |████████████████████▋ 174
|
||||
468 |████████████████████▌ 173
|
||||
469 |████████████████████▍ 172
|
||||
470 |████████████████████▎ 171
|
||||
471 |████████████████████▏ 170
|
||||
472 |████████████████████ 169
|
||||
473 |███████████████████▉ 168
|
||||
474 |███████████████████▊ 167
|
||||
475 |███████████████████▋ 166
|
||||
476 |███████████████████▌ 165
|
||||
477 |███████████████████▍ 164
|
||||
478 |███████████████████▎ 163
|
||||
479 |███████████████████▏ 162
|
||||
480 |███████████████████ 161
|
||||
481 |███████████████████ 160
|
||||
482 |██████████████████▉ 159
|
||||
483 |██████████████████▊ 158
|
||||
484 |██████████████████▋ 157
|
||||
485 |██████████████████▌ 156
|
||||
486 |██████████████████▍ 155
|
||||
487 |██████████████████▎ 154
|
||||
488 |██████████████████▏ 153
|
||||
489 |██████████████████ 152
|
||||
490 |█████████████████▉ 151
|
||||
491 |█████████████████▊ 150
|
||||
492 |█████████████████▋ 149
|
||||
493 |█████████████████▌ 148
|
||||
494 |█████████████████▍ 147
|
||||
495 |█████████████████▎ 146
|
||||
496 |█████████████████▏ 145
|
||||
497 |█████████████████ 144
|
||||
498 |████████████████▉ 143
|
||||
499 |████████████████▊ 142
|
||||
500 |████████████████▋ 141
|
||||
501 |████████████████▋ 140
|
||||
502 |████████████████▌ 139
|
||||
503 |████████████████▍ 138
|
||||
504 |████████████████▎ 137
|
||||
505 |████████████████▏ 136
|
||||
506 |████████████████ 135
|
||||
507 |███████████████▉ 134
|
||||
508 |███████████████▊ 133
|
||||
509 |███████████████▋ 132
|
||||
510 |███████████████▌ 131
|
||||
511 |███████████████▍ 130
|
||||
512 |███████████████▎ 129
|
||||
513 |███████████████▏ 128
|
||||
514 |███████████████ 127
|
||||
515 |██████████████▉ 126
|
||||
516 |██████████████▊ 125
|
||||
517 |██████████████▋ 124
|
||||
518 |██████████████▌ 123
|
||||
519 |██████████████▍ 122
|
||||
520 |██████████████▎ 121
|
||||
521 |██████████████▎ 120
|
||||
522 |██████████████▏ 119
|
||||
523 |██████████████ 118
|
||||
524 |█████████████▉ 117
|
||||
525 |█████████████▊ 116
|
||||
526 |█████████████▋ 115
|
||||
527 |█████████████▌ 114
|
||||
528 |█████████████▍ 113
|
||||
529 |█████████████▎ 112
|
||||
530 |█████████████▏ 111
|
||||
531 |█████████████ 110
|
||||
532 |████████████▉ 109
|
||||
533 |████████████▊ 108
|
||||
534 |████████████▋ 107
|
||||
535 |████████████▌ 106
|
||||
536 |████████████▍ 105
|
||||
537 |████████████▎ 104
|
||||
538 |████████████▏ 103
|
||||
539 |████████████ 102
|
||||
540 |███████████▉ 101
|
||||
541 |███████████▉ 100
|
||||
542 |███████████▊ 99
|
||||
543 |███████████▋ 98
|
||||
544 |███████████▌ 97
|
||||
545 |███████████▍ 96
|
||||
546 |███████████▎ 95
|
||||
547 |███████████▏ 94
|
||||
548 |███████████ 93
|
||||
549 |██████████▉ 92
|
||||
550 |██████████▊ 91
|
||||
551 |██████████▋ 90
|
||||
552 |██████████▌ 89
|
||||
553 |██████████▍ 88
|
||||
554 |██████████▎ 87
|
||||
555 |██████████▏ 86
|
||||
556 |██████████ 85
|
||||
557 |█████████▉ 84
|
||||
558 |█████████▊ 83
|
||||
559 |█████████▋ 82
|
||||
560 |█████████▌ 81
|
||||
561 |█████████▌ 80
|
||||
562 |█████████▍ 79
|
||||
563 |█████████▎ 78
|
||||
564 |█████████▏ 77
|
||||
565 |█████████ 76
|
||||
566 |████████▉ 75
|
||||
567 |████████▊ 74
|
||||
568 |████████▋ 73
|
||||
569 |████████▌ 72
|
||||
570 |████████▍ 71
|
||||
571 |████████▎ 70
|
||||
572 |████████▏ 69
|
||||
573 |████████ 68
|
||||
574 |███████▉ 67
|
||||
575 |███████▊ 66
|
||||
576 |███████▋ 65
|
||||
577 |███████▌ 64
|
||||
578 |███████▍ 63
|
||||
579 |███████▎ 62
|
||||
580 |███████▏ 61
|
||||
581 |███████▏ 60
|
||||
582 |███████ 59
|
||||
583 |██████▉ 58
|
||||
584 |██████▊ 57
|
||||
585 |██████▋ 56
|
||||
586 |██████▌ 55
|
||||
587 |██████▍ 54
|
||||
588 |██████▎ 53
|
||||
589 |██████▏ 52
|
||||
590 |██████ 51
|
||||
591 |█████▉ 50
|
||||
592 |█████▊ 49
|
||||
593 |█████▋ 48
|
||||
594 |█████▌ 47
|
||||
595 |█████▍ 46
|
||||
596 |█████▎ 45
|
||||
597 |█████▏ 44
|
||||
598 |█████ 43
|
||||
599 |████▉ 42
|
||||
600 |████▊ 41
|
||||
601 |████▊ 40
|
||||
602 |████▋ 39
|
||||
603 |████▌ 38
|
||||
604 |████▍ 37
|
||||
605 |████▎ 36
|
||||
606 |████▏ 35
|
||||
607 |████ 34
|
||||
608 |███▉ 33
|
||||
609 |███▊ 32
|
||||
610 |███▋ 31
|
||||
611 |███▌ 30
|
||||
612 |███▍ 29
|
||||
613 |███▎ 28
|
||||
614 |███▏ 27
|
||||
615 |███ 26
|
||||
616 |██▉ 25
|
||||
617 |██▊ 24
|
||||
618 |██▋ 23
|
||||
619 |██▌ 22
|
||||
620 |██▍ 21
|
||||
621 |██▍ 20
|
||||
622 |██▎ 19
|
||||
623 |██▏ 18
|
||||
624 |██ 17
|
||||
625 |█▉ 16
|
||||
626 |█▊ 15
|
||||
627 |█▋ 14
|
||||
628 |█▌ 13
|
||||
629 |█▍ 12
|
||||
630 |█▎ 11
|
||||
631 |█▏ 10
|
||||
632 |█ 9
|
||||
633 |▉ 8
|
||||
634 |▊ 7
|
||||
635 |▋ 6
|
||||
636 |▌ 5
|
||||
637 |▍ 4
|
||||
638 |▎ 3
|
||||
639 |▏ 2
|
||||
>= 640 | 1
|
||||
|
||||
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms of version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Joyent, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#pragma D option agghist
|
||||
#pragma D option quiet
|
||||
|
||||
BEGIN
|
||||
{
|
||||
@["demerit"] = sum(-10);
|
||||
@["wtf"] = sum(10);
|
||||
@["bot"] = sum(20);
|
||||
|
||||
@bagnoogle["SOAP/XML"] = sum(1);
|
||||
@bagnoogle["XACML store"] = sum(5);
|
||||
@bagnoogle["SAML token"] = sum(6);
|
||||
|
||||
@stalloogle["breakfast"] = sum(-5);
|
||||
@stalloogle["non-diet pepsi"] = sum(-20);
|
||||
@stalloogle["parrot"] = sum(-100);
|
||||
|
||||
printa(@);
|
||||
printa(@bagnoogle);
|
||||
printa(@stalloogle);
|
||||
|
||||
printf("\nzoomed:");
|
||||
|
||||
setopt("aggzoom");
|
||||
printa(@);
|
||||
printa(@bagnoogle);
|
||||
printa(@stalloogle);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
@ -0,0 +1,38 @@
|
||||
|
||||
|
||||
key ------------- Distribution ------------- count
|
||||
demerit @@@@@| -10
|
||||
wtf |@@@@@ 10
|
||||
bot |@@@@@@@@@@ 20
|
||||
|
||||
|
||||
key ------------- Distribution ------------- count
|
||||
SOAP/XML |@@@ 1
|
||||
XACML store |@@@@@@@@@@@@@@@@@ 5
|
||||
SAML token |@@@@@@@@@@@@@@@@@@@@ 6
|
||||
|
||||
|
||||
key ------------- Distribution ------------- count
|
||||
parrot @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -100
|
||||
non-diet pepsi @@@@@@| -20
|
||||
breakfast @@| -5
|
||||
|
||||
zoomed:
|
||||
|
||||
key ------------- Distribution ------------- count
|
||||
demerit @@@@@@@@@@| -10
|
||||
wtf |@@@@@@@@@@ 10
|
||||
bot |@@@@@@@@@@@@@@@@@@@ 20
|
||||
|
||||
|
||||
key ------------- Distribution ------------- count
|
||||
SOAP/XML |@@@@@@@ 1
|
||||
XACML store |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5
|
||||
SAML token |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 6
|
||||
|
||||
|
||||
key ------------- Distribution ------------- count
|
||||
parrot @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -100
|
||||
non-diet pepsi @@@@@@@@| -20
|
||||
breakfast @@| -5
|
||||
|
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms of version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Joyent, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#pragma D option aggpack
|
||||
#pragma D option encoding=ascii
|
||||
#pragma D option quiet
|
||||
|
||||
BEGIN
|
||||
{
|
||||
@x = quantize(1 << 32);
|
||||
@y[1] = quantize(1);
|
||||
@z["mumble"] = quantize(1);
|
||||
@xx["foo", (char)1, (short)2, (long)3] = quantize(1);
|
||||
|
||||
@neg = lquantize(-10, -10, 20, 1, -1);
|
||||
@neg = lquantize(-5, -10, 20, 1, 1);
|
||||
@neg = lquantize(0, -10, 20, 1, 1);
|
||||
|
||||
i = 0;
|
||||
}
|
||||
|
||||
tick-1ms
|
||||
{
|
||||
@a[i] = quantize(0, i);
|
||||
@a[i] = quantize(1, 100 - i);
|
||||
i++;
|
||||
}
|
||||
|
||||
tick-1ms
|
||||
/i > 100/
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
END
|
||||
{
|
||||
setopt("aggzoom", "true");
|
||||
printa(@neg);
|
||||
setopt("aggzoom", "false");
|
||||
printa(@neg);
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
|
||||
|
||||
min .--------------------------------. max | count
|
||||
< -10 : V X X : >= 20 | 1
|
||||
|
||||
|
||||
min .--------------------------------. max | count
|
||||
< -10 : v x x : >= 20 | 1
|
||||
|
||||
|
||||
min .---. max | count
|
||||
2147483648 : X : 8589934592 | 1
|
||||
|
||||
key min .---. max | count
|
||||
1 0 : X : 2 | 1
|
||||
|
||||
key min .---. max | count
|
||||
mumble 0 : X : 2 | 1
|
||||
|
||||
key min .---. max | count
|
||||
foo 1 2 3 0 : X : 2 | 1
|
||||
|
||||
key min .---. max | count
|
||||
100 0 :X : 2 | 100
|
||||
99 0 :X_ : 2 | 100
|
||||
98 0 :X_ : 2 | 100
|
||||
97 0 :X_ : 2 | 100
|
||||
96 0 :X_ : 2 | 100
|
||||
95 0 :X_ : 2 | 100
|
||||
94 0 :X_ : 2 | 100
|
||||
93 0 :X_ : 2 | 100
|
||||
92 0 :X_ : 2 | 100
|
||||
91 0 :X_ : 2 | 100
|
||||
90 0 :X_ : 2 | 100
|
||||
89 0 :X_ : 2 | 100
|
||||
88 0 :X_ : 2 | 100
|
||||
87 0 :X_ : 2 | 100
|
||||
86 0 :X_ : 2 | 100
|
||||
85 0 :X_ : 2 | 100
|
||||
84 0 :X_ : 2 | 100
|
||||
83 0 :X_ : 2 | 100
|
||||
82 0 :X_ : 2 | 100
|
||||
81 0 :X_ : 2 | 100
|
||||
80 0 :X_ : 2 | 100
|
||||
79 0 :X_ : 2 | 100
|
||||
78 0 :xx : 2 | 100
|
||||
77 0 :xx : 2 | 100
|
||||
76 0 :xx : 2 | 100
|
||||
75 0 :xx : 2 | 100
|
||||
74 0 :xx : 2 | 100
|
||||
73 0 :xx : 2 | 100
|
||||
72 0 :xx : 2 | 100
|
||||
71 0 :xx : 2 | 100
|
||||
70 0 :xx : 2 | 100
|
||||
69 0 :xx : 2 | 100
|
||||
68 0 :xx : 2 | 100
|
||||
67 0 :xx : 2 | 100
|
||||
66 0 :xx : 2 | 100
|
||||
65 0 :xx : 2 | 100
|
||||
64 0 :xx : 2 | 100
|
||||
63 0 :xx : 2 | 100
|
||||
62 0 :xx : 2 | 100
|
||||
61 0 :xx : 2 | 100
|
||||
60 0 :xx : 2 | 100
|
||||
59 0 :xx : 2 | 100
|
||||
58 0 :xx : 2 | 100
|
||||
57 0 :xx : 2 | 100
|
||||
56 0 :xx : 2 | 100
|
||||
55 0 :xx : 2 | 100
|
||||
54 0 :xx : 2 | 100
|
||||
53 0 :xx : 2 | 100
|
||||
52 0 :xx : 2 | 100
|
||||
51 0 :xx : 2 | 100
|
||||
50 0 :xx : 2 | 100
|
||||
49 0 :xx : 2 | 100
|
||||
48 0 :xx : 2 | 100
|
||||
47 0 :xx : 2 | 100
|
||||
46 0 :xx : 2 | 100
|
||||
45 0 :xx : 2 | 100
|
||||
44 0 :xx : 2 | 100
|
||||
43 0 :xx : 2 | 100
|
||||
42 0 :xx : 2 | 100
|
||||
41 0 :xx : 2 | 100
|
||||
40 0 :xx : 2 | 100
|
||||
39 0 :xx : 2 | 100
|
||||
38 0 :xx : 2 | 100
|
||||
37 0 :xx : 2 | 100
|
||||
36 0 :xx : 2 | 100
|
||||
35 0 :xx : 2 | 100
|
||||
34 0 :xx : 2 | 100
|
||||
33 0 :xx : 2 | 100
|
||||
32 0 :xx : 2 | 100
|
||||
31 0 :xx : 2 | 100
|
||||
30 0 :xx : 2 | 100
|
||||
29 0 :xx : 2 | 100
|
||||
28 0 :xx : 2 | 100
|
||||
27 0 :xx : 2 | 100
|
||||
26 0 :xx : 2 | 100
|
||||
25 0 :xx : 2 | 100
|
||||
24 0 :xx : 2 | 100
|
||||
23 0 :xx : 2 | 100
|
||||
22 0 :xx : 2 | 100
|
||||
21 0 :_X : 2 | 100
|
||||
20 0 :_X : 2 | 100
|
||||
19 0 :_X : 2 | 100
|
||||
18 0 :_X : 2 | 100
|
||||
17 0 :_X : 2 | 100
|
||||
16 0 :_X : 2 | 100
|
||||
15 0 :_X : 2 | 100
|
||||
14 0 :_X : 2 | 100
|
||||
13 0 :_X : 2 | 100
|
||||
12 0 :_X : 2 | 100
|
||||
11 0 :_X : 2 | 100
|
||||
10 0 :_X : 2 | 100
|
||||
9 0 :_X : 2 | 100
|
||||
8 0 :_X : 2 | 100
|
||||
7 0 :_X : 2 | 100
|
||||
6 0 :_X : 2 | 100
|
||||
5 0 :_X : 2 | 100
|
||||
4 0 :_X : 2 | 100
|
||||
3 0 :_X : 2 | 100
|
||||
2 0 :_X : 2 | 100
|
||||
1 0 :_X : 2 | 100
|
||||
0 0 : X : 2 | 100
|
@ -0,0 +1,75 @@
|
||||
#
|
||||
# This file and its contents are supplied under the terms of the
|
||||
# Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
# You may only use this file in accordance with the terms of version
|
||||
# 1.0 of the CDDL.
|
||||
#
|
||||
# A full copy of the text of the CDDL should have accompanied this
|
||||
# source. A copy of the CDDL is also available via the Internet at
|
||||
# http://www.illumos.org/license/CDDL.
|
||||
#
|
||||
|
||||
#
|
||||
# Copyright (c) 2013 Joyent, Inc. All rights reserved.
|
||||
#
|
||||
|
||||
let width=8
|
||||
|
||||
function outputchar
|
||||
{
|
||||
banner $3 | awk -v line=$1 -v pos=$2 -v width=$width '{ \
|
||||
for (i = 1; i <= length($0); i++) { \
|
||||
if (substr($0, i, 1) == " ") \
|
||||
continue; \
|
||||
printf("\t@letter%d[%d] = lquantize(%d, 0, 40, 1);\n", \
|
||||
line, NR, i + (pos * width));
|
||||
} \
|
||||
}'
|
||||
}
|
||||
|
||||
function outputstr
|
||||
{
|
||||
let pos=0;
|
||||
let line=0
|
||||
|
||||
printf "#pragma D option aggpack\n#pragma D option aggsortkey\n"
|
||||
|
||||
printf "BEGIN\n{\n"
|
||||
for c in `echo "$1" | awk '{ \
|
||||
for (i = 1; i <= length($0); i++) { \
|
||||
c = substr($0, i, 1); \
|
||||
printf("%s\n", c == " " ? "space" : \
|
||||
c == "\n" ? "newline" : c); \
|
||||
} \
|
||||
}'`; do
|
||||
if [[ "$c" == "space" ]]; then
|
||||
let line=line+1
|
||||
let pos=0
|
||||
continue
|
||||
fi
|
||||
|
||||
outputchar $line $pos $c
|
||||
let pos=pos+1
|
||||
done
|
||||
|
||||
let i=0
|
||||
|
||||
while [[ $i -le $line ]]; do
|
||||
printf "\tprinta(@letter%d);\n" $i
|
||||
let i=i+1
|
||||
done
|
||||
printf "\texit(0);\n}\n"
|
||||
}
|
||||
|
||||
dtrace -qs /dev/stdin -x encoding=utf8 <<EOF
|
||||
`outputstr "why must i do this"`
|
||||
EOF
|
||||
|
||||
dtrace -qs /dev/stdin -x encoding=ascii -x aggzoom <<EOF
|
||||
`outputstr "i am not well"`
|
||||
EOF
|
||||
|
||||
dtrace -qs /dev/stdin -x encoding=utf8 -x aggzoom <<EOF
|
||||
`outputstr "send help"`
|
||||
EOF
|
||||
|
@ -0,0 +1,102 @@
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : ▂ ▂ ▂ ▂ ▂ ▂ : >= 40 | 6
|
||||
3 < 0 : ▂ ▂ ▂ ▂ ▂ ▂ : >= 40 | 6
|
||||
4 < 0 : ▂ ▂ ▂▂▂▂▂▂ ▂ : >= 40 | 9
|
||||
5 < 0 : ▂ ▂▂ ▂ ▂ ▂ ▂ : >= 40 | 7
|
||||
6 < 0 : ▂▂ ▂▂ ▂ ▂ ▂ : >= 40 | 7
|
||||
7 < 0 : ▂ ▂ ▂ ▂ ▂ : >= 40 | 5
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : ▂ ▂ ▂ ▂ ▂▂▂▂ ▂▂▂▂▂ : >= 40 | 13
|
||||
3 < 0 : ▂▂ ▂▂ ▂ ▂ ▂ ▂ : >= 40 | 8
|
||||
4 < 0 : ▂ ▂▂ ▂ ▂ ▂ ▂▂▂▂ ▂ : >= 40 | 11
|
||||
5 < 0 : ▂ ▂ ▂ ▂ ▂ ▂ : >= 40 | 6
|
||||
6 < 0 : ▂ ▂ ▂ ▂ ▂ ▂ ▂ : >= 40 | 7
|
||||
7 < 0 : ▂ ▂ ▂▂▂▂ ▂▂▂▂ ▂ : >= 40 | 11
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : █ : >= 40 | 1
|
||||
3 < 0 : █ : >= 40 | 1
|
||||
4 < 0 : █ : >= 40 | 1
|
||||
5 < 0 : █ : >= 40 | 1
|
||||
6 < 0 : █ : >= 40 | 1
|
||||
7 < 0 : █ : >= 40 | 1
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : ▂▂▂▂▂ ▂▂▂▂ : >= 40 | 9
|
||||
3 < 0 : ▃ ▃ ▃ ▃ : >= 40 | 4
|
||||
4 < 0 : ▃ ▃ ▃ ▃ : >= 40 | 4
|
||||
5 < 0 : ▃ ▃ ▃ ▃ : >= 40 | 4
|
||||
6 < 0 : ▃ ▃ ▃ ▃ : >= 40 | 4
|
||||
7 < 0 : ▂▂▂▂▂ ▂▂▂▂ : >= 40 | 9
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : ▂▂▂▂▂ ▂ ▂ ▂ ▂▂▂▂ : >= 40 | 12
|
||||
3 < 0 : ▂ ▂ ▂ ▂ ▂ : >= 40 | 5
|
||||
4 < 0 : ▂ ▂▂▂▂▂▂ ▂ ▂▂▂▂ : >= 40 | 12
|
||||
5 < 0 : ▂ ▂ ▂ ▂ ▂ : >= 40 | 5
|
||||
6 < 0 : ▂ ▂ ▂ ▂ ▂ ▂ : >= 40 | 6
|
||||
7 < 0 : ▂ ▂ ▂ ▂ ▂▂▂▂ : >= 40 | 8
|
||||
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : X : >= 40 | 1
|
||||
3 < 0 : X : >= 40 | 1
|
||||
4 < 0 : X : >= 40 | 1
|
||||
5 < 0 : X : >= 40 | 1
|
||||
6 < 0 : X : >= 40 | 1
|
||||
7 < 0 : X : >= 40 | 1
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : XX X X : >= 40 | 4
|
||||
3 < 0 : X X XX XX : >= 40 | 6
|
||||
4 < 0 : X X X XX X : >= 40 | 6
|
||||
5 < 0 : XXXXXX X X : >= 40 | 8
|
||||
6 < 0 : X X X X : >= 40 | 4
|
||||
7 < 0 : X X X X : >= 40 | 4
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : X X XXXX XXXXX : >= 40 | 11
|
||||
3 < 0 : XX X X X X : >= 40 | 6
|
||||
4 < 0 : X X X X X X : >= 40 | 6
|
||||
5 < 0 : X X X X X X : >= 40 | 6
|
||||
6 < 0 : X XX X X X : >= 40 | 6
|
||||
7 < 0 : X X XXXX X : >= 40 | 7
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : X X XXXXXX X X : >= 40 | 10
|
||||
3 < 0 : X X X X X : >= 40 | 5
|
||||
4 < 0 : X X XXXXX X X : >= 40 | 9
|
||||
5 < 0 : X XX X X X X : >= 40 | 7
|
||||
6 < 0 : XX XX X X X : >= 40 | 7
|
||||
7 < 0 : X X XXXXXX XXXXXX XXXXXX : >= 40 | 20
|
||||
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : ████ ██████ █ █ █████ : >= 40 | 17
|
||||
3 < 0 : █ █ ██ █ █ █ : >= 40 | 7
|
||||
4 < 0 : ████ █████ █ █ █ █ █ : >= 40 | 14
|
||||
5 < 0 : █ █ █ █ █ █ █ : >= 40 | 7
|
||||
6 < 0 : █ █ █ █ ██ █ █ : >= 40 | 8
|
||||
7 < 0 : ████ ██████ █ █ █████ : >= 40 | 17
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
2 < 0 : █ █ ██████ █ █████ : >= 40 | 14
|
||||
3 < 0 : █ █ █ █ █ █ : >= 40 | 6
|
||||
4 < 0 : ██████ █████ █ █ █ : >= 40 | 14
|
||||
5 < 0 : █ █ █ █ █████ : >= 40 | 9
|
||||
6 < 0 : █ █ █ █ █ : >= 40 | 5
|
||||
7 < 0 : █ █ ██████ ██████ █ : >= 40 | 15
|
||||
|
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms of version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Joyent, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#pragma D option quiet
|
||||
|
||||
tick-1ms
|
||||
/i++ < 30/
|
||||
{
|
||||
@[1] = lquantize(i, 0, 40, 1, 1000);
|
||||
@[2] = lquantize(i, 0, 40, 1, 1000);
|
||||
@[3] = lquantize(i, 0, 40, 1, 1000);
|
||||
}
|
||||
|
||||
tick-1ms
|
||||
/i == 40/
|
||||
{
|
||||
@[1] = lquantize(0, 0, 40, 1, 1);
|
||||
@[1] = lquantize(i, 0, 40, 1, 2000);
|
||||
@[2] = lquantize(0, 0, 40, 1, 1);
|
||||
@[2] = lquantize(i, 0, 40, 1, 2000);
|
||||
@[3] = lquantize(0, 0, 40, 1, 1);
|
||||
@[3] = lquantize(i, 0, 40, 1, 2000);
|
||||
|
||||
printa(@);
|
||||
setopt("aggpack");
|
||||
printa(@);
|
||||
setopt("aggzoom");
|
||||
printa(@);
|
||||
exit(0);
|
||||
}
|
@ -0,0 +1,149 @@
|
||||
|
||||
1
|
||||
value ------------- Distribution ------------- count
|
||||
< 0 | 0
|
||||
0 | 1
|
||||
1 |@ 1000
|
||||
2 |@ 1000
|
||||
3 |@ 1000
|
||||
4 |@ 1000
|
||||
5 |@ 1000
|
||||
6 |@ 1000
|
||||
7 |@ 1000
|
||||
8 |@ 1000
|
||||
9 |@ 1000
|
||||
10 |@ 1000
|
||||
11 |@ 1000
|
||||
12 |@ 1000
|
||||
13 |@ 1000
|
||||
14 |@ 1000
|
||||
15 |@ 1000
|
||||
16 |@ 1000
|
||||
17 |@ 1000
|
||||
18 |@ 1000
|
||||
19 |@ 1000
|
||||
20 |@ 1000
|
||||
21 |@ 1000
|
||||
22 |@ 1000
|
||||
23 |@ 1000
|
||||
24 |@ 1000
|
||||
25 |@ 1000
|
||||
26 |@ 1000
|
||||
27 |@ 1000
|
||||
28 |@ 1000
|
||||
29 |@ 1000
|
||||
30 |@ 1000
|
||||
31 | 0
|
||||
32 | 0
|
||||
33 | 0
|
||||
34 | 0
|
||||
35 | 0
|
||||
36 | 0
|
||||
37 | 0
|
||||
38 | 0
|
||||
39 | 0
|
||||
>= 40 |@@ 2000
|
||||
|
||||
2
|
||||
value ------------- Distribution ------------- count
|
||||
< 0 | 0
|
||||
0 | 1
|
||||
1 |@ 1000
|
||||
2 |@ 1000
|
||||
3 |@ 1000
|
||||
4 |@ 1000
|
||||
5 |@ 1000
|
||||
6 |@ 1000
|
||||
7 |@ 1000
|
||||
8 |@ 1000
|
||||
9 |@ 1000
|
||||
10 |@ 1000
|
||||
11 |@ 1000
|
||||
12 |@ 1000
|
||||
13 |@ 1000
|
||||
14 |@ 1000
|
||||
15 |@ 1000
|
||||
16 |@ 1000
|
||||
17 |@ 1000
|
||||
18 |@ 1000
|
||||
19 |@ 1000
|
||||
20 |@ 1000
|
||||
21 |@ 1000
|
||||
22 |@ 1000
|
||||
23 |@ 1000
|
||||
24 |@ 1000
|
||||
25 |@ 1000
|
||||
26 |@ 1000
|
||||
27 |@ 1000
|
||||
28 |@ 1000
|
||||
29 |@ 1000
|
||||
30 |@ 1000
|
||||
31 | 0
|
||||
32 | 0
|
||||
33 | 0
|
||||
34 | 0
|
||||
35 | 0
|
||||
36 | 0
|
||||
37 | 0
|
||||
38 | 0
|
||||
39 | 0
|
||||
>= 40 |@@ 2000
|
||||
|
||||
3
|
||||
value ------------- Distribution ------------- count
|
||||
< 0 | 0
|
||||
0 | 1
|
||||
1 |@ 1000
|
||||
2 |@ 1000
|
||||
3 |@ 1000
|
||||
4 |@ 1000
|
||||
5 |@ 1000
|
||||
6 |@ 1000
|
||||
7 |@ 1000
|
||||
8 |@ 1000
|
||||
9 |@ 1000
|
||||
10 |@ 1000
|
||||
11 |@ 1000
|
||||
12 |@ 1000
|
||||
13 |@ 1000
|
||||
14 |@ 1000
|
||||
15 |@ 1000
|
||||
16 |@ 1000
|
||||
17 |@ 1000
|
||||
18 |@ 1000
|
||||
19 |@ 1000
|
||||
20 |@ 1000
|
||||
21 |@ 1000
|
||||
22 |@ 1000
|
||||
23 |@ 1000
|
||||
24 |@ 1000
|
||||
25 |@ 1000
|
||||
26 |@ 1000
|
||||
27 |@ 1000
|
||||
28 |@ 1000
|
||||
29 |@ 1000
|
||||
30 |@ 1000
|
||||
31 | 0
|
||||
32 | 0
|
||||
33 | 0
|
||||
34 | 0
|
||||
35 | 0
|
||||
36 | 0
|
||||
37 | 0
|
||||
38 | 0
|
||||
39 | 0
|
||||
>= 40 |@@ 2000
|
||||
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
1 < 0 : ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁: >= 40 | 32001
|
||||
2 < 0 : ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁: >= 40 | 32001
|
||||
3 < 0 : ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁: >= 40 | 32001
|
||||
|
||||
|
||||
key min .------------------------------------------. max | count
|
||||
1 < 0 : ▁▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █: >= 40 | 32001
|
||||
2 < 0 : ▁▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █: >= 40 | 32001
|
||||
3 < 0 : ▁▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █: >= 40 | 32001
|
||||
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* This file and its contents are supplied under the terms of the
|
||||
* Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
* You may only use this file in accordance with the terms of version
|
||||
* 1.0 of the CDDL.
|
||||
*
|
||||
* A full copy of the text of the CDDL should have accompanied this
|
||||
* source. A copy of the CDDL is also available via the Internet at
|
||||
* http://www.illumos.org/license/CDDL.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Joyent, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#pragma D option quiet
|
||||
|
||||
tick-1ms
|
||||
/i++ < 90/
|
||||
{
|
||||
@ = lquantize(i, 0, 100, 1, 1000);
|
||||
}
|
||||
|
||||
tick-1ms
|
||||
/i == 100/
|
||||
{
|
||||
@ = lquantize(i++, 0, 100, 1, 2000);
|
||||
@ = lquantize(i++, 0, 100, 1, 3000);
|
||||
|
||||
printa(@);
|
||||
setopt("aggzoom");
|
||||
printa(@);
|
||||
exit(0);
|
||||
}
|
@ -0,0 +1,211 @@
|
||||
|
||||
|
||||
value ------------- Distribution ------------- count
|
||||
0 | 0
|
||||
1 | 1000
|
||||
2 | 1000
|
||||
3 | 1000
|
||||
4 | 1000
|
||||
5 | 1000
|
||||
6 | 1000
|
||||
7 | 1000
|
||||
8 | 1000
|
||||
9 | 1000
|
||||
10 | 1000
|
||||
11 | 1000
|
||||
12 | 1000
|
||||
13 | 1000
|
||||
14 | 1000
|
||||
15 | 1000
|
||||
16 | 1000
|
||||
17 | 1000
|
||||
18 | 1000
|
||||
19 | 1000
|
||||
20 | 1000
|
||||
21 | 1000
|
||||
22 | 1000
|
||||
23 | 1000
|
||||
24 | 1000
|
||||
25 | 1000
|
||||
26 | 1000
|
||||
27 | 1000
|
||||
28 | 1000
|
||||
29 | 1000
|
||||
30 | 1000
|
||||
31 | 1000
|
||||
32 | 1000
|
||||
33 | 1000
|
||||
34 | 1000
|
||||
35 | 1000
|
||||
36 | 1000
|
||||
37 | 1000
|
||||
38 | 1000
|
||||
39 | 1000
|
||||
40 | 1000
|
||||
41 | 1000
|
||||
42 | 1000
|
||||
43 | 1000
|
||||
44 | 1000
|
||||
45 | 1000
|
||||
46 | 1000
|
||||
47 | 1000
|
||||
48 | 1000
|
||||
49 | 1000
|
||||
50 | 1000
|
||||
51 | 1000
|
||||
52 | 1000
|
||||
53 | 1000
|
||||
54 | 1000
|
||||
55 | 1000
|
||||
56 | 1000
|
||||
57 | 1000
|
||||
58 | 1000
|
||||
59 | 1000
|
||||
60 | 1000
|
||||
61 | 1000
|
||||
62 | 1000
|
||||
63 | 1000
|
||||
64 | 1000
|
||||
65 | 1000
|
||||
66 | 1000
|
||||
67 | 1000
|
||||
68 | 1000
|
||||
69 | 1000
|
||||
70 | 1000
|
||||
71 | 1000
|
||||
72 | 1000
|
||||
73 | 1000
|
||||
74 | 1000
|
||||
75 | 1000
|
||||
76 | 1000
|
||||
77 | 1000
|
||||
78 | 1000
|
||||
79 | 1000
|
||||
80 | 1000
|
||||
81 | 1000
|
||||
82 | 1000
|
||||
83 | 1000
|
||||
84 | 1000
|
||||
85 | 1000
|
||||
86 | 1000
|
||||
87 | 1000
|
||||
88 | 1000
|
||||
89 | 1000
|
||||
90 | 1000
|
||||
91 | 0
|
||||
92 | 0
|
||||
93 | 0
|
||||
94 | 0
|
||||
95 | 0
|
||||
96 | 0
|
||||
97 | 0
|
||||
98 | 0
|
||||
99 | 0
|
||||
>= 100 |@@ 5000
|
||||
|
||||
|
||||
|
||||
value ------------- Distribution ------------- count
|
||||
0 | 0
|
||||
1 |@@@@@@@@ 1000
|
||||
2 |@@@@@@@@ 1000
|
||||
3 |@@@@@@@@ 1000
|
||||
4 |@@@@@@@@ 1000
|
||||
5 |@@@@@@@@ 1000
|
||||
6 |@@@@@@@@ 1000
|
||||
7 |@@@@@@@@ 1000
|
||||
8 |@@@@@@@@ 1000
|
||||
9 |@@@@@@@@ 1000
|
||||
10 |@@@@@@@@ 1000
|
||||
11 |@@@@@@@@ 1000
|
||||
12 |@@@@@@@@ 1000
|
||||
13 |@@@@@@@@ 1000
|
||||
14 |@@@@@@@@ 1000
|
||||
15 |@@@@@@@@ 1000
|
||||
16 |@@@@@@@@ 1000
|
||||
17 |@@@@@@@@ 1000
|
||||
18 |@@@@@@@@ 1000
|
||||
19 |@@@@@@@@ 1000
|
||||
20 |@@@@@@@@ 1000
|
||||
21 |@@@@@@@@ 1000
|
||||
22 |@@@@@@@@ 1000
|
||||
23 |@@@@@@@@ 1000
|
||||
24 |@@@@@@@@ 1000
|
||||
25 |@@@@@@@@ 1000
|
||||
26 |@@@@@@@@ 1000
|
||||
27 |@@@@@@@@ 1000
|
||||
28 |@@@@@@@@ 1000
|
||||
29 |@@@@@@@@ 1000
|
||||
30 |@@@@@@@@ 1000
|
||||
31 |@@@@@@@@ 1000
|
||||
32 |@@@@@@@@ 1000
|
||||
33 |@@@@@@@@ 1000
|
||||
34 |@@@@@@@@ 1000
|
||||
35 |@@@@@@@@ 1000
|
||||
36 |@@@@@@@@ 1000
|
||||
37 |@@@@@@@@ 1000
|
||||
38 |@@@@@@@@ 1000
|
||||
39 |@@@@@@@@ 1000
|
||||
40 |@@@@@@@@ 1000
|
||||
41 |@@@@@@@@ 1000
|
||||
42 |@@@@@@@@ 1000
|
||||
43 |@@@@@@@@ 1000
|
||||
44 |@@@@@@@@ 1000
|
||||
45 |@@@@@@@@ 1000
|
||||
46 |@@@@@@@@ 1000
|
||||
47 |@@@@@@@@ 1000
|
||||
48 |@@@@@@@@ 1000
|
||||
49 |@@@@@@@@ 1000
|
||||
50 |@@@@@@@@ 1000
|
||||
51 |@@@@@@@@ 1000
|
||||
52 |@@@@@@@@ 1000
|
||||
53 |@@@@@@@@ 1000
|
||||
54 |@@@@@@@@ 1000
|
||||
55 |@@@@@@@@ 1000
|
||||
56 |@@@@@@@@ 1000
|
||||
57 |@@@@@@@@ 1000
|
||||
58 |@@@@@@@@ 1000
|
||||
59 |@@@@@@@@ 1000
|
||||
60 |@@@@@@@@ 1000
|
||||
61 |@@@@@@@@ 1000
|
||||
62 |@@@@@@@@ 1000
|
||||
63 |@@@@@@@@ 1000
|
||||
64 |@@@@@@@@ 1000
|
||||
65 |@@@@@@@@ 1000
|
||||
66 |@@@@@@@@ 1000
|
||||
67 |@@@@@@@@ 1000
|
||||
68 |@@@@@@@@ 1000
|
||||
69 |@@@@@@@@ 1000
|
||||
70 |@@@@@@@@ 1000
|
||||
71 |@@@@@@@@ 1000
|
||||
72 |@@@@@@@@ 1000
|
||||
73 |@@@@@@@@ 1000
|
||||
74 |@@@@@@@@ 1000
|
||||
75 |@@@@@@@@ 1000
|
||||
76 |@@@@@@@@ 1000
|
||||
77 |@@@@@@@@ 1000
|
||||
78 |@@@@@@@@ 1000
|
||||
79 |@@@@@@@@ 1000
|
||||
80 |@@@@@@@@ 1000
|
||||
81 |@@@@@@@@ 1000
|
||||
82 |@@@@@@@@ 1000
|
||||
83 |@@@@@@@@ 1000
|
||||
84 |@@@@@@@@ 1000
|
||||
85 |@@@@@@@@ 1000
|
||||
86 |@@@@@@@@ 1000
|
||||
87 |@@@@@@@@ 1000
|
||||
88 |@@@@@@@@ 1000
|
||||
89 |@@@@@@@@ 1000
|
||||
90 |@@@@@@@@ 1000
|
||||
91 | 0
|
||||
92 | 0
|
||||
93 | 0
|
||||
94 | 0
|
||||
95 | 0
|
||||
96 | 0
|
||||
97 | 0
|
||||
98 | 0
|
||||
99 | 0
|
||||
>= 100 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5000
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2011, Joyent, Inc. All rights reserved.
|
||||
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
|
||||
* Copyright (c) 2012 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
@ -1300,6 +1300,231 @@ dtrace_aggregate_walk(dtrace_hdl_t *dtp, dtrace_aggregate_f *func, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
dt_aggregate_total(dtrace_hdl_t *dtp, boolean_t clear)
|
||||
{
|
||||
dt_ahashent_t *h;
|
||||
dtrace_aggdata_t **total;
|
||||
dtrace_aggid_t max = DTRACE_AGGVARIDNONE, id;
|
||||
dt_aggregate_t *agp = &dtp->dt_aggregate;
|
||||
dt_ahash_t *hash = &agp->dtat_hash;
|
||||
uint32_t tflags;
|
||||
|
||||
tflags = DTRACE_A_TOTAL | DTRACE_A_HASNEGATIVES | DTRACE_A_HASPOSITIVES;
|
||||
|
||||
/*
|
||||
* If we need to deliver per-aggregation totals, we're going to take
|
||||
* three passes over the aggregate: one to clear everything out and
|
||||
* determine our maximum aggregation ID, one to actually total
|
||||
* everything up, and a final pass to assign the totals to the
|
||||
* individual elements.
|
||||
*/
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
|
||||
dtrace_aggdata_t *aggdata = &h->dtahe_data;
|
||||
|
||||
if ((id = dt_aggregate_aggvarid(h)) > max)
|
||||
max = id;
|
||||
|
||||
aggdata->dtada_total = 0;
|
||||
aggdata->dtada_flags &= ~tflags;
|
||||
}
|
||||
|
||||
if (clear || max == DTRACE_AGGVARIDNONE)
|
||||
return (0);
|
||||
|
||||
total = dt_zalloc(dtp, (max + 1) * sizeof (dtrace_aggdata_t *));
|
||||
|
||||
if (total == NULL)
|
||||
return (-1);
|
||||
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
|
||||
dtrace_aggdata_t *aggdata = &h->dtahe_data;
|
||||
dtrace_aggdesc_t *agg = aggdata->dtada_desc;
|
||||
dtrace_recdesc_t *rec;
|
||||
caddr_t data;
|
||||
int64_t val, *addr;
|
||||
|
||||
rec = &agg->dtagd_rec[agg->dtagd_nrecs - 1];
|
||||
data = aggdata->dtada_data;
|
||||
addr = (int64_t *)(uintptr_t)(data + rec->dtrd_offset);
|
||||
|
||||
switch (rec->dtrd_action) {
|
||||
case DTRACEAGG_STDDEV:
|
||||
val = dt_stddev((uint64_t *)addr, 1);
|
||||
break;
|
||||
|
||||
case DTRACEAGG_SUM:
|
||||
case DTRACEAGG_COUNT:
|
||||
val = *addr;
|
||||
break;
|
||||
|
||||
case DTRACEAGG_AVG:
|
||||
val = addr[0] ? (addr[1] / addr[0]) : 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
if (total[agg->dtagd_varid] == NULL) {
|
||||
total[agg->dtagd_varid] = aggdata;
|
||||
aggdata->dtada_flags |= DTRACE_A_TOTAL;
|
||||
} else {
|
||||
aggdata = total[agg->dtagd_varid];
|
||||
}
|
||||
|
||||
if (val > 0)
|
||||
aggdata->dtada_flags |= DTRACE_A_HASPOSITIVES;
|
||||
|
||||
if (val < 0) {
|
||||
aggdata->dtada_flags |= DTRACE_A_HASNEGATIVES;
|
||||
val = -val;
|
||||
}
|
||||
|
||||
if (dtp->dt_options[DTRACEOPT_AGGZOOM] != DTRACEOPT_UNSET) {
|
||||
val = (int64_t)((long double)val *
|
||||
(1 / DTRACE_AGGZOOM_MAX));
|
||||
|
||||
if (val > aggdata->dtada_total)
|
||||
aggdata->dtada_total = val;
|
||||
} else {
|
||||
aggdata->dtada_total += val;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* And now one final pass to set everyone's total.
|
||||
*/
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
|
||||
dtrace_aggdata_t *aggdata = &h->dtahe_data, *t;
|
||||
dtrace_aggdesc_t *agg = aggdata->dtada_desc;
|
||||
|
||||
if ((t = total[agg->dtagd_varid]) == NULL || aggdata == t)
|
||||
continue;
|
||||
|
||||
aggdata->dtada_total = t->dtada_total;
|
||||
aggdata->dtada_flags |= (t->dtada_flags & tflags);
|
||||
}
|
||||
|
||||
dt_free(dtp, total);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
dt_aggregate_minmaxbin(dtrace_hdl_t *dtp, boolean_t clear)
|
||||
{
|
||||
dt_ahashent_t *h;
|
||||
dtrace_aggdata_t **minmax;
|
||||
dtrace_aggid_t max = DTRACE_AGGVARIDNONE, id;
|
||||
dt_aggregate_t *agp = &dtp->dt_aggregate;
|
||||
dt_ahash_t *hash = &agp->dtat_hash;
|
||||
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
|
||||
dtrace_aggdata_t *aggdata = &h->dtahe_data;
|
||||
|
||||
if ((id = dt_aggregate_aggvarid(h)) > max)
|
||||
max = id;
|
||||
|
||||
aggdata->dtada_minbin = 0;
|
||||
aggdata->dtada_maxbin = 0;
|
||||
aggdata->dtada_flags &= ~DTRACE_A_MINMAXBIN;
|
||||
}
|
||||
|
||||
if (clear || max == DTRACE_AGGVARIDNONE)
|
||||
return (0);
|
||||
|
||||
minmax = dt_zalloc(dtp, (max + 1) * sizeof (dtrace_aggdata_t *));
|
||||
|
||||
if (minmax == NULL)
|
||||
return (-1);
|
||||
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
|
||||
dtrace_aggdata_t *aggdata = &h->dtahe_data;
|
||||
dtrace_aggdesc_t *agg = aggdata->dtada_desc;
|
||||
dtrace_recdesc_t *rec;
|
||||
caddr_t data;
|
||||
int64_t *addr;
|
||||
int minbin = -1, maxbin = -1, i;
|
||||
int start = 0, size;
|
||||
|
||||
rec = &agg->dtagd_rec[agg->dtagd_nrecs - 1];
|
||||
size = rec->dtrd_size / sizeof (int64_t);
|
||||
data = aggdata->dtada_data;
|
||||
addr = (int64_t *)(uintptr_t)(data + rec->dtrd_offset);
|
||||
|
||||
switch (rec->dtrd_action) {
|
||||
case DTRACEAGG_LQUANTIZE:
|
||||
/*
|
||||
* For lquantize(), we always display the entire range
|
||||
* of the aggregation when aggpack is set.
|
||||
*/
|
||||
start = 1;
|
||||
minbin = start;
|
||||
maxbin = size - 1 - start;
|
||||
break;
|
||||
|
||||
case DTRACEAGG_QUANTIZE:
|
||||
for (i = start; i < size; i++) {
|
||||
if (!addr[i])
|
||||
continue;
|
||||
|
||||
if (minbin == -1)
|
||||
minbin = i - start;
|
||||
|
||||
maxbin = i - start;
|
||||
}
|
||||
|
||||
if (minbin == -1) {
|
||||
/*
|
||||
* If we have no data (e.g., due to a clear()
|
||||
* or negative increments), we'll use the
|
||||
* zero bucket as both our min and max.
|
||||
*/
|
||||
minbin = maxbin = DTRACE_QUANTIZE_ZEROBUCKET;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
if (minmax[agg->dtagd_varid] == NULL) {
|
||||
minmax[agg->dtagd_varid] = aggdata;
|
||||
aggdata->dtada_flags |= DTRACE_A_MINMAXBIN;
|
||||
aggdata->dtada_minbin = minbin;
|
||||
aggdata->dtada_maxbin = maxbin;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (minbin < minmax[agg->dtagd_varid]->dtada_minbin)
|
||||
minmax[agg->dtagd_varid]->dtada_minbin = minbin;
|
||||
|
||||
if (maxbin > minmax[agg->dtagd_varid]->dtada_maxbin)
|
||||
minmax[agg->dtagd_varid]->dtada_maxbin = maxbin;
|
||||
}
|
||||
|
||||
/*
|
||||
* And now one final pass to set everyone's minbin and maxbin.
|
||||
*/
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall) {
|
||||
dtrace_aggdata_t *aggdata = &h->dtahe_data, *mm;
|
||||
dtrace_aggdesc_t *agg = aggdata->dtada_desc;
|
||||
|
||||
if ((mm = minmax[agg->dtagd_varid]) == NULL || aggdata == mm)
|
||||
continue;
|
||||
|
||||
aggdata->dtada_minbin = mm->dtada_minbin;
|
||||
aggdata->dtada_maxbin = mm->dtada_maxbin;
|
||||
aggdata->dtada_flags |= DTRACE_A_MINMAXBIN;
|
||||
}
|
||||
|
||||
dt_free(dtp, minmax);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
dt_aggregate_walk_sorted(dtrace_hdl_t *dtp,
|
||||
dtrace_aggregate_f *func, void *arg,
|
||||
@ -1309,6 +1534,23 @@ dt_aggregate_walk_sorted(dtrace_hdl_t *dtp,
|
||||
dt_ahashent_t *h, **sorted;
|
||||
dt_ahash_t *hash = &agp->dtat_hash;
|
||||
size_t i, nentries = 0;
|
||||
int rval = -1;
|
||||
|
||||
agp->dtat_flags &= ~(DTRACE_A_TOTAL | DTRACE_A_MINMAXBIN);
|
||||
|
||||
if (dtp->dt_options[DTRACEOPT_AGGHIST] != DTRACEOPT_UNSET) {
|
||||
agp->dtat_flags |= DTRACE_A_TOTAL;
|
||||
|
||||
if (dt_aggregate_total(dtp, B_FALSE) != 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (dtp->dt_options[DTRACEOPT_AGGPACK] != DTRACEOPT_UNSET) {
|
||||
agp->dtat_flags |= DTRACE_A_MINMAXBIN;
|
||||
|
||||
if (dt_aggregate_minmaxbin(dtp, B_FALSE) != 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
for (h = hash->dtah_all; h != NULL; h = h->dtahe_nextall)
|
||||
nentries++;
|
||||
@ -1316,7 +1558,7 @@ dt_aggregate_walk_sorted(dtrace_hdl_t *dtp,
|
||||
sorted = dt_alloc(dtp, nentries * sizeof (dt_ahashent_t *));
|
||||
|
||||
if (sorted == NULL)
|
||||
return (-1);
|
||||
goto out;
|
||||
|
||||
for (h = hash->dtah_all, i = 0; h != NULL; h = h->dtahe_nextall)
|
||||
sorted[i++] = h;
|
||||
@ -1340,14 +1582,20 @@ dt_aggregate_walk_sorted(dtrace_hdl_t *dtp,
|
||||
for (i = 0; i < nentries; i++) {
|
||||
h = sorted[i];
|
||||
|
||||
if (dt_aggwalk_rval(dtp, h, func(&h->dtahe_data, arg)) == -1) {
|
||||
dt_free(dtp, sorted);
|
||||
return (-1);
|
||||
}
|
||||
if (dt_aggwalk_rval(dtp, h, func(&h->dtahe_data, arg)) == -1)
|
||||
goto out;
|
||||
}
|
||||
|
||||
rval = 0;
|
||||
out:
|
||||
if (agp->dtat_flags & DTRACE_A_TOTAL)
|
||||
(void) dt_aggregate_total(dtp, B_TRUE);
|
||||
|
||||
if (agp->dtat_flags & DTRACE_A_MINMAXBIN)
|
||||
(void) dt_aggregate_minmaxbin(dtp, B_TRUE);
|
||||
|
||||
dt_free(dtp, sorted);
|
||||
return (0);
|
||||
return (rval);
|
||||
}
|
||||
|
||||
int
|
||||
@ -1870,6 +2118,8 @@ dtrace_aggregate_print(dtrace_hdl_t *dtp, FILE *fp,
|
||||
{
|
||||
dt_print_aggdata_t pd;
|
||||
|
||||
bzero(&pd, sizeof (pd));
|
||||
|
||||
pd.dtpa_dtp = dtp;
|
||||
pd.dtpa_fp = fp;
|
||||
pd.dtpa_allunprint = 1;
|
||||
|
@ -24,7 +24,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2011, Joyent, Inc. All rights reserved.
|
||||
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
|
||||
* Copyright (c) 2012 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
@ -59,6 +59,25 @@ dt_fabsl(long double x)
|
||||
return (x);
|
||||
}
|
||||
|
||||
static int
|
||||
dt_ndigits(long long val)
|
||||
{
|
||||
int rval = 1;
|
||||
long long cmp = 10;
|
||||
|
||||
if (val < 0) {
|
||||
val = val == INT64_MIN ? INT64_MAX : -val;
|
||||
rval++;
|
||||
}
|
||||
|
||||
while (val > cmp && cmp > 0) {
|
||||
rval++;
|
||||
cmp *= 10;
|
||||
}
|
||||
|
||||
return (rval < 4 ? 4 : rval);
|
||||
}
|
||||
|
||||
/*
|
||||
* 128-bit arithmetic functions needed to support the stddev() aggregating
|
||||
* action.
|
||||
@ -487,7 +506,125 @@ dt_nullrec()
|
||||
return (DTRACE_CONSUME_NEXT);
|
||||
}
|
||||
|
||||
int
|
||||
static void
|
||||
dt_quantize_total(dtrace_hdl_t *dtp, int64_t datum, long double *total)
|
||||
{
|
||||
long double val = dt_fabsl((long double)datum);
|
||||
|
||||
if (dtp->dt_options[DTRACEOPT_AGGZOOM] == DTRACEOPT_UNSET) {
|
||||
*total += val;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're zooming in on an aggregation, we want the height of the
|
||||
* highest value to be approximately 95% of total bar height -- so we
|
||||
* adjust up by the reciprocal of DTRACE_AGGZOOM_MAX when comparing to
|
||||
* our highest value.
|
||||
*/
|
||||
val *= 1 / DTRACE_AGGZOOM_MAX;
|
||||
|
||||
if (*total < val)
|
||||
*total = val;
|
||||
}
|
||||
|
||||
static int
|
||||
dt_print_quanthdr(dtrace_hdl_t *dtp, FILE *fp, int width)
|
||||
{
|
||||
return (dt_printf(dtp, fp, "\n%*s %41s %-9s\n",
|
||||
width ? width : 16, width ? "key" : "value",
|
||||
"------------- Distribution -------------", "count"));
|
||||
}
|
||||
|
||||
static int
|
||||
dt_print_quanthdr_packed(dtrace_hdl_t *dtp, FILE *fp, int width,
|
||||
const dtrace_aggdata_t *aggdata, dtrace_actkind_t action)
|
||||
{
|
||||
int min = aggdata->dtada_minbin, max = aggdata->dtada_maxbin;
|
||||
int minwidth, maxwidth, i;
|
||||
|
||||
assert(action == DTRACEAGG_QUANTIZE || action == DTRACEAGG_LQUANTIZE);
|
||||
|
||||
if (action == DTRACEAGG_QUANTIZE) {
|
||||
if (min != 0 && min != DTRACE_QUANTIZE_ZEROBUCKET)
|
||||
min--;
|
||||
|
||||
if (max < DTRACE_QUANTIZE_NBUCKETS - 1)
|
||||
max++;
|
||||
|
||||
minwidth = dt_ndigits(DTRACE_QUANTIZE_BUCKETVAL(min));
|
||||
maxwidth = dt_ndigits(DTRACE_QUANTIZE_BUCKETVAL(max));
|
||||
} else {
|
||||
maxwidth = 8;
|
||||
minwidth = maxwidth - 1;
|
||||
max++;
|
||||
}
|
||||
|
||||
if (dt_printf(dtp, fp, "\n%*s %*s .",
|
||||
width, width > 0 ? "key" : "", minwidth, "min") < 0)
|
||||
return (-1);
|
||||
|
||||
for (i = min; i <= max; i++) {
|
||||
if (dt_printf(dtp, fp, "-") < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (dt_printf(dtp, fp, ". %*s | count\n", -maxwidth, "max"));
|
||||
}
|
||||
|
||||
/*
|
||||
* We use a subset of the Unicode Block Elements (U+2588 through U+258F,
|
||||
* inclusive) to represent aggregations via UTF-8 -- which are expressed via
|
||||
* 3-byte UTF-8 sequences.
|
||||
*/
|
||||
#define DTRACE_AGGUTF8_FULL 0x2588
|
||||
#define DTRACE_AGGUTF8_BASE 0x258f
|
||||
#define DTRACE_AGGUTF8_LEVELS 8
|
||||
|
||||
#define DTRACE_AGGUTF8_BYTE0(val) (0xe0 | ((val) >> 12))
|
||||
#define DTRACE_AGGUTF8_BYTE1(val) (0x80 | (((val) >> 6) & 0x3f))
|
||||
#define DTRACE_AGGUTF8_BYTE2(val) (0x80 | ((val) & 0x3f))
|
||||
|
||||
static int
|
||||
dt_print_quantline_utf8(dtrace_hdl_t *dtp, FILE *fp, int64_t val,
|
||||
uint64_t normal, long double total)
|
||||
{
|
||||
uint_t len = 40, i, whole, partial;
|
||||
long double f = (dt_fabsl((long double)val) * len) / total;
|
||||
const char *spaces = " ";
|
||||
|
||||
whole = (uint_t)f;
|
||||
partial = (uint_t)((f - (long double)(uint_t)f) *
|
||||
(long double)DTRACE_AGGUTF8_LEVELS);
|
||||
|
||||
if (dt_printf(dtp, fp, "|") < 0)
|
||||
return (-1);
|
||||
|
||||
for (i = 0; i < whole; i++) {
|
||||
if (dt_printf(dtp, fp, "%c%c%c",
|
||||
DTRACE_AGGUTF8_BYTE0(DTRACE_AGGUTF8_FULL),
|
||||
DTRACE_AGGUTF8_BYTE1(DTRACE_AGGUTF8_FULL),
|
||||
DTRACE_AGGUTF8_BYTE2(DTRACE_AGGUTF8_FULL)) < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (partial != 0) {
|
||||
partial = DTRACE_AGGUTF8_BASE - (partial - 1);
|
||||
|
||||
if (dt_printf(dtp, fp, "%c%c%c",
|
||||
DTRACE_AGGUTF8_BYTE0(partial),
|
||||
DTRACE_AGGUTF8_BYTE1(partial),
|
||||
DTRACE_AGGUTF8_BYTE2(partial)) < 0)
|
||||
return (-1);
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
return (dt_printf(dtp, fp, "%s %-9lld\n", spaces + i,
|
||||
(long long)val / normal));
|
||||
}
|
||||
|
||||
static int
|
||||
dt_print_quantline(dtrace_hdl_t *dtp, FILE *fp, int64_t val,
|
||||
uint64_t normal, long double total, char positives, char negatives)
|
||||
{
|
||||
@ -505,6 +642,11 @@ dt_print_quantline(dtrace_hdl_t *dtp, FILE *fp, int64_t val,
|
||||
|
||||
if (!negatives) {
|
||||
if (positives) {
|
||||
if (dtp->dt_encoding == DT_ENCODING_UTF8) {
|
||||
return (dt_print_quantline_utf8(dtp, fp, val,
|
||||
normal, total));
|
||||
}
|
||||
|
||||
f = (dt_fabsl((long double)val) * len) / total;
|
||||
depth = (uint_t)(f + 0.5);
|
||||
} else {
|
||||
@ -547,6 +689,77 @@ dt_print_quantline(dtrace_hdl_t *dtp, FILE *fp, int64_t val,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* As with UTF-8 printing of aggregations, we use a subset of the Unicode
|
||||
* Block Elements (U+2581 through U+2588, inclusive) to represent our packed
|
||||
* aggregation.
|
||||
*/
|
||||
#define DTRACE_AGGPACK_BASE 0x2581
|
||||
#define DTRACE_AGGPACK_LEVELS 8
|
||||
|
||||
static int
|
||||
dt_print_packed(dtrace_hdl_t *dtp, FILE *fp,
|
||||
long double datum, long double total)
|
||||
{
|
||||
static boolean_t utf8_checked = 0;
|
||||
static boolean_t utf8;
|
||||
char *ascii = "__xxxxXX";
|
||||
char *neg = "vvvvVV";
|
||||
unsigned int len;
|
||||
long double val;
|
||||
|
||||
while (!utf8_checked) {
|
||||
char *term;
|
||||
|
||||
/*
|
||||
* We want to determine if we can reasonably emit UTF-8 for our
|
||||
* packed aggregation. To do this, we will check for terminals
|
||||
* that are known to be primitive to emit UTF-8 on these.
|
||||
*/
|
||||
utf8_checked = B_TRUE;
|
||||
|
||||
if (dtp->dt_encoding == DT_ENCODING_ASCII)
|
||||
break;
|
||||
|
||||
if (dtp->dt_encoding == DT_ENCODING_UTF8) {
|
||||
utf8 = B_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((term = getenv("TERM")) != NULL &&
|
||||
(strcmp(term, "sun") == 0 ||
|
||||
strcmp(term, "sun-color") == 0) ||
|
||||
strcmp(term, "dumb") == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
utf8 = B_TRUE;
|
||||
}
|
||||
|
||||
if (datum == 0)
|
||||
return (dt_printf(dtp, fp, " "));
|
||||
|
||||
if (datum < 0) {
|
||||
len = strlen(neg);
|
||||
val = dt_fabsl(datum * (len - 1)) / total;
|
||||
return (dt_printf(dtp, fp, "%c", neg[(uint_t)(val + 0.5)]));
|
||||
}
|
||||
|
||||
if (utf8) {
|
||||
int block = DTRACE_AGGPACK_BASE + (unsigned int)(((datum *
|
||||
(DTRACE_AGGPACK_LEVELS - 1)) / total) + 0.5);
|
||||
|
||||
return (dt_printf(dtp, fp, "%c%c%c",
|
||||
DTRACE_AGGUTF8_BYTE0(block),
|
||||
DTRACE_AGGUTF8_BYTE1(block),
|
||||
DTRACE_AGGUTF8_BYTE2(block)));
|
||||
}
|
||||
|
||||
len = strlen(ascii);
|
||||
val = (datum * (len - 1)) / total;
|
||||
return (dt_printf(dtp, fp, "%c", ascii[(uint_t)(val + 0.5)]));
|
||||
}
|
||||
|
||||
int
|
||||
dt_print_quantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
size_t size, uint64_t normal)
|
||||
@ -564,9 +777,9 @@ dt_print_quantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
|
||||
if (first_bin == DTRACE_QUANTIZE_NBUCKETS - 1) {
|
||||
/*
|
||||
* There isn't any data. This is possible if (and only if)
|
||||
* negative increment values have been used. In this case,
|
||||
* we'll print the buckets around 0.
|
||||
* There isn't any data. This is possible if the aggregation
|
||||
* has been clear()'d or if negative increment values have been
|
||||
* used. Regardless, we'll print the buckets around 0.
|
||||
*/
|
||||
first_bin = DTRACE_QUANTIZE_ZEROBUCKET - 1;
|
||||
last_bin = DTRACE_QUANTIZE_ZEROBUCKET + 1;
|
||||
@ -584,11 +797,10 @@ dt_print_quantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
for (i = first_bin; i <= last_bin; i++) {
|
||||
positives |= (data[i] > 0);
|
||||
negatives |= (data[i] < 0);
|
||||
total += dt_fabsl((long double)data[i]);
|
||||
dt_quantize_total(dtp, data[i], &total);
|
||||
}
|
||||
|
||||
if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value",
|
||||
"------------- Distribution -------------", "count") < 0)
|
||||
if (dt_print_quanthdr(dtp, fp, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
for (i = first_bin; i <= last_bin; i++) {
|
||||
@ -604,6 +816,48 @@ dt_print_quantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
dt_print_quantize_packed(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
size_t size, const dtrace_aggdata_t *aggdata)
|
||||
{
|
||||
const int64_t *data = addr;
|
||||
long double total = 0, count = 0;
|
||||
int min = aggdata->dtada_minbin, max = aggdata->dtada_maxbin, i;
|
||||
int64_t minval, maxval;
|
||||
|
||||
if (size != DTRACE_QUANTIZE_NBUCKETS * sizeof (uint64_t))
|
||||
return (dt_set_errno(dtp, EDT_DMISMATCH));
|
||||
|
||||
if (min != 0 && min != DTRACE_QUANTIZE_ZEROBUCKET)
|
||||
min--;
|
||||
|
||||
if (max < DTRACE_QUANTIZE_NBUCKETS - 1)
|
||||
max++;
|
||||
|
||||
minval = DTRACE_QUANTIZE_BUCKETVAL(min);
|
||||
maxval = DTRACE_QUANTIZE_BUCKETVAL(max);
|
||||
|
||||
if (dt_printf(dtp, fp, " %*lld :", dt_ndigits(minval),
|
||||
(long long)minval) < 0)
|
||||
return (-1);
|
||||
|
||||
for (i = min; i <= max; i++) {
|
||||
dt_quantize_total(dtp, data[i], &total);
|
||||
count += data[i];
|
||||
}
|
||||
|
||||
for (i = min; i <= max; i++) {
|
||||
if (dt_print_packed(dtp, fp, data[i], total) < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (dt_printf(dtp, fp, ": %*lld | %lld\n",
|
||||
-dt_ndigits(maxval), (long long)maxval, (long long)count) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
dt_print_lquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
size_t size, uint64_t normal)
|
||||
@ -651,7 +905,7 @@ dt_print_lquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
for (i = first_bin; i <= last_bin; i++) {
|
||||
positives |= (data[i] > 0);
|
||||
negatives |= (data[i] < 0);
|
||||
total += dt_fabsl((long double)data[i]);
|
||||
dt_quantize_total(dtp, data[i], &total);
|
||||
}
|
||||
|
||||
if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value",
|
||||
@ -663,8 +917,7 @@ dt_print_lquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
int err;
|
||||
|
||||
if (i == 0) {
|
||||
(void) snprintf(c, sizeof (c), "< %d",
|
||||
base / (uint32_t)normal);
|
||||
(void) snprintf(c, sizeof (c), "< %d", base);
|
||||
err = dt_printf(dtp, fp, "%16s ", c);
|
||||
} else if (i == levels + 1) {
|
||||
(void) snprintf(c, sizeof (c), ">= %d",
|
||||
@ -683,6 +936,59 @@ dt_print_lquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
dt_print_lquantize_packed(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
size_t size, const dtrace_aggdata_t *aggdata)
|
||||
{
|
||||
const int64_t *data = addr;
|
||||
long double total = 0, count = 0;
|
||||
int min, max, base, err;
|
||||
uint64_t arg;
|
||||
uint16_t step, levels;
|
||||
char c[32];
|
||||
unsigned int i;
|
||||
|
||||
if (size < sizeof (uint64_t))
|
||||
return (dt_set_errno(dtp, EDT_DMISMATCH));
|
||||
|
||||
arg = *data++;
|
||||
size -= sizeof (uint64_t);
|
||||
|
||||
base = DTRACE_LQUANTIZE_BASE(arg);
|
||||
step = DTRACE_LQUANTIZE_STEP(arg);
|
||||
levels = DTRACE_LQUANTIZE_LEVELS(arg);
|
||||
|
||||
if (size != sizeof (uint64_t) * (levels + 2))
|
||||
return (dt_set_errno(dtp, EDT_DMISMATCH));
|
||||
|
||||
min = 0;
|
||||
max = levels + 1;
|
||||
|
||||
if (min == 0) {
|
||||
(void) snprintf(c, sizeof (c), "< %d", base);
|
||||
err = dt_printf(dtp, fp, "%8s :", c);
|
||||
} else {
|
||||
err = dt_printf(dtp, fp, "%8d :", base + (min - 1) * step);
|
||||
}
|
||||
|
||||
if (err < 0)
|
||||
return (-1);
|
||||
|
||||
for (i = min; i <= max; i++) {
|
||||
dt_quantize_total(dtp, data[i], &total);
|
||||
count += data[i];
|
||||
}
|
||||
|
||||
for (i = min; i <= max; i++) {
|
||||
if (dt_print_packed(dtp, fp, data[i], total) < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
(void) snprintf(c, sizeof (c), ">= %d", base + (levels * step));
|
||||
return (dt_printf(dtp, fp, ": %-8s | %lld\n", c, (long long)count));
|
||||
}
|
||||
|
||||
int
|
||||
dt_print_llquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
size_t size, uint64_t normal)
|
||||
@ -740,7 +1046,7 @@ dt_print_llquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr,
|
||||
for (i = first_bin; i <= last_bin; i++) {
|
||||
positives |= (data[i] > 0);
|
||||
negatives |= (data[i] < 0);
|
||||
total += dt_fabsl((long double)data[i]);
|
||||
dt_quantize_total(dtp, data[i], &total);
|
||||
}
|
||||
|
||||
if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value",
|
||||
@ -823,7 +1129,7 @@ dt_print_stddev(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr,
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
static int
|
||||
dt_print_bytes(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr,
|
||||
size_t nbytes, int width, int quiet, int forceraw)
|
||||
{
|
||||
@ -876,10 +1182,12 @@ dt_print_bytes(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr,
|
||||
if (j != nbytes)
|
||||
break;
|
||||
|
||||
if (quiet)
|
||||
if (quiet) {
|
||||
return (dt_printf(dtp, fp, "%s", c));
|
||||
else
|
||||
return (dt_printf(dtp, fp, " %-*s", width, c));
|
||||
} else {
|
||||
return (dt_printf(dtp, fp, " %s%*s",
|
||||
width < 0 ? " " : "", width, c));
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
@ -1793,10 +2101,83 @@ dt_trunc(dtrace_hdl_t *dtp, caddr_t base, dtrace_recdesc_t *rec)
|
||||
|
||||
static int
|
||||
dt_print_datum(dtrace_hdl_t *dtp, FILE *fp, dtrace_recdesc_t *rec,
|
||||
caddr_t addr, size_t size, uint64_t normal)
|
||||
caddr_t addr, size_t size, const dtrace_aggdata_t *aggdata,
|
||||
uint64_t normal, dt_print_aggdata_t *pd)
|
||||
{
|
||||
int err;
|
||||
int err, width;
|
||||
dtrace_actkind_t act = rec->dtrd_action;
|
||||
boolean_t packed = pd->dtpa_agghist || pd->dtpa_aggpack;
|
||||
dtrace_aggdesc_t *agg = aggdata->dtada_desc;
|
||||
|
||||
static struct {
|
||||
size_t size;
|
||||
int width;
|
||||
int packedwidth;
|
||||
} *fmt, fmttab[] = {
|
||||
{ sizeof (uint8_t), 3, 3 },
|
||||
{ sizeof (uint16_t), 5, 5 },
|
||||
{ sizeof (uint32_t), 8, 8 },
|
||||
{ sizeof (uint64_t), 16, 16 },
|
||||
{ 0, -50, 16 }
|
||||
};
|
||||
|
||||
if (packed && pd->dtpa_agghisthdr != agg->dtagd_varid) {
|
||||
dtrace_recdesc_t *r;
|
||||
|
||||
width = 0;
|
||||
|
||||
/*
|
||||
* To print our quantization header for either an agghist or
|
||||
* aggpack aggregation, we need to iterate through all of our
|
||||
* of our records to determine their width.
|
||||
*/
|
||||
for (r = rec; !DTRACEACT_ISAGG(r->dtrd_action); r++) {
|
||||
for (fmt = fmttab; fmt->size &&
|
||||
fmt->size != r->dtrd_size; fmt++)
|
||||
continue;
|
||||
|
||||
width += fmt->packedwidth + 1;
|
||||
}
|
||||
|
||||
if (pd->dtpa_agghist) {
|
||||
if (dt_print_quanthdr(dtp, fp, width) < 0)
|
||||
return (-1);
|
||||
} else {
|
||||
if (dt_print_quanthdr_packed(dtp, fp,
|
||||
width, aggdata, r->dtrd_action) < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
pd->dtpa_agghisthdr = agg->dtagd_varid;
|
||||
}
|
||||
|
||||
if (pd->dtpa_agghist && DTRACEACT_ISAGG(act)) {
|
||||
char positives = aggdata->dtada_flags & DTRACE_A_HASPOSITIVES;
|
||||
char negatives = aggdata->dtada_flags & DTRACE_A_HASNEGATIVES;
|
||||
int64_t val;
|
||||
|
||||
assert(act == DTRACEAGG_SUM || act == DTRACEAGG_COUNT);
|
||||
val = (long long)*((uint64_t *)addr);
|
||||
|
||||
if (dt_printf(dtp, fp, " ") < 0)
|
||||
return (-1);
|
||||
|
||||
return (dt_print_quantline(dtp, fp, val, normal,
|
||||
aggdata->dtada_total, positives, negatives));
|
||||
}
|
||||
|
||||
if (pd->dtpa_aggpack && DTRACEACT_ISAGG(act)) {
|
||||
switch (act) {
|
||||
case DTRACEAGG_QUANTIZE:
|
||||
return (dt_print_quantize_packed(dtp,
|
||||
fp, addr, size, aggdata));
|
||||
case DTRACEAGG_LQUANTIZE:
|
||||
return (dt_print_lquantize_packed(dtp,
|
||||
fp, addr, size, aggdata));
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (act) {
|
||||
case DTRACEACT_STACK:
|
||||
@ -1839,28 +2220,33 @@ dt_print_datum(dtrace_hdl_t *dtp, FILE *fp, dtrace_recdesc_t *rec,
|
||||
break;
|
||||
}
|
||||
|
||||
for (fmt = fmttab; fmt->size && fmt->size != size; fmt++)
|
||||
continue;
|
||||
|
||||
width = packed ? fmt->packedwidth : fmt->width;
|
||||
|
||||
switch (size) {
|
||||
case sizeof (uint64_t):
|
||||
err = dt_printf(dtp, fp, " %16lld",
|
||||
err = dt_printf(dtp, fp, " %*lld", width,
|
||||
/* LINTED - alignment */
|
||||
(long long)*((uint64_t *)addr) / normal);
|
||||
break;
|
||||
case sizeof (uint32_t):
|
||||
/* LINTED - alignment */
|
||||
err = dt_printf(dtp, fp, " %8d", *((uint32_t *)addr) /
|
||||
err = dt_printf(dtp, fp, " %*d", width, *((uint32_t *)addr) /
|
||||
(uint32_t)normal);
|
||||
break;
|
||||
case sizeof (uint16_t):
|
||||
/* LINTED - alignment */
|
||||
err = dt_printf(dtp, fp, " %5d", *((uint16_t *)addr) /
|
||||
err = dt_printf(dtp, fp, " %*d", width, *((uint16_t *)addr) /
|
||||
(uint32_t)normal);
|
||||
break;
|
||||
case sizeof (uint8_t):
|
||||
err = dt_printf(dtp, fp, " %3d", *((uint8_t *)addr) /
|
||||
err = dt_printf(dtp, fp, " %*d", width, *((uint8_t *)addr) /
|
||||
(uint32_t)normal);
|
||||
break;
|
||||
default:
|
||||
err = dt_print_bytes(dtp, fp, addr, size, 50, 0, 0);
|
||||
err = dt_print_bytes(dtp, fp, addr, size, width, 0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1881,6 +2267,9 @@ dt_print_aggs(const dtrace_aggdata_t **aggsdata, int naggvars, void *arg)
|
||||
caddr_t addr;
|
||||
size_t size;
|
||||
|
||||
pd->dtpa_agghist = (aggdata->dtada_flags & DTRACE_A_TOTAL);
|
||||
pd->dtpa_aggpack = (aggdata->dtada_flags & DTRACE_A_MINMAXBIN);
|
||||
|
||||
/*
|
||||
* Iterate over each record description in the key, printing the traced
|
||||
* data, skipping the first datum (the tuple member created by the
|
||||
@ -1897,7 +2286,8 @@ dt_print_aggs(const dtrace_aggdata_t **aggsdata, int naggvars, void *arg)
|
||||
break;
|
||||
}
|
||||
|
||||
if (dt_print_datum(dtp, fp, rec, addr, size, 1) < 0)
|
||||
if (dt_print_datum(dtp, fp, rec, addr,
|
||||
size, aggdata, 1, pd) < 0)
|
||||
return (-1);
|
||||
|
||||
if (dt_buffered_flush(dtp, NULL, rec, aggdata,
|
||||
@ -1920,7 +2310,8 @@ dt_print_aggs(const dtrace_aggdata_t **aggsdata, int naggvars, void *arg)
|
||||
assert(DTRACEACT_ISAGG(act));
|
||||
normal = aggdata->dtada_normal;
|
||||
|
||||
if (dt_print_datum(dtp, fp, rec, addr, size, normal) < 0)
|
||||
if (dt_print_datum(dtp, fp, rec, addr,
|
||||
size, aggdata, normal, pd) < 0)
|
||||
return (-1);
|
||||
|
||||
if (dt_buffered_flush(dtp, NULL, rec, aggdata,
|
||||
@ -1931,8 +2322,10 @@ dt_print_aggs(const dtrace_aggdata_t **aggsdata, int naggvars, void *arg)
|
||||
agg->dtagd_flags |= DTRACE_AGD_PRINTED;
|
||||
}
|
||||
|
||||
if (dt_printf(dtp, fp, "\n") < 0)
|
||||
return (-1);
|
||||
if (!pd->dtpa_agghist && !pd->dtpa_aggpack) {
|
||||
if (dt_printf(dtp, fp, "\n") < 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (dt_buffered_flush(dtp, NULL, NULL, aggdata,
|
||||
DTRACE_BUFDATA_AGGFORMAT | DTRACE_BUFDATA_AGGLAST) < 0)
|
||||
@ -2401,7 +2794,7 @@ dt_consume_cpu(dtrace_hdl_t *dtp, FILE *fp, int cpu,
|
||||
}
|
||||
|
||||
n = dt_print_bytes(dtp, fp, addr,
|
||||
tracememsize, 33, quiet, 1);
|
||||
tracememsize, -33, quiet, 1);
|
||||
|
||||
tracememsize = 0;
|
||||
|
||||
@ -2434,7 +2827,7 @@ dt_consume_cpu(dtrace_hdl_t *dtp, FILE *fp, int cpu,
|
||||
break;
|
||||
default:
|
||||
n = dt_print_bytes(dtp, fp, addr,
|
||||
rec->dtrd_size, 33, quiet, 0);
|
||||
rec->dtrd_size, -33, quiet, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -189,6 +189,9 @@ typedef struct dt_print_aggdata {
|
||||
dtrace_aggvarid_t dtpa_id; /* aggregation variable of interest */
|
||||
FILE *dtpa_fp; /* file pointer */
|
||||
int dtpa_allunprint; /* print only unprinted aggregations */
|
||||
int dtpa_agghist; /* print aggregation as histogram */
|
||||
int dtpa_agghisthdr; /* aggregation histogram hdr printed */
|
||||
int dtpa_aggpack; /* pack quantized aggregations */
|
||||
} dt_print_aggdata_t;
|
||||
|
||||
typedef struct dt_dirpath {
|
||||
@ -283,6 +286,7 @@ struct dtrace_hdl {
|
||||
uint_t dt_linktype; /* dtrace link output file type (see below) */
|
||||
uint_t dt_xlatemode; /* dtrace translator linking mode (see below) */
|
||||
uint_t dt_stdcmode; /* dtrace stdc compatibility mode (see below) */
|
||||
uint_t dt_encoding; /* dtrace output encoding (see below) */
|
||||
uint_t dt_treedump; /* dtrace tree debug bitmap (see below) */
|
||||
uint64_t dt_options[DTRACEOPT_MAX]; /* dtrace run-time options */
|
||||
int dt_version; /* library version requested by client */
|
||||
@ -373,6 +377,14 @@ struct dtrace_hdl {
|
||||
#define DT_STDC_XS 2 /* K&R C: __STDC__ not defined */
|
||||
#define DT_STDC_XT 3 /* ISO C + K&R C compat with ISO: __STDC__=0 */
|
||||
|
||||
/*
|
||||
* Values for the dt_encoding property, which is used to force a particular
|
||||
* character encoding (overriding default behavior and/or automatic detection).
|
||||
*/
|
||||
#define DT_ENCODING_UNSET 0
|
||||
#define DT_ENCODING_ASCII 1
|
||||
#define DT_ENCODING_UTF8 2
|
||||
|
||||
/*
|
||||
* Macro to test whether a given pass bit is set in the dt_treedump bit-vector.
|
||||
* If the bit for pass 'p' is set, the D compiler displays the parse tree for
|
||||
|
@ -122,9 +122,14 @@
|
||||
#define DT_VERS_1_8_1 DT_VERSION_NUMBER(1, 8, 1)
|
||||
#define DT_VERS_1_9 DT_VERSION_NUMBER(1, 9, 0)
|
||||
#define DT_VERS_1_9_1 DT_VERSION_NUMBER(1, 9, 1)
|
||||
#define DT_VERS_LATEST DT_VERS_1_9_1
|
||||
#define DT_VERS_STRING "Sun D 1.9.1"
|
||||
|
||||
#define DT_VERS_1_9_2 DT_VERSION_NUMBER(1, 9, 2) /* FreeBSD specific */
|
||||
#define DT_VERS_1_10 DT_VERSION_NUMBER(1, 10, 0)
|
||||
#define DT_VERS_1_11 DT_VERSION_NUMBER(1, 11, 0)
|
||||
#define DT_VERS_1_12 DT_VERSION_NUMBER(1, 12, 0)
|
||||
#define DT_VERS_1_12_1 DT_VERSION_NUMBER(1, 12, 1)
|
||||
#define DT_VERS_LATEST DT_VERS_1_9_2
|
||||
#define DT_VERS_STRING "Sun D 1.9.2"
|
||||
|
||||
const dt_version_t _dtrace_versions[] = {
|
||||
DT_VERS_1_0, /* D API 1.0.0 (PSARC 2001/466) Solaris 10 FCS */
|
||||
DT_VERS_1_1, /* D API 1.1.0 Solaris Express 6/05 */
|
||||
@ -145,6 +150,11 @@ const dt_version_t _dtrace_versions[] = {
|
||||
DT_VERS_1_8_1, /* D API 1.8.1 */
|
||||
DT_VERS_1_9, /* D API 1.9 */
|
||||
DT_VERS_1_9_1, /* D API 1.9.1 */
|
||||
DT_VERS_1_9_2, /* D API 1.9.1 */
|
||||
DT_VERS_1_10, /* D API 1.10 */
|
||||
DT_VERS_1_11, /* D API 1.11 */
|
||||
DT_VERS_1_12, /* D API 1.12 */
|
||||
DT_VERS_1_12_1, /* D API 1.12.1 */
|
||||
0
|
||||
};
|
||||
|
||||
@ -1144,6 +1154,7 @@ dt_vopen(int version, int flags, int *errp,
|
||||
dtp->dt_linktype = DT_LTYP_ELF;
|
||||
dtp->dt_xlatemode = DT_XL_STATIC;
|
||||
dtp->dt_stdcmode = DT_STDC_XA;
|
||||
dtp->dt_encoding = DT_ENCODING_UNSET;
|
||||
dtp->dt_version = version;
|
||||
dtp->dt_fd = dtfd;
|
||||
dtp->dt_ftfd = ftfd;
|
||||
|
@ -25,6 +25,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
|
||||
* Copyright (c) 2012 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
@ -336,6 +337,23 @@ dt_opt_linktype(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static int
|
||||
dt_opt_encoding(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
|
||||
{
|
||||
if (arg == NULL)
|
||||
return (dt_set_errno(dtp, EDT_BADOPTVAL));
|
||||
|
||||
if (strcmp(arg, "ascii") == 0)
|
||||
dtp->dt_encoding = DT_ENCODING_ASCII;
|
||||
else if (strcmp(arg, "utf8") == 0)
|
||||
dtp->dt_encoding = DT_ENCODING_UTF8;
|
||||
else
|
||||
return (dt_set_errno(dtp, EDT_BADOPTVAL));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static int
|
||||
dt_opt_evaltime(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
|
||||
@ -928,6 +946,7 @@ static const dt_option_t _dtrace_ctoptions[] = {
|
||||
{ "define", dt_opt_cpp_opts, (uintptr_t)"-D" },
|
||||
{ "droptags", dt_opt_droptags },
|
||||
{ "empty", dt_opt_cflags, DTRACE_C_EMPTY },
|
||||
{ "encoding", dt_opt_encoding },
|
||||
{ "errtags", dt_opt_cflags, DTRACE_C_ETAGS },
|
||||
{ "evaltime", dt_opt_evaltime },
|
||||
{ "incdir", dt_opt_cpp_opts, (uintptr_t)"-I" },
|
||||
@ -988,11 +1007,14 @@ static const dt_option_t _dtrace_rtoptions[] = {
|
||||
* Dynamic run-time options.
|
||||
*/
|
||||
static const dt_option_t _dtrace_drtoptions[] = {
|
||||
{ "agghist", dt_opt_runtime, DTRACEOPT_AGGHIST },
|
||||
{ "aggpack", dt_opt_runtime, DTRACEOPT_AGGPACK },
|
||||
{ "aggrate", dt_opt_rate, DTRACEOPT_AGGRATE },
|
||||
{ "aggsortkey", dt_opt_runtime, DTRACEOPT_AGGSORTKEY },
|
||||
{ "aggsortkeypos", dt_opt_runtime, DTRACEOPT_AGGSORTKEYPOS },
|
||||
{ "aggsortpos", dt_opt_runtime, DTRACEOPT_AGGSORTPOS },
|
||||
{ "aggsortrev", dt_opt_runtime, DTRACEOPT_AGGSORTREV },
|
||||
{ "aggzoom", dt_opt_runtime, DTRACEOPT_AGGZOOM },
|
||||
{ "flowindent", dt_opt_runtime, DTRACEOPT_FLOWINDENT },
|
||||
{ "quiet", dt_opt_runtime, DTRACEOPT_QUIET },
|
||||
{ "rawbytes", dt_opt_runtime, DTRACEOPT_RAWBYTES },
|
||||
|
@ -356,6 +356,12 @@ extern int dtrace_handle_setopt(dtrace_hdl_t *,
|
||||
#define DTRACE_A_PERCPU 0x0001
|
||||
#define DTRACE_A_KEEPDELTA 0x0002
|
||||
#define DTRACE_A_ANONYMOUS 0x0004
|
||||
#define DTRACE_A_TOTAL 0x0008
|
||||
#define DTRACE_A_MINMAXBIN 0x0010
|
||||
#define DTRACE_A_HASNEGATIVES 0x0020
|
||||
#define DTRACE_A_HASPOSITIVES 0x0040
|
||||
|
||||
#define DTRACE_AGGZOOM_MAX 0.95 /* height of max bar */
|
||||
|
||||
#define DTRACE_AGGWALK_ERROR -1 /* error while processing */
|
||||
#define DTRACE_AGGWALK_NEXT 0 /* proceed to next element */
|
||||
@ -376,6 +382,10 @@ struct dtrace_aggdata {
|
||||
caddr_t dtada_delta; /* delta data, if available */
|
||||
caddr_t *dtada_percpu; /* per CPU data, if avail */
|
||||
caddr_t *dtada_percpu_delta; /* per CPU delta, if avail */
|
||||
int64_t dtada_total; /* per agg total, if avail */
|
||||
uint16_t dtada_minbin; /* minimum bin, if avail */
|
||||
uint16_t dtada_maxbin; /* maximum bin, if avail */
|
||||
uint32_t dtada_flags; /* flags */
|
||||
};
|
||||
|
||||
typedef int dtrace_aggregate_f(const dtrace_aggdata_t *, void *);
|
||||
|
@ -1031,7 +1031,14 @@ typedef struct dtrace_fmtdesc {
|
||||
#define DTRACEOPT_AGGSORTPOS 25 /* agg. position to sort on */
|
||||
#define DTRACEOPT_AGGSORTKEYPOS 26 /* agg. key position to sort on */
|
||||
#define DTRACEOPT_TEMPORAL 27 /* temporally ordered output */
|
||||
#define DTRACEOPT_MAX 28 /* number of options */
|
||||
#define DTRACEOPT_AGGHIST 28 /* histogram aggregation output */
|
||||
#define DTRACEOPT_AGGPACK 29 /* packed aggregation output */
|
||||
#define DTRACEOPT_AGGZOOM 30 /* zoomed aggregation scaling */
|
||||
#define DTRACEOPT_ZONE 31 /* zone in which to enable probes */
|
||||
#define DTRACEOPT_MAX 32 /* number of options */
|
||||
|
||||
#define DTRACEOPT_UNSET (dtrace_optval_t)-2 /* unset option */
|
||||
|
||||
|
||||
#define DTRACEOPT_UNSET (dtrace_optval_t)-2 /* unset option */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user