zfs/scripts/zpios.sh

201 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
#
# Wrapper script for easily running zpios based tests
#
. ./common.sh
PROG=zpios.sh
PROFILE_ZPIOS_PRE=${TOPDIR}/scripts/profile-zpios-pre.sh
PROFILE_ZPIOS_POST=${TOPDIR}/scripts/profile-zpios-post.sh
MODULES=( \
${MODDIR}/zpios/zpios.ko \
)
usage() {
cat << EOF
USAGE:
$0 [hvp] [c <config>]
DESCRIPTION:
Helper script for easy zpios benchmarking.
OPTIONS:
-h Show this message
-v Verbose
-p Enable profiling
-c Specify disk configuration
EOF
}
print_header() {
echo --------------------- ZPIOS RESULTS ----------------------------
echo -n "Date: "; date
echo -n "Kernel: "; uname -r
dmesg | grep "Loaded Solaris Porting Layer" | tail -n1
dmesg | grep "Loaded ZFS Filesystem" | tail -n1
echo
}
print_spl_info() {
echo --------------------- SPL Tunings ------------------------------
sysctl -A | grep spl
if [ -d /sys/module/spl/parameters ]; then
grep [0-9] /sys/module/spl/parameters/*
else
grep [0-9] /sys/module/spl/*
fi
echo
}
print_zfs_info() {
echo --------------------- ZFS Tunings ------------------------------
sysctl -A | grep zfs
if [ -d /sys/module/zfs/parameters ]; then
grep [0-9] /sys/module/zfs/parameters/*
else
grep [0-9] /sys/module/zfs/*
fi
echo
}
print_stats() {
echo ---------------------- Statistics -------------------------------
sysctl -A | grep spl | grep stack_max
if [ -d /proc/spl/kstat/ ]; then
if [ -f /proc/spl/kstat/zfs/arcstats ]; then
echo "* ARC"
cat /proc/spl/kstat/zfs/arcstats
echo
fi
if [ -f /proc/spl/kstat/zfs/vdev_cache_stats ]; then
echo "* VDEV Cache"
cat /proc/spl/kstat/zfs/vdev_cache_stats
echo
fi
fi
if [ -f /proc/spl/kmem/slab ]; then
echo "* SPL SLAB"
cat /proc/spl/kmem/slab
echo
fi
}
check_test() {
if [ ! -f ${ZPIOS_TEST} ]; then
local NAME=`basename ${ZPIOS_TEST} .cfg`
ERROR="Unknown test '${NAME}', available tests are:\n"
for TST in `ls ${TOPDIR}/scripts/zpios-test/`; do
local NAME=`basename ${TST} .cfg`
ERROR="${ERROR}${NAME}\n"
done
return 1
fi
return 0
}
PROFILE=
ZPOOL_CONFIG="zpool-config.cfg"
ZPIOS_TEST="zpios-test.cfg"
while getopts 'hvpc:t:' OPTION; do
case $OPTION in
h)
usage
exit 1
;;
v)
VERBOSE=1
;;
p)
PROFILE=1
;;
c)
ZPOOL_CONFIG=${OPTARG}
;;
t)
ZPIOS_TEST=${TOPDIR}/scripts/zpios-test/${OPTARG}.cfg
;;
?)
usage
exit
;;
esac
done
if [ $(id -u) != 0 ]; then
die "Must run as root"
fi
# Validate your using a known test
check_test || die "${ERROR}"
# Pull in the zpios test module is not loaded. If this fails it is
# likely because the full module stack was not yet loaded with zfs.sh
if check_modules; then
if ! load_modules; then
die "Run 'zfs.sh' to ensure the full module stack is loaded"
fi
fi
if [ ${VERBOSE} ]; then
print_header
print_spl_info
print_zfs_info
fi
# Create the zpool configuration
./zpool-create.sh -c ${ZPOOL_CONFIG} || exit 1
msg "${CMDDIR}/zpool/zpool status zpios"
${CMDDIR}/zpool/zpool status zpios || exit 1
msg "Waiting for /dev/zpios to come up..."
while [ ! -c /dev/zpios ]; do
sleep 1
done
if [ -n "${ZPIOS_PRE}" ]; then
msg "Executing ${ZPIOS_PRE}"
${ZPIOS_PRE} || exit 1
fi
# Source the zpios test configuration
. ${ZPIOS_TEST}
if [ $PROFILE ]; then
ZPIOS_CMD="${ZPIOS_CMD} --log=${PROFILE_ZPIOS_LOGS}"
ZPIOS_CMD="${ZPIOS_CMD} --prerun=${PROFILE_ZPIOS_PRE}"
ZPIOS_CMD="${ZPIOS_CMD} --postrun=${PROFILE_ZPIOS_POST}"
fi
echo
date
echo ${ZPIOS_CMD}
$ZPIOS_CMD || exit 1
if [ -n "${ZPIOS_POST}" ]; then
msg "Executing ${ZPIOS_POST}"
${ZPIOS_POST} || exit 1
fi
msg "${CMDDIR}/zpool/zpool destroy zpios"
${CMDDIR}/zpool/zpool destroy zpios
print_stats
exit 0