b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#!/bin/ksh
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# CDDL HEADER START
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# The contents of this file are subject to the terms of the
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# Common Development and Distribution License (the "License").
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# You may not use this file except in compliance with the License.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# or http://www.opensolaris.org/os/licensing.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# See the License for the specific language governing permissions
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# and limitations under the License.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# When distributing Covered Code, include this CDDL HEADER in each
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# If applicable, add the following below this CDDL HEADER, with the
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# fields enclosed by brackets "[]" replaced with your own identifying
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# information: Portions Copyright [yyyy] [name of copyright owner]
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# CDDL HEADER END
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# Use is subject to license terms.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# This script ensures that cputrack(1M) will fail to start when the cpc
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# provider has active enablings.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# The script will fail if:
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# 1) The system under test does not define the 'PAPI_tot_ins' event.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamscript()
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam{
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam $dtrace -o $dtraceout -s /dev/stdin <<EOF
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam #pragma D option bufsize=128k
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam cpc:::PAPI_tot_ins-all-10000
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam {
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam @[probename] = count();
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam }
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan HaslamEOF
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam}
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamif [ $# != 1 ]; then
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam echo expected one argument: '<'dtrace-path'>'
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam exit 2
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamfi
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamdtrace=$1
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamdtraceout=/tmp/dtrace.out.$$
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamscript 2>/dev/null &
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamtimeout=15
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# Sleep while the above script fires into life. To guard against dtrace dying
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# and us sleeping forever we allow 15 secs for this to happen. This should be
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# enough for even the slowest systems.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamwhile [ ! -f $dtraceout ]; do
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam sleep 1
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam timeout=$(($timeout-1))
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam if [ $timeout -eq 0 ]; then
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam echo "dtrace failed to start. Exiting."
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam exit 1
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam fi
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamdone
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamcputrack -c PAPI_tot_ins sleep 10
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamstatus=$?
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamrm $dtraceout
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamexit $status