Print this page
7290 ZFS test suite needs to control what utilities it can run
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>

*** 8,18 **** # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # ! # Copyright (c) 2015 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib # If neither is specified, do a nightly run. --- 8,18 ---- # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # ! # Copyright (c) 2015, 2016 by Delphix. All rights reserved. # . $STF_SUITE/include/libtest.shlib # If neither is specified, do a nightly run.
*** 63,94 **** log_note "Running with $threads" \ "$(get_sync_str $sync) threads, $iosize ios" if $do_recreate; then recreate_perfpool ! log_must $ZFS create $PERF_FS_OPTS \ $TESTFS fi if $clear_cache; then # Clear the ARC ! $ZPOOL export $PERFPOOL ! $ZPOOL import $PERFPOOL fi export RUNTIME=$PERF_RUNTIME export FILESIZE=$((TOTAL_SIZE / threads)) export NUMJOBS=$threads export SYNC_TYPE=$sync export BLOCKSIZE=$iosize ! $SYNC # Start the data collection do_collect_scripts $threads $sync $iosize # Start the load ! log_must $FIO $FIO_SCRIPTS/$script done done done } --- 63,94 ---- log_note "Running with $threads" \ "$(get_sync_str $sync) threads, $iosize ios" if $do_recreate; then recreate_perfpool ! log_must zfs create $PERF_FS_OPTS \ $TESTFS fi if $clear_cache; then # Clear the ARC ! zpool export $PERFPOOL ! zpool import $PERFPOOL fi export RUNTIME=$PERF_RUNTIME export FILESIZE=$((TOTAL_SIZE / threads)) export NUMJOBS=$threads export SYNC_TYPE=$sync export BLOCKSIZE=$iosize ! sync # Start the data collection do_collect_scripts $threads $sync $iosize # Start the load ! log_must fio $FIO_SCRIPTS/$script done done done }
*** 112,132 **** # Add in user supplied scripts and logfiles, if any. typeset oIFS=$IFS IFS=',' for item in $PERF_COLLECT_SCRIPTS; do ! collect_scripts+=($($ECHO $item | $SED 's/^ *//g')) done IFS=$oIFS typeset idx=0 while [[ $idx -lt "${#collect_scripts[@]}" ]]; do ! typeset logbase="$(get_perf_output_dir)/$($BASENAME \ $SUDO_COMMAND)" typeset outfile="$logbase.${collect_scripts[$idx + 1]}.$suffix" ! $TIMEOUT $PERF_RUNTIME ${collect_scripts[$idx]} >$outfile 2>&1 & ((idx += 2)) done # Need to explicitly return 0 because timeout(1) will kill # a child process and cause us to return non-zero. --- 112,132 ---- # Add in user supplied scripts and logfiles, if any. typeset oIFS=$IFS IFS=',' for item in $PERF_COLLECT_SCRIPTS; do ! collect_scripts+=($(echo $item | sed 's/^ *//g')) done IFS=$oIFS typeset idx=0 while [[ $idx -lt "${#collect_scripts[@]}" ]]; do ! typeset logbase="$(get_perf_output_dir)/$(basename \ $SUDO_COMMAND)" typeset outfile="$logbase.${collect_scripts[$idx + 1]}.$suffix" ! timeout $PERF_RUNTIME ${collect_scripts[$idx]} >$outfile 2>&1 & ((idx += 2)) done # Need to explicitly return 0 because timeout(1) will kill # a child process and cause us to return non-zero.
*** 135,147 **** # Find a place to deposit performance data collected while under load. function get_perf_output_dir { typeset dir="$(pwd)/perf_data" ! [[ -d $dir ]] || $MKDIR -p $dir ! $ECHO $dir } # # Destroy and create the pool used for performance tests. The # PERFPOOL_CREATE_CMD variable allows users to test with a custom pool --- 135,147 ---- # Find a place to deposit performance data collected while under load. function get_perf_output_dir { typeset dir="$(pwd)/perf_data" ! [[ -d $dir ]] || mkdir -p $dir ! echo $dir } # # Destroy and create the pool used for performance tests. The # PERFPOOL_CREATE_CMD variable allows users to test with a custom pool
*** 155,165 **** poolexists $PERFPOOL && destroy_pool $PERFPOOL if [[ -n $PERFPOOL_CREATE_CMD ]]; then log_must $PERFPOOL_CREATE_CMD else ! log_must eval "$ZPOOL create -f $PERFPOOL $DISKS" fi } function get_max_arc_size { --- 155,165 ---- poolexists $PERFPOOL && destroy_pool $PERFPOOL if [[ -n $PERFPOOL_CREATE_CMD ]]; then log_must $PERFPOOL_CREATE_CMD else ! log_must eval "zpool create -f $PERFPOOL $DISKS" fi } function get_max_arc_size {
*** 177,235 **** function get_system_config { typeset config=$PERF_DATA_DIR/$1 echo "{" >>$config ! $DTRACE -qn 'BEGIN{ printf(" \"ncpus\": %d,\n", `ncpus); printf(" \"physmem\": %u,\n", `physmem * `_pagesize); printf(" \"c_max\": %u,\n", `arc_stats.arcstat_c_max.value.ui64); printf(" \"kmem_flags\": \"0x%x\",", `kmem_flags); exit(0)}' >>$config ! $ECHO " \"hostname\": \"$($UNAME -n)\"," >>$config ! $ECHO " \"kernel version\": \"$($UNAME -v)\"," >>$config ! $IOSTAT -En | $AWK 'BEGIN { printf(" \"disks\": {\n"); first = 1} /^c/ {disk = $1} /^Size: [^0]/ {size = $2; if (first != 1) {printf(",\n")} else {first = 0} printf(" \"%s\": \"%s\"", disk, size)} END {printf("\n },\n")}' >>$config ! $SED -n 's/^set \(.*\)[ ]=[ ]\(.*\)/\1=\2/p' /etc/system | \ ! $AWK -F= 'BEGIN {printf(" \"system\": {\n"); first = 1} {if (first != 1) {printf(",\n")} else {first = 0}; printf(" \"%s\": %s", $1, $2)} END {printf("\n }\n")}' >>$config echo "}" >>$config } function num_jobs_by_cpu { ! typeset ncpu=$($PSRINFO | $WC -l) typeset num_jobs=$ncpu ! [[ $ncpu -gt 8 ]] && num_jobs=$($ECHO "$ncpu * 3 / 4" | $BC) ! $ECHO $num_jobs } function pool_to_lun_list { typeset pool=$1 typeset ctd ctds devname lun typeset lun_list=':' ! ctds=$($ZPOOL list -v $pool | $AWK '/c[0-9]*t[0-9a-fA-F]*d[0-9]*/ \ {print $1}') for ctd in $ctds; do # Get the device name as it appears in /etc/path_to_inst ! devname=$($READLINK -f /dev/dsk/${ctd}s0 | $SED -n \ 's/\/devices\([^:]*\):.*/\1/p') # Add a string composed of the driver name and instance # number to the list for comparison with dev_statname. ! lun=$($SED 's/"//g' /etc/path_to_inst | $GREP $devname | $AWK \ '{print $3$2}') lun_list="$lun_list$lun:" done echo $lun_list } --- 177,235 ---- function get_system_config { typeset config=$PERF_DATA_DIR/$1 echo "{" >>$config ! dtrace -qn 'BEGIN{ printf(" \"ncpus\": %d,\n", `ncpus); printf(" \"physmem\": %u,\n", `physmem * `_pagesize); printf(" \"c_max\": %u,\n", `arc_stats.arcstat_c_max.value.ui64); printf(" \"kmem_flags\": \"0x%x\",", `kmem_flags); exit(0)}' >>$config ! echo " \"hostname\": \"$(uname -n)\"," >>$config ! echo " \"kernel version\": \"$(uname -v)\"," >>$config ! iostat -En | awk 'BEGIN { printf(" \"disks\": {\n"); first = 1} /^c/ {disk = $1} /^Size: [^0]/ {size = $2; if (first != 1) {printf(",\n")} else {first = 0} printf(" \"%s\": \"%s\"", disk, size)} END {printf("\n },\n")}' >>$config ! sed -n 's/^set \(.*\)[ ]=[ ]\(.*\)/\1=\2/p' /etc/system | \ ! awk -F= 'BEGIN {printf(" \"system\": {\n"); first = 1} {if (first != 1) {printf(",\n")} else {first = 0}; printf(" \"%s\": %s", $1, $2)} END {printf("\n }\n")}' >>$config echo "}" >>$config } function num_jobs_by_cpu { ! typeset ncpu=$(psrinfo | wc -l) typeset num_jobs=$ncpu ! [[ $ncpu -gt 8 ]] && num_jobs=$(echo "$ncpu * 3 / 4" | bc) ! echo $num_jobs } function pool_to_lun_list { typeset pool=$1 typeset ctd ctds devname lun typeset lun_list=':' ! ctds=$(zpool list -v $pool | awk '/c[0-9]*t[0-9a-fA-F]*d[0-9]*/ \ {print $1}') for ctd in $ctds; do # Get the device name as it appears in /etc/path_to_inst ! devname=$(readlink -f /dev/dsk/${ctd}s0 | sed -n \ 's/\/devices\([^:]*\):.*/\1/p') # Add a string composed of the driver name and instance # number to the list for comparison with dev_statname. ! lun=$(sed 's/"//g' /etc/path_to_inst | grep $devname | awk \ '{print $3$2}') lun_list="$lun_list$lun:" done echo $lun_list }