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

Re: Testing disk io subsystem




Tom,

SGI has initiated a project to build and maintain a set to tests for
Linux functionality.  The website for our 'Linux Test Project' (LTP) is
located at http://oss.sgi.com/projects/ltp/ .  Coincidentally, we began
the project by releasing a few filesystem test codes.  These codes might
be an answer to your query as they're quite capable of stressing the
filesystem and as a result the disk and io subsystems.

I've attached a copy of the README to help you get started.

Of course, be careful where you run these tests.

Any thoughts, concerns, ideas, send to our mailing list at
ltp@oss.sgi.com.

--aaron

Tom Diehl wrote:
> 
> Hi All,
> What is the best way to test the disk io subsystem to be sure it is stable?
> I have an HPT366 controller with 2 IBM 20 GIG disks that I need to be
> sure is reliable. If I have a problem with it what information do you guys
> need to help bebug it?
> 
> TIA,
> 
> ......Tom                       "Do not meddle in the affairs of wizards,
> tdiehl@pil.net                   for you are crunchy and good with ketchup."
> 
>          Unix IS user friendly. It's just selective about who its friends are.
> 

-- 
Aaron Laffin
Silicon Graphics, Inc. OS Test Development
Email: alaffin@sgi.com Voice: 651-683-5756
USA/MN/CRP/F5233/SSBU

$Id: README,v 1.1 2000/05/05 19:34:50 whr Exp $

This file contains some very basic information on:
   iogen/doio and rwtest
   growfiles

All tools use the -h flag for printing some form of help (sometimes voluminous).
They are extremely configurable; the examples below are some common uses. 
Read the help and experiment!   This testing tools were originally written
to test UNICOS's NC1 and IRIX XFS filesystems. 


IOGEN & DOIO
=============

This is a pair of programs that does basic I/O operations on a set of files.
The file offset, I/O length, I/O operation, and what open(2) flags are 
selected randomly from a pre-defined or commandline given set. All data
written can be verified (this is the usual method). 

rwtest is a shell script that is a wrapper of iogen and doio.

Examples:
---------
# run forever:  8 process - using record locks
iogen -i 0 100000b:doio_1 | doio -av -n 8 -m 1000

# run forever:  8 process - using record locks
iogen -i 0 100000b:doio_2 | doio -akv -n 8 -m 1000

# run forever: max i/o 64b, to /tmp/rwtest01%f, which 500b in size
rwtest -c -i 0 -T 64b 500b:/tmp/rwtest01%f



GROWFILES
=============

Growfiles will create and truncate files in gradual steps using write, and 
lseek. All system calls are checked for proper returns. The writes or the
whole file content can be verified.  It can cause disk fragmentation.


Examples:
---------
growfiles -E output:
# run forever: writes of 4090 bytes then on every 100 iterval
# truncate file by 408990 bytes.  Done to 200 files in dir1.
growfiles -i 0 -g 4090 -T 100 -t 408990 -l -C 10 -c 1000 -d dir1 -S 200

# same as above with writes of 5000 bytes and truncs of 499990
growfiles -i 0 -g 5000 -T 100 -t 499990 -l -C 10 -c 1000 -d dir2 -S 200

# runs forever: beats on opens and closes of file ocfile - no io
growfiles -i 0 -g 0 -c 0 -C 0 ocfile

# writes 4096 to files until 50 blocks are written
growfiles -i 0 -g 4096 -B 50b file1 file2

# write one byte to 750 files in gdir then unlinks them
growfiles -g 1 -C 0 -d gdir -u -S 750

# run 30 secs: random iosize, random lseek up to eof
# Only valid for one growfile process per file.
growfiles -r 1-5000 -R 0--1 -i 0 -L 30 -C 1 g_rand1 g_rand2

# run 30 secs: grow by lseek then write single byte, trunc every 10 itervals
growfiles -g 5000 -wlu -i 0 -L 30 -C 1 -T 10  g_sleek1 g_lseek2

# run forever: 5 copies of random iosize, random lseek to beyond eof,
# rand io types doing a trunc every 5 iterations, with unlinks.
growfiles -i0 -r 1-50000 -R 0--2 -I r -C1 -l -n5 -u -U 100-200 gf_rana gf_ranb

# run forever: 5 copies of random iosize, random lseek to beyond eof,
# random open flags, rand io types doing a trunc every 10 iterations.
growfiles -i0 -r 1-50000 -R 0--2 -o random -I r -C0 -l -T 20 -uU100-200 -n 5 gf_rand1 gf_rand2