Browse Source

A few hacks to make a more automated regression test for lmbench on graphene.

Don Porter 6 years ago
parent
commit
7c34bf2ea7

+ 22 - 0
LibOS/shim/test/apps/lmbench/CONFIG.template

@@ -0,0 +1,22 @@
+DISKS=""; export DISKS
+DISK_DESC=""; export DISK_DESC
+OUTPUT=/dev/tty; export OUTPUT
+ENOUGH=5000; export ENOUGH
+FASTMEM="NO"; export FASTMEM
+FILE=/var/tmp/XXX; export FILE
+FSDIR=/var/tmp; export FSDIR
+INFO=INFO.kermit.cs.unc.edu; export INFO
+LOOP_O=0.00000013; export LOOP_O
+MAIL=no; export MAIL
+MB=512; export MB
+MHZ=""; export MHZ
+MOTHERBOARD=""; export MOTHERBOARD
+NETWORKS=""; export NETWORKS
+OS="linux"; export OS
+PROCESSORS=""; export PROCESSORS
+REMOTE=""; export REMOTE
+SLOWFS="NO"; export SLOWFS
+TIMING_O=0; export TIMING_O
+RSH=rsh; export RSH
+RCP=rcp; export RCP
+VERSION=2.5; export VERSION

+ 6 - 0
LibOS/shim/test/apps/lmbench/Makefile

@@ -66,5 +66,11 @@ test-graphene: all $(lmbench_config)
 		env LOADER=./pal_loader OS=linux RESULTS=results/graphene \
 		./results
 
+regress-graphene: all $(lmbench_config)
+	cp $(LMBENCHDIR)/scripts/lmbench-graphene-regress $(LMBENCHDIR)/bin/linux
+	cd $(LMBENCHDIR)/scripts && \
+		env LOADER=./pal_loader OS=linux RESULTS=results/graphene \
+		./results-regression
+
 clean-lmbench:
 	$(MAKE) -C $(LMBENCHDIR) clean

+ 306 - 0
LibOS/shim/test/apps/lmbench/lmbench-2.5/scripts/lmbench-graphene-regress

