From ross@willow.seitz.com Fri Mar 16 16:22:02 2001 Return-Path: Received: from willow.seitz.com (root@willow.seitz.com [207.106.55.140]) by mail.Linux-Consulting.com (8.8.7/8.8.7) with ESMTP id QAA15103 for ; Fri, 16 Mar 2001 16:22:01 -0800 Received: (from ross@localhost) by willow.seitz.com (8.9.3/8.9.3/Debian 8.9.3-21) id TAA22521; Fri, 16 Mar 2001 19:21:49 -0500 From: Ross Vandegrift Date: Fri, 16 Mar 2001 19:21:49 -0500 To: Alvin Oga Cc: Derek Vadala , David Christensen , linux-raid@vger.kernel.org Subject: Re: Best way to test a new RAID configuration Message-ID: <20010316192149.A22431@ip149.seitz.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: ; from aoga@Mail.Linux-Consulting.com on Fri, Mar 16, 2001 at 03:42:39PM -0800 Status: RO X-Status: > > > Anyone know of any good (easy to setup) applications for doing that, > > > or perhaps a shell script that might do the same thing? As a matter of fact, I have a very nice one right here. Someone mailed this to the list back in the day when I asked this same question. It's pretty killer. Ross Vandegrift coolio@tmbg.org ross@willow.seitz.com #!/bin/bash - # -*- Shell-script -*- # # Copyright (C) 1999 Bibliotech Ltd., 631-633 Fulham Rd., London SW6 5UQ. # # $Id: stress.sh,v 1.2 1999/02/10 10:58:04 rich Exp $ # # Change log: # # $Log: stress.sh,v $ # Revision 1.2 1999/02/10 10:58:04 rich # Use cp instead of tar to copy. # # Revision 1.1 1999/02/09 15:13:38 rich # Added first version of stress test program. # # Stress-test a file system by doing multiple # parallel disk operations. This does everything # in MOUNTPOINT/stress. nconcurrent=4 content=/usr/doc stagger=yes while getopts "c:n:s" c; do case $c in c) content=$OPTARG ;; n) nconcurrent=$OPTARG ;; s) stagger=no ;; *) echo 'Usage: stress.sh [-options] MOUNTPOINT' echo 'Options: -c Content directory' echo ' -n Number of concurrent accesses (default: 4)' echo ' -s Avoid staggerring start times' exit 1 ;; esac done shift $(($OPTIND-1)) if [ $# -ne 1 ]; then echo 'For usage: stress.sh -?' exit 1 fi mountpoint=$1 echo 'Number of concurrent processes:' $nconcurrent echo 'Content directory:' $content '(size:' `du -s $content | awk '{print $1}'` 'KB)' # Check the mount point is really a mount point. if [ `df | awk '{print $6}' | grep ^$mountpoint\$ | wc -l` -lt 1 ]; then echo $mountpoint: This doesn\'t seem to be a mountpoint. Try not echo to use a trailing / character. exit 1 fi # Create the directory, if it doesn't exist. echo Warning: This will DELETE anything in $mountpoint/stress. Type yes to confirm. read line if [ "$line" != "yes" ]; then echo "Script abandoned." exit 1 fi if [ ! -d $mountpoint/stress ]; then rm -rf $mountpoint/stress if ! mkdir $mountpoint/stress; then echo Problem creating $mountpoint/stress directory. Do you have sufficient echo access permissions\? exit 1 fi fi echo Created $mountpoint/stress directory. # Construct MD5 sums over the content directory. echo -n "Computing MD5 sums over content directory: " ( cd $content && find . -type f -print0 | xargs -0 md5sum | sort -k 2 -o $mountpoint/stress/content.sums ) echo done. # Start the stressing processes. echo -n "Starting stress test processes: " pids="" p=1 while [ $p -le $nconcurrent ]; do echo -n "$p " ( # Wait for all processes to start up. if [ "$stagger" = "yes" ]; then sleep $((10*$p)) else sleep 10 fi while true; do # Remove old directories. echo -n "D$p " rm -rf $mountpoint/stress/$p # Copy content -> partition. echo -n "W$p " mkdir $mountpoint/stress/$p #( cd $content && tar cf - . ) | ( cd $mountpoint/stress/$p && tar xf - ) cp -ax $content/* $mountpoint/stress/$p # Compare the content and the copy. echo -n "R$p " ( cd $mountpoint/stress/$p && find . -type f -print0 | xargs -0 md5sum | sort -k 2 -o /tmp/stress.$$.$p ) diff $mountpoint/stress/content.sums /tmp/stress.$$.$p rm -f /tmp/stress.$$.$p done ) & pids="$pids $!" p=$(($p+1)) done echo echo "Process IDs: $pids" echo "Press ^C to kill all processes" trap "kill $pids" SIGINT wait kill $pids