[DTrace-devel] [PATCH 07/16] cpc: Import tests from Solaris

eugene.loh at oracle.com eugene.loh at oracle.com
Fri Jan 27 02:23:20 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 .../cpc/err.D_PDESC_ZERO.lowfrequency.d       |  45 ++++++++
 .../cpc/err.D_PDESC_ZERO.malformedoverflow.d  |  40 +++++++
 .../cpc/err.D_PDESC_ZERO.nonexistentevent.d   |  40 +++++++
 test/unittest/cpc/err.cpcvscpustatpart1.ksh   |  78 +++++++++++++
 test/unittest/cpc/err.cpcvscpustatpart2.ksh   |  70 ++++++++++++
 test/unittest/cpc/err.cputrackfailtostart.ksh |  77 +++++++++++++
 test/unittest/cpc/err.cputrackterminates.ksh  |  70 ++++++++++++
 test/unittest/cpc/err.toomanyenablings.d      |  55 +++++++++
 test/unittest/cpc/tst.allcpus.ksh             | 107 ++++++++++++++++++
 test/unittest/cpc/tst.genericevent.d          |  48 ++++++++
 test/unittest/cpc/tst.platformevent.ksh       |  81 +++++++++++++
 11 files changed, 711 insertions(+)
 create mode 100644 test/unittest/cpc/err.D_PDESC_ZERO.lowfrequency.d
 create mode 100644 test/unittest/cpc/err.D_PDESC_ZERO.malformedoverflow.d
 create mode 100644 test/unittest/cpc/err.D_PDESC_ZERO.nonexistentevent.d
 create mode 100755 test/unittest/cpc/err.cpcvscpustatpart1.ksh
 create mode 100755 test/unittest/cpc/err.cpcvscpustatpart2.ksh
 create mode 100755 test/unittest/cpc/err.cputrackfailtostart.ksh
 create mode 100755 test/unittest/cpc/err.cputrackterminates.ksh
 create mode 100644 test/unittest/cpc/err.toomanyenablings.d
 create mode 100755 test/unittest/cpc/tst.allcpus.ksh
 create mode 100644 test/unittest/cpc/tst.genericevent.d
 create mode 100755 test/unittest/cpc/tst.platformevent.ksh

