|
@@ -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
|