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 90END { 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} 101