aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/zfs-tests.sh9
-rw-r--r--tests/zfs-tests/include/commands.cfg2
-rw-r--r--tests/zfs-tests/tests/perf/Makefile.am4
-rw-r--r--tests/zfs-tests/tests/perf/fio/random_reads.fio1
-rw-r--r--tests/zfs-tests/tests/perf/fio/random_readwrite.fio1
-rw-r--r--tests/zfs-tests/tests/perf/fio/random_readwrite_fixed.fio1
-rw-r--r--tests/zfs-tests/tests/perf/fio/random_writes.fio1
-rw-r--r--tests/zfs-tests/tests/perf/fio/sequential_reads.fio1
-rw-r--r--tests/zfs-tests/tests/perf/fio/sequential_writes.fio1
-rw-r--r--tests/zfs-tests/tests/perf/nfs-sample.cfg46
-rw-r--r--tests/zfs-tests/tests/perf/perf.shlib47
-rwxr-xr-xtests/zfs-tests/tests/perf/regression/random_writes_zil.ksh4
12 files changed, 115 insertions, 3 deletions
diff --git a/scripts/zfs-tests.sh b/scripts/zfs-tests.sh
index f00a28484..7c5286ba7 100755
--- a/scripts/zfs-tests.sh
+++ b/scripts/zfs-tests.sh
@@ -273,6 +273,7 @@ OPTIONS:
-f Use files only, disables block device tests
-S Enable stack tracer (negative performance impact)
-c Only create and populate constrained path
+ -n NFSFILE Use the nfsfile to determine the NFS configuration
-I NUM Number of iterations
-d DIR Use DIR for files and loopback devices
-s SIZE Use vdevs of SIZE (default: 4G)
@@ -295,7 +296,7 @@ $0 -x
EOF
}
-while getopts 'hvqxkfScd:s:r:?t:T:u:I:' OPTION; do
+while getopts 'hvqxkfScn:d:s:r:?t:T:u:I:' OPTION; do
case $OPTION in
h)
usage
@@ -324,6 +325,12 @@ while getopts 'hvqxkfScd:s:r:?t:T:u:I:' OPTION; do
constrain_path
exit
;;
+ n)
+ nfsfile=$OPTARG
+ [[ -f $nfsfile ]] || fail "Cannot read file: $nfsfile"
+ export NFS=1
+ . "$nfsfile"
+ ;;
d)
FILEDIR="$OPTARG"
;;
diff --git a/tests/zfs-tests/include/commands.cfg b/tests/zfs-tests/include/commands.cfg
index 78ba2488d..127a1477d 100644
--- a/tests/zfs-tests/include/commands.cfg
+++ b/tests/zfs-tests/include/commands.cfg
@@ -100,6 +100,7 @@ export SYSTEM_FILES='arp
readlink
rm
rmdir
+ scp
sed
seq
setenforce
@@ -110,6 +111,7 @@ export SYSTEM_FILES='arp
shuf
sleep
sort
+ ssh
stat
strings
su
diff --git a/tests/zfs-tests/tests/perf/Makefile.am b/tests/zfs-tests/tests/perf/Makefile.am
index d31bba0e2..68dd31ec1 100644
--- a/tests/zfs-tests/tests/perf/Makefile.am
+++ b/tests/zfs-tests/tests/perf/Makefile.am
@@ -1,5 +1,7 @@
pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/perf
-dist_pkgdata_DATA = perf.shlib
+dist_pkgdata_SCRIPTS = \
+ nfs-sample.cfg \
+ perf.shlib
SUBDIRS = \
fio \
diff --git a/tests/zfs-tests/tests/perf/fio/random_reads.fio b/tests/zfs-tests/tests/perf/fio/random_reads.fio
index 79610f9b2..e6e7034e0 100644
--- a/tests/zfs-tests/tests/perf/fio/random_reads.fio
+++ b/tests/zfs-tests/tests/perf/fio/random_reads.fio
@@ -26,6 +26,7 @@ runtime=${RUNTIME}
bs=${BLOCKSIZE}
ioengine=psync
sync=${SYNC_TYPE}
+direct=${DIRECT}
numjobs=${NUMJOBS}
[job]
diff --git a/tests/zfs-tests/tests/perf/fio/random_readwrite.fio b/tests/zfs-tests/tests/perf/fio/random_readwrite.fio
index 7d01c38ad..852d4bed6 100644
--- a/tests/zfs-tests/tests/perf/fio/random_readwrite.fio
+++ b/tests/zfs-tests/tests/perf/fio/random_readwrite.fio
@@ -28,6 +28,7 @@ runtime=${RUNTIME}
bssplit=4k/50:8k/30:128k/10:1m/10
ioengine=psync
sync=${SYNC_TYPE}
+direct=${DIRECT}
numjobs=${NUMJOBS}
buffer_compress_percentage=66
buffer_compress_chunk=4096
diff --git a/tests/zfs-tests/tests/perf/fio/random_readwrite_fixed.fio b/tests/zfs-tests/tests/perf/fio/random_readwrite_fixed.fio
index ed4495553..67b88c09d 100644
--- a/tests/zfs-tests/tests/perf/fio/random_readwrite_fixed.fio
+++ b/tests/zfs-tests/tests/perf/fio/random_readwrite_fixed.fio
@@ -28,6 +28,7 @@ runtime=${RUNTIME}
bs=${BLOCKSIZE}
ioengine=psync
sync=${SYNC_TYPE}
+direct=${DIRECT}
numjobs=${NUMJOBS}
buffer_compress_percentage=66
buffer_compress_chunk=4096
diff --git a/tests/zfs-tests/tests/perf/fio/random_writes.fio b/tests/zfs-tests/tests/perf/fio/random_writes.fio
index 5e2cb3002..90db5ce3b 100644
--- a/tests/zfs-tests/tests/perf/fio/random_writes.fio
+++ b/tests/zfs-tests/tests/perf/fio/random_writes.fio
@@ -25,6 +25,7 @@ runtime=${RUNTIME}
bs=${BLOCKSIZE}
ioengine=psync
sync=${SYNC_TYPE}
+direct=${DIRECT}
numjobs=${NUMJOBS}
filesize=${FILESIZE}
buffer_compress_percentage=66
diff --git a/tests/zfs-tests/tests/perf/fio/sequential_reads.fio b/tests/zfs-tests/tests/perf/fio/sequential_reads.fio
index 33a9a1d89..b4b45e084 100644
--- a/tests/zfs-tests/tests/perf/fio/sequential_reads.fio
+++ b/tests/zfs-tests/tests/perf/fio/sequential_reads.fio
@@ -26,6 +26,7 @@ runtime=${RUNTIME}
bs=${BLOCKSIZE}
ioengine=psync
sync=${SYNC_TYPE}
+direct=${DIRECT}
numjobs=${NUMJOBS}
[job]
diff --git a/tests/zfs-tests/tests/perf/fio/sequential_writes.fio b/tests/zfs-tests/tests/perf/fio/sequential_writes.fio
index 65a65910f..714993e92 100644
--- a/tests/zfs-tests/tests/perf/fio/sequential_writes.fio
+++ b/tests/zfs-tests/tests/perf/fio/sequential_writes.fio
@@ -25,6 +25,7 @@ runtime=${RUNTIME}
bs=${BLOCKSIZE}
ioengine=psync
sync=${SYNC_TYPE}
+direct=${DIRECT}
numjobs=${NUMJOBS}
filesize=${FILESIZE}
buffer_compress_percentage=66
diff --git a/tests/zfs-tests/tests/perf/nfs-sample.cfg b/tests/zfs-tests/tests/perf/nfs-sample.cfg
new file mode 100644
index 000000000..f7ac2dae3
--- /dev/null
+++ b/tests/zfs-tests/tests/perf/nfs-sample.cfg
@@ -0,0 +1,46 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright (c) 2016 by Delphix. All rights reserved.
+#
+
+#
+# This file is a sample NFS configuration for the performance tests. To use the
+# performance tests over NFS you must have:
+# - a client machine with fio and sudo installed
+# - passwordless SSH set up from this host
+# for delphix and root users to the client
+# - passwordless sudo for the user on the client
+#
+
+
+# The IP address for the server
+export NFS_SERVER=127.0.0.1
+
+# The IP address for the client
+export NFS_CLIENT=127.0.0.1
+
+# The mountpoint to use inside the client
+export NFS_MOUNT=/var/tmp/nfs
+
+# The user to run the tests as on the client
+export NFS_USER=delphix
+
+# Common NFS client mount options
+export NFS_OPTIONS="-o rw,nosuid,bg,hard,rsize=1048576,wsize=1048576,"
+NFS_OPTIONS+="nointr,timeo=600,proto=tcp,actimeo=0,port=2049"
+
+# illumos NFS client mount options
+# export NFS_OPTIONS="$NFS_OPTIONS,vers=3"
+
+# Linux NFS client mount options
+export NFS_OPTIONS="-t nfs $NFS_OPTIONS,noacl,nfsvers=3"
diff --git a/tests/zfs-tests/tests/perf/perf.shlib b/tests/zfs-tests/tests/perf/perf.shlib
index 7165df759..69e61e9fd 100644
--- a/tests/zfs-tests/tests/perf/perf.shlib
+++ b/tests/zfs-tests/tests/perf/perf.shlib
@@ -112,6 +112,16 @@ function do_fio_run_impl
export BLOCKSIZE=$iosize
sync
+ # When running locally, we want to keep the default behavior of
+ # DIRECT == 0, so only set it when we're running over NFS to
+ # disable client cache for reads.
+ if [[ $NFS -eq 1 ]]; then
+ export DIRECT=1
+ do_setup_nfs $script
+ else
+ export DIRECT=0
+ fi
+
# This will be part of the output filename.
typeset suffix=$(get_suffix $threads $sync $iosize)
@@ -124,7 +134,14 @@ function do_fio_run_impl
typeset outfile="$logbase.fio.$suffix"
# Start the load
- log_must fio --output $outfile $FIO_SCRIPTS/$script
+ if [[ $NFS -eq 1 ]]; then
+ log_must ssh -t $NFS_USER@$NFS_CLIENT "
+ fio --output /tmp/fio.out /tmp/test.fio
+ "
+ log_must scp $NFS_USER@$NFS_CLIENT:/tmp/fio.out $outfile
+ else
+ log_must fio --output $outfile $FIO_SCRIPTS/$script
+ fi
}
#
@@ -166,6 +183,34 @@ function do_fio_run
done
}
+# This function sets NFS mount on the client and make sure all correct
+# permissions are in place
+#
+function do_setup_nfs
+{
+ typeset script=$1
+ zfs set sharenfs=on $TESTFS
+ log_must chmod -R 777 /$TESTFS
+
+ ssh -t $NFS_USER@$NFS_CLIENT "mkdir -m 777 -p $NFS_MOUNT"
+ ssh -t $NFS_USER@$NFS_CLIENT "sudo -S umount $NFS_MOUNT"
+ log_must ssh -t $NFS_USER@$NFS_CLIENT "
+ sudo -S mount $NFS_OPTIONS $NFS_SERVER:/$TESTFS $NFS_MOUNT
+ "
+ #
+ # The variables in the fio script are only available in our current
+ # shell session, so we have to evaluate them here before copying
+ # the resulting script over to the target machine.
+ #
+ export jobnum='$jobnum'
+ while read line; do
+ eval echo "$line"
+ done < $FIO_SCRIPTS/$script > /tmp/test.fio
+ log_must sed -i -e "s%directory.*%directory=$NFS_MOUNT%" /tmp/test.fio
+ log_must scp /tmp/test.fio $NFS_USER@$NFS_CLIENT:/tmp
+ log_must rm /tmp/test.fio
+}
+
#
# This function iterates through the value pairs in $PERF_COLLECT_SCRIPTS.
# The script at index N is launched in the background, with its output
diff --git a/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh b/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh
index 0f3256351..e0b253200 100755
--- a/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh
+++ b/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh
@@ -60,6 +60,10 @@ elif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
fi
+# Until the performance tests over NFS can deal with multiple file systems,
+# force the use of only one file system when testing over NFS.
+[[ $NFS -eq 1 ]] && PERF_NTHREADS_PER_FS='0'
+
lun_list=$(pool_to_lun_list $PERFPOOL)
log_note "Collecting backend IO stats with lun list $lun_list"
if is_linux; then