]> granicus.if.org Git - zfs/commitdiff
OpenZFS 9076 - Adjust perf test concurrency settings
authorStephen Blinick <stephen.blinick@delphix.com>
Sun, 11 Feb 2018 23:11:59 +0000 (16:11 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 15 Mar 2018 17:51:00 +0000 (10:51 -0700)
ZFS Performance test concurrency should be lowered for better latency

Work by Stephen Blinick.

Nightly performance runs typically consist of two levels of concurrency;
and both are fairly high.

Since the IO runs are to a ZFS filesystem, within a zpool, which is
based on some variable number of vdev's, the amount of IO driven to each
device is variable. Additionally, different device types (HDD vs SSD,
etc) can generally handle a different amount of concurrent IO before
saturating.

Nevertheless, in practice, it appears that most tests are well past the
concurrency saturation point and therefore both perform with the same
throughput, the maximum of the device. Because the queuedepth to the
device(s) is so high however, the latency is much higher than the best
possible at that throughput, and increases linearly with the increase in
concurrency.

This means that changes in code that impact latency during normal
operation (before saturation) may not be apparent when a large component
of the measured latency is from the IO sitting in a queue to be
serviced. Therefore, changing the concurrency settings is recommended

Authored by: Stephen Blinick <stephen.blinick@delphix.com>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: John Wren Kennedy <jwk404@gmail.com>
Ported-by: John Wren Kennedy <jwk404@gmail.com>
OpenZFS-issue: https://www.illumos.org/issues/9076
OpenZFS-commit: https://github.com/openzfs/openzfs/pull/562
Upstream bug: DLPX-45477
Closes #7302

tests/zfs-tests/tests/perf/regression/random_reads.ksh
tests/zfs-tests/tests/perf/regression/random_readwrite.ksh
tests/zfs-tests/tests/perf/regression/random_writes.ksh
tests/zfs-tests/tests/perf/regression/sequential_reads.ksh
tests/zfs-tests/tests/perf/regression/sequential_writes.ksh

index 8ec8cd67afef3be0a107dab1ee364007e27da69c..5e91fe0a7073b945532d90a25ddaa26dc62749d9 100755 (executable)
 # for all fio runs. The ARC is cleared with `zinject -a` prior to each run
 # so reads will go to disk.
 #
+# Thread/Concurrency settings:
+#    PERF_NTHREADS defines the number of files created in the test filesystem,
+#    as well as the number of threads that will simultaneously drive IO to
+#    those files.  The settings chosen are from measurements in the
+#    PerfAutoESX/ZFSPerfESX Environments, selected at concurrency levels that
+#    are at peak throughput but lowest latency.  Higher concurrency introduces
+#    queue time latency and would reduce the impact of code-induced performance
+#    regressions.
+#
 
 . $STF_SUITE/include/libtest.shlib
 . $STF_SUITE/tests/perf/perf.shlib
@@ -54,13 +63,13 @@ export TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
 if [[ -n $PERF_REGRESSION_WEEKLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_WEEKLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'weekly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 64'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 32 64'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
 elif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_NIGHTLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'nightly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'16 32'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
 fi
index cf12c9b09017ad7fb3fe78b60ee5520bab74c75d..446a440ec13a8b0ec3993e77487d4e6c5cfd0f5b 100755 (executable)
 # and used for all fio runs. The ARC is cleared with `zinject -a` prior to
 # each run so reads will go to disk.
 #
+# Thread/Concurrency settings:
+#    PERF_NTHREADS defines the number of files created in the test filesystem,
+#    as well as the number of threads that will simultaneously drive IO to
+#    those files.  The settings chosen are from measurements in the
+#    PerfAutoESX/ZFSPerfESX Environments, selected at concurrency levels that
+#    are at peak throughput but lowest latency.  Higher concurrency introduces
+#    queue time latency and would reduce the impact of code-induced performance
+#    regressions.
+#
 
 . $STF_SUITE/include/libtest.shlib
 . $STF_SUITE/tests/perf/perf.shlib
@@ -54,13 +63,13 @@ export TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
 if [[ -n $PERF_REGRESSION_WEEKLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_WEEKLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'weekly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 64'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 64'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
        export PERF_IOSIZES=''          # bssplit used instead
 elif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_NIGHTLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'nightly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'32 64'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=''          # bssplit used instead
 fi
index 8db5fbd32bd290f061677feaee209ccd50f1a997..e724aefe2dff702edb339a101ca71e0b5f2ce44c 100755 (executable)
 # Prior to each fio run the dataset is recreated, and fio writes new files
 # into an otherwise empty pool.
 #
+# Thread/Concurrency settings:
+#    PERF_NTHREADS defines the number of files created in the test filesystem,
+#    as well as the number of threads that will simultaneously drive IO to
+#    those files.  The settings chosen are from measurements in the
+#    PerfAutoESX/ZFSPerfESX Environments, selected at concurrency levels that
+#    are at peak throughput but lowest latency.  Higher concurrency introduces
+#    queue time latency and would reduce the impact of code-induced performance
+#    regressions.
+#
 
 . $STF_SUITE/include/libtest.shlib
 . $STF_SUITE/tests/perf/perf.shlib
@@ -53,13 +62,13 @@ export TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
 if [[ -n $PERF_REGRESSION_WEEKLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_WEEKLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'weekly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 64'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'1 4 8 16 32 64 128'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
 elif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_NIGHTLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'nightly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'32 128'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
 fi
index af53e5d1e16c6bf0933ff31d2c6542c4fbd19a93..e60dbb18176af130ad5267c5f5aaa61fb7f79e5f 100755 (executable)
 # for all fio runs. The ARC is cleared with `zinject -a` prior to each run
 # so reads will go to disk.
 #
+# Thread/Concurrency settings:
+#    PERF_NTHREADS defines the number of files created in the test filesystem,
+#    as well as the number of threads that will simultaneously drive IO to
+#    those files.  The settings chosen are from measurements in the
+#    PerfAutoESX/ZFSPerfESX Environments, selected at concurrency levels that
+#    are at peak throughput but lowest latency.  Higher concurrency introduces
+#    queue time latency and would reduce the impact of code-induced performance
+#    regressions.
+#
 
 . $STF_SUITE/include/libtest.shlib
 . $STF_SUITE/tests/perf/perf.shlib
@@ -54,13 +63,13 @@ export TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
 if [[ -n $PERF_REGRESSION_WEEKLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_WEEKLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'weekly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'16 64'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 32 64'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'64k 128k 1m'}
 elif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_NIGHTLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'nightly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'128k 1m'}
 fi
index 3319bd47c317607f3a6936656ced86f5f5f1638a..d5fb890201a99b2115381a4e5a053fc940ccd0a8 100755 (executable)
 # Prior to each fio run the dataset is recreated, and fio writes new files
 # into an otherwise empty pool.
 #
+# Thread/Concurrency settings:
+#    PERF_NTHREADS defines the number of files created in the test filesystem,
+#    as well as the number of threads that will simultaneously drive IO to
+#    those files.  The settings chosen are from measurements in the
+#    PerfAutoESX/ZFSPerfESX Environments, selected at concurrency levels that
+#    are at peak throughput but lowest latency.  Higher concurrency introduces
+#    queue time latency and would reduce the impact of code-induced performance
+#    regressions.
+#
 
 . $STF_SUITE/include/libtest.shlib
 . $STF_SUITE/tests/perf/perf.shlib
@@ -53,13 +62,13 @@ export TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
 if [[ -n $PERF_REGRESSION_WEEKLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_WEEKLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'weekly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'8 16'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'1 4 8 16 32 64 128'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'8k 128k 1m'}
 elif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
        export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_NIGHTLY}
        export PERF_RUNTYPE=${PERF_RUNTYPE:-'nightly'}
-       export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
+       export PERF_NTHREADS=${PERF_NTHREADS:-'16 32'}
        export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
        export PERF_IOSIZES=${PERF_IOSIZES:-'8k 128k 1m'}
 fi