]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Do not enable stack tracer for ZFS performance test
authorTony Nguyen <tony.nguyen@delphix.com>
Fri, 7 Dec 2018 18:51:42 +0000 (11:51 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 7 Dec 2018 18:51:42 +0000 (10:51 -0800)
Linux ZFS test suite runs with /proc/sys/kernel/stack_tracer_enabled=1,
via zfs.sh script, which has negative performance impact, up to 40%.

Since large stack is a rare issue now, preferred behavior would be:
- making stack tracer an opt-in feature for zfs.sh
- zfs-test.sh enables stack tracer only when requested

Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Tony Nguyen <tony.nguyen@delphix.com>
#8173

scripts/zfs-tests.sh
scripts/zfs.sh

index 6fdd658f766033c85f699ce12134d3012c5c571f..cc80909ff9a454108867d485104ce62171f4d99c 100755 (executable)
@@ -35,6 +35,7 @@ QUIET=
 CLEANUP="yes"
 CLEANUPALL="no"
 LOOPBACK="yes"
+STACK_TRACER="no"
 FILESIZE="4G"
 RUNFILE=${RUNFILE:-"linux.run"}
 FILEDIR=${FILEDIR:-/var/tmp}
@@ -254,7 +255,7 @@ constrain_path() {
 usage() {
 cat << EOF
 USAGE:
-$0 [hvqxkf] [-s SIZE] [-r RUNFILE] [-t PATH] [-u USER]
+$0 [hvqxkfS] [-s SIZE] [-r RUNFILE] [-t PATH] [-u USER]
 
 DESCRIPTION:
        ZFS Test Suite launch script
@@ -266,6 +267,7 @@ OPTIONS:
        -x          Remove all testpools, dm, lo, and files (unsafe)
        -k          Disable cleanup after test failure
        -f          Use files only, disables block device tests
+       -S          Enable stack tracer (negative performance impact)
        -c          Only create and populate constrained path
        -I NUM      Number of iterations
        -d DIR      Use DIR for files and loopback devices
@@ -289,7 +291,7 @@ $0 -x
 EOF
 }
 
-while getopts 'hvqxkfcd:s:r:?t:T:u:I:' OPTION; do
+while getopts 'hvqxkfScd:s:r:?t:T:u:I:' OPTION; do
        case $OPTION in
        h)
                usage
@@ -311,6 +313,9 @@ while getopts 'hvqxkfcd:s:r:?t:T:u:I:' OPTION; do
        f)
                LOOPBACK="no"
                ;;
+       S)
+               STACK_TRACER="yes"
+               ;;
        c)
                constrain_path
                exit
@@ -449,7 +454,11 @@ constrain_path
 #
 # Verify the ZFS module stack is loaded.
 #
-sudo "${ZFS_SH}" &>/dev/null
+if [ "$STACK_TRACER" = "yes" ]; then
+       sudo "${ZFS_SH}" -S &>/dev/null
+else
+       sudo "${ZFS_SH}" &>/dev/null
+fi
 
 #
 # Attempt to cleanup all previous state for a new test run.
@@ -561,6 +570,7 @@ msg "NUM_DISKS:       $NUM_DISKS"
 msg "FILESIZE:        $FILESIZE"
 msg "ITERATIONS:      $ITERATIONS"
 msg "TAGS:            $TAGS"
+msg "STACK_TRACER:    $STACK_TRACER"
 msg "Keep pool(s):    $KEEP"
 msg "Missing util(s): $STF_MISSING_BIN"
 msg ""
index d975eca97d2427a23694239b37ede5fc1f83a4fe..015b3ba9de6648e731a6f4f998e9a77ad8912865 100755 (executable)
@@ -14,6 +14,7 @@ fi
 PROG=zfs.sh
 VERBOSE="no"
 UNLOAD="no"
+STACK_TRACER="no"
 
 ZED_PIDFILE=${ZED_PIDFILE:-/var/run/zed.pid}
 LDMOD=${LDMOD:-/sbin/modprobe}
@@ -33,7 +34,7 @@ KMOD_ZFS=${KMOD_ZFS:-zfs}
 usage() {
 cat << EOF
 USAGE:
-$0 [hvud] [module-options]
+$0 [hvudS] [module-options]
 
 DESCRIPTION:
        Load/unload the ZFS module stack.
@@ -42,10 +43,11 @@ OPTIONS:
        -h      Show this message
        -v      Verbose
        -u      Unload modules
+       -S      Enable kernel stack tracer
 EOF
 }
 
-while getopts 'hvu' OPTION; do
+while getopts 'hvuS' OPTION; do
        case $OPTION in
        h)
                usage
@@ -57,6 +59,9 @@ while getopts 'hvu' OPTION; do
        u)
                UNLOAD="yes"
                ;;
+       S)
+               STACK_TRACER="yes"
+               ;;
        ?)
                usage
                exit
@@ -192,7 +197,7 @@ stack_clear() {
        STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size
        STACK_TRACER_ENABLED=/proc/sys/kernel/stack_tracer_enabled
 
-       if [ -e "$STACK_MAX_SIZE" ]; then
+       if [ "$STACK_TRACER" = "yes" ] && [ -e "$STACK_MAX_SIZE" ]; then
                echo 1 >"$STACK_TRACER_ENABLED"
                echo 0 >"$STACK_MAX_SIZE"
        fi