#!/bin/sh # 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 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=/usr/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 \[LMBENCH_VER: `cat ../../src/bk.ver`] 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 \[NETWORKS: ${NETWORKS}] 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 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 date >> ${OUTPUT} echo Latency measurements >> ${OUTPUT} lat_syscall null lat_syscall read lat_syscall write lat_syscall stat $STAT lat_syscall fstat $STAT lat_syscall open $STAT for i in 10 100 250 500; do lat_select file $i; done for i in 10 100 250 500; do lat_select tcp $i; done lat_sig install lat_sig catch lat_sig prot lat_sig lat_pipe lat_unix cp hello /tmp/hello for i in fork exec shell; do lat_proc $i; done rm /tmp/hello rm -f $FILE lmdd label="File $FILE write bandwidth: " of=$FILE move=${MB}m fsync=1 print=3 lat_pagefault $FILE echo "" 1>&2 echo \"mappings 1>&2 for i in $ALL; do lat_mmap $i $FILE; done echo "" 1>&2 if [ X$SLOWFS != XYES ] then date >> ${OUTPUT} echo Calculating file system latency >> ${OUTPUT} echo '"File system latency' 1>&2 lat_fs $FSDIR echo "" 1>&2 fi if [ X"$DISKS" != X ] then for i in $DISKS do if [ -r $i ] then echo "Calculating disk zone bw & seek times" >> ${OUTPUT} disk $i echo "" 1>&2 fi done fi date >> ${OUTPUT} echo Local networking >> ${OUTPUT} if [ ! -d ../../src/webpage-lm ] then (cd ../../src && tar xf webpage-lm.tar) sync sleep 1 fi SERVERS="lat_udp lat_tcp lat_rpc lat_connect bw_tcp" for server in $SERVERS; do $server -s; done DOCROOT=../../src/webpage-lm lmhttp 8008 & sleep 2; for i in localhost do lat_udp $i lat_udp -$i lat_tcp $i lat_tcp -$i lat_rpc $i lat_rpc -$i lat_connect $i lat_connect -$i bw_tcp $i bw_tcp -$i # I want a hot cache number lat_http $i 8008 < ../../src/webpage-lm/URLS > /dev/null 2>&1 lat_http $i 8008 < ../../src/webpage-lm/URLS lat_http -$i 8008 done for remote in $REMOTE do echo Networking to $remote >> ${OUTPUT} $RCP $SERVERS lmhttp ../../src/webpage-lm.tar ${remote}:/tmp for server in $SERVERS do $RSH $remote -n /tmp/$server -s & done $RSH $remote -n 'cd /tmp; tar xf webpage-lm.tar; cd webpage-lm; ../lmhttp 8008' & sleep 10 echo "[ Networking remote to $remote: `$RSH $remote uname -a` ]" 1>&2 lat_udp $remote; lat_udp -$remote; lat_tcp $remote; lat_tcp -$remote; lat_rpc $remote udp; lat_rpc $remote tcp; lat_rpc -$remote; lat_connect $remote; lat_connect -$remote; bw_tcp $remote; bw_tcp -$remote # I want a hot cache number lat_http $remote 8008 < ../../src/webpage-lm/URLS > /dev/null 2>&1 lat_http $remote 8008 < ../../src/webpage-lm/URLS lat_http -$remote 8008 RM= for server in $SERVERS do RM="/tmp/$server $RM" done $RSH $remote rm $RM done date >> ${OUTPUT} echo Bandwidth measurements >> ${OUTPUT} bw_unix bw_pipe echo "" 1>&2 echo \"read bandwidth 1>&2 for i in $ALL; do 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 bw_file_rd $i open2close $FILE; done echo "" 1>&2 echo \"Mmap read bandwidth 1>&2 for i in $ALL; do bw_mmap_rd $i mmap_only $FILE; done echo "" 1>&2 echo \"Mmap read open2close bandwidth 1>&2 for i in $ALL; do bw_mmap_rd $i open2close $FILE; done echo "" 1>&2 rm -f $FILE echo \"libc bcopy unaligned 1>&2 for i in $HALF; do bw_mem $i bcopy; done; echo "" 1>&2 echo \"libc bcopy aligned 1>&2 for i in $HALF; do bw_mem $i bcopy conflict; done; echo "" 1>&2 echo \"unrolled bcopy unaligned 1>&2 for i in $HALF; do bw_mem $i fcp; done; echo "" 1>&2 echo \"unrolled partial bcopy unaligned 1>&2 for i in $HALF; do bw_mem $i cp; done; echo "" 1>&2 echo "Memory read bandwidth" 1>&2 for i in $ALL; do bw_mem $i frd; done; echo "" 1>&2 echo "Memory partial read bandwidth" 1>&2 for i in $ALL; do bw_mem $i rd; done; echo "" 1>&2 echo "Memory write bandwidth" 1>&2 for i in $ALL; do bw_mem $i fwr; done; echo "" 1>&2 echo "Memory partial write bandwidth" 1>&2 for i in $ALL; do bw_mem $i wr; done; echo "" 1>&2 echo "Memory partial read/write bandwidth" 1>&2 for i in $ALL; do bw_mem $i rdwr; done; echo "" 1>&2 echo "Memory bzero bandwidth" 1>&2 for i in $ALL; do bw_mem $i bzero; done; echo "" 1>&2 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 for size in $CTX; do lat_ctx -s $size $N; 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 lat_mem_rd $MB 128 else lat_mem_rd $MB 16 32 64 128 256 512 1024 fi date >> ${OUTPUT} echo '' 1>&2 echo \[`date`] 1>&2 exit 0