1*2be1a816SJohn Birrell# 2*2be1a816SJohn Birrell# CDDL HEADER START 3*2be1a816SJohn Birrell# 4*2be1a816SJohn Birrell# The contents of this file are subject to the terms of the 5*2be1a816SJohn Birrell# Common Development and Distribution License (the "License"). 6*2be1a816SJohn Birrell# You may not use this file except in compliance with the License. 7*2be1a816SJohn Birrell# 8*2be1a816SJohn Birrell# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*2be1a816SJohn Birrell# or http://www.opensolaris.org/os/licensing. 10*2be1a816SJohn Birrell# See the License for the specific language governing permissions 11*2be1a816SJohn Birrell# and limitations under the License. 12*2be1a816SJohn Birrell# 13*2be1a816SJohn Birrell# When distributing Covered Code, include this CDDL HEADER in each 14*2be1a816SJohn Birrell# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*2be1a816SJohn Birrell# If applicable, add the following below this CDDL HEADER, with the 16*2be1a816SJohn Birrell# fields enclosed by brackets "[]" replaced with your own identifying 17*2be1a816SJohn Birrell# information: Portions Copyright [yyyy] [name of copyright owner] 18*2be1a816SJohn Birrell# 19*2be1a816SJohn Birrell# CDDL HEADER END 20*2be1a816SJohn Birrell# 21*2be1a816SJohn Birrell 22*2be1a816SJohn Birrell# 23*2be1a816SJohn Birrell# Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24*2be1a816SJohn Birrell# Use is subject to license terms. 25*2be1a816SJohn Birrell# 26*2be1a816SJohn Birrell#ident "%Z%%M% %I% %E% SMI" 27*2be1a816SJohn Birrell 28*2be1a816SJohn Birrellscript() 29*2be1a816SJohn Birrell{ 30*2be1a816SJohn Birrell $dtrace -s /dev/stdin -x bufpolicy=$1 $1 <<EOF 31*2be1a816SJohn Birrell 32*2be1a816SJohn Birrell #pragma D option quiet 33*2be1a816SJohn Birrell #pragma D option statusrate=1hz 34*2be1a816SJohn Birrell 35*2be1a816SJohn Birrell uint64_t total; 36*2be1a816SJohn Birrell int thresh; 37*2be1a816SJohn Birrell 38*2be1a816SJohn Birrell BEGIN 39*2be1a816SJohn Birrell { 40*2be1a816SJohn Birrell start = timestamp; 41*2be1a816SJohn Birrell thresh = 10; 42*2be1a816SJohn Birrell } 43*2be1a816SJohn Birrell 44*2be1a816SJohn Birrell sched:::on-cpu 45*2be1a816SJohn Birrell /pid == \$pid/ 46*2be1a816SJohn Birrell { 47*2be1a816SJohn Birrell self->on = vtimestamp; 48*2be1a816SJohn Birrell } 49*2be1a816SJohn Birrell 50*2be1a816SJohn Birrell sched:::off-cpu 51*2be1a816SJohn Birrell /self->on/ 52*2be1a816SJohn Birrell { 53*2be1a816SJohn Birrell total += vtimestamp - self->on; 54*2be1a816SJohn Birrell } 55*2be1a816SJohn Birrell 56*2be1a816SJohn Birrell tick-1sec 57*2be1a816SJohn Birrell /i++ == 10/ 58*2be1a816SJohn Birrell { 59*2be1a816SJohn Birrell exit(0); 60*2be1a816SJohn Birrell } 61*2be1a816SJohn Birrell 62*2be1a816SJohn Birrell END 63*2be1a816SJohn Birrell /((total * 100) / (timestamp - start)) > thresh/ 64*2be1a816SJohn Birrell { 65*2be1a816SJohn Birrell printf("'%s' buffering policy took %d%% of CPU; ", 66*2be1a816SJohn Birrell \$\$1, ((total * 100) / (timestamp - start))); 67*2be1a816SJohn Birrell printf("expected no more than %d%%!\n", thresh); 68*2be1a816SJohn Birrell exit(1); 69*2be1a816SJohn Birrell } 70*2be1a816SJohn BirrellEOF 71*2be1a816SJohn Birrell} 72*2be1a816SJohn Birrell 73*2be1a816SJohn Birrellif [ $# != 1 ]; then 74*2be1a816SJohn Birrell echo expected one argument: '<'dtrace-path'>' 75*2be1a816SJohn Birrell exit 2 76*2be1a816SJohn Birrellfi 77*2be1a816SJohn Birrell 78*2be1a816SJohn Birrelldtrace=$1 79*2be1a816SJohn Birrell 80*2be1a816SJohn Birrellfor policy in "fill ring switch"; do 81*2be1a816SJohn Birrell script $policy 82*2be1a816SJohn Birrell 83*2be1a816SJohn Birrell status=$? 84*2be1a816SJohn Birrell 85*2be1a816SJohn Birrell if [ "$status" -ne 0 ]; then 86*2be1a816SJohn Birrell exit $status 87*2be1a816SJohn Birrell fi 88*2be1a816SJohn Birrelldone 89*2be1a816SJohn Birrell 90*2be1a816SJohn Birrellexit 0 91