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	"@(#)tst.cputime.ksh	1.1	06/08/28 SMI"
27
28script()
29{
30	dtrace -C -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	fbt::thread_run:entry
45	{
46		this->t = (thread_t)arg3;
47		this->pid = xlate <psinfo_t>(this->t).pr_pid;
48		self->on = (this->pid == \$pid) ? vtimestamp : 0;
49	}
50
51	fbt::thread_run:entry
52	/self->on/
53	{
54		total += vtimestamp - self->on;
55	}
56
57	tick-1sec
58	/i++ == 10/
59	{
60		exit(0);
61	}
62
63	END
64	/((total * 100) / (timestamp - start)) > thresh/
65	{
66		printf("'%s' buffering policy took %d%% of CPU; ",
67		    \$\$1, ((total * 100) / (timestamp - start)));
68		printf("expected no more than %d%%!\n", thresh);
69		exit(1);
70	}
71EOF
72}
73
74for policy in "fill ring switch"; do
75	script $policy
76
77	status=$?
78
79	if [ "$status" -ne 0 ]; then
80		exit $status
81	fi
82done
83
84exit 0
85