[DTrace-devel] [PATCH 13/16] cpc: Update Solaris allcpus test

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


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

Replace psrinfo calls with info from /proc/cpuinfo.

Replace PAPI_tot_ins with cpu_clock.

Eliminate the spinner processes.

Add reinvoke since, for some as yet unknown reason, not every CPU shows
up every time.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 test/unittest/cpc/tst.allcpus.sh | 101 +++++++++----------------------
 1 file changed, 30 insertions(+), 71 deletions(-)

diff --git a/test/unittest/cpc/tst.allcpus.sh b/test/unittest/cpc/tst.allcpus.sh
index b35a9c2a..90179d41 100755
--- a/test/unittest/cpc/tst.allcpus.sh
+++ b/test/unittest/cpc/tst.allcpus.sh
@@ -5,83 +5,42 @@
 # Licensed under the Universal Permissive License v 1.0 as shown at
 # http://oss.oracle.com/licenses/upl.
 
-#
-# 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.
-#
+# This script verifies that we can fire a probe on each CPU.
 
-if [ $# != 1 ]; then
-        echo expected one argument: '<'dtrace-path'>'
-        exit 2
-fi
+# Why isn't this more stable?  Some CPUs can take a long time to fire.
+# Allow some reinvokes and let the test run more than a few seconds.
+# @@reinvoke-failure: 1
 
 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
-}
+DIRNAME="$tmpdir/cpc-allcpus.$$.$RANDOM"
+mkdir -p $DIRNAME
+cd $DIRNAME
 
-script()
+$dtrace $dt_flags -qn '
+cpc:::cpu_clock-all-10000
+/cpus[cpu] != 1/
 {
-        $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
+	cpus[cpu] = 1;
+	printf("%d\n", cpu);
 }
 
-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
+tick-18s
+{
+	exit(0);
+}' | awk 'NF != 0 {print}' | sort > dtrace.out
+
+awk '/^processor/ {print $3}' /proc/cpuinfo | sort > cpuinfo.out
+
+if ! diff -q dtrace.out cpuinfo.out > /dev/null; then
+	echo dtrace output
+	cat dtrace.out
+	echo cpuinfo list
+	cat cpuinfo.out
+	echo ERROR: difference
+	exit 1
+fi
 
-exit $status
+echo cpulist `cat dtrace.out`
+echo success
+exit 0
-- 
2.18.4




More information about the DTrace-devel mailing list