1 {
2 #
3 # Copyright 2005 Sun Microsystems, Inc. All rights reserved.
4 # Use is subject to license terms.
5 #
6 # CDDL HEADER START
7 #
8 # The contents of this file are subject to the terms of the
9 # Common Development and Distribution License, Version 1.0 only
10 # (the "License"). You may not use this file except in compliance
11 # with the License.
12 #
13 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
14 # or http://www.opensolaris.org/os/licensing.
15 # See the License for the specific language governing permissions
16 # and limitations under the License.
17 #
18 # When distributing Covered Code, include this CDDL HEADER in each
19 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
20 # If applicable, add the following below this CDDL HEADER, with the
21 # fields enclosed by brackets "[]" replaced with your own identifying
22 # information: Portions Copyright [yyyy] [name of copyright owner]
23 #
24 # CDDL HEADER END
25 #
26 #ident "%Z%%M% %I% %E% SMI"
27
28 if (first_time == 0 && ($1 == "probe" || match($1, "---")))
29 next;
30 else
31 first_time = 1;
32
33 time = $1;
34 thread = $5;
35 type = $7;
36 val = pval = "";
37 for (i = 8; i <= NF; i++) {
38 if (pval == "cip:")
39 val = val " " sprintf("%x", $i);
40 else
41 val = val " " $i;
42 pval=$i
43 }
44
45 if (match(type, "_end")) {
46 type = substr(type, 1, match(type, "_end") - 1);
47
48 if (int(start[thread "" type]) == 0) {
49 printf("Warning: missing match line %d: %s\n", NR, $0);
50 next;
51 }
52
53 total[type]++;
54 alltotal++;
55
56 elapsed = time - start[thread "" type];
57 vchar = "";
58 if (longest[type] < elapsed) {
59 longest[type] = elapsed;
60 vchar = "*";
61 }
62 if (verbose) {
63 printf("\t\top: %s thread: %d elapsed %f%s%s\n",
64 type, thread, elapsed, val, vchar);
65 }
66 average[type] = (average[type] + elapsed)/total[type];
67 averagedepth[type] = (averagedepth[type] + depth[type])/total[type];
68
69 allaverage= (allaverage + alldepth)/alltotal;
70
71 depth[type]--;
72 alldepth--;
73 start[thread "" type] = 0;
74
75 } else {
76 if (match(type, "_start")) {
77 type = substr(type, 1, match(type, "_start") - 1);
78 }
79 start[thread "" type] = time;
80 depth[type]++;
81 if (maxdepth[type] < depth[type])
82 maxdepth[type] = depth[type];
83
84 alldepth++;
85 if (allmaxdepth < alldepth)
86 allmaxdepth = alldepth;
87 }
88 }
89
90 END {
91 printf("\n");
92 for (types in total) {
93 printf("op: %d %s: avg: %8.8f worst: %8.8f\n",
94 total[types], types, average[types], longest[types]);
95 printf(" avg concurrency: %8.8f greatest concurrency %8.8f\n\n",
96 averagedepth[types], maxdepth[types]);
97 }
98 printf("Totals: avg concurrency: %8.8f greatest concurrency %8.8f\n",
99 allaverage, allmaxdepth);
100 }