@@ -0,0 +1,306 @@
+#!/bin/bash
+
+# lmbench - run the lmbench benchmark suite.
+#
+# Hacked by Larry McVoy (lm@sun.com, lm@sgi.com, lm@bitmover.com).
+# Copyright (c) 1994 Larry McVoy.  GPLed software.
+# $Id$
+
+# Make sure we can find: ./cmd, df, and netstat
+PATH=.:../../scripts:$PATH:/etc:/usr/etc:/sbin:/usr/sbin
+export PATH
+
+echo PATH = $PATH
+echo lat_syscall = `readlink -f lat_syscall`
+
+# lat_unix, lat_udp, lat_tcp only do one run!!!
+# we loop to repeat the tests
+N_RUNS=6
+
+if [ -f $1 ]
+then	. $1
+	echo Using config in $1 >> ${OUTPUT}
+else	echo Using defaults >> ${OUTPUT}
+	ENOUGH=1000000
+	TIMING_O=0
+	LOOP_O=0
+fi
+export ENOUGH TIMING_O LOOP_O
+
+if [ X$FILE = X ]
+then	FILE=/tmp/XXX
+	touch $FILE || echo Can not create $FILE >> ${OUTPUT}
+fi
+if [ X$MB = X ]
+then	MB=8
+fi
+AVAILKB=`expr $MB \* 1024`
+
+# Figure out how big we can go for stuff that wants to use
+# all and half of memory.
+HALF="512 1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1m"
+ALL="$HALF 2m"
+i=4
+while [ $i -le $MB ]
+do
+	ALL="$ALL ${i}m"
+	h=`expr $i / 2`
+	HALF="$HALF ${h}m"
+	i=`expr $i \* 2`
+done
+
+
+if [ X$FSDIR = X ]
+then	FSDIR=/tmp/lat_fs
+fi
+MP=N
+
+# Figure out as much stuff as we can about this system.
+# Sure would be nice if everyone had SGI's "hinv".
+echo \[lmbench2.0 results for `uname -a`] 1>&2
+echo \[ALL: ${ALL}] 1>&2
+echo \[DISKS: ${DISKS}] 1>&2
+echo \[DISK_DESC: ${DISK_DESC}] 1>&2
+echo \[ENOUGH: ${ENOUGH}] 1>&2
+echo \[FAST: ${FAST}] 1>&2
+echo \[FASTMEM: ${FASTMEM}] 1>&2
+echo \[FILE: ${FILE}] 1>&2
+echo \[FSDIR: ${FSDIR}] 1>&2
+echo \[HALF: ${HALF}] 1>&2
+echo \[INFO: ${INFO}] 1>&2
+echo \[LOOP_O: ${LOOP_O}] 1>&2
+echo \[MB: ${MB}] 1>&2
+echo \[MHZ: ${MHZ}] 1>&2
+echo \[MOTHERBOARD: ${MOTHERBOARD}] 1>&2
+echo \[NETrunS: ${NETrunS}] 1>&2
+echo \[PROCESSORS: ${PROCESSORS}] 1>&2
+echo \[REMOTE: ${REMOTE}] 1>&2
+echo \[SLOWFS: ${SLOWFS}] 1>&2
+echo \[OS: ${OS}] 1>&2
+echo \[TIMING_O: ${TIMING_O}] 1>&2
+echo \[LMBENCH VERSION: ${VERSION}] 1>&2
+echo \[USER: $USER] 1>&2
+echo \[HOSTNAME: `hostname`] 1>&2
+echo \[NODENAME: `uname -n`] 1>&2
+echo \[SYSNAME: `uname -s`] 1>&2
+echo \[PROCESSOR: `uname -p`] 1>&2
+echo \[MACHINE: `uname -m`] 1>&2
+echo \[RELEASE: `uname -r`] 1>&2
+echo \[VERSION: `uname -v`] 1>&2
+#if 0
+echo \[`date`] 1>&2
+echo \[`uptime`] 1>&2
+netstat -i | while read i
+do	echo \[net: "$i"] 1>&2
+	set `echo $i`
+	case $1 in
+	    *ame)	;;
+	    *)		ifconfig $1 | while read i
+			do echo \[if: "$i"] 1>&2
+			done
+			;;
+	esac
+done
+
+mount | while read i
+do	echo \[mount: "$i"] 1>&2
+done
+
+STAT=$FSDIR/lmbench
+mkdir $FSDIR 2>/dev/null
+touch $STAT 2>/dev/null
+if [ ! -f $STAT ]
+then	echo "Can't make a file - $STAT - in $FSDIR" >> ${OUTPUT}
+	touch $STAT
+	exit 1
+fi
+
+function run {
+	echo "$@"
+	TMPOUT=/tmp/OUT
+	rm -rf $TMPOUT
+	$LOADER "$@" 2>>$TMPOUT | tee -a $TMPOUT
+	cat $TMPOUT 1>&2
+}
+
+date >> ${OUTPUT}
+echo Latency measurements >> ${OUTPUT}
+msleep 250
+run lat_syscall null
+run lat_syscall read
+run lat_syscall write
+run lat_syscall stat $STAT
+run lat_syscall fstat $STAT
+run lat_syscall open $STAT
+
+#select file (500), select tcp (500)
+run lat_select file 500
+run lat_select tcp 500
+
+#sig install, sig_overhead, prot. Fault
+run lat_sig install
+run lat_sig catch
+run lat_sig prot lat_sig
+
+#AF_UNIX
+echo AF_UNIX socket latency >> ${OUTPUT}
+for i in $(eval echo "{1..$N_RUNS}")
+do	run lat_unix
+done
+
+#forks
+cp hello /tmp/hello
+for i in fork dfork vfork exec dforkexec shell
+do	run lat_proc $i
+done
+rm -f /tmp/hello
+
+for i in $(eval echo "{1..$N_RUNS}")
+do	rm -f $FILE
+	run lmdd label="File $FILE write bandwidth:" of=$FILE move=${MB}m fsync=1 print=3
+done
+
+#0,4,10KB create/delete
+date >> ${OUTPUT}
+	echo Calculating file system latency >> ${OUTPUT}
+	echo '"File system latency' 1>&2
+	run lat_fs $FSDIR
+	echo "" 1>&2
+
+date >> ${OUTPUT}
+echo Local netruning >> ${OUTPUT}
+
+echo UDP socket latency >> ${OUTPUT}
+run lat_udp -s &
+sleep 3
+for i in $(eval echo "{1..$N_RUNS}")
+do	run lat_udp 127.0.0.1
+	sleep 1
+done
+run lat_udp -127.0.0.1
+sleep 3
+
+echo TCP socket latency >> ${OUTPUT}
+run lat_tcp -s &
+sleep 3
+for i in $(eval echo "{1..$N_RUNS}")
+do	run lat_tcp 127.0.0.1
+	sleep 1
+done
+run lat_tcp -127.0.0.1
+sleep 3
+
+echo TCP connect latency >> ${OUTPUT}
+run lat_connect -s &
+sleep 3
+run lat_connect 127.0.0.1
+sleep 1
+run lat_connect -127.0.0.1
+sleep 3
+
+echo TCP socket bandwidth >> ${OUTPUT}
+run bw_tcp -s &
+sleep 3
+for i in $(eval echo "{1..$N_RUNS}")
+do	run bw_tcp 127.0.0.1
+	sleep 1
+done
+run bw_tcp -127.0.0.1
+sleep 3
+
+date >> ${OUTPUT}
+echo Bandwidth measurements >> ${OUTPUT}
+
+for i in $(eval echo "{1..$N_RUNS}")
+do	run bw_unix
+done
+
+for i in $(eval echo "{1..$N_RUNS}")
+do	run bw_pipe
+done
+
+date >> ${OUTPUT}
+msleep 250
+echo Calculating context switch overhead >> ${OUTPUT}
+if [ $MB -ge 8 ]
+then	CTX="0 4 8 16 32 64"
+	N="2 4 8 16 24 32 64 96"
+else
+	CTX="0 4 8 16 32"
+	N="2 4 8 16 24 32 64 96"
+fi
+
+## dep: This test is currently flaky; for the moment, let's comment it out for regression testing
+#for size in $CTX
+#do	for i in $(eval echo "{1..$N_RUNS}")
+#	do	run lat_ctx -s $size $N
+#	done
+#done
+
+date >> ${OUTPUT}
+echo Calculating memory load latency >> ${OUTPUT}
+msleep 250
+echo "" 1>&2
+echo "Memory load latency" 1>&2
+if [ X$FASTMEM = XYES ]
+then	run lat_mem_rd $MB 128
+else	run lat_mem_rd $MB 16 32 64 128 256 512 1024 
+fi
+date >> ${OUTPUT}
+echo '' 1>&2
+echo \[`date`] 1>&2
+
+date >> ${OUTPUT}
+echo Calculating memory bandwidths >> ${OUTPUT}
+msleep 250
+
+echo "" 1>&2
+echo \"read bandwidth 1>&2
+for i in $ALL; do run bw_file_rd $i io_only $FILE; done
+echo "" 1>&2
+
+echo "" 1>&2
+echo \"read open2close bandwidth 1>&2
+for i in $ALL; do run bw_file_rd $i open2close $FILE; done
+echo "" 1>&2
+
+echo \"Mmap read bandwidth 1>&2
+for i in $ALL; do run bw_mmap_rd $i mmap_only $FILE; done
+echo "" 1>&2
+
+echo \"Mmap read open2close bandwidth 1>&2
+for i in $ALL; do run bw_mmap_rd $i open2close $FILE; done
+echo "" 1>&2
+rm -f $FILE
+
+echo \"libc bcopy unaligned 1>&2
+for i in $HALF; do run bw_mem $i bcopy; done; echo "" 1>&2
+
+echo \"libc bcopy aligned 1>&2
+for i in $HALF; do run bw_mem $i bcopy conflict; done; echo "" 1>&2
+
+echo \"unrolled bcopy unaligned 1>&2
+for i in $HALF; do run bw_mem $i fcp; done; echo "" 1>&2
+
+echo \"unrolled partial bcopy unaligned 1>&2
+for i in $HALF; do run bw_mem $i cp; done; echo "" 1>&2
+
+echo "Memory read bandwidth" 1>&2
+for i in $ALL; do run bw_mem $i frd; done; echo "" 1>&2
+
+echo "Memory partial read bandwidth" 1>&2
+for i in $ALL; do run bw_mem $i rd; done; echo "" 1>&2
+
+echo "Memory write bandwidth" 1>&2
+for i in $ALL; do run bw_mem $i fwr; done; echo "" 1>&2
+
+echo "Memory partial write bandwidth" 1>&2
+for i in $ALL; do run bw_mem $i wr; done; echo "" 1>&2
+
+echo "Memory partial read/write bandwidth" 1>&2
+for i in $ALL; do run bw_mem $i rdwr; done; echo "" 1>&2
+
+echo "Memory bzero bandwidth" 1>&2
+for i in $ALL; do run bw_mem $i bzero; done; echo "" 1>&2
+
+exit 0

