xref: /freebsd-src/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/buffering/tst.cputime.ksh (revision 2be1a816b9ff69588e55be0a84cbe2a31efc0f2f)
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