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#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# This script ensures that we can enable a probe which specifies a platform
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam# specific event.
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam#
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamif [ $# != 1 ]; then
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam print -u2 "expected one argument: <dtrace-path>"
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam exit 2
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamfi
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamdtrace=$1
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamget_event()
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam{
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam perl /dev/stdin /dev/stdout << EOF
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam open CPUSTAT, '/usr/sbin/cpustat -h |'
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam or die "Couldn't run cpustat: \$!\n";
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam while (<CPUSTAT>) {
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam if (/(\s+)event\[*[0-9]-*[0-9]*\]*:/ && !/PAPI/) {
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam @a = split(/ /, \$_);
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam \$event = \$a[\$#a-1];
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam }
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam }
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam close CPUSTAT;
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam print "\$event\n";
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan HaslamEOF
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam}
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamscript()
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam{
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam $dtrace -s /dev/stdin << EOD
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam #pragma D option quiet
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam #pragma D option bufsize=128k
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam cpc:::$1-all-10000
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam {
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam @[probename] = count();
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam }
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam tick-1s
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam /n++ > 5/
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam {
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam exit(0);
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam }
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan HaslamEOD
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam}
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamevent=$(get_event)
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamscript $event
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamstatus=$?
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslam
b9e93c10c0a2a4bb069d38bb311021a9478c4711Jonathan Haslamexit $status