xref: /onnv-gate/usr/src/cmd/dtrace/test/tst/common/cpc/tst.allcpus.ksh (revision 8803:8c01b39012c9)
1*8803SJonathan.Haslam@Sun.COM#!/bin/ksh
2*8803SJonathan.Haslam@Sun.COM#
3*8803SJonathan.Haslam@Sun.COM# CDDL HEADER START
4*8803SJonathan.Haslam@Sun.COM#
5*8803SJonathan.Haslam@Sun.COM# The contents of this file are subject to the terms of the
6*8803SJonathan.Haslam@Sun.COM# Common Development and Distribution License (the "License").
7*8803SJonathan.Haslam@Sun.COM# You may not use this file except in compliance with the License.
8*8803SJonathan.Haslam@Sun.COM#
9*8803SJonathan.Haslam@Sun.COM# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*8803SJonathan.Haslam@Sun.COM# or http://www.opensolaris.org/os/licensing.
11*8803SJonathan.Haslam@Sun.COM# See the License for the specific language governing permissions
12*8803SJonathan.Haslam@Sun.COM# and limitations under the License.
13*8803SJonathan.Haslam@Sun.COM#
14*8803SJonathan.Haslam@Sun.COM# When distributing Covered Code, include this CDDL HEADER in each
15*8803SJonathan.Haslam@Sun.COM# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*8803SJonathan.Haslam@Sun.COM# If applicable, add the following below this CDDL HEADER, with the
17*8803SJonathan.Haslam@Sun.COM# fields enclosed by brackets "[]" replaced with your own identifying
18*8803SJonathan.Haslam@Sun.COM# information: Portions Copyright [yyyy] [name of copyright owner]
19*8803SJonathan.Haslam@Sun.COM#
20*8803SJonathan.Haslam@Sun.COM# CDDL HEADER END
21*8803SJonathan.Haslam@Sun.COM#
22*8803SJonathan.Haslam@Sun.COM
23*8803SJonathan.Haslam@Sun.COM#
24*8803SJonathan.Haslam@Sun.COM# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25*8803SJonathan.Haslam@Sun.COM# Use is subject to license terms.
26*8803SJonathan.Haslam@Sun.COM#
27*8803SJonathan.Haslam@Sun.COM
28*8803SJonathan.Haslam@Sun.COM#
29*8803SJonathan.Haslam@Sun.COM# This script verifies that we can fire a probe on each CPU that is in
30*8803SJonathan.Haslam@Sun.COM# an online state.
31*8803SJonathan.Haslam@Sun.COM#
32*8803SJonathan.Haslam@Sun.COM# The script will fail if:
33*8803SJonathan.Haslam@Sun.COM#       1) The system under test does not define the 'PAPI_tot_ins' event.
34*8803SJonathan.Haslam@Sun.COM#
35*8803SJonathan.Haslam@Sun.COM
36*8803SJonathan.Haslam@Sun.COMif [ $# != 1 ]; then
37*8803SJonathan.Haslam@Sun.COM        echo expected one argument: '<'dtrace-path'>'
38*8803SJonathan.Haslam@Sun.COM        exit 2
39*8803SJonathan.Haslam@Sun.COMfi
40*8803SJonathan.Haslam@Sun.COM
41*8803SJonathan.Haslam@Sun.COMdtrace=$1
42*8803SJonathan.Haslam@Sun.COMnumproc=`psrinfo | tail -1 | cut -f1`
43*8803SJonathan.Haslam@Sun.COMcpu=0
44*8803SJonathan.Haslam@Sun.COMdtraceout=/var/tmp/dtrace.out.$$
45*8803SJonathan.Haslam@Sun.COMscriptout=/var/tmp/script.out.$$
46*8803SJonathan.Haslam@Sun.COM
47*8803SJonathan.Haslam@Sun.COMspin()
48*8803SJonathan.Haslam@Sun.COM{
49*8803SJonathan.Haslam@Sun.COM	while [ 1 ]; do
50*8803SJonathan.Haslam@Sun.COM		:
51*8803SJonathan.Haslam@Sun.COM	done
52*8803SJonathan.Haslam@Sun.COM}
53*8803SJonathan.Haslam@Sun.COM
54*8803SJonathan.Haslam@Sun.COMscript()
55*8803SJonathan.Haslam@Sun.COM{
56*8803SJonathan.Haslam@Sun.COM        $dtrace -o $dtraceout -s /dev/stdin <<EOF
57*8803SJonathan.Haslam@Sun.COM	#pragma D option bufsize=128k
58*8803SJonathan.Haslam@Sun.COM	#pragma D option quiet
59*8803SJonathan.Haslam@Sun.COM
60*8803SJonathan.Haslam@Sun.COM        cpc:::PAPI_tot_ins-user-10000
61*8803SJonathan.Haslam@Sun.COM	/cpus[cpu] != 1/
62*8803SJonathan.Haslam@Sun.COM        {
63*8803SJonathan.Haslam@Sun.COM		cpus[cpu] = 1;
64*8803SJonathan.Haslam@Sun.COM		@a[cpu] = count();
65*8803SJonathan.Haslam@Sun.COM        }
66*8803SJonathan.Haslam@Sun.COM
67*8803SJonathan.Haslam@Sun.COM	tick-1s
68*8803SJonathan.Haslam@Sun.COM	/n++ > 10/
69*8803SJonathan.Haslam@Sun.COM	{
70*8803SJonathan.Haslam@Sun.COM		printa(@a);
71*8803SJonathan.Haslam@Sun.COM		exit(0);
72*8803SJonathan.Haslam@Sun.COM	}
73*8803SJonathan.Haslam@Sun.COMEOF
74*8803SJonathan.Haslam@Sun.COM}
75*8803SJonathan.Haslam@Sun.COM
76*8803SJonathan.Haslam@Sun.COMecho "" > $scriptout
77*8803SJonathan.Haslam@Sun.COMwhile [ $cpu -le $numproc ]
78*8803SJonathan.Haslam@Sun.COMdo
79*8803SJonathan.Haslam@Sun.COM	if [ "`psrinfo -s $cpu 2> /dev/null`" -eq 1 ]; then
80*8803SJonathan.Haslam@Sun.COM		printf "%9d %16d\n" $cpu 1 >> $scriptout
81*8803SJonathan.Haslam@Sun.COM		spin &
82*8803SJonathan.Haslam@Sun.COM		allpids[$cpu]=$!
83*8803SJonathan.Haslam@Sun.COM		pbind -b $cpu $!
84*8803SJonathan.Haslam@Sun.COM	fi
85*8803SJonathan.Haslam@Sun.COM	cpu=$(($cpu+1))
86*8803SJonathan.Haslam@Sun.COMdone
87*8803SJonathan.Haslam@Sun.COMecho "" >> $scriptout
88*8803SJonathan.Haslam@Sun.COM
89*8803SJonathan.Haslam@Sun.COMscript
90*8803SJonathan.Haslam@Sun.COM
91*8803SJonathan.Haslam@Sun.COMdiff $dtraceout $scriptout >/dev/null 2>&1
92*8803SJonathan.Haslam@Sun.COMstatus=$?
93*8803SJonathan.Haslam@Sun.COM
94*8803SJonathan.Haslam@Sun.COM# kill off the spinner processes
95*8803SJonathan.Haslam@Sun.COMcpu=0
96*8803SJonathan.Haslam@Sun.COMwhile [ $cpu -le $numproc ]
97*8803SJonathan.Haslam@Sun.COMdo
98*8803SJonathan.Haslam@Sun.COM	if [ "`psrinfo -s $cpu 2> /dev/null`" -eq 1 ]; then
99*8803SJonathan.Haslam@Sun.COM		kill ${allpids[$cpu]}
100*8803SJonathan.Haslam@Sun.COM	fi
101*8803SJonathan.Haslam@Sun.COM	cpu=$(($cpu+1))
102*8803SJonathan.Haslam@Sun.COMdone
103*8803SJonathan.Haslam@Sun.COM
104*8803SJonathan.Haslam@Sun.COMrm $dtraceout
105*8803SJonathan.Haslam@Sun.COMrm $scriptout
106*8803SJonathan.Haslam@Sun.COM
107*8803SJonathan.Haslam@Sun.COMexit $status
108