diff --git a/test/unittest/cpc/err.D_PDESC_ZERO.lowfrequency.d b/test/unittest/cpc/err.D_PDESC_ZERO.lowfrequency.d
new file mode 100644
index 00000000..1015a251
--- /dev/null
+++ b/test/unittest/cpc/err.D_PDESC_ZERO.lowfrequency.d
@@ -0,0 +1,45 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Test to check that attempting to enable a valid event with a frequency
+ * lower than the default platform limit will fail.
+ *
+ * This test will fail if:
+ *	1) The system under test does not define the 'PAPI_tot_ins' event.
+ *	2) The 'dcpc-min-overflow' variable in dcpc.conf has been modified.
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	exit(0);
+}
+
+cpc:::PAPI_tot_ins-all-100
+{
+}
diff --git a/test/unittest/cpc/err.D_PDESC_ZERO.malformedoverflow.d b/test/unittest/cpc/err.D_PDESC_ZERO.malformedoverflow.d
new file mode 100644
index 00000000..f9b78094
--- /dev/null
+++ b/test/unittest/cpc/err.D_PDESC_ZERO.malformedoverflow.d
@@ -0,0 +1,40 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Tests that specifying an overflow value containing extraneous characters
+ * (only digits are allowed) will fail.
+ */
+
+BEGIN
+{
+	exit(0);
+}
+
+cpc:::PAPI_tot_ins-all-10000bonehead
+{
+	@[probename] = count();
+}
diff --git a/test/unittest/cpc/err.D_PDESC_ZERO.nonexistentevent.d b/test/unittest/cpc/err.D_PDESC_ZERO.nonexistentevent.d
new file mode 100644
index 00000000..73f9575f
--- /dev/null
+++ b/test/unittest/cpc/err.D_PDESC_ZERO.nonexistentevent.d
@@ -0,0 +1,40 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Tests that attempting to enable a probe containing a non existent event
+ * will fail.
+ */
+
+BEGIN
+{
+	exit(0);
+}
+
+cpc:::PAPI_cpc_bad-all-10000
+{
+	@[probename] = count();
+}
diff --git a/test/unittest/cpc/err.cpcvscpustatpart1.ksh b/test/unittest/cpc/err.cpcvscpustatpart1.ksh
new file mode 100755
index 00000000..767d493a
--- /dev/null
+++ b/test/unittest/cpc/err.cpcvscpustatpart1.ksh
@@ -0,0 +1,78 @@
+#!/bin/ksh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+
+
+#
+# This tests that cpustat(1) should fail to start if the cpc provider
+# is already calling the shots.
+#
+# This script will fail if:
+#       1) The system under test does not define the 'PAPI_tot_ins'
+#       generic event.
+
+script()
+{
+	$dtrace -o $dtraceout -s /dev/stdin <<EOF
+	#pragma D option bufsize=128k
+
+	cpc:::PAPI_tot_ins-all-10000
+	{
+		@[probename] = count();
+	}
+EOF
+}
+
+if [ $# != 1 ]; then
+	echo expected one argument: '<'dtrace-path'>'
+	exit 2
+fi
+
+dtrace=$1
+dtraceout=/tmp/dtrace.out.$$
+script 2>/dev/null &
+timeout=15
+
+#
+# Sleep while the above script fires into life. To guard against dtrace dying
+# and us sleeping forever we allow 15 secs for this to happen. This should be
+# enough for even the slowest systems.
+#
+while [ ! -f $dtraceout ]; do
+	sleep 1
+	timeout=$(($timeout-1))
+	if [ $timeout -eq 0 ]; then
+		echo "dtrace failed to start. Exiting."
+		exit 1
+	fi
+done
+
+cpustat -c PAPI_tot_ins 1 5
+status=$?
+
+rm $dtraceout
+
+exit $status
diff --git a/test/unittest/cpc/err.cpcvscpustatpart2.ksh b/test/unittest/cpc/err.cpcvscpustatpart2.ksh
new file mode 100755
index 00000000..584469c3
--- /dev/null
+++ b/test/unittest/cpc/err.cpcvscpustatpart2.ksh
@@ -0,0 +1,70 @@
+#!/bin/ksh -p
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+
+
+#
+# This tests that enablings from the cpc provider will fail if cpustat(1) is
+# already master of the universe.
+#
+# This script will fail if:
+#       1) The system under test does not define the 'PAPI_tot_ins'
+#       generic event.
+
+script()
+{
+        $dtrace -s /dev/stdin <<EOF
+        #pragma D option bufsize=128k
+
+        BEGIN
+        {
+                exit(0);
+        }
+
+        cpc:::PAPI_tot_ins-all-10000
+        {
+                @[probename] = count();
+        }
+EOF
+}
+
+if [ $# != 1 ]; then
+        echo expected one argument: '<'dtrace-path'>'
+        exit 2
+fi
+
+dtrace=$1
+dtraceout=/tmp/dtrace.out.$$
+
+cpustat -c PAPI_tot_ins 1 20 &
+pid=$!
+sleep 5
+script 2>/dev/null
+
+status=$?
+
+kill $pid
+exit $status
diff --git a/test/unittest/cpc/err.cputrackfailtostart.ksh b/test/unittest/cpc/err.cputrackfailtostart.ksh
new file mode 100755
index 00000000..f62b83d5
--- /dev/null
+++ b/test/unittest/cpc/err.cputrackfailtostart.ksh
@@ -0,0 +1,77 @@
+#!/bin/ksh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+
+#
+# This script ensures that cputrack(1M) will fail to start when the cpc
+# provider has active enablings.
+#
+# The script will fail if:
+#	1) The system under test does not define the 'PAPI_tot_ins' event.
+#
+
+script()
+{
+        $dtrace -o $dtraceout -s /dev/stdin <<EOF
+        #pragma D option bufsize=128k
+
+        cpc:::PAPI_tot_ins-all-10000
+        {
+                @[probename] = count();
+        }
+EOF
+}
+
+
+if [ $# != 1 ]; then
+        echo expected one argument: '<'dtrace-path'>'
+        exit 2
+fi
+
+dtrace=$1
+dtraceout=/tmp/dtrace.out.$$
+script 2>/dev/null &
+timeout=15
+
+#
+# Sleep while the above script fires into life. To guard against dtrace dying
+# and us sleeping forever we allow 15 secs for this to happen. This should be
+# enough for even the slowest systems.
+#
+while [ ! -f $dtraceout ]; do
+        sleep 1
+        timeout=$(($timeout-1))
+        if [ $timeout -eq 0 ]; then
+                echo "dtrace failed to start. Exiting."
+                exit 1
+        fi
+done
+
+cputrack -c PAPI_tot_ins sleep 10
+status=$?
+
+rm $dtraceout
+
+exit $status
diff --git a/test/unittest/cpc/err.cputrackterminates.ksh b/test/unittest/cpc/err.cputrackterminates.ksh
new file mode 100755
index 00000000..58d1e798
--- /dev/null
+++ b/test/unittest/cpc/err.cputrackterminates.ksh
@@ -0,0 +1,70 @@
+#!/bin/ksh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+
+#
+# This script ensures that cputrack(1) will terminate when the cpc provider
+# kicks into life.
+#
+# The script will fail if:
+#	1) The system under test does not define the 'PAPI_tot_ins' event.
+#
+
+script()
+{
+	$dtrace -s /dev/stdin <<EOF
+	#pragma D option bufsize=128k
+
+	cpc:::PAPI_tot_ins-all-10000
+	{
+		@[probename] = count();
+	}
+
+	tick-1s
+	/n++ > 10/
+	{
+		exit(0);
+	}
+EOF
+}
+
+if [ $# != 1 ]; then
+        echo expected one argument: '<'dtrace-path'>'
+        exit 2
+fi
+
+dtrace=$1
+
+cputrack -c PAPI_tot_ins sleep 20 &
+cputrack_pid=$!
+sleep 5
+script 2>/dev/null &
+
+wait $cputrack_pid
+status=$?
+
+rm $dtraceout
+
+exit $status
diff --git a/test/unittest/cpc/err.toomanyenablings.d b/test/unittest/cpc/err.toomanyenablings.d
new file mode 100644
index 00000000..a50bd71a
--- /dev/null
+++ b/test/unittest/cpc/err.toomanyenablings.d
@@ -0,0 +1,55 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Test to check that attempting to enable too many probes will fail.
+ *
+ * This test will fail if:
+ *	1) We ever execute on a platform which is capable of programming 10
+ *	'PAPI_tot_ins' events simultaneously (which no current platforms are
+ *	capable of doing).
+ *	2) The system under test does not define the 'PAPI_tot_ins' event.
+ */
+
+#pragma D option quiet
+
+BEGIN
+{
+	exit(0);
+}
+
+cpc:::PAPI_tot_ins-all-10000,
+cpc:::PAPI_tot_ins-all-10001,
+cpc:::PAPI_tot_ins-all-10002,
+cpc:::PAPI_tot_ins-all-10003,
+cpc:::PAPI_tot_ins-all-10004,
+cpc:::PAPI_tot_ins-all-10005,
+cpc:::PAPI_tot_ins-all-10006,
+cpc:::PAPI_tot_ins-all-10007,
+cpc:::PAPI_tot_ins-all-10008,
+cpc:::PAPI_tot_ins-all-10009
+{
+}
diff --git a/test/unittest/cpc/tst.allcpus.ksh b/test/unittest/cpc/tst.allcpus.ksh
new file mode 100755
index 00000000..7f026c9e
--- /dev/null
+++ b/test/unittest/cpc/tst.allcpus.ksh
@@ -0,0 +1,107 @@
+#!/bin/ksh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# This script verifies that we can fire a probe on each CPU that is in
+# an online state.
+#
+# The script will fail if:
+#       1) The system under test does not define the 'PAPI_tot_ins' event.
+#
+
+if [ $# != 1 ]; then
+        echo expected one argument: '<'dtrace-path'>'
+        exit 2
+fi
+
+dtrace=$1
+numproc=`psrinfo | tail -1 | cut -f1`
+cpu=0
+dtraceout=/var/tmp/dtrace.out.$$
+scriptout=/var/tmp/script.out.$$
+
+spin()
+{
+	while [ 1 ]; do
+		:
+	done
+}
+
+script()
+{
+        $dtrace -o $dtraceout -s /dev/stdin <<EOF
+	#pragma D option bufsize=128k
+	#pragma D option quiet
+
+        cpc:::PAPI_tot_ins-user-10000
+	/cpus[cpu] != 1/
+        {
+		cpus[cpu] = 1;
+		@a[cpu] = count();
+        }
+
+	tick-1s
+	/n++ > 10/
+	{
+		printa(@a);
+		exit(0);
+	}
+EOF
+}
+
+echo "" > $scriptout
+while [ $cpu -le $numproc ]
+do
+	if [ "`psrinfo -s $cpu 2> /dev/null`" -eq 1 ]; then
+		printf "%9d %16d\n" $cpu 1 >> $scriptout
+		spin &
+		allpids[$cpu]=$!
+		pbind -b $cpu $!
+	fi
+	cpu=$(($cpu+1))
+done
+echo "" >> $scriptout
+
+script
+
+diff $dtraceout $scriptout >/dev/null 2>&1
+status=$?
+
+# kill off the spinner processes
+cpu=0
+while [ $cpu -le $numproc ]
+do
+	if [ "`psrinfo -s $cpu 2> /dev/null`" -eq 1 ]; then
+		kill ${allpids[$cpu]}
+	fi
+	cpu=$(($cpu+1))
+done
+
+rm $dtraceout
+rm $scriptout
+
+exit $status
diff --git a/test/unittest/cpc/tst.genericevent.d b/test/unittest/cpc/tst.genericevent.d
new file mode 100644
index 00000000..7ebf844e
--- /dev/null
+++ b/test/unittest/cpc/tst.genericevent.d
@@ -0,0 +1,48 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Test that we can successfully enable a probe using a generic event.
+ * Currently, all platforms implement 'PAPI_tot_ins' so we'll use that.
+ * Note that this test will fail if the system under test does not
+ * implement that event.
+ *
+ * This test will fail if:
+ *	1) The system under test does not define the 'PAPI_tot_ins' event.
+ */
+
+#pragma D option quiet
+#pragma D option bufsize=128k
+
+cpc:::PAPI_tot_ins-all-10000
+{
+	@[probename] = count();
+}
+
+tick-1s
+/n++ > 10/
+{
+	exit(0);
+}
diff --git a/test/unittest/cpc/tst.platformevent.ksh b/test/unittest/cpc/tst.platformevent.ksh
new file mode 100755
index 00000000..96d1ab8c
--- /dev/null
+++ b/test/unittest/cpc/tst.platformevent.ksh
@@ -0,0 +1,81 @@
+#!/bin/ksh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# This script ensures that we can enable a probe which specifies a platform
+# specific event.
+#
+
+if [ $# != 1 ]; then
+        print -u2 "expected one argument: <dtrace-path>"
+        exit 2
+fi
+
+dtrace=$1
+
+get_event()
+{
+        perl /dev/stdin /dev/stdout << EOF
+        open CPUSTAT, '/usr/sbin/cpustat -h |'
+            or die  "Couldn't run cpustat: \$!\n";
+        while (<CPUSTAT>) {
+                if (/(\s+)event\[*[0-9]-*[0-9]*\]*:/ && !/PAPI/) {
+                        @a = split(/ /, \$_);
+                        \$event = \$a[\$#a-1];
+                }
+        }
+
+        close CPUSTAT;
+        print "\$event\n";
+EOF
+}
+
+script()
+{
+        $dtrace -s /dev/stdin << EOD
+        #pragma D option quiet
+        #pragma D option bufsize=128k
+
+        cpc:::$1-all-10000
+        {
+                @[probename] = count();
+        }
+
+        tick-1s
+        /n++ > 5/
+        {
+                exit(0);
+        }
+EOD
+}
+
+event=$(get_event)
+script $event
+
+status=$?
+
+exit $status
-- 
2.18.4




More information about the DTrace-devel mailing list