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