1#!/bin/sh 2# 3# 4# CDDL HEADER START 5# 6# The contents of this file are subject to the terms 7# of the Common Development and Distribution License 8# (the "License"). You may not use this file except 9# in compliance with the License. 10# 11# You can obtain a copy of the license at 12# src/OPENSOLARIS.LICENSE 13# or http://www.opensolaris.org/os/licensing. 14# See the License for the specific language governing 15# permissions and limitations under the License. 16# 17# When distributing Covered Code, include this CDDL 18# HEADER in each file and include the License file at 19# usr/src/OPENSOLARIS.LICENSE. If applicable, 20# add the following below this CDDL HEADER, with the 21# fields enclosed by brackets "[]" replaced with your 22# own identifying information: Portions Copyright [yyyy] 23# [name of copyright owner] 24# 25# CDDL HEADER END 26# 27 28# 29# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 30# Use is subject to license terms. 31# 32 33function usage { 34 echo "Usage" 35 echo "$0 [-l] [-h] <#-of-users> nodename [test match pattern]" 36 echo "-l : disable libinfo L1 cache" 37 echo "-h : Help. This option displays information on how to run the script. " 38 echo "[test match pattern] : This option runs only the test that is specified" 39 echo 40 echo "You must have set up users, groups, and SACLs with od_account_create" 41 echo "with the same number of user accounts." 42 echo "Supply a pattern to match to run a subset of tests" 43 exit 1 44} 45 46# default to libinfo cache enabled 47L1CACHE="1" 48 49while getopts "lh" OPT_LIST 50do 51 case $OPT_LIST in 52 l) L1CACHE="0";; # to run the libmicro tests with l1cache disabled 53 h) usage;; 54 *) usage;; 55 esac 56done 57 58shift `expr $OPTIND - 1` 59 60if [ $# -lt 2 -o $# -gt 3 ]; then 61 usage 62fi 63 64tattle="./tattle" 65 66bench_version=0.4.0 67libmicro_version=`$tattle -V` 68 69case $libmicro_version in 70$bench_version) 71 ;; 72*) 73 echo "ERROR: libMicro version doesn't match 'bench' script version" 74 exit 1 75esac 76 77TMPROOT=/private/tmp/libmicro.$$ 78VARROOT=/private/var/tmp/libmicro.$$ 79mkdir -p $TMPROOT 80mkdir -p $VARROOT 81trap "rm -rf $TMPROOT $VARROOT && exit" 0 2 82 83TFILE=$TMPROOT/data 84IFILE=$TMPROOT/ifile 85TDIR1=$TMPROOT/0/1/2/3/4/5/6/7/8/9 86TDIR2=$TMPROOT/1/2/3/4/5/6/7/8/9/0 87VFILE=$VARROOT/data 88VDIR1=$VARROOT/0/1/2/3/4/5/6/7/8/9 89VDIR2=$VARROOT/1/2/3/4/5/6/7/8/9/0 90 91OPTS="-E -C 200 -L -S -W" 92 93dd if=/dev/zero of=$TFILE bs=1024k count=10 2>/dev/null 94dd if=/dev/zero of=$VFILE bs=1024k count=10 2>/dev/null 95mkdir -p $TDIR1 $TDIR2 96mkdir -p $VDIR1 $VDIR2 97 98touch $IFILE 99/usr/bin/touch /private/var/tmp/lmbench 100 101 102# produce benchmark header for easier comparisons 103 104hostname=`uname -n` 105 106if [ -f /usr/sbin/psrinfo ]; then 107 p_count=`psrinfo|wc -l` 108 p_mhz=`psrinfo -v | awk '/operates/{print $6 "MHz"; exit }'` 109 p_type=`psrinfo -vp 2>/dev/null | awk '{if (NR == 3) {print $0; exit}}'` 110 p_ipaddr=`getent hosts $hostname | awk '{print $1}'` 111fi 112 113if [ -f /proc/cpuinfo ]; then 114 p_count=`egrep processor /proc/cpuinfo | wc -l` 115 p_mhz=`awk -F: '/cpu MHz/{printf("%5.0f00Mhz\n",$2/100); exit}' /proc/cpuinfo` 116 p_type=`awk -F: '/model name/{print $2; exit}' /proc/cpuinfo` 117 p_ipaddr=`getent hosts $hostname | awk '{print $1}'` 118else 119## Mac OS X specific stuff 120# first, get ugly output, in case pretty output isn't available 121# 122 p_count=`sysctl -n hw.physicalcpu` 123 p_mhz=`sysctl -n hw.cpufrequency` 124 p_type=`sysctl -n hw.model` 125 126if [ -x /usr/sbin/system_profiler ]; then 127 # <rdar://4655981> requires this hunk of work-around 128 # grep the XML for the characteristic we need. The key appears twice, so grep for the useful key (with 'string') 129 # use sed to strip off the <string></string> and the tabs in front of the string. So much work for so little result. 130 # 131 p_mhz=`system_profiler -xml -detailLevel mini SPHardwareDataType | \ 132 grep -A1 current_processor_speed | grep string | \ 133 sed -E 's/<string>(.+)<\/string>/\1/' | sed 's- --g'` 134 p_type=`system_profiler -xml -detailLevel mini SPHardwareDataType | \ 135 grep -A1 cpu_type | grep string | \ 136 sed -E 's/<string>(.+)<\/string>/\1/' | sed 's- --g'` 137fi 138 139# look for en0 (usually ethernet) if that isn't there try en1 (usually wireless) else give up 140 p_ipaddr=`ipconfig getpacket en0 | grep yiaddr | tr "= " "\n" | grep [0-9]` 141 if [ ! $p_ipaddr ]; then 142 p_ipaddr=`ipconfig getpacket en1 | grep yiaddr | tr "= " "\n" | grep [0-9]` 143 elif [ ! $p_ipaddr ]; then 144 p_ipaddr="unknown" 145 fi 146fi 147 148printf "\n\n!Libmicro_#: %30s\n" $libmicro_version 149printf "!Options: %30s\n" "$OPTS" 150printf "!Machine_name: %30s\n" "$hostname" 151printf "!OS_name: %30s\n" `uname -s` 152printf "!OS_release: %30s\n" `sw_vers -productVersion` 153printf "!OS_build: %30.18s\n" "`sw_vers -buildVersion`" 154printf "!Processor: %30s\n" `arch` 155printf "!#CPUs: %30s\n" $p_count 156printf "!CPU_MHz: %30s\n" "$p_mhz" 157printf "!CPU_NAME: %30s\n" "$p_type" 158printf "!IP_address: %30s\n" "$p_ipaddr" 159printf "!Run_by: %30s\n" $LOGNAME 160printf "!Date: %30s\n" "`date '+%D %R'`" 161printf "!Compiler: %30s\n" `$tattle -c` 162printf "!Compiler Ver.:%30s\n" "`$tattle -v`" 163printf "!sizeof(long): %30s\n" `$tattle -s` 164printf "!extra_CFLAGS: %30s\n" "`$tattle -f`" 165printf "!TimerRes: %30s\n\n\n" "`$tattle -r`" 166 167bin_dir="$TMPROOT/bin" 168 169mkdir -p $bin_dir 170cp bin-*/exec_bin $bin_dir/$A 171 172cp ./apple/bin-*/posix_spawn_bin $bin_dir/$A 173 174newline=0 175 176# We commonly want to adjust this script for the number of users 177# and configuration of the accounts and configuration being tested. 178# 179# Users: 180NUSERS=$1 181NODENAME=$2 182UID_BASE=5000 183UID_END=`expr $UID_BASE + $NUSERS - 1` 184USER_PREFIX=od_test_ 185# 186# Groups: 187GID_ALL_USERS=1211 188GID_NO_USERS=1212 189GROUP_BASE=od_test_group 190# 191# getaddrinfo on hosts: 192HOST_BASE=sfs0 193HOST_RANGE=1-8 194 195# 196# Everything below the while loop is input for the while loop 197# if you have any tests which can't run in the while loop, put 198# them above this comment 199# 200while read A B 201do 202 # $A contains the command, $B contains the arguments 203 # we echo blank lines and comments 204 # we skip anything which fails to match *$1* (useful 205 # if we only want to test one case, but a nasty hack) 206 207 case $A in 208 \#*) 209 echo "$A $B" 210 newline=1 211 continue 212 ;; 213 214 "") 215 if [ $newline -eq 1 ] 216 then 217 newline=0 218 echo 219 echo 220 fi 221 222 continue 223 ;; 224 225 *$3*) 226 ;; 227 228 *) 229 continue 230 ;; 231 esac 232 233 if [ ! -f $bin_dir/$A ] 234 then 235 cp bin-*/$A $bin_dir/$A 236 fi 237 238 echo 239 240 (cd $TMPROOT && eval "bin/$A $B") 241 242 echo 243 echo 244done <<. 245 246# -P <# procs> 247# -T <# threads> - exclusive! 248 249# mbr_check_service_membership() 250mbr_check_service_membership $OPTS -N "mbr_check_service_membership" -s libMicro -u ${USER_PREFIX} -r ${NUSERS} 251mbr_check_service_membership $OPTS -N "mbr_check_service_membership_t2" -T 2 -s libMicro -u ${USER_PREFIX} -r ${NUSERS} 252mbr_check_service_membership $OPTS -N "mbr_check_service_membership_t4" -T 4 -s libMicro -u ${USER_PREFIX} -r ${NUSERS} 253mbr_check_service_membership $OPTS -N "mbr_check_service_membership_p2" -P 2 -s libMicro -u ${USER_PREFIX} -r ${NUSERS} 254mbr_check_service_membership $OPTS -N "mbr_check_service_membership_p4" -P 4 -s libMicro -u ${USER_PREFIX} -r ${NUSERS} 255 256# getpwnam() 257getpwnam $OPTS -N "getpwnam" -l ${L1CACHE} -r ${NUSERS} -u ${USER_PREFIX} 258getpwnam $OPTS -N "getpwnam_t2" -T 2 -l ${L1CACHE} -r ${NUSERS} -u ${USER_PREFIX} 259getpwnam $OPTS -N "getpwnam_p2" -P 2 -l ${L1CACHE} -r ${NUSERS} -u ${USER_PREFIX} 260 261# mbr_check_membership() 262mbr_check_membership $OPTS -N "mbr_check_membership" -u ${UID_BASE}-${UID_END} -g ${GID_ALL_USERS}-${GID_NO_USERS} 263mbr_check_membership $OPTS -N "mbr_check_membership_t2" -u ${UID_BASE}-${UID_END} -g ${GID_ALL_USERS}-${GID_NO_USERS} -T 2 264mbr_check_membership $OPTS -N "mbr_check_membership_t4" -u ${UID_BASE}-${UID_END} -g ${GID_ALL_USERS}-${GID_NO_USERS} -T 4 265mbr_check_membership $OPTS -N "mbr_check_membership_p2" -u ${UID_BASE}-${UID_END} -g ${GID_ALL_USERS}-${GID_NO_USERS} -P 2 266mbr_check_membership $OPTS -N "mbr_check_membership_p4" -u ${UID_BASE}-${UID_END} -g ${GID_ALL_USERS}-${GID_NO_USERS} -P 4 267 268# getpwuid() 269getpwuid $OPTS -N "getpwuid" -l ${L1CACHE} -u ${UID_BASE}-${UID_END} 270getpwuid $OPTS -N "getpwuid_t2" -l ${L1CACHE} -u ${UID_BASE}-${UID_END} -T 2 271getpwuid $OPTS -N "getpwuid_t4" -l ${L1CACHE} -u ${UID_BASE}-${UID_END} -T 4 272getpwuid $OPTS -N "getpwuid_p2" -l ${L1CACHE} -u ${UID_BASE}-${UID_END} -P 2 273getpwuid $OPTS -N "getpwuid_p4" -l ${L1CACHE} -u ${UID_BASE}-${UID_END} -P 4 274 275# getgrgid() 276getgrgid $OPTS -N "getgrgid" -l ${L1CACHE} -g ${GID_ALL_USERS}-${GID_NO_USERS} 277getgrgid $OPTS -N "getgrgid_t2" -l ${L1CACHE} -g ${GID_ALL_USERS}-${GID_NO_USERS} -T 2 278getgrgid $OPTS -N "getgrgid_t4" -l ${L1CACHE} -g ${GID_ALL_USERS}-${GID_NO_USERS} -T 4 279getgrgid $OPTS -N "getgrgid_p2" -l ${L1CACHE} -g ${GID_ALL_USERS}-${GID_NO_USERS} -P 2 280getgrgid $OPTS -N "getgrgid_p4" -l ${L1CACHE} -g ${GID_ALL_USERS}-${GID_NO_USERS} -P 4 281 282# getpwent() 283getpwent $OPTS -N "getpwent" -l ${L1CACHE} 284getpwent $OPTS -N "getpwent_t2" -l ${L1CACHE} -T 2 285getpwent $OPTS -N "getpwent_t4" -l ${L1CACHE} -T 4 286getpwent $OPTS -N "getpwent_p2" -l ${L1CACHE} -P 2 287getpwent $OPTS -N "getpwent_p4" -l ${L1CACHE} -P 4 288 289# getgrent() 290getgrent $OPTS -N "getgrent" -l ${L1CACHE} 291getgrent $OPTS -N "getgrent_t2" -l ${L1CACHE} -T 2 292getgrent $OPTS -N "getgrent_t4" -l ${L1CACHE} -T 4 293getgrent $OPTS -N "getgrent_p2" -l ${L1CACHE} -P 2 294getgrent $OPTS -N "getgrent_p4" -l ${L1CACHE} -P 4 295 296# getaddrinfo() host 297#getaddrinfo_host $OPTS -N "getaddrinfo_host" -r ${HOST_RANGE} -h ${HOST_BASE}%d 298#getaddrinfo_host $OPTS -N "getaddrinfo_host_t2" -r ${HOST_RANGE} -h ${HOST_BASE}%d -T 2 299#getaddrinfo_host $OPTS -N "getaddrinfo_host_t4" -r ${HOST_RANGE} -h ${HOST_BASE}%d -T 4 300#getaddrinfo_host $OPTS -N "getaddrinfo_host_p2" -r ${HOST_RANGE} -h ${HOST_BASE}%d -P 2 301#getaddrinfo_host $OPTS -N "getaddrinfo_host_p4" -r ${HOST_RANGE} -h ${HOST_BASE}%d -P 4 302 303# getaddrinfo() port 304getaddrinfo_port $OPTS -N "getaddrinfo_port" -l ${L1CACHE} 305getaddrinfo_port $OPTS -N "getaddrinfo_port_t2" -l ${L1CACHE} -T 2 306getaddrinfo_port $OPTS -N "getaddrinfo_port_t4" -l ${L1CACHE} -T 4 307getaddrinfo_port $OPTS -N "getaddrinfo_port_p2" -l ${L1CACHE} -P 2 308getaddrinfo_port $OPTS -N "getaddrinfo_port_p4" -l ${L1CACHE} -P 4 309 310# getgrnam() 311getgrnam $OPTS -N "getgrnam" -l ${L1CACHE} -g ${GROUP_BASE} -r 2 312getgrnam $OPTS -N "getgrnam_t2" -l ${L1CACHE} -T 2 -g ${GROUP_BASE} -r 2 313getgrnam $OPTS -N "getgrnam_t4" -l ${L1CACHE} -T 4 -g ${GROUP_BASE} -r 2 314getgrnam $OPTS -N "getgrnam_p2" -l ${L1CACHE} -P 2 -g ${GROUP_BASE} -r 2 315getgrnam $OPTS -N "getgrnam_p4" -l ${L1CACHE} -P 4 -g ${GROUP_BASE} -r 2 316 317# ODQueryCreateWithNode() 318od_query_create_with_node $OPTS -N "ODQueryCreateWithNode_cache_${NUSERS}u" -c 50 -r ${NUSERS} -t u -B 50 -n ${NODENAME} 319od_query_create_with_node $OPTS -N "ODQueryCreateWithNode_cache_${NUSERS}u_t2" -T 2 -c 50 -r ${NUSERS} -t u -B 50 -n ${NODENAME} 320od_query_create_with_node $OPTS -N "ODQueryCreateWithNode_cache_${NUSERS}u_t4" -T 4 -c 50 -r ${NUSERS} -t u -B 50 -n ${NODENAME} 321od_query_create_with_node $OPTS -N "ODQueryCreateWithNode_cache_${NUSERS}u_p2" -P 2 -c 50 -r ${NUSERS} -t u -B 50 -n ${NODENAME} 322od_query_create_with_node $OPTS -N "ODQueryCreateWithNode_cache_${NUSERS}u_p4" -P 4 -c 50 -r ${NUSERS} -t u -B 50 -n ${NODENAME} 323 324. 325