+ 44 - 0
LibOS/shim/test/apps/lmbench/lmbench-2.5/scripts/results-regression

@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# $Id$
+
+if [ -z "$OS" ]; then
+	OS=`../scripts/os`
+fi
+if [ -z "$CONFIG" ]; then
+	CONFIG=`../scripts/config`
+fi
+if [ -z "$RESULTS" ]; then
+	RESULTS=results/$OS
+fi
+BASE=../$RESULTS/`uname -n`
+EXT=0
+
+if [ ! -f "../bin/$OS/$CONFIG" ]
+then	echo "No config file?"
+	exit 1
+fi
+. ../bin/$OS/$CONFIG
+
+if [ ! -d ../$RESULTS ]
+then	mkdir -p ../$RESULTS
+fi
+RESULTS=$BASE.$EXT
+while [ -f $RESULTS ]
+do      EXT=`expr $EXT + 1`
+	RESULTS=$BASE.$EXT
+done
+
+cd ../bin/$OS 
+export OUTPUT
+echo Results going to ${RESULTS}
+./lmbench-graphene-regress $CONFIG 2>../${RESULTS}
+
+if [ X$MAIL = Xyes ]
+then	(echo Mailing results
+	echo ---- $INFO ---
+	cat $INFO 
+	echo ---- $RESULTS ---
+	cat ../$RESULTS) | mail lmbench2@bitmover.com 
+fi
+exit 0