Re: [PATCH 3/3] misc: add duration for recovery loop tests

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Tue, Apr 11, 2023 at 11:14:03AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> Make it so that we can run recovery loop tests for an exact number of
> seconds.
> 
> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
> ---
>  common/rc         |   34 ++++++++++++++++++++++++++++++++++
>  tests/generic/019 |    1 +
>  tests/generic/388 |    2 +-
>  tests/generic/475 |    2 +-
>  tests/generic/482 |    5 +++++
>  tests/generic/648 |    8 ++++----
>  6 files changed, 46 insertions(+), 6 deletions(-)
> 
> 
> diff --git a/common/rc b/common/rc
> index e89b0a3794..090f3d4938 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5078,6 +5078,40 @@ _save_coredump()
>  	$COREDUMP_COMPRESSOR -f "$out_file"
>  }
>  
> +# Decide if a soak test should continue looping.  The sole parameter is the
> +# number of soak loops that the test wants to run by default.  The actual
> +# loop iteration number is stored in SOAK_LOOPIDX until the loop completes.
> +#
> +# If the test runner set a SOAK_DURATION value, this predicate will keep
> +# looping until it has run for at least that long.
> +_soak_loop_running() {
> +	local max_soak_loops="$1"
> +
> +	test -z "$SOAK_LOOPIDX" && SOAK_LOOPIDX=1
> +
> +	if [ -n "$SOAK_DURATION" ]; then
> +		if [ -z "$SOAK_DEADLINE" ]; then
> +			SOAK_DEADLINE="$(( $(date +%s) + SOAK_DURATION))"
> +		fi
> +
> +		local now="$(date +%s)"
> +		if [ "$now" -gt "$SOAK_DEADLINE" ]; then
> +			unset SOAK_DEADLINE
> +			unset SOAK_LOOPIDX
> +			return 1
> +		fi
> +		SOAK_LOOPIDX=$((SOAK_LOOPIDX + 1))
> +		return 0
> +	fi
> +
> +	if [ "$SOAK_LOOPIDX" -gt "$max_soak_loops" ]; then
> +		unset SOAK_LOOPIDX
> +		return 1
> +	fi
> +	SOAK_LOOPIDX=$((SOAK_LOOPIDX + 1))
> +	return 0
> +}
> +
>  init_rc
>  
>  ################################################################################
> diff --git a/tests/generic/019 b/tests/generic/019
> index b68dd90c0d..b81c1d17ba 100755
> --- a/tests/generic/019
> +++ b/tests/generic/019
> @@ -30,6 +30,7 @@ _cleanup()
>  }
>  
>  RUN_TIME=$((20+10*$TIME_FACTOR))
> +test -n "$SOAK_DURATION" && RUN_TIME="$SOAK_DURATION"
>  NUM_JOBS=$((4*LOAD_FACTOR))
>  BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
>  FILE_SIZE=$((BLK_DEV_SIZE * 512))
> diff --git a/tests/generic/388 b/tests/generic/388
> index 9cd737e8eb..4a5be6698c 100755
> --- a/tests/generic/388
> +++ b/tests/generic/388
> @@ -42,7 +42,7 @@ _scratch_mkfs >> $seqres.full 2>&1
>  _require_metadata_journaling $SCRATCH_DEV
>  _scratch_mount
>  
> -for i in $(seq 1 $((50 * TIME_FACTOR)) ); do
> +while _soak_loop_running $((50 * TIME_FACTOR)); do
>  	($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p 4 >> $seqres.full &) \
>  		> /dev/null 2>&1
>  
> diff --git a/tests/generic/475 b/tests/generic/475
> index c426402ede..0cbf5131c2 100755
> --- a/tests/generic/475
> +++ b/tests/generic/475
> @@ -41,7 +41,7 @@ _require_metadata_journaling $SCRATCH_DEV
>  _dmerror_init
>  _dmerror_mount
>  
> -for i in $(seq 1 $((50 * TIME_FACTOR)) ); do
> +while _soak_loop_running $((50 * TIME_FACTOR)); do
>  	($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p $((LOAD_FACTOR * 4)) >> $seqres.full &) \
>  		> /dev/null 2>&1
>  
> diff --git a/tests/generic/482 b/tests/generic/482
> index 28c83a232e..b980826b14 100755
> --- a/tests/generic/482
> +++ b/tests/generic/482
> @@ -62,8 +62,13 @@ nr_cpus=$("$here/src/feature" -o)
>  if [ $nr_cpus -gt 8 ]; then
>  	nr_cpus=8
>  fi
> +
>  fsstress_args=$(_scale_fsstress_args -w -d $SCRATCH_MNT -n 512 -p $nr_cpus \
>  		$FSSTRESS_AVOID)
> +
> +# XXX dm-logwrites pins kernel memory for every write!
> +# test -n "$SOAK_DURATION" && fsstress_args="$fsstress_args --duration=$SOAK_DURATION"

Do you expect the second comment is a comment?

Others looks good to me. I'll test V2 and merge it if no regression from it.

Thanks,
Zorro




[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux