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