mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-06-24 18:18:02 +03:00

Author: John Wren Kennedy <john.kennedy@delphix.com> Reviewed by: Prakash Surya <prakash.surya@delphix.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: Matt Ahrens <mahrens@delphix.com> Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed by: Don Brady <don.brady@intel.com> Reviewed by: Richard Elling <Richard.Elling@RichardElling.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: David Quigley <david.quigley@intel.com> Approved by: Richard Lowe <richlowe@richlowe.net> Ported-by: Don Brady <don.brady@intel.com> OpenZFS-issue: https://www.illumos.org/issues/6950 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/dcbf3bd6 Delphix-commit: https://github.com/delphix/delphix-os/commit/978ed49 Closes #4929 ZFS Test Suite Performance Regression Tests This was pulled into OpenZFS via the compressed arc featureand was separated out in zfsonlinux as a separate pull request from PR-4768. It originally came in as QA-4903 in Delphix-OS from John Kennedy. Expected Usage: $ DISKS="sdb sdc sdd" zfs-tests.sh -r perf-regression.run Porting Notes: 1. Added assertions in the setup script to make sure required tools (fio, mpstat, ...) are present. 2. For the config.json generation in perf.shlib used arcstats and other binaries instead of dtrace to query the values. 3. For the perf data collection: - use "zpool iostat -lpvyL" instead of the io.d dtrace script (currently not collecting zfs_read/write latency stats) - mpstat and iostat take different arguments - prefetch_io.sh is a placeholder that uses arcstats instead of dtrace 4. Build machines require fio, mdadm and sysstat pakage (YMMV). Future Work: - Need a way to measure zfs_read and zfs_write latencies per pool. - Need tools to takes two sets of output and display/graph the differences - Bring over additional regression tests from Delphix
76 lines
2.4 KiB
Bash
Executable File
76 lines
2.4 KiB
Bash
Executable File
#!/bin/ksh
|
|
|
|
#
|
|
# 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) 2015 by Delphix. All rights reserved.
|
|
#
|
|
|
|
#
|
|
# Description:
|
|
# Trigger fio runs using the random_writes job file. The number of runs and
|
|
# data collected is determined by the PERF_* variables. See do_fio_run for
|
|
# details about these variables.
|
|
#
|
|
# Prior to each fio run the dataset is recreated, and fio writes new files
|
|
# into an otherwise empty pool.
|
|
#
|
|
|
|
. $STF_SUITE/include/libtest.shlib
|
|
. $STF_SUITE/tests/perf/perf.shlib
|
|
|
|
function cleanup
|
|
{
|
|
log_must $ZFS destroy $TESTFS
|
|
}
|
|
|
|
log_assert "Measure IO stats during random write load"
|
|
log_onexit cleanup
|
|
|
|
export TESTFS=$PERFPOOL/testfs
|
|
recreate_perfpool
|
|
log_must $ZFS create $PERF_FS_OPTS $TESTFS
|
|
|
|
# Aim to fill the pool to 50% capacity while accounting for a 3x compressratio.
|
|
export TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
|
|
|
|
# Variables for use by fio.
|
|
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_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_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
|
|
export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
|
|
fi
|
|
|
|
# Set up the scripts and output files that will log performance data.
|
|
lun_list=$(pool_to_lun_list $PERFPOOL)
|
|
log_note "Collecting backend IO stats with lun list $lun_list"
|
|
if is_linux; then
|
|
export collect_scripts=("$ZPOOL iostat -lpvyL $PERFPOOL 1" "zpool.iostat"
|
|
"$VMSTAT 1" "vmstat" "$MPSTAT -P ALL 1" "mpstat" "$IOSTAT -dxyz 1"
|
|
"iostat")
|
|
else
|
|
export collect_scripts=("$PERF_SCRIPTS/io.d $PERFPOOL $lun_list 1" "io"
|
|
"$VMSTAT 1" "vmstat" "$MPSTAT 1" "mpstat" "$IOSTAT -xcnz 1" "iostat")
|
|
fi
|
|
|
|
log_note "Random writes with $PERF_RUNTYPE settings"
|
|
do_fio_run random_writes.fio $TRUE $FALSE
|
|
log_pass "Measure IO stats during random write load"
|