dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#!/usr/bin/ksh
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# This file and its contents are supplied under the terms of the
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Common Development and Distribution License ("CDDL"), version 1.0.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# You may only use this file in accordance with the terms of version
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# 1.0 of the CDDL.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# A full copy of the text of the CDDL should have accompanied this
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# source. A copy of the CDDL is also available via the Internet at
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# http://www.illumos.org/license/CDDL.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2015, 2016 by Delphix. All rights reserved.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Description:
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Trigger fio runs using the random_writes job file. The number of runs and
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# data collected is determined by the PERF_* variables. See do_fio_run for
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# details about these variables.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Prior to each fio run the dataset is recreated, and fio writes new files
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# into an otherwise empty pool.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson#
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson. $STF_SUITE/include/libtest.shlib
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson. $STF_SUITE/tests/perf/perf.shlib
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonfunction cleanup
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson{
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $TESTFS
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonlog_assert "Measure IO stats during random write load"
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonlog_onexit cleanup
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonexport TESTFS=$PERFPOOL/testfs
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonrecreate_perfpool
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs create $PERF_FS_OPTS $TESTFS
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Aim to fill the pool to 50% capacity while accounting for a 3x compressratio.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonexport TOTAL_SIZE=$(($(get_prop avail $TESTFS) * 3 / 2))
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Variables for use by fio.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonif [[ -n $PERF_REGRESSION_WEEKLY ]]; then
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_WEEKLY}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_RUNTYPE=${PERF_RUNTYPE:-'weekly'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_NTHREADS=${PERF_NTHREADS:-'8 16 64'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonelif [[ -n $PERF_REGRESSION_NIGHTLY ]]; then
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_RUNTIME=${PERF_RUNTIME:-$PERF_RUNTIME_NIGHTLY}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_RUNTYPE=${PERF_RUNTYPE:-'nightly'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonfi
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson# Set up the scripts and output files that will log performance data.
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonlun_list=$(pool_to_lun_list $PERFPOOL)
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonlog_note "Collecting backend IO stats with lun list $lun_list"
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonexport collect_scripts=("$PERF_SCRIPTS/io.d $PERFPOOL $lun_list 1" "io"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy "vmstat 1" "vmstat" "mpstat 1" "mpstat" "iostat -xcnz 1" "iostat")
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilson
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonlog_note "Random writes with $PERF_RUNTYPE settings"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedydo_fio_run random_writes.fio true false
dcbf3bd6a1f1360fc1afcee9e22c6dcff7844bf2George Wilsonlog_pass "Measure IO stats during random write load"