Blob Blame History Raw
From 08608fb6887b53e3bbd71dde8eeaf8f5f2ad6e29 Mon Sep 17 00:00:00 2001
From: William Cohen <wcohen@redhat.com>
Date: Mon, 30 Nov 2020 12:19:54 -0500
Subject: [PATCH 1/2] Remove bundled iozone due to incompatible license.

A review of the PAPI sources found some iozone code bundled in papi
(rhbz1901077 - papi bundles non-free iozone code ).  The upstream
license for iozone does not give permission to modify the source.
There are some minor changes in the PAPI version of the iozone files.
---
 src/components/appio/tests/Makefile           |    10 +-
 src/components/appio/tests/iozone/Changes.txt |  2409 --
 .../appio/tests/iozone/Generate_Graphs        |    32 -
 src/components/appio/tests/iozone/Gnuplot.txt |    23 -
 src/components/appio/tests/iozone/client_list |    36 -
 src/components/appio/tests/iozone/fileop.c    |  1389 -
 .../appio/tests/iozone/gengnuplot.sh          |    57 -
 src/components/appio/tests/iozone/gnu3d.dem   |   146 -
 src/components/appio/tests/iozone/gnuplot.dem |    60 -
 .../appio/tests/iozone/gnuplotps.dem          |    63 -
 src/components/appio/tests/iozone/iozone.c    | 25297 ----------------
 .../appio/tests/iozone/iozone_visualizer.pl   |   262 -
 src/components/appio/tests/iozone/libasync.c  |  1604 -
 src/components/appio/tests/iozone/libbif.c    |   452 -
 src/components/appio/tests/iozone/makefile    |  1461 -
 .../appio/tests/iozone/pit_server.c           |   831 -
 .../appio/tests/iozone/read_telemetry         |    29 -
 src/components/appio/tests/iozone/report.pl   |   150 -
 src/components/appio/tests/iozone/spec.in     |   107 -
 .../appio/tests/iozone/write_telemetry        |    29 -
 20 files changed, 1 insertion(+), 34446 deletions(-)
 delete mode 100644 src/components/appio/tests/iozone/Changes.txt
 delete mode 100755 src/components/appio/tests/iozone/Generate_Graphs
 delete mode 100644 src/components/appio/tests/iozone/Gnuplot.txt
 delete mode 100644 src/components/appio/tests/iozone/client_list
 delete mode 100644 src/components/appio/tests/iozone/fileop.c
 delete mode 100755 src/components/appio/tests/iozone/gengnuplot.sh
 delete mode 100644 src/components/appio/tests/iozone/gnu3d.dem
 delete mode 100644 src/components/appio/tests/iozone/gnuplot.dem
 delete mode 100644 src/components/appio/tests/iozone/gnuplotps.dem
 delete mode 100644 src/components/appio/tests/iozone/iozone.c
 delete mode 100755 src/components/appio/tests/iozone/iozone_visualizer.pl
 delete mode 100644 src/components/appio/tests/iozone/libasync.c
 delete mode 100644 src/components/appio/tests/iozone/libbif.c
 delete mode 100644 src/components/appio/tests/iozone/makefile
 delete mode 100644 src/components/appio/tests/iozone/pit_server.c
 delete mode 100644 src/components/appio/tests/iozone/read_telemetry
 delete mode 100755 src/components/appio/tests/iozone/report.pl
 delete mode 100644 src/components/appio/tests/iozone/spec.in
 delete mode 100644 src/components/appio/tests/iozone/write_telemetry

diff --git a/src/components/appio/tests/Makefile b/src/components/appio/tests/Makefile
index 26fc5f3c5..4a3005df5 100644
--- a/src/components/appio/tests/Makefile
+++ b/src/components/appio/tests/Makefile
@@ -55,17 +55,9 @@ appio_test_fread_fwrite: appio_test_fread_fwrite.o $(UTILOBJS) $(PAPILIB)
 appio_test_pthreads: appio_test_pthreads.o $(UTILOBJS) $(PAPILIB)
 	$(CC) $(CFLAGS) $(INCLUDE) -o $@ appio_test_pthreads.o $(UTILOBJS) $(PAPILIB) $(LDFLAGS) -lpthread
 
-iozone/iozone_linux$(ARCH_SUFFIX).o iozone/libasync.o iozone/libbif.o: 
-	$(MAKE) -C iozone iozone_linux$(ARCH_SUFFIX).o libasync.o libbif.o
-
 init_fini.o: init_fini.c
 	$(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $^
 
-# to test, try:
-# ./appio_test_iozone -s 100m -r 64 -i 0 -i 1 -t 1
-appio_test_iozone: iozone/iozone_linux$(ARCH_SUFFIX).o iozone/libasync.o iozone/libbif.o init_fini.o $(UTILOBJS) $(PAPILIB)
-	$(CC) -g -O2 -o $@ $(LDFLAGS) $^ -lpthread -lrt
-
 clean:
-	rm -f $(ALL_TESTS) appio_test_iozone *.o
+	rm -f $(ALL_TESTS) *.o
 
diff --git a/src/components/appio/tests/iozone/Changes.txt b/src/components/appio/tests/iozone/Changes.txt
deleted file mode 100644
index a619f8bba..000000000
--- a/src/components/appio/tests/iozone/Changes.txt
+++ /dev/null
@@ -1,2409 +0,0 @@
-V1.0 (capps):
-Capps:
-	Beginning of the code base.
-Isom:
-	Added reread
-	Added rewrite
-	Added read backwards
-	Added lseek+read
-	Added lseek+reread
-
-Capps:
-	Added more accurate time collection method.
-	Added alignment in the on chip Cache code.
-	Added change step when passing 16 Meg size file.
-
-Capps:
-	Added auto+ to purge on chip cache.
-
-kcollins:
-	replaced the lseek+read &reread test with random reads and writes
-
-Capps:
-	Replaced reverse re-read with record rewrite. This gives
-	both source and destination on chip cache hits.
-
-Capps:
-	added auto+multi
-	Support for multiple buffers in the iozone.
-
-Capps:
-	Removed the recursion through main().
-	Cleaned up the printout when not in auto mode.
-	Added support for stride-read. ( Manual mode only )
-
-Capps:
-	Cleanup so it will build for bsd4_2 ( C series machines )
-
-Capps:
-	Cleanup on frontend. Now uses getopt() and has a real parser.
-	Cleanup on error handling.
-	Added throughput tests.
-	Eliminated page faults in the throughput tests.
-
-Capps:
-	Made all perf tests table driven.
-	Add back Bill's Copyright.
-	ansify, prototypes, scope limitations.
-
-V2.1 (kcollins):
-	Simplified auto mode logic.  auto test now runs from
-	MEGABYTES_START to MEGABYTES_END and from RECLEN_START
-	to RECLEN_END with values multiplied by MULTIPLIER 
-	each iteration.  Range set to (4K...16M) for RECLEN
-	and (1M...512M) for MEGABYTES.  (the physical I/O
-	tests for RECLEN <4K take several hours on a 1200).
-
-	Enlarged MAXBUFFERSIZE to 16MB for large record tests.
-
-	Added error checking for mallocs (!-).
-
-	Changed multibuffer code to use all of MAXBUFFERSIZE
-	as a circular buffer, with the number of buffers
-	varying as MAXBUFFERSIZE/reclen.  This corrects 
-	problems where MAXBUFFERSIZE*MAXBUFFERS was very large.
-	Also modified auto mode so that tests where
-	reclen>filesize are skipped.
-
-	Modified preadv code to vary the number of buffers as
-	necessary such that they will fit in min(MAXBUFFERSIZE,filesize).
-	This fixes problems where the number of buffers in
-	the i/o vector exceeded the size of mainbuffer.
-
-	Added bzero for buffer when it is first malloc'd.  This
-	ensures that it is initialized before use.
-
-	Created a script (profile.fs) that runs a series of tests
-	to generate a "box" around common application variables
-	such as filesize, buffer size, buffer encachement, and
-	number of concurrent processes.  This is intended to serve
-	as the "standard" filesystem profile.
-
-	buffer reset to mainbuffer before each test loop
-
-V2.3 (kcollins):
-
-	added -F option to write to specify pathnames for throughput
-	tests (allowing throughput tests to multiple filesystems).
-
-V2.4 (capps):
-	Changed preadv/pwritev to use a non-sequential access pattern.
-	Changed the version number.
-	Moved all user interface values to KB. This simplifies
-	the user interface. (consistant scaling) and it also
-	allows one to start with 512kb file. This is very important
-	since the first indirect block causes a significant
-	slowdown in the initial write cases.
-
-V2.5 (capps):
-	Re-structure and cleanup.
-
-V2.6 (kcollins)
-	Bug fix for the throughput tests.
-
-V2.7 (capps):
-	Added -o flag. This makes all file opens for writes
-	have the O_SYNC flag set. This makes all writes go
-	to disk before competion. This is useful for seeing
-	what the media can do without the buffer cache helping.
-
-V2.8 (capps):
-	Added -V flag. This turns on pattern verification. If
-	the user were to type:
-	-V 165
-	Then bit pattern 0xa5 would be placed in every byte in the
-	buffer and when read back from buffer cache, or disk, 
-	it will be verified to be correct. If it fails then
-	the error handler will specify the byte location of the
-	miscompare.
-
-V2.9 (capps):
-	Added fread/re-fread, fwrite/re-fwrite to list of tests.
-	Added -E to allow the user to run pread and friends as an option.
-
-V2.10 (capps):
-	Added -R. This will generate Excel compatible files that
-	can then be imported into Excel and graphed.
-	Added support for 5 targets to the makefile.
-	Added -M  This prints out the uname -a stuff about a machine.
-	Added -O  This gives all results in operations/sec instead of KB/sec.
-	More code cleanup. Update comments.
-
-V2.11 (kcollins)
-	added -A.  Auto mode with no crossover and read/write tests only
-	changed default record size to 64KB (from 512 bytes)
-
-V2.12 (capps)
-	Added shared memory barrier sync for throughput mode. This
-	provides much finer control over the actual timeing 
-	of the children.
-	Added mmap() for BSD (Convex) machines that do not 
-	have System V shared memory.
-	Added two ways of showing throughput results. The second
-	method takes into consideration children that lag behind
-	due to slow devices, and gives results that are more accurate.
-	Cleanup of some tab problems in throughput results.
-	Cleanup of floating point output taking to much space.
-	Added -d to allow a variable delay comming out of the barrier 
-	in the throughput tests.
-V2.12	(kcollins)
-	added declaration for create_list to make ansi c compiles work
-	several fixes to some of the SPPUX 5.x make targets
-	added date run to banner (hope this doesn't break your scripts $-)
-
-V2.13	(capps)
-	Added "stone walling". During throughput tests, if one process
-	finishes then all others are sent a signal to tell them 
-	to stop. (The parallel region has finished). This provides 
-	better numbers for throughput.  
-	Only bzero or fill min(reclen,CACHE_SIZE) this saves a bunch
-	of paging on workstations with small memory systems.
-	Fixed broken target in the makefile.
-	Note: use of -d is not advised. It makes the children not run 
-	in parallel.
-V2.14   (capps)
-	Bug fix to avoid anomaly in SPP-UX. In SPP-UX the filesystem
-	code preallocates meta-data to improve initial file writes.
-	The first indirect block allocation was causing a block 
-	of zeros to be written syncronously. In SPP-UX the filesytem
-	code preallocates zero filled blocks when the first writer
-	touches a filesystem after a sync. A pool of on disk zero'd 
-	blocks are created asynchronously and handed out to writers
-	when they cross the boundry into the first level indirect
-	and would have had to stop and wait for the zero filled 
-	block to be written. Iozone's testing methodology was not
-	allowing the OS to have any time to complete the async
-	pre-allocation and was not showing the speed up that real
-	applications would see.
-
-V2.15   (capps)
-	Improve throughput testing mode.
-
-V2.16	(capps)
-	Added -U option. This allows the filesystem to be unmounted
-	and remounted between tests. This guarentees that the buffer
-	cache is cold.
-
-V2.17	(capps)
-	Added -T option. This makes the throughput tests use 
-	threads instead of processes.  Currently using pthread_create(),
-	pthread_self(), and pthread_exit(). 
-	Cleaned up file cleanup mechanism. Control C will now cause
-	all temp files to be deleted.  Removed all signals used to
-	control sub-processes.
-
-V2.18	(capps)
-	Cleanup. Added read stride, read backwards to the throughput
-	tests. Various bug fixes
-
-V2.19	(capps)
-	Removed all calls to malloc() and all use of system V shared 
-	memory. mmap() is much easier to deal with. As for malloc()
-	HP programs are very limited on the ammount of malloc() space
-	and not nearly so constrained on mmap() memory. It was necessary
-	to move to mmap() since multiple threads all need buffers in
-	the processes address space. 
-	Removed dependency on first thread being number 2. Iozone now
-	probes to find out what the thread library will return for 
-	the first thread.  This makes the switching thread libraries
-	much easier.
-
-V2.20	(capps)
-	Children now set stop_flag and shutdown all other children.There
-	is no further need to tell the parent to distribute the stop_flag.
-	verify, purge, and osync are now supported in the throughput
-	tests. Fixed bug where pthreads stack size was causing 
-	segmentation violation when purgeit() was called for buffer
-	that were greater than 256kb.
-
-V2.21	(capps)
-	Enhanced throughput reporting. Now provides:
-	Child throughput, Parent throughput, Minimum throughput for
-	any child in the group, Maximum throughput for any child in the 
-	group, and Minimum transfer count. Due to stone walling
-	not all children write the full requested size. This 
-	minimum transfer count provides the user with knowledge of 
-	how much work was performed by the slowest child. 
-	Added -C flag. This allows the user to see all of the transfer
-	counts for each child. Had to add system 5 shared memory back.
-	Linux does not support mmap(MAP_ANONYMOUS|MAP_SHARED). So it
-	must use SYSV shared memory get get sharing working.
-
-V2.22	(capps)
-	Made changes to make iozone work correctly on Linux on a 
-	PC. Changes are just scaling down the test to fit on a 
-	pc, and scaling down shared segments to < 16 Meg so it
-	can run on an Intel 386 class machine.
-	Added: -L #   Set the processor cache line size in bytes.
-	Added: -S #   Set the processor cache size in kbytes.
-	Removed spin wait in parent waiting for threads to 
-	finish each throughput test. Code not uses thread_join().
-	Fixed -O (operations/sec) mode to work in throughput tests.
-
-V2.23	(capps)
-	Close small timing hole where thread/process has set stop flag
-	and others are in a system call. The hole allowed threads/processes
-	to continue to increment work done after one had finished and
-	told the others to stop. The result was that the children would
-	report slightly high numbers as they were not truely parallel
-	at the finish line. Added random read throughput test.
-	Fixes for VxFS small extents being created by prime_zb() functions.
-	Provides more details about the throughput run.
-
-V2.24	(capps)
-	Added support for -R (Excell chart generation) to the throughput
-	tests. Also added support for the -O (ops/sec) to the throughput
-	Excell chart.
-
-V2.25	(capps)
-	Added support for selecting which test to run. -i #
-	-i 0 -i 3 
-	will run write and read-backwards tests only. For a list
-	of the test numbers type iozone -h.
-V2.26	(capps)
-	Added support for LARGE_FILES for the hpux-11.0 target.
-	
-
-V2.27	(capps)
-	All tests now verify one long word of data from each page
-	written/read to/from the file. This is to level the 
-	playing field with systems that do not move data 
-	when "read" or "write" is called, but instead just
-	map the file and perform the I/O when the address space
-	is touched. Benchmarks that do not validate the data
-	,at least touch each page, do not measure the read/write
-	times just the map times.
-	Note: The -V option still verifies each byte of the buffer,
-	the default is now to verify one long from each page.
-
-V2.28	(capps)
-	Added support for benchmarking mmap() files.
-	Added more command line options. -B -G -D
-		B = Use mmap() files for the benchmark.
-		G = Use msync(MS_SYNC) for mmap files.
-		D = Use msync(MS_ASYNC) for mmap files.
-
-V2.29	(capps)
-	Bug fixes for:
-		Combination of running individual tests and mmap() files support.
-		Stride read bug that caused only portions of the total file to be 
-		examined.
-	
-V2.30	(capps)
-	Fixups for build under SPP-UX
-
-V2.31	(capps)
-	Fixups for build under Linux.
-	Added -j ### to support user setting the stride size for the 
-	stride read benchmark.
-
-V2.32 	(capps)
-	Add support for IRIX and IRIX64.
-
-V2.33 	(capps)
-	Add support for POSIX async I/O benchmarking. Uses a library
-	to interface to POSIX async I/O model. The library provides
-	and extended async_read() interface. It takes the standard
-	calling options of read() but also allows the application to
-	perform read-ahead with a stride. (positive or negative)
-	and allows the user to specify how much read ahead to 
-	perform. 
-	Tested on HP-UX 11.0, Linux, SGI Origin.
-
-V2.34 	(capps)
-	Added -k. This allows POSIX async I/O to utilize the buffer
-	specified and not to perform any bcopys. Fixes to make
-	multi-threadedness work on SGI Origin.
-
-V2.34 	(capps)
-	Added [-k #]. This allows POSIX async I/O to utilize the buffer
-	specified and not to perform any bcopys. Fixes to make
-	multi-threadedness work on SGI Origin.
-
-V2.36 	(capps)
-	Iozone is now a 64 bit application. It may be compiled for either
-	64 bit or 32 bit machines. The makefile supports 64 and 32 bit
-	targets for machines that support 32 & 64 bit targets.
-	All version numbers are now automatically generated by
-	RCS. This is the last time we have to bump the version
-	number by hand.
-
-
------------------------------------------------------------------------------------
-Changed over to RCS source control here:
-Version Numbers are reset at this point back to Version 1.1.
------------------------------------------------------------------------------------
-
-
-RCS file:        iozone.c,v;   Working file:    iozone.c
-head:            1.94
-locks:           ;  strict
-access list:   
-symbolic names:
-comment leader:  " * "
-total revisions: 94;    selected revisions: 94
-description:
-Initial rcs version of Iozone
-----------------------------
-Revision 1.94        
-date: 99/01/18 13:02:57;  author: capps;  state: Exp;  lines added/del: 7/2
-Call msync if writer wants sync in timing and terminates early in multi thread test case.
-----------------------------
-Revision 1.93        
-date: 99/01/18 11:46:11;  author: capps;  state: Exp;  lines added/del: 309/126
-Cleanup for include_flush and include_close for single and multi threaded operations.
-----------------------------
-Revision 1.92        
-date: 99/01/15 10:53:58;  author: capps;  state: Exp;  lines added/del: 40/11
-Add include_close support for throughput testing
-----------------------------
-Revision 1.91        
-date: 98/12/07 09:26:22;  author: capps;  state: Exp;  lines added/del: 43/24
-For Windows: Use the high resolution timers instead of timeofday();
-Fix a few casting problems.
-----------------------------
-Revision 1.90        
-date: 98/11/30 14:49:46;  author: capps;  state: Exp;  lines added/del: 24/17
-Update the copyright and names and places
-----------------------------
-Revision 1.89        
-date: 98/10/30 09:04:51;  author: capps;  state: Exp;  lines added/del: 1/2
-An extra close(fd) causes HP-UX to fail future unmounts... 
-----------------------------
-Revision 1.88        
-date: 98/10/29 09:47:25;  author: capps;  state: Exp;  lines added/del: 17/17
-Cleanup the help screen
-----------------------------
-Revision 1.87        
-date: 98/10/28 23:31:11;  author: capps;  state: Exp;  lines added/del: 7/6
-Spelling error fix.
-----------------------------
-Revision 1.86        
-date: 98/10/14 11:21:50;  author: capps;  state: Exp;  lines added/del: 23/68
-Unified the time method to only have 2 ways to get time.
-----------------------------
-Revision 1.85        
-date: 98/10/14 09:22:09;  author: capps;  state: Exp;  lines added/del: 91/91
-Added code to remove the latency of gettimeofday() from the file performance measurements.
-----------------------------
-Revision 1.84        
-date: 98/10/12 11:44:50;  author: capps;  state: Exp;  lines added/del: 107/8
-Add time resolution output, and fix the divide by zero when the time in
-a system call turns out to be Zero. This will introduce distortion for machines
-that have very fast system calls and very poor time resolution. Windows 
-has a 50 Milli second resolution on gettimeofday(). So... to fix it 
-all calls that take less than 50 Milli seconds will be rounded up to 
-cost 50 milliseconds.
-----------------------------
-Revision 1.83        
-date: 98/10/06 09:58:16;  author: capps;  state: Exp;  lines added/del: 46/2
-Add support for Windows build
-----------------------------
-Revision 1.82        
-date: 98/09/23 09:48:02;  author: capps;  state: Exp;  lines added/del: 2/2
-Fix bug where -i # was leaving tmp files after throughput test.
-----------------------------
-Revision 1.81        
-date: 98/09/23 09:41:12;  author: capps;  state: Exp;  lines added/del: 1/3
-Remove debug printf
-----------------------------
-Revision 1.80        
-date: 98/09/23 09:29:01;  author: capps;  state: Exp;  lines added/del: 23/1
-Add my_nap(). This allows the threads to switch processors to their
-new bound processor before performing any work.
-----------------------------
-Revision 1.79        
-date: 98/09/22 11:57:20;  author: capps;  state: Exp;  lines added/del: 8/8
-Change xx back into an int so the modulo will work better.
-----------------------------
-Revision 1.78        
-date: 98/09/18 16:27:05;  author: capps;  state: Exp;  lines added/del: 18/15
-Remove create in rewrite path.
-----------------------------
-Revision 1.77        
-date: 98/08/17 16:44:06;  author: capps;  state: Exp;  lines added/del: 23/1
-Fixes for Solaris and the new processor bind feature.
-----------------------------
-Revision 1.76        
-date: 98/08/17 16:17:45;  author: capps;  state: Exp;  lines added/del: 1/2
-Remove debug code.
-----------------------------
-Revision 1.75        
-date: 98/08/17 16:16:15;  author: capps;  state: Exp;  lines added/del: 92/5
-Add support for binding procs/threads to cpus.
-----------------------------
-Revision 1.74        
-date: 98/08/07 16:51:41;  author: capps;  state: Exp;  lines added/del: 4/3
-Add fsync to the fwrite test case when the user specifies -e
-----------------------------
-Revision 1.73        
-date: 98/08/07 16:47:38;  author: capps;  state: Exp;  lines added/del: 178/208
-Add -c and -e to allow closes and fsyncs to be inside the timing calculations.
-----------------------------
-Revision 1.72        
-date: 98/08/06 22:40:15;  author: capps;  state: Exp;  lines added/del: 9/1
-Add setvbuf to fwrite and fread tests so that the internal fwrite and fread
-buffer size is the same as the record size. This is what a well tuned application 
-would do.
-----------------------------
-Revision 1.71        
-date: 98/08/06 09:03:06;  author: capps;  state: Exp;  lines added/del: 2/3
-Fix fsync filename problem in fwrite_perf_test
-----------------------------
-Revision 1.70        
-date: 98/08/05 18:06:41;  author: capps;  state: Exp;  lines added/del: 6/2
-Add fsync after fwrite test case so the fread will start with a 
-clean buffer cache and no writes in progress.
-----------------------------
-Revision 1.69        
-date: 98/08/03 10:45:49;  author: capps;  state: Exp;  lines added/del: 3/3
-Bug fix for -V option not filling the entire buffer.
-----------------------------
-Revision 1.68        
-date: 98/07/30 22:11:11;  author: capps;  state: Exp;  lines added/del: 2/3
-Fix for solaris
-----------------------------
-Revision 1.67        
-date: 98/07/30 22:08:19;  author: capps;  state: Exp;  lines added/del: 2/2
-Fix for solaris
-----------------------------
-Revision 1.66        
-date: 98/07/30 22:05:02;  author: capps;  state: Exp;  lines added/del: 43/15
-Add support for Solaris
-----------------------------
-Revision 1.65        
-date: 98/07/01 14:19:19;  author: capps;  state: Exp;  lines added/del: 80/82
-Move end_async inside the timing loops as in async I/O it counts.
-----------------------------
-Revision 1.64        
-date: 98/06/16 17:04:36;  author: capps;  state: Exp;  lines added/del: 13/2
-Correct problem where user specifies pread tests on hpux... which does not 
-support these operations. The test now prints an error message and exits.
-----------------------------
-Revision 1.63        
-date: 98/06/16 16:54:22;  author: capps;  state: Exp;  lines added/del: 1/2
-Remove exit from auto_test. This allows the message "iozone test complete" to 
-be printed when in auto test mode.
-----------------------------
-Revision 1.62        
-date: 98/06/10 10:54:28;  author: capps;  state: Exp;  lines added/del: 175/173
-All exit()s now have a unique exit value.
-----------------------------
-Revision 1.61        
-date: 98/05/18 13:34:03;  author: capps;  state: Exp;  lines added/del: 17/18
-Move .dat file descriptors to global data. Needed to prevent re-opens.
-----------------------------
-Revision 1.60        
-date: 98/05/18 13:24:22;  author: capps;  state: Exp;  lines added/del: 6/3
-Bug fix. Prevents re-opending .dat files when in auto mode.
-----------------------------
-Revision 1.59        
-date: 98/05/08 13:03:02;  author: capps;  state: Exp;  lines added/del: 21/3
-Enhance throughput tests to follow the -i test number to run options.
-----------------------------
-Revision 1.58        
-date: 98/05/07 14:15:49;  author: capps;  state: Exp;  lines added/del: 109/39
-Make VXFS a define in the make command. This makes moving to other targets
-easier. It removes the binding of HPUX and VXFS.
-Also, Added -Q to support offset/latency file generation for later use
-as inputs to plot program.
-----------------------------
-Revision 1.57        
-date: 98/05/06 15:09:43;  author: capps;  state: Exp;  lines added/del: 100/27
-Add -N to provide results in microseconds per operation.
-----------------------------
-Revision 1.56        
-date: 98/05/05 13:23:29;  author: capps;  state: Exp;  lines added/del: 3/10
-If the user specifies -i 0 then run both write and rewrite tests.
-----------------------------
-Revision 1.55        
-date: 98/04/30 15:19:02;  author: capps;  state: Exp;  lines added/del: 1/1
-No change
-----------------------------
-Revision 1.54        
-date: 98/04/30 15:09:58;  author: capps;  state: Exp;  lines added/del: 2/2
-Unlink the vxfstest when the test fails.
-----------------------------
-Revision 1.53        
-date: 98/04/30 13:07:21;  author: capps;  state: Exp;  lines added/del: 7/5
-Cleanup help output.
-----------------------------
-Revision 1.52        
-date: 98/04/30 12:58:29;  author: capps;  state: Exp;  lines added/del: 21/4
-Add async I/O with no bcopy to throughput tests.
-----------------------------
-Revision 1.51        
-date: 98/04/29 15:29:29;  author: capps;  state: Exp;  lines added/del: 5/1
-Fixes so it will compile on the SGI Origin.
-----------------------------
-Revision 1.50        
-date: 98/04/29 11:57:58;  author: capps;  state: Exp;  lines added/del: 5/1
-Do not need to limit async ops. Fix is in libasync.c
-----------------------------
-Revision 1.49        
-date: 98/04/29 10:45:19;  author: capps;  state: Exp;  lines added/del: 61/3
-Add async I/O to throughput testing for writes
-----------------------------
-Revision 1.48        
-date: 98/04/28 11:57:13;  author: capps;  state: Exp;  lines added/del: 5/1
-Limit max async operations to 60. Beyond this there be dragons.
-----------------------------
-Revision 1.47        
-date: 98/04/28 10:16:09;  author: capps;  state: Exp;  lines added/del: 108/21
-Completed support for no_bcopy POSIX async I/O in the async_write_no_copy path.
-This allows write tests to perform async I/O with buffers released when 
-the write is completed.
-----------------------------
-Revision 1.46        
-date: 98/04/27 16:58:38;  author: capps;  state: Exp;  lines added/del: 43/10
-Add aio_write() to the write and re-write tests. This provides
-POSIX async I/O for the those tests.
-----------------------------
-Revision 1.45        
-date: 98/04/25 09:53:39;  author: capps;  state: Exp;  lines added/del: 3/2
-direct_flag is an int. Was a char in one place and
-an int in another.
-----------------------------
-Revision 1.44        
-date: 98/04/25 09:17:42;  author: capps;  state: Exp;  lines added/del: 27/15
-More support for vx_direct support in the write path
-----------------------------
-Revision 1.43        
-date: 98/04/24 16:33:44;  author: capps;  state: Exp;  lines added/del: 115/77
-Move VX_DIRECT to libasync. But keep the VX_DIRECT support also
-in iozone. So one can use VX_DIRECT with and without async I/O
-----------------------------
-Revision 1.42        
-date: 98/04/24 16:20:34;  author: capps;  state: Exp;  lines added/del: 127/60
-Move VX_DIRECT to the libasync module.
-----------------------------
-Revision 1.41        
-date: 98/04/24 15:50:54;  author: capps;  state: Exp;  lines added/del: 190/7
-Add support for VxFS VX_DIRECT 
-Idea is to use VX_DIRECT and POSIX async I/O together
-----------------------------
-Revision 1.40        
-date: 98/04/22 16:38:25;  author: capps;  state: Exp;  lines added/del: 5/5
-Sppux wants ail_gettimeofday variables to be unsigned int. 
-----------------------------
-Revision 1.39        
-date: 98/04/22 16:19:50;  author: capps;  state: Exp;  lines added/del: 7/3
-Fix -M option not printing cleanly
-Fix -R in 32 bit mode printing garbage.
-----------------------------
-Revision 1.38        
-date: 98/04/22 15:56:02;  author: capps;  state: Exp;  lines added/del: 1/1
-Change to only disply revision not full header.
-----------------------------
-Revision 1.37        
-date: 98/04/22 15:52:19;  author: capps;  state: Exp;  lines added/del: 1/1
-Add RCS Header to support versioning.
-----------------------------
-Revision 1.36        
-date: 98/04/22 15:38:26;  author: capps;  state: Exp;  lines added/del: 1/1
-fix to bcopy() third arg needs to be size_t for 32 bit mode.
-----------------------------
-Revision 1.35        
-date: 98/04/22 09:09:24;  author: capps;  state: Exp;  lines added/del: 17/17
-Bug fixes for 64 bit mode on IRIX, and addition 
-on the internal inuse queue to insure that the
-internal struct_cache_ent structures are not released
-too early when doing direct I/O (async_read_no_copy).
-----------------------------
-Revision 1.34        
-date: 98/04/21 09:31:02;  author: capps;  state: Exp;  lines added/del: 4/0
-Fix to eliminate hidden (dot) files that iozone was creating
-in throughput mode. All files are now visible with ls.
-----------------------------
-Revision 1.33        
-date: 98/04/21 08:30:35;  author: capps;  state: Exp;  lines added/del: 7/1
-Have Iozone print the compile model used.
-----------------------------
-Revision 1.32        
-date: 98/04/20 18:46:02;  author: capps;  state: Exp;  lines added/del: 49/20
-Fixes for 32 bit mode. 
-----------------------------
-Revision 1.31        
-date: 98/04/20 16:57:29;  author: capps;  state: Exp;  lines added/del: 8/8
-make sure malloc is called with (size_t) parameter.
-----------------------------
-Revision 1.30        
-date: 98/04/20 16:05:08;  author: capps;  state: Exp;  lines added/del: 933/757
-Iozone now 64 bit application
-----------------------------
-Revision 1.29        
-date: 98/04/20 12:32:25;  author: capps;  state: Exp;  lines added/del: 4/4
-Move msync to before munmap so file gets written.
-----------------------------
-Revision 1.28        
-date: 98/04/20 10:21:30;  author: capps;  state: Exp;  lines added/del: 2/2
-Minor fix for -O flag and -B not working smoothly together.
-----------------------------
-Revision 1.27        
-date: 98/04/20 10:17:19;  author: capps;  state: Exp;  lines added/del: 0/0
-No change
-
-----------------------------
-Revision 1.26        
-date: 98/04/19 15:11:07;  author: capps;  state: Exp;  lines added/del: 5/5
-Remove prime_zbfill. It causes problems with mmap files.
-----------------------------
-Revision 1.25        
-date: 98/04/16 15:24:50;  author: capps;  state: Exp;  lines added/del: 228/70
--H is Nastran async I/O with bcopy
--k is async I/O without any bcopys
-----------------------------
-Revision 1.24        
-date: 98/04/15 16:48:30;  author: capps;  state: Exp;  lines added/del: 22/4
-fix to make build on 9.05 and 10.1
-----------------------------
-Revision 1.23        
-date: 98/04/15 15:36:55;  author: capps;  state: Exp;  lines added/del: 9/9
-Cleanup some compiler warnings about un-initialized variables. They
-are not really un-initialized and used but it does generate 
-compiler warnings on some machines.
-----------------------------
-Revision 1.22        
-date: 98/04/15 15:32:56;  author: capps;  state: Exp;  lines added/del: 7/7
-Need to free the dummyname space a bit later.
-----------------------------
-Revision 1.21        
-date: 98/04/15 14:37:05;  author: capps;  state: Exp;  lines added/del: 27/13
-Fix to use smaller stack size in thread_ routines. It was causing
-the SGI to drop core in throughput tests.
-----------------------------
-Revision 1.20        
-date: 98/04/14 17:01:19;  author: capps;  state: Exp;  lines added/del: 27/16
-Fix a memory leak. In multi_throughput testing shmalloc was getting called
-for each iteration. This is not needed and causes much to much 
-shm to be allocated. Not broken but definately a pig.
-----------------------------
-Revision 1.19        
-date: 98/04/14 15:19:15;  author: capps;  state: Exp;  lines added/del: 2/0
-When -k is specified alone this will turn on the POSIX async I/O and 
-set depth to 0.
-----------------------------
-Revision 1.18        
-date: 98/04/14 15:00:18;  author: capps;  state: Exp;  lines added/del: 21/20
-Fixes to make multi-threaded version run on the SGI Origin.
-----------------------------
-Revision 1.17        
-date: 98/04/14 11:55:44;  author: capps;  state: Exp;  lines added/del: 17/11
-Add support for -k. When using POSIX async I/O use the 
-buffer specified and do not perform any bcopys.
-----------------------------
-Revision 1.16        
-date: 98/04/13 10:22:18;  author: capps;  state: Exp;  lines added/del: 27/380
-Add libasync library support
-----------------------------
-Revision 1.15        
-date: 98/04/11 12:09:25;  author: capps;  state: Exp;  lines added/del: 1/0
-Fix memory leak. Now calls del_cache when ever any calls to async_end happen.
-This will ensure that there are no outstanding I/Os on the cache that 
-ha ve not been canceled .
-----------------------------
-Revision 1.14        
-date: 98/04/11 11:57:10;  author: capps;  state: Exp;  lines added/del: 632/47
-Add support for POSIX async I/O testing
-----------------------------
-Revision 1.13        
-date: 98/03/31 14:30:15;  author: capps;  state: Exp;  lines added/del: 44/6
-Fix support for bsd4_2 and ConvexOS
-----------------------------
-Revision 1.12        
-date: 98/03/31 11:26:34;  author: capps;  state: Exp;  lines added/del: 2/2
-Bump version number to 2.32
-----------------------------
-Revision 1.11        
-date: 98/03/31 11:20:51;  author: capps;  state: Exp;  lines added/del: 70/6
-Add support for SGI IRIX and SGI IRIX64
-----------------------------
-Revision 1.10        
-date: 98/03/27 14:00:47;  author: capps;  state: Exp;  lines added/del: 15/20
-Put the bcopy back. It is more represenative
-of what the real application will do.
-----------------------------
-Revision 1.9        
-date: 98/03/27 13:25:02;  author: capps;  state: Exp;  lines added/del: 40/14
-Improved mmap file support. Now only have 1 long word from
-each page touched. This eliminates the overhead of bcopy
-dominating the results. It also is performing the same 
-work that the non-mmap version does with verify().
-----------------------------
-Revision 1.8        
-date: 98/03/27 10:41:13;  author: capps;  state: Exp;  lines added/del: 10/4
-Bug fix. Frewrite was truncating the file. This fix
-ensures that the Frewrite test opens without trunc.
-----------------------------
-Revision 1.7        
-date: 98/03/27 10:16:41;  author: capps;  state: Exp;  lines added/del: 3/3
-Fix report to specify stride size as a function of reclen.
-It did not make sense to output kbytes as the value changes
-when in auto mode to match the current record length.
-----------------------------
-Revision 1.6        
-date: 98/03/26 15:28:15;  author: capps;  state: Exp;  lines added/del: 16/8
-Add support for -j option. This 
-allows the user to specify the stride size for 
-the strided file access benchmark.
-----------------------------
-Revision 1.5        
-date: 98/03/25 15:27:01;  author: capps;  state: Exp;  lines added/del: 1/1
-Fixup help screen to reflect new options
-----------------------------
-Revision 1.4        
-date: 98/03/25 15:21:23;  author: capps;  state: Exp;  lines added/del: 1/1
-Change the revision number
-----------------------------
-Revision 1.3        
-date: 98/03/25 15:20:28;  author: capps;  state: Exp;  lines added/del: 16/1
-Fixup support for Linux
-----------------------------
-Revision 1.2        
-date: 98/03/25 13:58:05;  author: capps;  state: Exp;  lines added/del: 16/3
-Bug fixes for SPP-UX
-----------------------------
-Revision 1.1        
-date: 98/03/25 10:43:45;  author: capps;  state: Exp;  
-Initial revision
-=============================================================================
-
-RCS file:        libasync.c,v;   Working file:    libasync.c
-head:            1.39
-locks:           ;  strict
-access list:   
-symbolic names:
-comment leader:  " * "
-total revisions: 39;    selected revisions: 39
-description:
-Initial version of POSIX async I/O library interface.
-----------------------------
-Revision 1.39        
-date: 98/07/30 22:05:21;  author: capps;  state: Exp;  lines added/del: 3/1
-Add support for Solaris
-----------------------------
-Revision 1.38        
-date: 98/07/07 13:00:39;  author: capps;  state: Exp;  lines added/del: 1/11
-Remove extra bcopy in the async_write_no_bcopy path.
-----------------------------
-Revision 1.37        
-date: 98/06/11 09:47:58;  author: capps;  state: Exp;  lines added/del: 3/3
-Fix syntax error for IRIX 
-----------------------------
-Revision 1.36        
-date: 98/06/10 10:56:55;  author: capps;  state: Exp;  lines added/del: 10/10
-All exit()s now have a unique exit value.
-----------------------------
-Revision 1.35        
-date: 98/05/07 14:17:20;  author: capps;  state: Exp;  lines added/del: 2/2
-Make VXFS a define in the make command. This makes moving to other targets
-easier. It removes the binding of HPUX and VXFS.
-Also, Added -Q to support offset/latency file generation for later use
-as inputs to plot program.
-----------------------------
-Revision 1.34        
-date: 98/04/30 15:19:54;  author: capps;  state: Exp;  lines added/del: 1/3
-Remove debug code that breaks 64 bit mode compiled code.
-----------------------------
-Revision 1.33        
-date: 98/04/30 13:09:13;  author: capps;  state: Exp;  lines added/del: 2/2
-Make retval an int so it can be checked for less than zero.
-----------------------------
-Revision 1.32        
-date: 98/04/29 16:49:34;  author: capps;  state: Exp;  lines added/del: 5/11
-If overshooting on number of asyncs then terminate the loop and
-let the next time through pick up the I/O.
-----------------------------
-Revision 1.31        
-date: 98/04/29 16:37:49;  author: capps;  state: Exp;  lines added/del: 3/3
-Remove debug code
-----------------------------
-Revision 1.30        
-date: 98/04/29 15:29:48;  author: capps;  state: Exp;  lines added/del: 3/1
-Fixes so it will compile on the SGI Origin.
-----------------------------
-Revision 1.29        
-date: 98/04/29 11:56:27;  author: capps;  state: Exp;  lines added/del: 36/10
-Work around for bug in POSIX async I/O library
-----------------------------
-Revision 1.28        
-date: 98/04/29 11:04:26;  author: capps;  state: Exp;  lines added/del: 1/2
-Remove debug code
-----------------------------
-Revision 1.27        
-date: 98/04/29 11:02:54;  author: capps;  state: Exp;  lines added/del: 54/27
-Added resource shortage paths.
-----------------------------
-Revision 1.26        
-date: 98/04/28 18:12:51;  author: capps;  state: Exp;  lines added/del: 1/3
-Add async I/O to the throughput tests
-----------------------------
-Revision 1.25        
-date: 98/04/28 17:12:40;  author: capps;  state: Exp;  lines added/del: 3/1
-fix wait_for_ routine to reset w_tail if item being removed is also the tail.
-----------------------------
-Revision 1.24        
-date: 98/04/28 16:14:06;  author: capps;  state: Exp;  lines added/del: 1/3
-bug fix. 2 calls to malloc for aligned memory.
-----------------------------
-Revision 1.23        
-date: 98/04/28 11:57:39;  author: capps;  state: Exp;  lines added/del: 37/13
-Limit max async operations to 60. Beyond this there be dragons.
-----------------------------
-Revision 1.22        
-date: 98/04/28 10:17:22;  author: capps;  state: Exp;  lines added/del: 127/42
-Completed support for no_bcopy POSIX async I/O in the async_write_no_copy path.
-This allows write tests to perform async I/O with buffers released when 
-the write is completed.
-----------------------------
-Revision 1.21        
-date: 98/04/27 16:59:14;  author: capps;  state: Exp;  lines added/del: 246/9
-Add aio_write() to the write and re-write tests. This provides
-POSIX async I/O for the those tests.
-----------------------------
-Revision 1.20        
-date: 98/04/24 16:20:55;  author: capps;  state: Exp;  lines added/del: 15/3
-Move VX_DIRECT to the libasync module.
-----------------------------
-Revision 1.19        
-date: 98/04/24 15:50:13;  author: capps;  state: Exp;  lines added/del: 42/11
-Add support for VxFS VX_DIRECT 
-Idea is to use VX_DIRECT and POSIX async I/O together
-----------------------------
-Revision 1.18        
-date: 98/04/24 12:36:42;  author: capps;  state: Exp;  lines added/del: 13/5
-Fix some error printfs to match the size of the off_t.
-----------------------------
-Revision 1.17        
-date: 98/04/24 12:18:11;  author: capps;  state: Exp;  lines added/del: 7/7
-Fixes for LP64 mode. off_t changed to off64_t 
-----------------------------
-Revision 1.16        
-date: 98/04/24 09:33:32;  author: capps;  state: Exp;  lines added/del: 275/35
-Add comments and fix for LP64 model on hpux.
-----------------------------
-Revision 1.15        
-date: 98/04/23 16:58:06;  author: capps;  state: Exp;  lines added/del: 167/13
-Make libasync large file aware.
-----------------------------
-Revision 1.14        
-date: 98/04/22 15:58:45;  author: capps;  state: Exp;  lines added/del: 1/1
-Change version to only display rcs version id.
-----------------------------
-Revision 1.13        
-date: 98/04/22 15:52:54;  author: capps;  state: Exp;  lines added/del: 1/2
-Add RCS version support
-----------------------------
-Revision 1.12        
-date: 98/04/22 11:39:35;  author: capps;  state: Exp;  lines added/del: 52/8
-Add firewall to prevent in flight changes to the aiocb structure.
-----------------------------
-Revision 1.11        
-date: 98/04/22 09:10:36;  author: capps;  state: Exp;  lines added/del: 57/19
-Bug fixes for 64 bit mode on IRIX, and addition 
-on the internal inuse queue to insure that the
-internal struct_cache_ent structures are not released
-too early when doing direct I/O (async_read_no_copy).
-----------------------------
-Revision 1.10        
-date: 98/04/21 09:34:14;  author: capps;  state: Exp;  lines added/del: 18/10
-Improve error messages.
-----------------------------
-Revision 1.9        
-date: 98/04/20 16:06:21;  author: capps;  state: Exp;  lines added/del: 53/50
-Iozone now 64 bit application
-----------------------------
-Revision 1.8        
-date: 98/04/20 10:17:59;  author: capps;  state: Exp;  lines added/del: 0/0
-no change
-----------------------------
-Revision 1.7        
-date: 98/04/17 08:49:16;  author: capps;  state: Exp;  lines added/del: 15/2
-Optimization on async operations. Just add one to the end
-of the list if the list already has more than one item.
-----------------------------
-Revision 1.6        
-date: 98/04/17 00:00:30;  author: capps;  state: Exp;  lines added/del: 10/2
-Make cancel keep trying until it succeeds. Otherwise transfers after the buffer
-is freed can occur.
-----------------------------
-Revision 1.5        
-date: 98/04/16 16:49:28;  author: capps;  state: Exp;  lines added/del: 49/4
-Improve error handling when running machine out of memory.
-----------------------------
-Revision 1.4        
-date: 98/04/16 15:26:41;  author: capps;  state: Exp;  lines added/del: 118/28
-added async_read_no_copy(). This allows the application to let the 
-library specify the destination buffer and perform the async I/O
-without unwanted bcopys.
-----------------------------
-Revision 1.3        
-date: 98/04/14 11:56:23;  author: capps;  state: Exp;  lines added/del: 36/10
-Add supporf for -k. When using POSIX async I/O use
-the buffer specified and do not perform any bcopys.
-----------------------------
-Revision 1.2        
-date: 98/04/13 10:35:20;  author: capps;  state: Exp;  lines added/del: 5/7
-Fixup for error path to propagate any small transfers.
-----------------------------
-Revision 1.1        
-date: 98/04/13 10:21:23;  author: capps;  state: Exp;  
-Initial revision
-=============================================================================
-
-RCS file:        makefile,v;   Working file:    makefile
-head:            1.20
-locks:           ;  strict
-access list:   
-symbolic names:
-comment leader:  "# "
-total revisions: 20;    selected revisions: 20
-description:
-Initial version of makefile
-----------------------------
-Revision 1.20        
-date: 98/10/06 10:36:22;  author: capps;  state: Exp;  lines added/del: 87/28
-Add comments to describe each targets capabilities.
-----------------------------
-Revision 1.19        
-date: 98/10/06 09:59:18;  author: capps;  state: Exp;  lines added/del: 3/3
-Fix spelling error
-----------------------------
-Revision 1.18        
-date: 98/10/06 09:58:29;  author: capps;  state: Exp;  lines added/del: 18/3
-Add support for Windows build
-----------------------------
-Revision 1.17        
-date: 98/08/17 16:44:56;  author: capps;  state: Exp;  lines added/del: 2/2
-Fixes for Solaris
-----------------------------
-Revision 1.16        
-date: 98/07/30 22:05:33;  author: capps;  state: Exp;  lines added/del: 20/1
-Add support for Solaris
-----------------------------
-Revision 1.15        
-date: 98/05/07 14:17:26;  author: capps;  state: Exp;  lines added/del: 13/13
-Make VXFS a define in the make command. This makes moving to other targets
-easier. It removes the binding of HPUX and VXFS.
-Also, Added -Q to support offset/latency file generation for later use
-as inputs to plot program.
-----------------------------
-Revision 1.14        
-date: 98/04/22 16:02:42;  author: capps;  state: Exp;  lines added/del: 2/0
-Add RCS version ids.
-----------------------------
-Revision 1.13        
-date: 98/04/22 13:58:54;  author: capps;  state: Exp;  lines added/del: 6/6
-For now only build the SGI targets in 32 bit mode. 
-There is some problem with POSIX async I/O and 64 bit apps.
-----------------------------
-Revision 1.12        
-date: 98/04/22 12:08:25;  author: capps;  state: Exp;  lines added/del: 3/3
-Let the IRIX64 target default to its default compile mode.
-----------------------------
-Revision 1.11        
-date: 98/04/22 09:10:54;  author: capps;  state: Exp;  lines added/del: 3/3
-Bug fixes for 64 bit mode on IRIX, and addition 
-on the internal inuse queue to insure that the
-internal struct_cache_ent structures are not released
-too early when doing direct I/O (async_read_no_copy).
-----------------------------
-Revision 1.10        
-date: 98/04/21 09:29:57;  author: capps;  state: Exp;  lines added/del: 17/17
-Improve dependencies
-----------------------------
-Revision 1.9        
-date: 98/04/20 16:05:48;  author: capps;  state: Exp;  lines added/del: 58/29
-Iozone now 64 bit application
-----------------------------
-Revision 1.8        
-date: 98/04/20 10:17:44;  author: capps;  state: Exp;  lines added/del: 0/0
-*** empty log message ***
-----------------------------
-Revision 1.7        
-date: 98/04/16 16:50:11;  author: capps;  state: Exp;  lines added/del: 6/6
-Have the SGI build 32 bit app too.
-----------------------------
-Revision 1.6        
-date: 98/04/15 16:48:09;  author: capps;  state: Exp;  lines added/del: 5/5
-Fix to make build on 9.05 and 10.1
-----------------------------
-Revision 1.5        
-date: 98/04/13 10:22:34;  author: capps;  state: Exp;  lines added/del: 14/6
-Add support for libasync library.
-----------------------------
-Revision 1.4        
-date: 98/04/11 11:57:34;  author: capps;  state: Exp;  lines added/del: 10/10
-AAdd support for POSIX async I/O testing
-----------------------------
-Revision 1.3        
-date: 98/03/31 11:21:34;  author: capps;  state: Exp;  lines added/del: 24/0
-Add support for SGI IRIX and SGI IRIX64
-----------------------------
-Revision 1.2        
-date: 98/03/25 13:59:18;  author: capps;  state: Exp;  lines added/del: 21/9
-Fixes for SPP-UX
-----------------------------
-Revision 1.1        
-date: 98/03/25 10:48:21;  author: capps;  state: Exp;  
-Initial revision
-=============================================================================
-Added support for BIFF file output. Iozone can now write Excel spreadsheet 
-format. This allows one to directly access the Excel spreadsheet without 
-needing to import with tab and space delimited method.
-
-Added support for large files and threads for Solaris.
-
-Add support for FreeBSD
-
-Change default stride value to avoid nodalization with various spindle counts.
-=============================================================================
-Version 3.3:
-Changed name of processor_bind to ioz_processor_bind to avoid collision
-with SVR5.4.MP shared library.
-Removed leading tab on an #ifdef that caused some compilers to get sick.
-=============================================================================
-Version 3.4:
-Add support for OpenBSD
-=============================================================================
-Version 3.6:
-Lots of code cleanup. 
-Added support for OSF1 on the DEC Alpha.
-=============================================================================
-Version 3.7:
-Add support for OSF Version 4.
-Add timer resolution problem detection.
-
-=============================================================================
-Add support for OSF Version 5.
-=============================================================================
-Version 3.13:
-Add support for Linux to use pthreads.
-
-=============================================================================
-Version 3.16:
-=============================================================================
-Add support for Netbsd 
-Add support for Largefiles and Async I/O to Linux target
-=============================================================================
-Version 3.17:
-=============================================================================
-Removed small model for Linux. In the past Iozone was forced to 
-use a small model for testing Linux as the normal load caused
-Redhat to panic. Redhat users have told me that the system now
-works fine with the normal load. They have tested Redhat 6.1 and
-it no longer panics.
-=============================================================================
-Version 3.18:
-=============================================================================
-Add support for BSDI. Base, largefiles, pthread. No async I/O
-=============================================================================
-Revision 3.19        
-=============================================================================
-date: 2000/03/08 14:47:21;  author: capps;  state: Exp;  lines added/del: 4/1
-Add support for getpagesize. This is used when available.
-=============================================================================
-Revision 3.20        
-=============================================================================
-date: 00/04/01 11:04:59;  author: capps;  state: Exp;  lines added/del: 2/2
-Fix for multiple filenames and range of threads being used.
-=============================================================================
-Revision 3.21        
-=============================================================================
-date: 00/04/01 11:10:54;  author: capps;  state: Exp;  lines added/del: 3/1
-SPPUX does not have getpagesize... 
-=============================================================================
-Revision 3.22        
-=============================================================================
-Add support for Linux-ia64
-Add support for mmap & normal file I/O mixing.
-=============================================================================
-Revision 3.23        
-Fixups for IBM AIX.
-=============================================================================
-Revision 3.24        
-Fixups for BSD 2.7  (New release of BSD that supports O_SYNC)
-=============================================================================
-Revision 3.27        
-Fixups for Cygnus compiler changes. (Windows targets). With this
-change Iozone will compile with at least 2 versions of the Cygnus
-compilers.
-=============================================================================
-Revision 3.28        
-=============================================================================
-Add support for reading and writing while holding lockf() on the file.
-This turns out to be important aspect of NFS benchmarking.
-=============================================================================
-Revision 3.29        
-=============================================================================
-Change calls to lockf() to calls to fcntl(). This is more portable.
-=============================================================================
-Revision 3.30        
-=============================================================================
-Add support for variable compute cycle time before each I/O
-operation. This allows one to more accuratly represent
-a specific application that is doing compute/read/compute/read 
-style operations.
-=============================================================================
-Revision 3.30 through 3.37
-=============================================================================
-Add support for read and write telemetry files.
-=============================================================================
-Revision 3.40 
-=============================================================================
-Code cleanup for popen() usage in -M path.
-=============================================================================
-Revision 3.41 
-=============================================================================
-Bug fix for ops/sec in rewrite throughput testing.
-Added average throughput to output in throughput mode.
-=============================================================================
-Revision 3.42 
-=============================================================================
-Bug fix for read and re-read. Usage of un-initialized variable that
-caused results to be wrong.
-=============================================================================
-Revision 3.43 
-=============================================================================
-Add support for latency plot data for throughput testing.
-Each child thread/process gets its own data file.
-=============================================================================
-Revision 3.44 
-=============================================================================
-Enhance compatibility of multi-thread/proc latency offsets with 
-telemetry file support.
-=============================================================================
-Revision 3.45 through 3.48
-=============================================================================
-Added latency/offset plot data files for all throughput tests.
-=============================================================================
-Revision 3.49
-=============================================================================
-Fixed compile warning for Linux off64_t redefinition.
-Add Solaris2.6 target with simple build.
-=============================================================================
-Revision 3.50
-=============================================================================
-Added support for openbsd-threads
-Cleanup for page size foo.
-=============================================================================
-Revision 3.51, 3.52, 3.53
-=============================================================================
-Cleanup for new random write testing in throughput mode.
-Improve perror handling.
-=============================================================================
-Revision 3.54
-=============================================================================
-Add -g maxfilesize so people will not have to edit the source to 
-test files bigger than 512 Mbytes.
-=============================================================================
-Revision 3.55
-=============================================================================
-Supports -n and -g to set the min and max file sizes to be used for 
-an auto mode run.
-=============================================================================
-Revision 3.56
-=============================================================================
-Added support for SCO Unixware SVR5 with gcc compiler
-=============================================================================
-Revision 3.57
-=============================================================================
-Fixed bug where file locking was not being used when
-_LARGE_FILE64_SOURCE was defined in read_perf_test.
-=============================================================================
-Revision 3.58
-=============================================================================
-Added -z option. This is to be used with the -a option. It
-provides more complete testing for small record sizes 
-when the file sizes are very large.
-Fixed -a so that the cross-over mechanism works correctly.
-=============================================================================
-Revision 3.59
-=============================================================================
-Fix a bug where the user specified -R -s but did not specify
--a or -r. This caused the Excel report to print a bunch
-of zeros.
-=============================================================================
-Revision 3.60
-=============================================================================
-Fix headers in the Excel output when cross over kicks in.
-=============================================================================
-Revision 3.61
-=============================================================================
-Added -y and -q to set record size range
-Added command line to output
-=============================================================================
-Revision 3.62
-=============================================================================
-Put auto cross over back to 16 Meg
-=============================================================================
-Revision 3.63
-=============================================================================
-Minor code cleanups for error messages
-=============================================================================
-Revision 3.64
-=============================================================================
-Re-organize the help listing.
-=============================================================================
-Revision 3.65
-=============================================================================
-Add labels to the latency/offset output files.
-=============================================================================
-Revision 3.66
-=============================================================================
-Added Randy Dunlap to the list of contributors. Thanks Randy !!
-=============================================================================
-Revision 3.67
-=============================================================================
-Fix labels when using -R and -i options together.
-=============================================================================
-Revision 3.68
-=============================================================================
-Code cleanup. No functionality changes.
-=============================================================================
-Revision 3.69
-=============================================================================
-Prevent mixed modes. Auto and throughput.
-Added support for the Plus extended options.
-=============================================================================
-Revision 3.70
-=============================================================================
-Added support for -+u option. Cpu utilization.
-=============================================================================
-Revision 3.71
-=============================================================================
-Added comment for the support for -+u option. Cpu utilization.
-=============================================================================
-Revision 3.72
-=============================================================================
-Added network testing mode. -+m  (Experimental) Tested: Linux, HP-UX
-=============================================================================
-Revision 3.73
-=============================================================================
-Added -xflag support for distributed mode.
-Handle interrupts when in distributed mode.
-=============================================================================
-Revision 3.74
-=============================================================================
-Add default for REMOTE_SHELL
-=============================================================================
-Revision 3.75
-=============================================================================
-Code cleanup. 
-=============================================================================
-Revision 3.76
-=============================================================================
-Portability change for shmat().
-Added and example of client_list file to the distribution.
-=============================================================================
-Revision 3.77
-=============================================================================
-Disable CPU utilization in distributed mode.
-Bug fix for CPU utilization in normal mode.
-=============================================================================
-Revision 3.78
-=============================================================================
-Fix compatibility with AIX for shmat()
-=============================================================================
-Revision 3.79
-=============================================================================
-Fix throughput labels when user is selecting specific tests with -i option.
-=============================================================================
-Revision 3.80
-=============================================================================
-Remove dependency on min() and max(). They are not portable.
-=============================================================================
-Revision 3.81
-=============================================================================
-Changes for 64bit architectures. Brad Smith. OpenBSD.
-=============================================================================
-Revision 3.83
-=============================================================================
-Add -+m cluster option to the help list and the list of options.
-=============================================================================
-Revision 3.84 -> 3.88
-=============================================================================
-Fix file descriptor leak in cluster mode.
-=============================================================================
-Revision 3.89 -> 3.91
-=============================================================================
-Support for heterogeneous clusters, bug fix for -C 
-=============================================================================
-Revision 3.92 
-=============================================================================
-Add a small sleep in the client so the master's terminate message 
-can arrive before the client exits and closes the channel.
-=============================================================================
-Revision 3.93 
-=============================================================================
-Add support for UWIN (Unix for Windows)
-=============================================================================
-Revision 3.94 
-=============================================================================
-Bug fix for client's working dir in cluster mode.
-=============================================================================
-Revision 3.95 
-=============================================================================
-Enable more options in Cluster mode.
-=============================================================================
-Revision 3.96 
-=============================================================================
-Add support for Solaris 8 in 64-bit mode.
-=============================================================================
-Revision 3.97 
-=============================================================================
-Linux demands a function proto for functions that take floats as args.
-=============================================================================
-Revision 3.98 
-=============================================================================
-Changes for Solaris to make their silly compiler eat reasonable 
-function prototypes. (yech !!)
-=============================================================================
-Revision 3.99 
-=============================================================================
-Add protocol version checking for distributed messages.
-Add support for AIX 5.2
-=============================================================================
-Revision 3.100 
-=============================================================================
-Fixes for socket ports. Needed to be in network format.
-=============================================================================
-Revision 3.101 
-=============================================================================
-Add support for RSH environment override.
-=============================================================================
-Revision 3.102 
-=============================================================================
-Improve O_DIRECT and VX_DIRECT so that testing is done
-on the correct file on the correct client.
-=============================================================================
-Revision 3.103 
-=============================================================================
-Code cleanup.
-=============================================================================
-Revision 3.104 
-=============================================================================
-Code cleanup. Bug fix for O_DIRECT in read_perf_test.
-=============================================================================
-Revision 3.105 
-=============================================================================
-Bug fix for TRU64 and OSF where reclen was not getting displayed.
-=============================================================================
-Revision 3.106 
-=============================================================================
-Add -+d file I/O diagnostic mode.
-=============================================================================
-Revision 3.107 
-=============================================================================
-Fixes for the awesome Diagnostics mode.
-=============================================================================
-Revision 3.108 
-=============================================================================
-turn off cdebug
-Switch child comm to SOCK_STREAM. Avoid UDP fragment problems.
-=============================================================================
-Revision 3.109 
-=============================================================================
-Fix for "disrupt" and Direct I/O. Needs to be page size and aligned.
-=============================================================================
-Revision 3.110 
-=============================================================================
-Cleanup for -Wall to all source files.
-=============================================================================
-Revision 3.111 
-=============================================================================
-Fixes for UWIN compile warnings.
-=============================================================================
-Revision 3.112 
-=============================================================================
-Fixes for Windows compile warnings. do_compute() proto.
-=============================================================================
-Revision 3.113 
-=============================================================================
-Add definition char *dumb for Solaris to alloc_mem()
-=============================================================================
-Revision 3.114 
-=============================================================================
-Code cleanup for AIX. No async support caused warnings.
-=============================================================================
-Revision 3.115 
-=============================================================================
-Fix for Solaris returning short reads() from socket to child_listen.
-=============================================================================
-Revision 3.116 
-=============================================================================
-Add support for Mac OS X
-=============================================================================
-Revision 3.117 
-=============================================================================
-Add code to set the socket buffer window size. Solaris needs this.
-=============================================================================
-Revision 3.118 
-=============================================================================
-Add O_Direct for AIX
-=============================================================================
-Revision 3.119-> 3.120 
-=============================================================================
-Fix some compiler warnings and implement the -+x option for 
-setting the multiplier used for file and record size incrementing.
-=============================================================================
-Revision 3.121 
-=============================================================================
-Add changes from Debian. Add powerpc and sparc.
-Add changes to fix warning on Irix and Irix64
-=============================================================================
-Revision 3.122 
-=============================================================================
-Bug fix for cluster mode. Need to bzero buffers before sprintf or sscanf
-=============================================================================
-Revision 3.123 
-=============================================================================
-Bug fix for handling all chars that are transported over messaging.
-=============================================================================
-Revision 3.124 
-=============================================================================
-Simplify the child's debug output mechanism.
-=============================================================================
-Revision 3.125 
-=============================================================================
-Fix for stonewall in cluster mode.
-=============================================================================
-Revision 3.126 
-=============================================================================
-Shrink the client_neutral_command structure so it fits in a single
-UDP packet. 
-=============================================================================
-Revision 3.127 
-=============================================================================
-Improve debug code for cluster mode.
-=============================================================================
-Revision 3.128 
-=============================================================================
-Reduce the message traffic due to master's distribution of STOP. Only 
-one STOP distribution is needed. More can lead to socket buffer overflows.
-=============================================================================
-Revision 3.129 
-=============================================================================
-Bzero structures on the stack before using. No problem seen but it
-is a possible hole.
-=============================================================================
-Revision 3.130 
-=============================================================================
-Add error checking for the client file contents.
-=============================================================================
-Revision 3.131 
-=============================================================================
-Use prealloc() for HP-UX to create file for use with mmap.
-=============================================================================
-Revision 3.132 
-=============================================================================
-Add random mix mode.
-=============================================================================
-Revision 3.133 
-=============================================================================
-Make a better 32 bit random offset from calling rand()<<16||rand()
-=============================================================================
-Revision 3.134 
-=============================================================================
-Add -+p percentage read option.
-=============================================================================
-Revision 3.135 
-=============================================================================
-Improve the mixed mode distribution algorithm.
-=============================================================================
-Revision 3.136 
-=============================================================================
-Fix auto bug introduced by mixed mode testing.
-Introduce -+r for O_RSYNC.
-=============================================================================
-Revision 3.137 
-=============================================================================
-Code cleanup for some warnings on IA-64 systems.
-=============================================================================
-Revision 3.138 
-=============================================================================
-Fixes for FreeBSD
-=============================================================================
-Revision 3.139 
-=============================================================================
-Add support for multiple -r and -s options.
-=============================================================================
-Revision 3.140 
-=============================================================================
-Code cleanup for non-ansi builds
-Add target build to output.
-=============================================================================
-Revision 3.141 
-=============================================================================
-Add speed check code.
-=============================================================================
-Revision 3.142 
-=============================================================================
-Increase maximum threads/procs to 256
-=============================================================================
-Revision 3.143 
-=============================================================================
-Add contribs and -+t to help splash screen.
-=============================================================================
-Revision 3.144 
-=============================================================================
-Bug fix for Redhat.
-=============================================================================
-Revision 3.145 
-=============================================================================
-Bug fix for when user used -l but failed to use -u too.
-=============================================================================
-Revision 3.146 
-=============================================================================
-Add void to speed_main() for non-ansi compiles.
-=============================================================================
-Revision 3.147 
-=============================================================================
-Add "Test running" So users will know the test is running
-and not to hit control 'c' too soon.
-Bug fix in libbif.c do_float()
-=============================================================================
-Revision 3.148 
-=============================================================================
-Turn off some child debug code.
-=============================================================================
-Revision 3.149 
-=============================================================================
-Disable fread and fwrite testing if mmap or async is in use.
-=============================================================================
-Revision 3.150 
-=============================================================================
-Add pread/pwrite to Linux
-=============================================================================
-Revision 3.151 
-=============================================================================
-Handle -EB
-=============================================================================
-Revision 3.152 
-=============================================================================
-Add pread/pwrite throughput testing
-=============================================================================
-Revision 3.153 
-=============================================================================
-Changed second parameter to mmap() to be size_t. AIX needs this.
-=============================================================================
-Revision 3.154 
-=============================================================================
-Add support for madvise().
-=============================================================================
-Revision 3.155 
-=============================================================================
-Code cleanup.
-=============================================================================
-Revision 3.156 
-=============================================================================
-Fixes for -w -t -R from Veritas
-=============================================================================
-Revision 3.157 
-=============================================================================
-Make madvise() go away for windows. 
-=============================================================================
-Revision 3.158 
-=============================================================================
-Permit smaller values for -n and -g
-=============================================================================
-Revision 3.159 
-=============================================================================
-Make initial write in initfile() a page size request.
-=============================================================================
-Revision 3.160 
-=============================================================================
-Stop test if file can not be written.
-=============================================================================
-Revision 3.161 
-=============================================================================
-Special handling for mmap of a file that is opened (O_DIRECT)
-=============================================================================
-Revision 3.162 
-=============================================================================
-Fixup for systems that do not have O_DIRECT.
-=============================================================================
-Revision 3.163 
-=============================================================================
-Simplify the prototype for do_compute()
-=============================================================================
-Revision 3.164 
-=============================================================================
-Zero compute_val inside of loops.
-=============================================================================
-Revision 3.165 
-=============================================================================
-Add support for O_DIRECT for IRIX and IRIX64
-=============================================================================
-Revision 3.166 
-=============================================================================
-Improve macros and add prototypes.
-=============================================================================
-Revision 3.167 
-=============================================================================
-Improve resolution of get_resolution().
-=============================================================================
-Revision 3.168 
-=============================================================================
-Changes to support RedHat 9.0.
-=============================================================================
-Revision 3.169 
-=============================================================================
-Special handling of NAME for broken frontend in Cygwin/Windows env.
-=============================================================================
-Revision 3.170 
-=============================================================================
-Add support for the CrayX1
-=============================================================================
-Revision 3.171 
-=============================================================================
-Remove reference to PAGE_SIZE for linux. This causes problems
-with SuSe 8.
-=============================================================================
-Revision 3.172 
-=============================================================================
-Fixup for SCO build.
-=============================================================================
-Revision 3.173 
-=============================================================================
-Add -DHAVE_PREAD for Solaris8-64 target.
-=============================================================================
-Revision 3.174 
-=============================================================================
-Code cleanup for Linux
-=============================================================================
-Revision 3.177 
-=============================================================================
-Improve -+d so that each byte is more unique.
-Improve byte level validation.
-=============================================================================
-Revision 3.178 
-=============================================================================
-Provide byte level error detection with Found char and Expecting Char in
-  -+d mode.
-=============================================================================
-Revision 3.179 
-=============================================================================
-Improve speed of -+d without losing uniqueness of bytes.
-=============================================================================
-Revision 3.180 
-=============================================================================
-Fix so that Windows can use multiple processes. Needed mmap like SCO.
-=============================================================================
-Revision 3.181 
-=============================================================================
-Use malloc() instead of mmap() for threads memory, instead of mmap.
-=============================================================================
-Revision 3.182 
-=============================================================================
-Make CPU utilization use doubles everywhere.
-=============================================================================
-Revision 3.183 
-=============================================================================
-Add support for CPU utilization while in distributed mode.
-=============================================================================
-Revision 3.184 
-=============================================================================
-Make all times relative so multi node can do CPU usage.
-=============================================================================
-Revision 3.185 
-=============================================================================
-Remove unused variables.
-=============================================================================
-Revision 3.186 
-=============================================================================
-Add -+n option to disable re-testing.
-=============================================================================
-Revision 3.187 
-=============================================================================
-Fixup -+n for throughput mode.
-=============================================================================
-Revision 3.188 
-=============================================================================
-Fix Excel output when -+n is used.
-=============================================================================
-Revision 3.189 
-=============================================================================
-Add support for the IBM S390 running Linux.
-=============================================================================
-Revision 3.190 
-=============================================================================
-Cleanup naming conventions for the S390 and fixup a #define.
-=============================================================================
-Revision 3.191 
-=============================================================================
-Add 64 bit compiles for s390x
-Move BIG_ENDIAN to ZBIG_ENDIAN to avoid header conflicts.
-=============================================================================
-Revision 3.192 
-=============================================================================
-Make random offsets always based on 48 bit random values.
-=============================================================================
-Revision 3.193 
-=============================================================================
-Addition for make random offsets always based on 48 bit random values.
-=============================================================================
-Revision 3.194 
-=============================================================================
-Make rands long longs.
-=============================================================================
-Revision 3.195 
-=============================================================================
-Bug fix for 48 bit rands in bsd4_2 and Windows.
-=============================================================================
-Revision 3.196 
-=============================================================================
-Make big_rand a long long.
-=============================================================================
-Revision 3.197
-=============================================================================
-Inject Erik's changes for Multi-client Windows.
-=============================================================================
-Revision 3.198
-=============================================================================
-Change proto version due to changes in Windows -+m support.
-Add Eric to the contributors list.
-=============================================================================
-Revision 3.199
-=============================================================================
-Add more Windows support.
-=============================================================================
-Revision 3.200
-=============================================================================
-Spelling error.
-=============================================================================
-Revision 3.201
-=============================================================================
-Bug fixes from Erik H.
-=============================================================================
-Revision 3.202
-=============================================================================
-Reduce usage of shared memory.
-=============================================================================
-Revision 3.203
-=============================================================================
-Eliminate STUPID warning from the silly compiler.
-=============================================================================
-Revision 3.204
-=============================================================================
-Changes to remove warnings on BSD. Thanks to Christian Weisgerber
-=============================================================================
-Revision 3.205
-=============================================================================
-Support for the AMD64
-=============================================================================
-Revision 3.206
-=============================================================================
-Add -+k for constant aggregate data set size in throughput mode.
-=============================================================================
-Revision 3.207
-=============================================================================
-Add pread support for the TRU64 target. Department of Defense in Canada.
-Add -+q for delay in seconds between tests.
-=============================================================================
-Revision 3.208
-=============================================================================
-Move variable up, GCC on Solaris was getting a bogus parse error
-=============================================================================
-Revision 3.209
-=============================================================================
-Add support for -+D (O_DSYNC) mode testing.
-=============================================================================
-Revision 3.210
-=============================================================================
-Make O_DSYNC conditional.
-=============================================================================
-Revision 3.211
-=============================================================================
-Add telemetry support for pread/pwrite
-=============================================================================
-Revision 3.212
-=============================================================================
-Add record locking
-Add single file, file sharing.
-=============================================================================
-Revision 3.213
-=============================================================================
-Enhance fill/verify (diag mode) for shared file.
-=============================================================================
-Revision 3.214
-=============================================================================
-Remove warnings.
-=============================================================================
-Revision 3.215
-=============================================================================
-Add prototype for mylockr()
-=============================================================================
-Revision 3.216
-=============================================================================
-Fix prototype for mylockr
-=============================================================================
-Revision 3.217
-=============================================================================
-Enable options for Windows systems.
-=============================================================================
-Revision 3.218
-=============================================================================
-Add label to Excel spreadsheet that describes the rows and columns.
-Add support for Solaris64 with VxFS.
-Add support for Linux-arm
-=============================================================================
-Revision 3.219
-=============================================================================
-Add sleep to permit child to get connection up before master does connect.
-=============================================================================
-Revision 3.220
-=============================================================================
-Improve master connect to child, without delays.
-=============================================================================
-Revision 3.221
-=============================================================================
-Add -+B Mixed sequential testing. BlueArc request.
-=============================================================================
-Revision 3.222
-=============================================================================
-Workaround for bug in Cygwin's sscanf
-=============================================================================
-Revision 3.223
-=============================================================================
-Add transfer size to the output from -Q
-=============================================================================
-Revision 3.224
-=============================================================================
-Work around for TCP_WAIT in Windows.
-=============================================================================
-Revision 3.225
-=============================================================================
-Fix for broken rsh on Windows.
-=============================================================================
-Revision 3.226
-=============================================================================
-Workaround for gcc 3.4. From the folks at Gentoo.org.
-=============================================================================
-Revision 3.227
-=============================================================================
-Enable -+m and telemetry files.
-=============================================================================
-Revision 3.228
-=============================================================================
-Make more unique file names for mmap files.
-=============================================================================
-Revision 3.229
-=============================================================================
-Add -+T time stamps.
-=============================================================================
-Revision 3.230
-=============================================================================
-Bug fix for -m and validation code.
-=============================================================================
-Revision 3.231
-=============================================================================
-Add a space to the throughput output dump.
-=============================================================================
-Revision 3.232
-=============================================================================
-Add another space to the throughput output dump.
-=============================================================================
-Revision 3.233
-=============================================================================
-Enable shared file with no locking
-=============================================================================
-Revision 3.234
-=============================================================================
-Add sanity check to validate that open(name, O_CREAT | O_WRONLY | O_TRUNC, 0)
-does work correctly. This is an NFS client test that
-detects if the NFS server's local filesystem is broken and
-fails to support the sequence above correctly. 
-=============================================================================
-Revision 3.235
-=============================================================================
-add a close(fd) to the sanity test.
-=============================================================================
-Revision 3.237
-=============================================================================
-Transport the -o flag to remote clients.
-=============================================================================
-Revision 3.238
-=============================================================================
-Fix hang when using HP-UX master, Linux client, ssh buildup.
-=============================================================================
-Revision 3.239
-=============================================================================
-Add -+h hostname. Permits one to manually set the hostname. For systems
-with multiple names/NICs.
-=============================================================================
-Revision 3.241
-=============================================================================
-Add -+h, set hostname, and fix Solaris hang.
-=============================================================================
-Revision 3.242
-=============================================================================
-Remove the side effect of no-rereads when using -w. Now use -+n for
-consistancy.
-=============================================================================
-Revision 3.243
-=============================================================================
-Bug fix for -+k option.
-=============================================================================
-Revision 3.246
-=============================================================================
-Add the -+U for WIN32 API calls .. Unbuffered I/O. Sony studios.
-=============================================================================
-Revision 3.247
-=============================================================================
-Add support for -+U with -K (WIN32API calls + Jitter)
-=============================================================================
-Revision 3.248
-=============================================================================
-Bug fix. -J with -+m not passing compute delay correctly.
-=============================================================================
-Revision 3.249
-=============================================================================
-Add support for -i 8 when used with -+B (sequential mix)
-=============================================================================
-Revision 3.250
-=============================================================================
-Change the default pattern. Samba is trying to cheat by 
-special casing IOZONE.tmp, and the pattern of 0xA5.
-=============================================================================
-Revision 3.251
-=============================================================================
-Make the default pattern random, and based on Iozone version.
-This is to prevent the hack from Richard Sharpe (in Samba)
-from special casing Iozone, and lying to the user.
-=============================================================================
-Revision 3.252
-=============================================================================
-bug fix in pattern gen.
-=============================================================================
-Revision 3.253
-=============================================================================
-Add -+Z  old data set mode.
-Add -+X  constant data for short circuit testing only.
-=============================================================================
-Revision 3.254
-=============================================================================
- Multi-node changes for new options. (-+Z and -+X)
-=============================================================================
-Revision 3.255
-=============================================================================
-Add -+K flag for Sony.
-=============================================================================
-Revision 3.256
-=============================================================================
-Move -+K outside of Windows only.
-=============================================================================
-Revision 3.257
-=============================================================================
-Simplify percentage calculation
-=============================================================================
-Revision 3.258
-=============================================================================
-Add error checking for -f and -F in the wrong modes.
-=============================================================================
-Revision 3.259
-=============================================================================
-Bug fix for pbuffer allocation on remote clients.
-=============================================================================
-Revision 3.260
-=============================================================================
-Check for max_rec_size when using ranges. -r -r -r
-=============================================================================
-Revision 3.261
-=============================================================================
-Fix for Debian user bug. -r 1m -n 1m -g 2m gave bogus error.
-=============================================================================
-Revision 3.262
-=============================================================================
-Bug fix for -k used in conjunction with -t and content validation.
-=============================================================================
-Revision 3.263
-=============================================================================
-Bug fix for -k used in conjunction with -t and content validation.
-=============================================================================
-Revision 3.264
-=============================================================================
-Add DragonFly target.
-=============================================================================
-Revision 3.265
-=============================================================================
-Put PER_VECTOR_OFFSET in for HP-UX
-=============================================================================
-Revision 3.266
-=============================================================================
-Fix compiler warning messages
-=============================================================================
-Revision 3.267
-=============================================================================
-Enforce minimum file size of page_size
-=============================================================================
-Revision 3.268
-=============================================================================
-Minor fixes.
-=============================================================================
-Revision 3.269
-=============================================================================
-Check fsync and close for errors.
-=============================================================================
-Revision 3.270
-=============================================================================
-Adding support for testing block devices. Will be done is phases. This is 
-phase 1. (Single threaded mode only)
-=============================================================================
-Revision 3.271
-=============================================================================
-Adding 4 token support to client_list. Each entry may now contain 4 tokens
-and the new one is the absolute path to the temp file for testing.
-=============================================================================
-Revision 3.272
-Editorial change.
-=============================================================================
-Revision 3.273
-Add support for external monitor start & stop for throughput tests.
-IMON_START and IMON_STOP environmental variables used.
-=============================================================================
-Revision 3.274
-=============================================================================
-minor change.
-=============================================================================
-Revision 3.275
-Bug fix for systems without O_DIRECT. Fall through in switch statement.
-=============================================================================
-Revision 3.276
-Fix for -c -t over NFS and initial writer close() when told by another to stop
-=============================================================================
-Revision 3.277
-Add Benny Halevy to contributors list.
-=============================================================================
-Revision 3.278
-Fix for Cygwin environment.
-=============================================================================
-Revision 3.279
-Code cleanup, and add arg to external trigger.
-=============================================================================
-Revision 3.280
-Code fixes for macosx
-=============================================================================
-=============================================================================
-Revision 3.281
-Add support for building with Sun's Studio 11 compiler
-=============================================================================
-Revision 3.283
-Bug fix for fread/fwrite with > 2Gig files.
-=============================================================================
-Revision 3.287
-Add O_DIRECT for Windows
-=============================================================================
-Revision 3.288
-Add -+w dedup testing mode.
-=============================================================================
-Revision 3.289
-Make remaining non-dedup data unique.
-=============================================================================
-Revision 3.290
-Make non-dedupable more unique.
-=============================================================================
-Revision 3.291
-Bug fix for non-dedup.
-=============================================================================
-Revision 3.292
-Make random offsets unique, using Knuth shuffle.
-=============================================================================
-Revision 3.292
-free memory used for random offset uniqueness.
-=============================================================================
-Revision 3.294
-Make unique/random offsets 64bits.
-=============================================================================
-Revision 3.295
-Add fallback for random/unique.
-=============================================================================
-Revision 3.296
-Make non-dedup region more unique
-=============================================================================
-Revision 3.297
-Add -+y ## to set percentage of interior dedup.
-=============================================================================
-Revision 3.298
-Add -+y ## to set percentage of interior dedup.
-=============================================================================
-Revision 3.299
-Bug fixes for -+w and -+y
-=============================================================================
-Revision 3.300
-Minor fix for dedup
-=============================================================================
-Revision 3.302
-Adding -+C to set percent of dedupable within a file.
-=============================================================================
-Revision 3.303
-bug fix
-=============================================================================
-Revision 3.304
-Add solaris to read sync O_RSYNC
-=============================================================================
-Revision 3.305
-Add space to avoid field output touching each other.
-=============================================================================
-Revision 3.306
-Add check for config file exceeding MAXSTREAMS.
-=============================================================================
-Revision 3.307
-Add new contributor's name.
-=============================================================================
-Revision 3.308
-Fix type-oh
-=============================================================================
-Revision 3.309
-Bug fix. rewrite_rec needed to fill entire buffer, or later stride read will
-fail.
-=============================================================================
-Revision 3.310
-=============================================================================
-Add ability for remote clients to return errors to the master and
-have the master display on output.
-=============================================================================
-Revision 3.311
-=============================================================================
-fix double reporting of client errors 
-=============================================================================
-Revision 3.312
-=============================================================================
-Eliminate extra file descriptor in fwrite test.
-=============================================================================
-Revision 3.312
-=============================================================================
-bug fix for barray allocation in -T mode
-=============================================================================
-Revision 3.313
-Revision 3.314
-Revision 3.315
-=============================================================================
-Changes from Debian: Retry umount, add fileop for linux-sparc, and
-fix column width in fileop for faster boxes.
-=============================================================================
-Revision 3.316
-Add O_DIRECT support to FreeBSD
-=============================================================================
-Revision 3.317
-Fix for defines in FreeBSD
-=============================================================================
-Revision 3.318
-Add IMON_SYNC to enable monitor scripts to be run sync.
-=============================================================================
-Revision 3.319
-Add directio() for Solaris
-=============================================================================
-Revision 3.320
-Add fixes for unresolved references in directio() for Solaris
-=============================================================================
-Revision 3.321
-Fix type oh.
-=============================================================================
-Revision 3.322
-Fix c++ style comment back to 'C' style comment.
-=============================================================================
-Revision 3.323
-Bug fix for check_filenames and large files
-=============================================================================
-Revision 3.324
-Replace tripple rand() calls with 64 bit Mersene twister.
-=============================================================================
-Revision 3.325
-Add read-only, external file, with no-verify. -+E
-=============================================================================
-Revision 3.325
-Permit -+E on dedup files.
-=============================================================================
-Revision 3.327
-Permit -+E on random read only testing, on existing file.
-=============================================================================
-Revision 3.328
-Add passing master listener's port to remote children if it is not
-HOST_LIST_PORT
-=============================================================================
-Revision 3.329
-Adding Dave Boone's notruncate option -+N
-=============================================================================
-Revision 3.330
-Bug fix for Dave's code.
-=============================================================================
-Revision 3.331
-Add multi -t ops. Fabrice 
-=============================================================================
-Revision 3.332
-Added Li Qin's multi dedup set support. -+S #
-=============================================================================
-Revision 3.333
-Bug fix for -+S dedup_mseed needs to be an integer
-=============================================================================
-Revision 3.334
-Make -+S generate more uniqueness
-=============================================================================
-Revision 3.335
-Make -+S generate more uniqueness
-=============================================================================
-Revision 3.336
-Make -+S generate more uniqueness
-=============================================================================
-Revision 3.337
-Bug fix for -+S
-=============================================================================
-Revision 3.338
-Make umount/remount more robust, in the face of server errors.
-=============================================================================
-Revision 3.339
-Improve the help string for the -+S option.
-=============================================================================
-Revision 3.340
-Add new contributor name.
-=============================================================================
-Revision 3.342
-Add support for the programmable interdimensional timer.
-=============================================================================
-Revision 3.343
-Bug fix for PIT on remote clients.
-=============================================================================
-Revision 3.344
-Bug fix for PIT on remote clients.
-=============================================================================
-Revision 3.345
-Have children re-acquire get_resolution.
-=============================================================================
-Revision 3.346
-Bug fix for t_range addition.
-=============================================================================
-Revision 3.347
-Get rid of a warning. ( An invalid warning, but none the less )
-=============================================================================
-Revision 3.348
-Add more words to the usage warnings and license 
-=============================================================================
-Revision 3.349
-Remove Ascii dependency for IBM's Z/OS that speaks EBCDIC.
-=============================================================================
-Revision 3.353
-Add support for SUA
-=============================================================================
-Revision 3.354
-Remove Sanity check so that SMB on Windows, under SUA, works
-=============================================================================
-Revision 3.355
-Cache the getaddrinfo call. 
-=============================================================================
-Revision 3.356
-delete optimization.. bad...Cache the getaddrinfo call. 
-=============================================================================
-Revision 3.358
-Change pit to use unsigned long longs
-=============================================================================
-Revision 3.359
-Add Linux processor affinity
-=============================================================================
-Revision 3.360
-Remove UDP usage
-=============================================================================
-Revision 3.361
-Increment protocol_version to catch incompat versions.
-=============================================================================
-Revision 3.362
-Fixup for new include needed by Solaris10
-=============================================================================
-Revision 3.363
-Patch for Mac errno
-=============================================================================
-Revision 3.364
-Patch for Mac printf's
-=============================================================================
-Revision 3.365
-Fix Josh's introduction of new Linux warnings.
-=============================================================================
-Revision 3.366
-Take sleep(1) out put path, deal with it in error/retry path
-=============================================================================
-Revision 3.367
-Add -+z latency histogram logging.
-=============================================================================
-Revision 3.368
-Format change for the -+z latency histogram logging.
-=============================================================================
-Revision 3.369
-Added -+O Op_rate control.
-=============================================================================
-Revision 3.370
-Close race condition with master closing socket to child async reader
-=============================================================================
-Revision 3.371
-Add "mygen" generation to the remote children protocol.
-This prevents zombies from coming back to life and killing future masters.
-=============================================================================
-Revision 3.372
-Set Listen(s,100) to Listen(s,MAXSTREAMS)
-=============================================================================
-Revision 3.373
-Move lable "again" to outside of cdebug.
-=============================================================================
-Revision 3.374
-More fixes for busted crap in Solaris !!!
-=============================================================================
-Revision 3.376
-AIX update. They now have errno.h
-=============================================================================
-Revision 3.377
-Need errno.h for FreeBSD
-=============================================================================
-Revision 3.379
-Need to include errno.h for Cygwin
-=============================================================================
-Revision 3.381
-Add SO_LINGER for master_listen and child_listen, so that wind-blows
-will work like all other systems on the planet.
-=============================================================================
-Revision 3.382
-Fix for linger addition
-=============================================================================
-Revision 3.383
-Fix for linger addition
-=============================================================================
-Revision 3.384
-Fix for linger addition
-=============================================================================
-Revision 3.385
-Make linger for all
-=============================================================================
-Revision 3.387
-Change sleep() calls, that help connect() to nanosleep() calls.
-=============================================================================
-Revision 3.388
-Fixup remainder for nanosleep()
-=============================================================================
-Revision 3.389
-Fixup remainder for nanosleep()
-=============================================================================
-Revision 3.390
-Add code for pread/pwrite from Ben England (Redhat)
-=============================================================================
-Revision 3.391
-Add code for MDEBUG and CDEBUG from Bob England (Redhat)
-=============================================================================
-Revision 3.392
-Add code for building HPUX. Errno.h
-=============================================================================
-Revision 3.393
-Fixes for Windows (nanosleep doesn't always work )
-=============================================================================
-Revision 3.394
-Fixes for preadv and pwritev from RedHat (Ben Englanc)
-=============================================================================
-Revision 3.395
-Add warnings for default switch cases, and exit with value for unknowns.
-=============================================================================
-Revision 3.396
-Fix warnings from RedHat patches
-=============================================================================
-Revision 3.397
-Bug fix for getopt default case, with bad parameter handed in.
-=============================================================================
-Revision 3.398
-Adding thread_read_test and thread_write_test.
-=============================================================================
diff --git a/src/components/appio/tests/iozone/Generate_Graphs b/src/components/appio/tests/iozone/Generate_Graphs
deleted file mode 100755
index 7c14a9a14..000000000
--- a/src/components/appio/tests/iozone/Generate_Graphs
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# This script will create the Iozone graphs using
-# gnuplot. 
-#
-#
-#
-# ------------------------------------------------
-# YOU MUST PROVIDE A FILE NAME FOR IT TO PROCESS.
-# This filename is the name of the file where you 
-# sent Iozone's output.
-# ------------------------------------------------
-
-# Generate data base for all of the operation types.
-
-./gengnuplot.sh $1 write
-./gengnuplot.sh $1 rewrite
-./gengnuplot.sh $1 read
-./gengnuplot.sh $1 reread
-./gengnuplot.sh $1 randread
-./gengnuplot.sh $1 randwrite
-./gengnuplot.sh $1 bkwdread
-./gengnuplot.sh $1 recrewrite
-./gengnuplot.sh $1 strideread
-./gengnuplot.sh $1 fwrite
-./gengnuplot.sh $1 frewrite
-./gengnuplot.sh $1 fread
-./gengnuplot.sh $1 freread
-
-# Produce graphs and postscript results.
-gnuplot gnu3d.dem
-
-
diff --git a/src/components/appio/tests/iozone/Gnuplot.txt b/src/components/appio/tests/iozone/Gnuplot.txt
deleted file mode 100644
index c62e08e86..000000000
--- a/src/components/appio/tests/iozone/Gnuplot.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-The script Generate_Graphs will create the 3D surface plots
-and display them.  It will also produce postscript outputs
-for each test and leave them in their respective sub-directory.
-
-It processes the output from an Iozone run. The output from
-Iozone that it is expecting is the text output from
-the iozone default behavior. (iozone -a, or iozone -az)
-
-How to produce graphs:
-
-   Generate_Graphs iozone.out
-
-The gen_graphs script will:
-1. Create the databases for each type of operation 
-   and then processes them with Gnuplot.
-2. It will display each result on the X11 screen, and
-   also save a copy in postscript in the test sub-directory.
-
-
-Thanks to Yves Rougy for providing the nifty scripts to help
-with the plots.
-
-
diff --git a/src/components/appio/tests/iozone/client_list b/src/components/appio/tests/iozone/client_list
deleted file mode 100644
index c3f043bec..000000000
--- a/src/components/appio/tests/iozone/client_list
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Lines that start with # in column 0 are comments.
-#
-# There are now two formats supported.
-# Format:  3 fields, space delimited.
-# Format:  4 fields, space delimited.
-#
-# Format:  3 fields, space delimited.
-#   client_name  working_dir_on_client  path_to_iozone_on_client
-# Format:  4 fields, space delimited.
-#  client_name  working_dir_on_client path_to_iozone_on_client path_to_testfile
-#
-# Example: With two clients  (format 3 fields)
-#
-# client1  /home/user/tmp /home/user/tmp/iozone
-# client2  /home/user/tmp /home/user/tmp/iozone
-#
-#
-# Example: With two copies of Iozone on each of the two clients 
-# (format 3 fields)
-#
-# client1  /home/user/tmp /home/user/tmp/iozone
-# client1  /home/user/tmp /home/user/tmp/iozone
-# client2  /home/user/tmp /home/user/tmp/iozone
-# client2  /home/user/tmp /home/user/tmp/iozone
-#
-# Example: With two clients (format 4 fields)
-# client1  /home/user/tmp /home/user/tmp/iozone /tmp/foo1
-# client2  /home/user/tmp /home/user/tmp/iozone /tmp/foo2
-#
-# Example: With two copies of Iozone on each of the two clients 
-# (format 4 fields)
-# client1  /home/user/tmp /home/user/tmp/iozone /tmp/foo1
-# client1  /home/user/tmp /home/user/tmp/iozone /tmp/foo2
-# client2  /home/user/tmp /home/user/tmp/iozone /tmp/foo3
-# client2  /home/user/tmp /home/user/tmp/iozone /tmp/foo4
diff --git a/src/components/appio/tests/iozone/fileop.c b/src/components/appio/tests/iozone/fileop.c
deleted file mode 100644
index 588a2d279..000000000
--- a/src/components/appio/tests/iozone/fileop.c
+++ /dev/null
@@ -1,1389 +0,0 @@
-/*
- * Author: Don Capps
- * 3/13/2006
- *
- *       Author: Don Capps (capps@iozone.org)
- *               7417 Crenshaw
- *               Plano, TX 75025
- *
- *  Copyright 2006, 2007, 2008, 2009   Don Capps.
- *
- *  License to freely use and distribute this software is hereby granted 
- *  by the author, subject to the condition that this copyright notice 
- *  remains intact.  The author retains the exclusive right to publish 
- *  derivative works based on this work, including, but not limited to,
- *  revised versions of this work",
- *
- *
-  fileop [-f X ]|[-l # -u #] [-s Y] [-e] [-b] [-w] [-d <dir>] [-t] [-v] [-h]
-       -f #      Force factor. X^3 files will be created and removed.
-       -l #      Lower limit on the value of the Force factor.
-       -u #      Upper limit on the value of the Force factor.
-       -s #      Optional. Sets filesize for the create/write. May use suffix 'K' or 'M'.
-       -e        Excel importable format.
-       -b        Output best case.
-       -w        Output worst case.
-       -d <dir>  Specify starting directory.
-       -U <dir>  Mount point to remount between tests.
-       -t        Verbose output option.
-       -v        Version information.
-       -h        Help text.
- *
- * X is a force factor. The total number of files will
- *   be X * X * X   ( X ^ 3 )
- *   The structure of the file tree is:
- *   X number of Level 1 directories, with X number of
- *   level 2 directories, with X number of files in each
- *   of the level 2 directories.
- *
- *   Example:  fileop 2
- *
- *           dir_1                        dir_2
- *          /     \                      /     \
- *    sdir_1       sdir_2          sdir_1       sdir_2
- *    /     \     /     \          /     \      /     \
- * file_1 file_2 file_1 file_2   file_1 file_2 file_1 file_2
- *
- * Each file will be created, and then 1 byte is written to the file.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <string.h>
-
-#include <limits.h>
-
-#if defined(Windows)
-#include <Windows.h>
-#endif
-#if !defined(PATH_MAX)
-#define PATH_MAX 255
-#endif
-
-#if defined(_SUA_)
-extern char *optarg;
-extern char *opterr;
-int fsync();
-int getopt();
-#endif
-int junk, *junkp;
-int x,excel;
-int verbose = 0;
-int sz = 1;
-char *mbuffer;
-int incr = 1;
-#define _STAT_CREATE 0
-#define _STAT_WRITE 1
-#define _STAT_CLOSE 2
-#define _STAT_LINK 3
-#define _STAT_UNLINK 4
-#define _STAT_DELETE 5
-#define _STAT_STAT 6
-#define _STAT_ACCESS 7
-#define _STAT_CHMOD 8
-#define _STAT_READDIR 9
-#define _STAT_DIR_CREATE 10
-#define _STAT_DIR_DELETE 11
-#define _STAT_READ 12
-#define _STAT_OPEN 13
-#define _STAT_DIR_TRAVERSE 14
-#define _NUM_STATS 15
-struct stat_struct {
-	double starttime;
-	double endtime;
-	double speed;
-	double best;
-	double worst;
-	double dummy;
-	double total_time;
-	double dummy1;
-	long long counter;
-} volatile stats[_NUM_STATS];
-
-
-static double time_so_far(void);
-void dir_create(int);
-void dir_traverse(int);
-void dir_delete(int);
-void file_create(int);
-void file_stat(int);
-void file_access(int);
-void file_chmod(int);
-void file_readdir(int);
-void file_delete(int);
-void file_link(int);
-void file_unlink(int);
-void file_read(int);
-void splash(void);
-void usage(void);
-void bzero();
-void clear_stats();
-int validate(char *, int , char );
-
-#define THISVERSION "        $Revision$"
-/*#define NULL 0*/
-
-char version[]=THISVERSION;
-char thedir[PATH_MAX]="."; /* Default is to use the current directory */
-const char *mountname=NULL; /* Default is not to unmount anything between the tests */
-
-int cret;
-int lower, upper,range;
-int i;
-int best, worst;
-int dirlen;
-
-/************************************************************************/
-/* Routine to purge the buffer cache by unmounting drive.		*/
-/************************************************************************/
-void purge_buffer_cache()
-{
-	if (!mountname)
-		return;
-
-	char cwd[PATH_MAX];
-	char command[1024];
-	int ret,i;
-
-	junkp=(int *)getcwd(cwd, sizeof(cwd));
-	junk=chdir("/");
-	strcpy(command,"umount ");
-	strcat(command, mountname);
-        /*
-           umount might fail if the device is still busy, so
-           retry unmounting several times with increasing delays
-        */
-        for (i = 1; i < 10; ++i) {
-               ret = system(command);
-               if (ret == 0)
-                       break;
-               sleep(i); /* seconds */
-        }
-	strcpy(command,"mount ");
-	strcat(command, mountname);
-	junk=system(command);
-	junk=chdir(cwd);
-}
-
-int main(int argc, char **argv)
-{
-	if(argc == 1)
-	{
-		usage();
-		exit(1);
-	}
-	while((cret = getopt(argc,argv,"hbwetvf:s:l:u:d:U:i: ")) != EOF){
-		switch(cret){
-                case 'h':
-                        usage();
-                        exit(0);
-                        break;
-                case 'd' :
-                        dirlen=strlen(optarg);
-                        if (optarg[dirlen-1]=='/')
-                          --dirlen;
-                        strncpy(thedir, optarg, dirlen);
-			thedir[dirlen] = 0;
-                        break;
-		case 'U':
-			mountname = optarg;
-			break;
-		case 'i':	/* Increment force by */
-			incr=atoi(optarg);
-			if(incr < 0)
-				incr=1;
-			break;
-		case 'f':	/* Force factor */
-			x=atoi(optarg);
-			if(x < 0)
-				x=1;
-			break;
-		case 's':	/* Size of files */
-                        sz=atoi(optarg);
-                        if(optarg[strlen(optarg)-1]=='k' ||
-                                optarg[strlen(optarg)-1]=='K'){
-                                sz = (1024 * atoi(optarg));
-                        }
-                        if(optarg[strlen(optarg)-1]=='m' ||
-                                optarg[strlen(optarg)-1]=='M'){
-                                sz = (1024 * 1024 * atoi(optarg));
-                        }
-			if(sz < 0)
-				sz=1;
-			break;
-		case 'l':	/* lower force value */
-			lower=atoi(optarg);
-			range=1;
-			if(lower < 0)
-				lower=1;
-			break;
-		case 'v':	/* version */
-			splash();
-			exit(0);
-			break;
-		case 'u':	/* upper force value */
-			upper=atoi(optarg);
-			range=1;
-			if(upper < 0)
-				upper=1;
-			break;
-		case 't':	/* verbose */
-			verbose=1;
-			break;
-		case 'e':	/* Excel */
-			excel=1;
-			break;
-		case 'b':	/* Best */
-			best=1;
-			break;
-		case 'w':	/* Worst */
-			worst=1;
-			break;
-		}
-	}
-	mbuffer=(char *)malloc(sz);
-	memset(mbuffer,'a',sz);
-	if(!excel)
-	  printf("\nFileop:  Working in %s, File size is %d,  Output is in Ops/sec. (A=Avg, B=Best, W=Worst)\n", thedir, sz);
-	if(!verbose)
-	{
-#ifdef Windows
-	   	printf(" .     %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %10s\n",
-       	   	"mkdir","chdir","rmdir","create","open","read","write","close","stat",
-		"access","chmod","readdir","delete"," Total_files");
-#else
-
-	   	printf(" .     %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %10s\n",
-       	   	"mkdir","chdir","rmdir","create","open", "read","write","close","stat",
-		"access","chmod","readdir","link  ","unlink","delete",
-		" Total_files");
-#endif
-	}
-	junk=chdir(thedir); /* change starting point */
-	if(x==0)
-		x=1;
-	if(range==0)
-		lower=upper=x;
-	for(i=lower;i<=upper;i+=incr)
-	{
-		clear_stats();
-		x=i;
-	   /*
-	    * Dir Create test 
-	    */
-	   purge_buffer_cache();
-	   dir_create(x);
-
-	   if(verbose)
-	   {
-	      printf("mkdir:   Dirs = %9lld ",stats[_STAT_DIR_CREATE].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_DIR_CREATE].total_time);
-	      printf("         Avg mkdir(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_DIR_CREATE].counter/stats[_STAT_DIR_CREATE].total_time,
-			stats[_STAT_DIR_CREATE].total_time/stats[_STAT_DIR_CREATE].counter);
-	      printf("         Best mkdir(s)/sec    = %12.2f (%12.9f seconds/op)\n",1/stats[_STAT_DIR_CREATE].best,stats[_STAT_DIR_CREATE].best);
-	      printf("         Worst mkdir(s)/sec   = %12.2f (%12.9f seconds/op)\n\n",1/stats[_STAT_DIR_CREATE].worst,stats[_STAT_DIR_CREATE].worst);
-	   }
-
-	   /*
-	    * Dir Traverse test
-	    */
-	   purge_buffer_cache();
-	   dir_traverse(x);
-
-	   if(verbose)
-	   {
-	      printf("chdir:   Dirs = %9lld ",stats[_STAT_DIR_TRAVERSE].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_DIR_TRAVERSE].total_time);
-	      printf("         Avg chdir(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_DIR_TRAVERSE].counter/stats[_STAT_DIR_TRAVERSE].total_time,
-			stats[_STAT_DIR_TRAVERSE].total_time/stats[_STAT_DIR_TRAVERSE].counter);
-	      printf("         Best chdir(s)/sec    = %12.2f (%12.9f seconds/op)\n",1/stats[_STAT_DIR_TRAVERSE].best,stats[_STAT_DIR_TRAVERSE].best);
-	      printf("         Worst chdir(s)/sec   = %12.2f (%12.9f seconds/op)\n\n",1/stats[_STAT_DIR_TRAVERSE].worst,stats[_STAT_DIR_TRAVERSE].worst);
-	   }
-
-	   /*
-	    * Dir delete test
-	    */
-	   purge_buffer_cache();
-	   dir_delete(x);
-
-	   if(verbose)
-	   {
-	   printf("rmdir:   Dirs = %9lld ",stats[_STAT_DIR_DELETE].counter);
-	   printf("Total Time = %12.9f seconds\n",stats[_STAT_DIR_DELETE].total_time);
-	   printf("         Avg rmdir(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_DIR_DELETE].counter/stats[_STAT_DIR_DELETE].total_time,
-			stats[_STAT_DIR_DELETE].total_time/stats[_STAT_DIR_DELETE].counter);
-	   printf("         Best rmdir(s)/sec    = %12.2f (%12.9f seconds/op)\n",1/stats[_STAT_DIR_DELETE].best,stats[_STAT_DIR_DELETE].best);
-	   printf("         Worst rmdir(s)/sec   = %12.2f (%12.9f seconds/op)\n\n",1/stats[_STAT_DIR_DELETE].worst,stats[_STAT_DIR_DELETE].worst);
-	   }
-
-	   /*
-	    * Create test 
-	    */
-	   purge_buffer_cache();
-	   file_create(x);
-	   if(verbose)
-	   {
-	      printf("create:  Files = %9lld ",stats[_STAT_CREATE].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_CREATE].total_time);
-	      printf("         Avg create(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_CREATE].counter/stats[_STAT_CREATE].total_time,
-			stats[_STAT_CREATE].total_time/stats[_STAT_CREATE].counter);
-	      printf("         Best create(s)/sec   = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_CREATE].best,stats[_STAT_CREATE].best);
-	      printf("         Worst create(s)/sec  = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_CREATE].worst,stats[_STAT_CREATE].worst);
-	      printf("write:   Files = %9lld ",stats[_STAT_WRITE].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_WRITE].total_time);
-	      printf("         Avg write(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_WRITE].counter/stats[_STAT_WRITE].total_time,
-			stats[_STAT_WRITE].total_time/stats[_STAT_WRITE].counter);
-	      printf("         Best write(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_WRITE].best,stats[_STAT_WRITE].best);
-   	      printf("         Worst write(s)/sec   = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_WRITE].worst,stats[_STAT_WRITE].worst);
-	      printf("close:   Files = %9lld ",stats[_STAT_CLOSE].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_CLOSE].total_time);
-	      printf("         Avg close(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_CLOSE].counter/stats[_STAT_CLOSE].total_time,
-			stats[_STAT_CLOSE].total_time/stats[_STAT_CLOSE].counter);
-	      printf("         Best close(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_CLOSE].best,stats[_STAT_CLOSE].best);
-	      printf("         Worst close(s)/sec   = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_CLOSE].worst,stats[_STAT_CLOSE].worst);
-	   }
-
-	   /*
-	    * Stat test 
-	    */
-	   purge_buffer_cache();
-	   file_stat(x);
-
-	   if(verbose)
-	   {
-	      printf("stat:    Files = %9lld ",stats[_STAT_STAT].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_STAT].total_time);
-	      printf("         Avg stat(s)/sec      = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_STAT].counter/stats[_STAT_STAT].total_time,
-			stats[_STAT_STAT].total_time/stats[_STAT_STAT].counter);
-	      printf("         Best stat(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_STAT].best,stats[_STAT_STAT].best);
-	      printf("         Worst stat(s)/sec    = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_STAT].worst,stats[_STAT_STAT].worst);
-	   }
-	   /*
-	    * Read test 
-	    */
-	   purge_buffer_cache();
-	   file_read(x);
-
-	   if(verbose)
-	   {
-	      printf("open:    Files = %9lld ",stats[_STAT_OPEN].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_OPEN].total_time);
-	      printf("         Avg open(s)/sec      = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_OPEN].counter/stats[_STAT_OPEN].total_time,
-			stats[_STAT_OPEN].total_time/stats[_STAT_OPEN].counter);
-	      printf("         Best open(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_OPEN].best,stats[_STAT_OPEN].best);
-	      printf("         Worst open(s)/sec    = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_OPEN].worst,stats[_STAT_OPEN].worst);
-
-	      printf("read:    Files = %9lld ",stats[_STAT_READ].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_READ].total_time);
-	      printf("         Avg read(s)/sec      = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_READ].counter/stats[_STAT_READ].total_time,
-			stats[_STAT_READ].total_time/stats[_STAT_READ].counter);
-	      printf("         Best read(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_READ].best,stats[_STAT_READ].best);
-	      printf("         Worst read(s)/sec    = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_READ].worst,stats[_STAT_READ].worst);
-	   }
-
-	   /*
-	    * Access test 
-	    */
-	   purge_buffer_cache();
-	   file_access(x);
-	   if(verbose)
-	   {
-	      printf("access:  Files = %9lld ",stats[_STAT_ACCESS].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_ACCESS].total_time);
-	      printf("         Avg access(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_ACCESS].counter/stats[_STAT_ACCESS].total_time,
-			stats[_STAT_ACCESS].total_time/stats[_STAT_ACCESS].counter);
-	      printf("         Best access(s)/sec   = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_ACCESS].best,stats[_STAT_ACCESS].best);
-	      printf("         Worst access(s)/sec  = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_ACCESS].worst,stats[_STAT_ACCESS].worst);
-	   }
-	   /*
-	    * Chmod test 
-	    */
-	   purge_buffer_cache();
-	   file_chmod(x);
-
-	   if(verbose)
-	   {
-	      printf("chmod:   Files = %9lld ",stats[_STAT_CHMOD].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_CHMOD].total_time);
-	      printf("         Avg chmod(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_CHMOD].counter/stats[_STAT_CHMOD].total_time,
-			stats[_STAT_CHMOD].total_time/stats[_STAT_CHMOD].counter);
-	      printf("         Best chmod(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_CHMOD].best,stats[_STAT_CHMOD].best);
-	      printf("         Worst chmod(s)/sec   = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_CHMOD].worst,stats[_STAT_CHMOD].worst);
-	   }
-	   /*
-	    * readdir test 
-	    */
-	   purge_buffer_cache();
-	   file_readdir(x);
-
-	   if(verbose)
-	   {
-	      printf("readdir: Files = %9lld ",stats[_STAT_READDIR].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_READDIR].total_time);
-	      printf("         Avg readdir(s)/sec   = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_READDIR].counter/stats[_STAT_READDIR].total_time,
-			stats[_STAT_READDIR].total_time/stats[_STAT_READDIR].counter);
-	      printf("         Best readdir(s)/sec  = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_READDIR].best,stats[_STAT_READDIR].best);
-	      printf("         Worst readdir(s)/sec = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_READDIR].worst,stats[_STAT_READDIR].worst);
-	   }
-#if !defined(Windows)
-	   /*
-	    * link test 
-	    */
-	   purge_buffer_cache();
-	   file_link(x);
-	   if(verbose)
-	   {
-	      printf("link:    Files = %9lld ",stats[_STAT_LINK].counter);
-	      printf("Total Time = %12.9f seconds\n",stats[_STAT_LINK].total_time);
-	      printf("         Avg link(s)/sec      = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_LINK].counter/stats[_STAT_LINK].total_time,
-			stats[_STAT_LINK].total_time/stats[_STAT_LINK].counter);
-	      printf("         Best link(s)/sec     = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_LINK].best,stats[_STAT_LINK].best);
-	      printf("         Worst link(s)/sec    = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_LINK].worst,stats[_STAT_LINK].worst);
-	   }
-	   /*
-	    * unlink test 
-	    */
-	   purge_buffer_cache();
-	   file_unlink(x);
-	   if(verbose)
-	   {
-	      printf("unlink:  Files = %9lld ",stats[_STAT_UNLINK].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_UNLINK].total_time);
-	      printf("         Avg unlink(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_UNLINK].counter/stats[_STAT_UNLINK].total_time,
-			stats[_STAT_UNLINK].total_time/stats[_STAT_UNLINK].counter);
-	      printf("         Best unlink(s)/sec   = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_UNLINK].best,stats[_STAT_UNLINK].best);
-	      printf("         Worst unlink(s)/sec  = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_UNLINK].worst,stats[_STAT_UNLINK].worst);
-	   }
-#endif
-	   /*
-	    * Delete test 
-	    */
-	   purge_buffer_cache();
-	   file_delete(x);
-	   if(verbose)
-	   {
-	      printf("delete:  Files = %9lld ",stats[_STAT_DELETE].counter);
-	      printf("Total Time = %12.9f seconds\n", stats[_STAT_DELETE].total_time);
-	      printf("         Avg delete(s)/sec    = %12.2f (%12.9f seconds/op)\n",
-			stats[_STAT_DELETE].counter/stats[_STAT_DELETE].total_time,
-			stats[_STAT_DELETE].total_time/stats[_STAT_DELETE].counter);
-	      printf("         Best delete(s)/sec   = %12.2f (%12.9f seconds/op)\n",
-			1/stats[_STAT_DELETE].best,stats[_STAT_DELETE].best);
-	      printf("         Worst delete(s)/sec  = %12.2f (%12.9f seconds/op)\n\n",
-			1/stats[_STAT_DELETE].worst,stats[_STAT_DELETE].worst);
-	   }
-	   if(!verbose)
-	   {
-	         printf("%c %4d %7.0f ",'A',x,stats[_STAT_DIR_CREATE].counter/stats[_STAT_DIR_CREATE].total_time);
-	         printf("%7.0f ",stats[_STAT_DIR_TRAVERSE].counter/stats[_STAT_DIR_TRAVERSE].total_time);
-	         printf("%7.0f ",stats[_STAT_DIR_DELETE].counter/stats[_STAT_DIR_DELETE].total_time);
-	         printf("%7.0f ",stats[_STAT_CREATE].counter/stats[_STAT_CREATE].total_time);
-	         printf("%7.0f ",stats[_STAT_OPEN].counter/stats[_STAT_OPEN].total_time);
-	         printf("%7.0f ",stats[_STAT_READ].counter/stats[_STAT_READ].total_time);
-	         printf("%7.0f ",stats[_STAT_WRITE].counter/stats[_STAT_WRITE].total_time);
-	         printf("%7.0f ",stats[_STAT_CLOSE].counter/stats[_STAT_CLOSE].total_time);
-	         printf("%7.0f ",stats[_STAT_STAT].counter/stats[_STAT_STAT].total_time);
-	         printf("%7.0f ",stats[_STAT_ACCESS].counter/stats[_STAT_ACCESS].total_time);
-	         printf("%7.0f ",stats[_STAT_CHMOD].counter/stats[_STAT_CHMOD].total_time);
-	         printf("%7.0f ",stats[_STAT_READDIR].counter/stats[_STAT_READDIR].total_time);
-#ifndef Windows
-	         printf("%7.0f ",stats[_STAT_LINK].counter/stats[_STAT_LINK].total_time);
-	         printf("%7.0f ",stats[_STAT_UNLINK].counter/stats[_STAT_UNLINK].total_time);
-#endif
-	         printf("%7.0f ",stats[_STAT_DELETE].counter/stats[_STAT_DELETE].total_time);
-	         printf("%10d ",x*x*x);
-	         printf("\n");
-  	   	 fflush(stdout);
-
-		if(best)
-		{
-	         printf("%c %4d %7.0f ",'B',x, 1/stats[_STAT_DIR_CREATE].best);
-	         printf("%7.0f ",1/stats[_STAT_DIR_TRAVERSE].best);
-	         printf("%7.0f ",1/stats[_STAT_DIR_DELETE].best);
-	         printf("%7.0f ",1/stats[_STAT_CREATE].best);
-	         printf("%7.0f ",1/stats[_STAT_OPEN].best);
-	         printf("%7.0f ",1/stats[_STAT_READ].best);
-	         printf("%7.0f ",1/stats[_STAT_WRITE].best);
-	         printf("%7.0f ",1/stats[_STAT_CLOSE].best);
-	         printf("%7.0f ",1/stats[_STAT_STAT].best);
-	         printf("%7.0f ",1/stats[_STAT_ACCESS].best);
-	         printf("%7.0f ",1/stats[_STAT_CHMOD].best);
-	         printf("%7.0f ",1/stats[_STAT_READDIR].best);
-#ifndef Windows
-	         printf("%7.0f ",1/stats[_STAT_LINK].best);
-	         printf("%7.0f ",1/stats[_STAT_UNLINK].best);
-#endif
-	         printf("%7.0f ",1/stats[_STAT_DELETE].best);
-	         printf("%10d ",x*x*x);
-		 printf("\n");
-  	   	 fflush(stdout);
-		}
-		if(worst)
-		{
-	         printf("%c %4d %7.0f ",'W',x, 1/stats[_STAT_DIR_CREATE].worst);
-	         printf("%7.0f ",1/stats[_STAT_DIR_TRAVERSE].worst);
-	         printf("%7.0f ",1/stats[_STAT_DIR_DELETE].worst);
-	         printf("%7.0f ",1/stats[_STAT_CREATE].worst);
-	         printf("%7.0f ",1/stats[_STAT_OPEN].worst);
-	         printf("%7.0f ",1/stats[_STAT_READ].worst);
-	         printf("%7.0f ",1/stats[_STAT_WRITE].worst);
-	         printf("%7.0f ",1/stats[_STAT_CLOSE].worst);
-	         printf("%7.0f ",1/stats[_STAT_STAT].worst);
-	         printf("%7.0f ",1/stats[_STAT_ACCESS].worst);
-	         printf("%7.0f ",1/stats[_STAT_CHMOD].worst);
-	         printf("%7.0f ",1/stats[_STAT_READDIR].worst);
-#ifndef Windows
-	         printf("%7.0f ",1/stats[_STAT_LINK].worst);
-	         printf("%7.0f ",1/stats[_STAT_UNLINK].worst);
-#endif
-	         printf("%7.0f ",1/stats[_STAT_DELETE].worst);
-	         printf("%10d ",x*x*x);
-		 printf("\n");
-  	   	 fflush(stdout);
-		}
-	   }
-	}
-	return(0);
-}
-
-void 
-dir_create(int x)
-{
-	int i,j,k;
-	int ret;
-	char buf[100];
-	stats[_STAT_DIR_CREATE].best=(double)99999.9;
-	stats[_STAT_DIR_CREATE].worst=(double)0.00000000;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  stats[_STAT_DIR_CREATE].starttime=time_so_far();
-	  ret=mkdir(buf,0777);
-	  if(ret < 0)
-	  {
-	      printf("Mkdir failed\n");
-	      exit(1);
-	  }
-	  stats[_STAT_DIR_CREATE].endtime=time_so_far();
-	  stats[_STAT_DIR_CREATE].speed=stats[_STAT_DIR_CREATE].endtime-stats[_STAT_DIR_CREATE].starttime;
-	  if(stats[_STAT_DIR_CREATE].speed < (double)0.0)
-		stats[_STAT_DIR_CREATE].speed=(double)0.0;
-	  stats[_STAT_DIR_CREATE].total_time+=stats[_STAT_DIR_CREATE].speed;
-	  stats[_STAT_DIR_CREATE].counter++;
-	  if(stats[_STAT_DIR_CREATE].speed < stats[_STAT_DIR_CREATE].best)
-	 	stats[_STAT_DIR_CREATE].best=stats[_STAT_DIR_CREATE].speed;
-	  if(stats[_STAT_DIR_CREATE].speed > stats[_STAT_DIR_CREATE].worst)
-		 stats[_STAT_DIR_CREATE].worst=stats[_STAT_DIR_CREATE].speed;
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    stats[_STAT_DIR_CREATE].starttime=time_so_far();
-	    ret=mkdir(buf,0777);
-	    if(ret < 0)
-	    {
-	      printf("Mkdir failed\n");
-	      exit(1);
-	    }
-	    stats[_STAT_DIR_CREATE].endtime=time_so_far();
-	    stats[_STAT_DIR_CREATE].speed=stats[_STAT_DIR_CREATE].endtime-stats[_STAT_DIR_CREATE].starttime;
-	    if(stats[_STAT_DIR_CREATE].speed < (double)0.0)
-		stats[_STAT_DIR_CREATE].speed=(double) 0.0;
-	    stats[_STAT_DIR_CREATE].total_time+=stats[_STAT_DIR_CREATE].speed;
-	    stats[_STAT_DIR_CREATE].counter++;
-	    if(stats[_STAT_DIR_CREATE].speed < stats[_STAT_DIR_CREATE].best)
-		 stats[_STAT_DIR_CREATE].best=stats[_STAT_DIR_CREATE].speed;
-	    if(stats[_STAT_DIR_CREATE].speed > stats[_STAT_DIR_CREATE].worst)
-		 stats[_STAT_DIR_CREATE].worst=stats[_STAT_DIR_CREATE].speed;
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_dir_%d_%d_%d",i,j,k);
-	      stats[_STAT_DIR_CREATE].starttime=time_so_far();
-	      ret=mkdir(buf,0777);
-	      if(ret < 0)
-	      {
-	        printf("Mkdir failed\n");
-	        exit(1);
-	      }
-	      stats[_STAT_DIR_CREATE].endtime=time_so_far();
-	      stats[_STAT_DIR_CREATE].speed=stats[_STAT_DIR_CREATE].endtime-stats[_STAT_DIR_CREATE].starttime;
-	      if(stats[_STAT_DIR_CREATE].speed < (double)0.0)
-		stats[_STAT_DIR_CREATE].speed=(double) 0.0;
-	      stats[_STAT_DIR_CREATE].total_time+=stats[_STAT_DIR_CREATE].speed;
-	      stats[_STAT_DIR_CREATE].counter++;
-	      if(stats[_STAT_DIR_CREATE].speed < stats[_STAT_DIR_CREATE].best)
-		 stats[_STAT_DIR_CREATE].best=stats[_STAT_DIR_CREATE].speed;
-	      if(stats[_STAT_DIR_CREATE].speed > stats[_STAT_DIR_CREATE].worst)
-		 stats[_STAT_DIR_CREATE].worst=stats[_STAT_DIR_CREATE].speed;
-	      junk=chdir(buf);
-	      junk=chdir("..");
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void
-dir_traverse(int x)
-{
-	int i,j,k;
-	char buf[100];
-	double time1, time2;
-	stats[_STAT_DIR_TRAVERSE].best=(double)99999.9;
-	stats[_STAT_DIR_TRAVERSE].worst=(double)0.00000000;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  stats[_STAT_DIR_TRAVERSE].starttime=time_so_far();
-	  junk=chdir(buf);
-	  stats[_STAT_DIR_TRAVERSE].endtime=time_so_far();
-	  time1=stats[_STAT_DIR_TRAVERSE].endtime-stats[_STAT_DIR_TRAVERSE].starttime;
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    stats[_STAT_DIR_TRAVERSE].starttime=time_so_far();
-	    junk=chdir(buf);
-	    stats[_STAT_DIR_TRAVERSE].endtime=time_so_far();
-	    time2=stats[_STAT_DIR_TRAVERSE].endtime-stats[_STAT_DIR_TRAVERSE].starttime;
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_dir_%d_%d_%d",i,j,k);
-	      stats[_STAT_DIR_TRAVERSE].starttime=time_so_far();
-	      junk=chdir(buf);
-	      junk=chdir("..");
-	      stats[_STAT_DIR_TRAVERSE].endtime=time_so_far();
-	      stats[_STAT_DIR_TRAVERSE].speed=stats[_STAT_DIR_TRAVERSE].endtime-stats[_STAT_DIR_TRAVERSE].starttime;
-	      if(stats[_STAT_DIR_TRAVERSE].speed < (double)0.0)
-		stats[_STAT_DIR_TRAVERSE].speed=(double) 0.0;
-	      stats[_STAT_DIR_TRAVERSE].total_time+=stats[_STAT_DIR_TRAVERSE].speed;
-	      stats[_STAT_DIR_TRAVERSE].counter++;
-	      if(stats[_STAT_DIR_TRAVERSE].speed < stats[_STAT_DIR_TRAVERSE].best)
-		 stats[_STAT_DIR_TRAVERSE].best=stats[_STAT_DIR_TRAVERSE].speed;
-	      if(stats[_STAT_DIR_TRAVERSE].speed > stats[_STAT_DIR_TRAVERSE].worst)
-		 stats[_STAT_DIR_TRAVERSE].worst=stats[_STAT_DIR_TRAVERSE].speed;
-	    }
-	    stats[_STAT_DIR_TRAVERSE].starttime=time_so_far();
-	    junk=chdir("..");
-	    stats[_STAT_DIR_TRAVERSE].endtime=time_so_far();
-	    stats[_STAT_DIR_TRAVERSE].speed=time2+stats[_STAT_DIR_TRAVERSE].endtime-stats[_STAT_DIR_TRAVERSE].starttime;
-	    if(stats[_STAT_DIR_TRAVERSE].speed < (double)0.0)
-		stats[_STAT_DIR_TRAVERSE].speed=(double) 0.0;
-	    stats[_STAT_DIR_TRAVERSE].total_time+=stats[_STAT_DIR_TRAVERSE].speed;
-	    stats[_STAT_DIR_TRAVERSE].counter++;
-	    if(stats[_STAT_DIR_TRAVERSE].speed < stats[_STAT_DIR_TRAVERSE].best)
-		 stats[_STAT_DIR_TRAVERSE].best=stats[_STAT_DIR_TRAVERSE].speed;
-	    if(stats[_STAT_DIR_TRAVERSE].speed > stats[_STAT_DIR_TRAVERSE].worst)
-		 stats[_STAT_DIR_TRAVERSE].worst=stats[_STAT_DIR_TRAVERSE].speed;
-	  }
-	  stats[_STAT_DIR_TRAVERSE].starttime=time_so_far();
-	  junk=chdir("..");
-	  stats[_STAT_DIR_TRAVERSE].endtime=time_so_far();
-	  stats[_STAT_DIR_TRAVERSE].speed=time1+stats[_STAT_DIR_TRAVERSE].endtime-stats[_STAT_DIR_TRAVERSE].starttime;
-	  if(stats[_STAT_DIR_TRAVERSE].speed < (double)0.0)
-		stats[_STAT_DIR_TRAVERSE].speed=(double)0.0;
-	  stats[_STAT_DIR_TRAVERSE].total_time+=stats[_STAT_DIR_TRAVERSE].speed;
-	  stats[_STAT_DIR_TRAVERSE].counter++;
-	  if(stats[_STAT_DIR_TRAVERSE].speed < stats[_STAT_DIR_TRAVERSE].best)
-	 	stats[_STAT_DIR_TRAVERSE].best=stats[_STAT_DIR_TRAVERSE].speed;
-	  if(stats[_STAT_DIR_TRAVERSE].speed > stats[_STAT_DIR_TRAVERSE].worst)
-		 stats[_STAT_DIR_TRAVERSE].worst=stats[_STAT_DIR_TRAVERSE].speed;
-	}
-}
-
-void 
-file_create(int x)
-{
-	int i,j,k;
-	int fd;
-	int ret;
-	char buf[100];
-	char value;
-	stats[_STAT_CREATE].best=(double)999999.9;
-	stats[_STAT_CREATE].worst=(double)0.0;
-	stats[_STAT_WRITE].best=(double)999999.9;
-	stats[_STAT_WRITE].worst=(double)0.0;
-	stats[_STAT_CLOSE].best=(double)999999.9;
-	stats[_STAT_CLOSE].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  ret=mkdir(buf,0777);
-	  if(ret < 0)
-	  {
-	      printf("Mkdir failed\n");
-	      exit(1);
-	  }
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    ret=mkdir(buf,0777);
-	    if(ret < 0)
-	    {
-	      printf("Mkdir failed\n");
-	      exit(1);
-	    }
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      value=(char) ((i^j^k) & 0xff);
-	      memset(mbuffer,value,sz);
-	      stats[_STAT_CREATE].starttime=time_so_far();
-	      fd=creat(buf,O_RDWR|0600);
-	      if(fd < 0)
-	      {
-	        printf("Create failed\n");
-	        exit(1);
-	      }
-	      stats[_STAT_CREATE].endtime=time_so_far();
-	      stats[_STAT_CREATE].speed=stats[_STAT_CREATE].endtime-stats[_STAT_CREATE].starttime;
-	      if(stats[_STAT_CREATE].speed < (double)0.0)
-		stats[_STAT_CREATE].speed=(double)0.0;
-	      stats[_STAT_CREATE].total_time+=stats[_STAT_CREATE].speed;
-	      stats[_STAT_CREATE].counter++;
-	      if(stats[_STAT_CREATE].speed < stats[_STAT_CREATE].best)
-		 stats[_STAT_CREATE].best=stats[_STAT_CREATE].speed;
-	      if(stats[_STAT_CREATE].speed > stats[_STAT_CREATE].worst)
-		 stats[_STAT_CREATE].worst=stats[_STAT_CREATE].speed;
-
-	      stats[_STAT_WRITE].starttime=time_so_far();
-	      junk=write(fd,mbuffer,sz);
-	      stats[_STAT_WRITE].endtime=time_so_far();
-	      stats[_STAT_WRITE].counter++;
-	      stats[_STAT_WRITE].speed=stats[_STAT_WRITE].endtime-stats[_STAT_WRITE].starttime;
-	      if(stats[_STAT_WRITE].speed < (double)0.0)
-		stats[_STAT_WRITE].speed=(double)0.0;
-	      stats[_STAT_WRITE].total_time+=stats[_STAT_WRITE].speed;
-	      if(stats[_STAT_WRITE].speed < stats[_STAT_WRITE].best)
-		 stats[_STAT_WRITE].best=stats[_STAT_WRITE].speed;
-	      if(stats[_STAT_WRITE].speed > stats[_STAT_WRITE].worst)
-		 stats[_STAT_WRITE].worst=stats[_STAT_WRITE].speed;
-
-	      fsync(fd);
-	      stats[_STAT_CLOSE].starttime=time_so_far();
-	      close(fd);
-	      stats[_STAT_CLOSE].endtime=time_so_far();
-	      stats[_STAT_CLOSE].speed=stats[_STAT_CLOSE].endtime-stats[_STAT_CLOSE].starttime;
-	      if(stats[_STAT_CLOSE].speed < (double)0.0)
-		stats[_STAT_CLOSE].speed=(double)0.0;
-	      stats[_STAT_CLOSE].total_time+=stats[_STAT_CLOSE].speed;
-	      stats[_STAT_CLOSE].counter++;
-	      if(stats[_STAT_CLOSE].speed < stats[_STAT_CLOSE].best)
-		 stats[_STAT_CLOSE].best=stats[_STAT_CLOSE].speed;
-	      if(stats[_STAT_CLOSE].speed > stats[_STAT_CLOSE].worst)
-		 stats[_STAT_CLOSE].worst=stats[_STAT_CLOSE].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void 
-file_stat(int x)
-{
-	int i,j,k,y;
-	char buf[100];
-	struct stat mystat;
-	stats[_STAT_STAT].best=(double)99999.9;
-	stats[_STAT_STAT].worst=(double)0.00000000;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      stats[_STAT_STAT].starttime=time_so_far();
-	      y=stat(buf,&mystat);
-	      if(y < 0)
-	      {
-	        printf("Stat failed\n");
-	        exit(1);
-	      }
-	      stats[_STAT_STAT].endtime=time_so_far();
-	      stats[_STAT_STAT].speed=stats[_STAT_STAT].endtime-stats[_STAT_STAT].starttime;
-	      if(stats[_STAT_STAT].speed < (double)0.0)
-		stats[_STAT_STAT].speed=(double)0.0;
-	      stats[_STAT_STAT].total_time+=stats[_STAT_STAT].speed;
-	      stats[_STAT_STAT].counter++;
-	      if(stats[_STAT_STAT].speed < stats[_STAT_STAT].best)
-		 stats[_STAT_STAT].best=stats[_STAT_STAT].speed;
-	      if(stats[_STAT_STAT].speed > stats[_STAT_STAT].worst)
-		 stats[_STAT_STAT].worst=stats[_STAT_STAT].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void 
-file_access(int x)
-{
-	int i,j,k,y;
-	char buf[100];
-	stats[_STAT_ACCESS].best=(double)999999.9;
-	stats[_STAT_ACCESS].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      stats[_STAT_ACCESS].starttime=time_so_far();
-	      y=access(buf,W_OK|F_OK);
-	      if(y < 0)
-	      {
-	        printf("access failed\n");
-		perror("what");
-	        exit(1);
-	      }
-	      stats[_STAT_ACCESS].endtime=time_so_far();
-	      stats[_STAT_ACCESS].speed=stats[_STAT_ACCESS].endtime-stats[_STAT_ACCESS].starttime;
-	      if(stats[_STAT_ACCESS].speed < (double)0.0)
-		stats[_STAT_ACCESS].speed=(double)0.0;
-	      stats[_STAT_ACCESS].total_time+=stats[_STAT_ACCESS].speed;
-	      stats[_STAT_ACCESS].counter++;
-	      if(stats[_STAT_ACCESS].speed < stats[_STAT_ACCESS].best)
-		 stats[_STAT_ACCESS].best=stats[_STAT_ACCESS].speed;
-	      if(stats[_STAT_ACCESS].speed > stats[_STAT_ACCESS].worst)
-		 stats[_STAT_ACCESS].worst=stats[_STAT_ACCESS].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void 
-file_chmod(int x)
-{
-	int i,j,k,y;
-	char buf[100];
-	stats[_STAT_CHMOD].best=(double)999999.9;
-	stats[_STAT_CHMOD].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      stats[_STAT_CHMOD].starttime=time_so_far();
-	      y=chmod(buf,0666);
-	      if(y < 0)
-	      {
-	        printf("chmod failed\n");
-		perror("what");
-	        exit(1);
-	      }
-	      stats[_STAT_CHMOD].endtime=time_so_far();
-	      stats[_STAT_CHMOD].speed=stats[_STAT_CHMOD].endtime-stats[_STAT_CHMOD].starttime;
-	      if(stats[_STAT_CHMOD].speed < (double)0.0)
-		stats[_STAT_CHMOD].speed=(double)0.0;
-	      stats[_STAT_CHMOD].total_time+=stats[_STAT_CHMOD].speed;
-	      stats[_STAT_CHMOD].counter++;
-	      if(stats[_STAT_CHMOD].speed < stats[_STAT_CHMOD].best)
-		 stats[_STAT_CHMOD].best=stats[_STAT_CHMOD].speed;
-	      if(stats[_STAT_CHMOD].speed > stats[_STAT_CHMOD].worst)
-		 stats[_STAT_CHMOD].worst=stats[_STAT_CHMOD].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void 
-file_readdir(int x)
-{
-	int i,j,ret1;
-	char buf[100];
-	DIR *dirbuf;
-	struct dirent *y;
-	stats[_STAT_READDIR].best=(double)999999.9;
-	stats[_STAT_READDIR].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    dirbuf=opendir(".");
-	    if(dirbuf==0)
-	    {
-		printf("opendir failed\n");
-		exit(1);
-	    }
-	    stats[_STAT_READDIR].starttime=time_so_far();
-	    y=readdir(dirbuf);
-	    if(y == 0)
-	    {
-	      printf("readdir failed\n");
-	      exit(1);
-	    }
-	    stats[_STAT_READDIR].endtime=time_so_far();
-	    stats[_STAT_READDIR].speed=stats[_STAT_READDIR].endtime-stats[_STAT_READDIR].starttime;
-	      if(stats[_STAT_READDIR].speed < (double)0.0)
-		stats[_STAT_READDIR].speed=(double)0.0;
-	    stats[_STAT_READDIR].total_time+=stats[_STAT_READDIR].speed;
-	    stats[_STAT_READDIR].counter++;
-	    if(stats[_STAT_READDIR].speed < stats[_STAT_READDIR].best)
-		 stats[_STAT_READDIR].best=stats[_STAT_READDIR].speed;
-	    if(stats[_STAT_READDIR].speed > stats[_STAT_READDIR].worst)
-		 stats[_STAT_READDIR].worst=stats[_STAT_READDIR].speed;
-	    ret1=closedir(dirbuf);
-	    if(ret1 < 0)
-	    {
-	      printf("closedir failed\n");
-	      exit(1);
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void 
-file_link(int x)
-{
-	int i,j,k,y;
-	char buf[100];
-	char bufn[100];
-	stats[_STAT_LINK].best=(double)999999.9;
-	stats[_STAT_LINK].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      sprintf(bufn,"fileop_file_%d_%d_%dL",i,j,k);
-	      stats[_STAT_LINK].starttime=time_so_far();
-	      y=link(buf,bufn);
-	      if(y < 0)
-	      {
-	        printf("Link failed\n");
-	        exit(1);
-	      }
-	      stats[_STAT_LINK].endtime=time_so_far();
-	      stats[_STAT_LINK].speed=stats[_STAT_LINK].endtime-stats[_STAT_LINK].starttime;
-	      if(stats[_STAT_LINK].speed < (double)0.0)
-		stats[_STAT_LINK].speed=(double)0.0;
-	      stats[_STAT_LINK].total_time+=stats[_STAT_LINK].speed;
-	      stats[_STAT_LINK].counter++;
-	      if(stats[_STAT_LINK].speed < stats[_STAT_LINK].best)
-		 stats[_STAT_LINK].best=stats[_STAT_LINK].speed;
-	      if(stats[_STAT_LINK].speed > stats[_STAT_LINK].worst)
-		 stats[_STAT_LINK].worst=stats[_STAT_LINK].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void 
-file_unlink(int x)
-{
-	int i,j,k,y;
-	char buf[100];
-	char bufn[100];
-	stats[_STAT_UNLINK].best=(double)999999.9;
-	stats[_STAT_UNLINK].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      sprintf(bufn,"fileop_file_%d_%d_%dL",i,j,k);
-	      stats[_STAT_UNLINK].starttime=time_so_far();
-	      y=unlink(bufn);
-	      if(y < 0)
-	      {
-	        printf("Unlink failed\n");
-	        exit(1);
-	      }
-	      stats[_STAT_UNLINK].endtime=time_so_far();
-	      stats[_STAT_UNLINK].speed=stats[_STAT_UNLINK].endtime-stats[_STAT_UNLINK].starttime;
-	      if(stats[_STAT_UNLINK].speed < (double)0.0)
-		stats[_STAT_UNLINK].speed=(double)0.0;
-	      stats[_STAT_UNLINK].total_time+=stats[_STAT_UNLINK].speed;
-	      stats[_STAT_UNLINK].counter++;
-	      if(stats[_STAT_UNLINK].speed < stats[_STAT_UNLINK].best)
-		 stats[_STAT_UNLINK].best=stats[_STAT_UNLINK].speed;
-	      if(stats[_STAT_UNLINK].speed > stats[_STAT_UNLINK].worst)
-		 stats[_STAT_UNLINK].worst=stats[_STAT_UNLINK].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-void
-dir_delete(int x)
-{
-	int i,j,k;
-	char buf[100];
-	stats[_STAT_DIR_DELETE].best=(double)99999.9;
-	stats[_STAT_DIR_DELETE].worst=(double)0.00000000;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_dir_%d_%d_%d",i,j,k);
-	      junk=chdir(buf);
-	      junk=chdir("..");
-	      stats[_STAT_DIR_DELETE].starttime=time_so_far();
-	      rmdir(buf);
-	      stats[_STAT_DIR_DELETE].endtime=time_so_far();
-	      stats[_STAT_DIR_DELETE].speed=stats[_STAT_DIR_DELETE].endtime-stats[_STAT_DIR_DELETE].starttime;
-	      if(stats[_STAT_DIR_DELETE].speed < (double)0.0)
-		stats[_STAT_DIR_DELETE].speed=(double)0.0;
-	      stats[_STAT_DIR_DELETE].total_time+=stats[_STAT_DIR_DELETE].speed;
-	      stats[_STAT_DIR_DELETE].counter++;
-	      if(stats[_STAT_DIR_DELETE].speed < stats[_STAT_DIR_DELETE].best)
-		 stats[_STAT_DIR_DELETE].best=stats[_STAT_DIR_DELETE].speed;
-	      if(stats[_STAT_DIR_DELETE].speed > stats[_STAT_DIR_DELETE].worst)
-		 stats[_STAT_DIR_DELETE].worst=stats[_STAT_DIR_DELETE].speed;
-	    }
-	    junk=chdir("..");
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    stats[_STAT_DIR_DELETE].starttime=time_so_far();
-	    rmdir(buf);
-	    stats[_STAT_DIR_DELETE].endtime=time_so_far();
-	    stats[_STAT_DIR_DELETE].speed=stats[_STAT_DIR_DELETE].endtime-stats[_STAT_DIR_DELETE].starttime;
-	      if(stats[_STAT_DIR_DELETE].speed < (double)0.0)
-		stats[_STAT_DIR_DELETE].speed=(double)0.0;
-	    stats[_STAT_DIR_DELETE].total_time+=stats[_STAT_DIR_DELETE].speed;
-	    stats[_STAT_DIR_DELETE].counter++;
-	    if(stats[_STAT_DIR_DELETE].speed < stats[_STAT_DIR_DELETE].best)
-		 stats[_STAT_DIR_DELETE].best=stats[_STAT_DIR_DELETE].speed;
-	    if(stats[_STAT_DIR_DELETE].speed > stats[_STAT_DIR_DELETE].worst)
-		 stats[_STAT_DIR_DELETE].worst=stats[_STAT_DIR_DELETE].speed;
-	  }
-	  junk=chdir("..");
-	  sprintf(buf,"fileop_L1_%d",i);
-	  stats[_STAT_DIR_DELETE].starttime=time_so_far();
-	  rmdir(buf);
-	  stats[_STAT_DIR_DELETE].endtime=time_so_far();
-	  stats[_STAT_DIR_DELETE].speed=stats[_STAT_DIR_DELETE].endtime-stats[_STAT_DIR_DELETE].starttime;
-	  if(stats[_STAT_DIR_DELETE].speed < (double)0.0)
-		stats[_STAT_DIR_DELETE].speed=(double)0.0;
-	  stats[_STAT_DIR_DELETE].total_time+=stats[_STAT_DIR_DELETE].speed;
-	  stats[_STAT_DIR_DELETE].counter++;
-	  if(stats[_STAT_DIR_DELETE].speed < stats[_STAT_DIR_DELETE].best)
-		 stats[_STAT_DIR_DELETE].best=stats[_STAT_DIR_DELETE].speed;
-	  if(stats[_STAT_DIR_DELETE].speed > stats[_STAT_DIR_DELETE].worst)
-		 stats[_STAT_DIR_DELETE].worst=stats[_STAT_DIR_DELETE].speed;
-	}
-}
-
-void
-file_delete(int x)
-{
-	int i,j,k;
-	char buf[100];
-	stats[_STAT_DELETE].best=(double)999999.9;
-	stats[_STAT_DELETE].worst=(double)0.0;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      stats[_STAT_DELETE].starttime=time_so_far();
-	      unlink(buf);
-	      stats[_STAT_DELETE].endtime=time_so_far();
-	      stats[_STAT_DELETE].speed=stats[_STAT_DELETE].endtime-stats[_STAT_DELETE].starttime;
-	      if(stats[_STAT_DELETE].speed < (double)0.0)
-		stats[_STAT_DELETE].speed=(double)0.0;
-	      stats[_STAT_DELETE].total_time+=stats[_STAT_DELETE].speed;
-	      stats[_STAT_DELETE].counter++;
-	      if(stats[_STAT_DELETE].speed < stats[_STAT_DELETE].best)
-		 stats[_STAT_DELETE].best=stats[_STAT_DELETE].speed;
-	      if(stats[_STAT_DELETE].speed > stats[_STAT_DELETE].worst)
-		 stats[_STAT_DELETE].worst=stats[_STAT_DELETE].speed;
-	    }
-	    junk=chdir("..");
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    rmdir(buf);
-	  }
-	  junk=chdir("..");
-	  sprintf(buf,"fileop_L1_%d",i);
-	  rmdir(buf);
-	}
-}
-void 
-file_read(int x)
-{
-	int i,j,k,y,fd;
-	char buf[100];
-	char value;
-	stats[_STAT_READ].best=(double)99999.9;
-	stats[_STAT_READ].worst=(double)0.00000000;
-	stats[_STAT_OPEN].best=(double)99999.9;
-	stats[_STAT_OPEN].worst=(double)0.00000000;
-	for(i=0;i<x;i++)
-	{
-	  sprintf(buf,"fileop_L1_%d",i);
-	  junk=chdir(buf);
-	  for(j=0;j<x;j++)
-	  {
-	    sprintf(buf,"fileop_L1_%d_L2_%d",i,j);
-	    junk=chdir(buf);
-	    for(k=0;k<x;k++)
-	    {
-	      sprintf(buf,"fileop_file_%d_%d_%d",i,j,k);
-	      value=(char)((i^j^k) &0xff);
-	      stats[_STAT_OPEN].starttime=time_so_far();
-	      fd=open(buf,O_RDONLY);
-	      if(fd < 0)
-	      {
-	        printf("Open failed\n");
-	        exit(1);
-	      }
-	      stats[_STAT_OPEN].endtime=time_so_far();
-	      stats[_STAT_OPEN].speed=stats[_STAT_OPEN].endtime-stats[_STAT_OPEN].starttime;
-	      if(stats[_STAT_OPEN].speed < (double)0.0)
-		stats[_STAT_OPEN].speed=(double)0.0;
-	      stats[_STAT_OPEN].total_time+=stats[_STAT_OPEN].speed;
-	      stats[_STAT_OPEN].counter++;
-	      if(stats[_STAT_OPEN].speed < stats[_STAT_OPEN].best)
-		 stats[_STAT_OPEN].best=stats[_STAT_OPEN].speed;
-	      if(stats[_STAT_OPEN].speed > stats[_STAT_OPEN].worst)
-		 stats[_STAT_OPEN].worst=stats[_STAT_OPEN].speed;
-
-	      stats[_STAT_READ].starttime=time_so_far();
-	      y=read(fd,mbuffer,sz);
-	      if(y < 0)
-	      {
-	        printf("Read failed\n");
-	        exit(1);
-	      }
-	      if(validate(mbuffer,sz, value) !=0)
-		printf("Error: Data Mis-compare\n");;
-	      stats[_STAT_READ].endtime=time_so_far();
-	      close(fd);
-	      stats[_STAT_READ].speed=stats[_STAT_READ].endtime-stats[_STAT_READ].starttime;
-	      if(stats[_STAT_READ].speed < (double)0.0)
-		stats[_STAT_READ].speed=(double)0.0;
-	      stats[_STAT_READ].total_time+=stats[_STAT_READ].speed;
-	      stats[_STAT_READ].counter++;
-	      if(stats[_STAT_READ].speed < stats[_STAT_READ].best)
-		 stats[_STAT_READ].best=stats[_STAT_READ].speed;
-	      if(stats[_STAT_READ].speed > stats[_STAT_READ].worst)
-		 stats[_STAT_READ].worst=stats[_STAT_READ].speed;
-	    }
-	    junk=chdir("..");
-	  }
-	  junk=chdir("..");
-	}
-}
-
-/************************************************************************/
-/* Time measurement routines. Thanks to Iozone :-)			*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-static double
-time_so_far(void)
-#else
-static double
-time_so_far()
-#endif
-{
-#ifdef Windows
-   LARGE_INTEGER freq,counter;
-   double wintime,bigcounter;
-	/* For Windows the time_of_day() is useless. It increments in 55 milli second   */
-	/* increments. By using the Win32api one can get access to the high performance */
-	/* measurement interfaces. With this one can get back into the 8 to 9  		*/
-	/* microsecond resolution.							*/
-        QueryPerformanceFrequency(&freq);
-        QueryPerformanceCounter(&counter);
-        bigcounter=(double)counter.HighPart *(double)0xffffffff +
-                (double)counter.LowPart;
-        wintime = (double)(bigcounter/(double)freq.LowPart);
-        return((double)wintime);
-#else
-#if defined (OSFV4) || defined(OSFV3) || defined(OSFV5)
-  struct timespec gp;
-
-  if (getclock(TIMEOFDAY, (struct timespec *) &gp) == -1)
-    perror("getclock");
-  return (( (double) (gp.tv_sec)) +
-    ( ((float)(gp.tv_nsec)) * 0.000000001 ));
-#else
-  struct timeval tp;
-
-  if (gettimeofday(&tp, (struct timezone *) NULL) == -1)
-    perror("gettimeofday");
-  return ((double) (tp.tv_sec)) +
-    (((double) tp.tv_usec) * 0.000001 );
-#endif
-#endif
-}
-
-void
-splash(void)
-{
-	printf("\n");
-	printf("     --------------------------------------\n");
-	printf("     |              Fileop                | \n");
-	printf("     | %s          | \n",version);
-	printf("     |                                    | \n");
-	printf("     |                by                  |\n");
-	printf("     |                                    | \n");
-	printf("     |             Don Capps              |\n");
-	printf("     --------------------------------------\n");
-	printf("\n");
-}
-
-void 
-usage(void)
-{
-  splash();
-  printf("     fileop [-f X ]|[-l # -u #] [-s Y] [-e] [-b] [-w] [-d <dir>] [-t] [-v] [-h]\n");
-  printf("\n");
-  printf("     -f #      Force factor. X^3 files will be created and removed.\n");
-  printf("     -l #      Lower limit on the value of the Force factor.\n");
-  printf("     -u #      Upper limit on the value of the Force factor.\n");
-  printf("     -s #      Optional. Sets filesize for the create/write. May use suffix 'K' or 'M'.\n");
-  printf("     -e        Excel importable format.\n");
-  printf("     -b        Output best case results.\n");
-  printf("     -i #      Increment force factor by this increment.\n");
-  printf("     -w        Output worst case results.\n");
-  printf("     -d <dir>  Specify starting directory.\n");
-  printf("     -U <dir>  Mount point to remount between tests.\n");
-  printf("     -t        Verbose output option.\n");
-  printf("     -v        Version information.\n");
-  printf("     -h        Help text.\n");
-  printf("\n");
-  printf("     The structure of the file tree is:\n");
-  printf("     X number of Level 1 directories, with X number of\n");
-  printf("     level 2 directories, with X number of files in each\n");
-  printf("     of the level 2 directories.\n");
-  printf("\n");
-  printf("     Example:  fileop 2\n");
-  printf("\n");
-  printf("             dir_1                        dir_2\n");
-  printf("            /     \\                      /     \\ \n");
-  printf("      sdir_1       sdir_2          sdir_1       sdir_2\n");
-  printf("      /     \\     /     \\          /     \\      /     \\ \n");
-  printf("   file_1 file_2 file_1 file_2   file_1 file_2 file_1 file_2\n");
-  printf("\n");
-  printf("   Each file will be created, and then Y bytes is written to the file.\n");
-  printf("\n");
-}
-void
-clear_stats()
-{
-	int i;
-	for(i=0;i<_NUM_STATS;i++)
-		bzero((char *)&stats[i],sizeof(struct stat_struct));
-}
-int
-validate(char *buffer, int size, char value)
-{
-	register int i;
-	register char *cp;
-	register int size1;
-	register char v1;
-	v1=value;
-	cp = buffer;
-	size1=size;
-	for(i=0;i<size;i++)
-	{
-		if(*cp++ != v1)
-			return(1);
-	}
-	return(0);
-}
-
diff --git a/src/components/appio/tests/iozone/gengnuplot.sh b/src/components/appio/tests/iozone/gengnuplot.sh
deleted file mode 100755
index ec1d3eead..000000000
--- a/src/components/appio/tests/iozone/gengnuplot.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2001 Yves Rougy Yves@Rougy.net
-#
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2 of the License, or
-#   (at your option) any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License
-#   along with this program; if not, write to the Free Software
-#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-
-cp $1 iozone_gen_out
-file_name=iozone_gen_out
-#set -x
-
-write_gnuplot_file() {
-	echo \#test : $query
-	case $query in
-  		(write) awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $3  }' < $file_name ;;
-  		(rewrite)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $4  }' < $file_name ;;
-  		(read)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $5  }' < $file_name ;;
-  		(reread)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $6  }' < $file_name ;;
-  		(randread)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $7  }' < $file_name ;;
-  		(randwrite)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $8  }' < $file_name ;;
-  		(bkwdread)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $9  }' < $file_name ;;
-  		(recrewrite)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $10  }' < $file_name ;;
-  		(strideread)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $11  }' < $file_name ;;
-  		(fwrite)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $12  }' < $file_name ;;
-  		(frewrite)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $13  }' < $file_name ;;
-  		(fread)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $14  }' < $file_name ;;
-  		(freread)  awk '$1 ~ /^[0-9]+/ { print  $1 " " $2 " " $15  }' < $file_name ;;
-		(*)  echo "Usage : gengnuplot.sh <filename> <test>" >> /dev/stderr ; 
-       		     echo "filename is the output of iozone -a" >> /dev/stderr ;
-       		     echo "test is one of write rewrite read reread randread randwrite bkwdread recrewrite strideread fwrite frewrite fread freread" >> /dev/stderr ;;
-	esac }
-
-#filename=$1
-filename=iozone_gen_out
-query=$2
-if (! [ -e $query ] ) ; then mkdir $query; fi
-if ( [ $# -eq 2 ] ) ; 
-	then 
-		write_gnuplot_file > $query/`basename $file_name.gnuplot`
-	else
-		echo "Usage : gengnuplot.sh <filename> <test>" 2>&1
-		echo "filename is the output of iozone -a" 2>&1
-		echo "test is one of write rewrite read reread randread randwrite bkwdread recrewrite strideread fwrite frewrite fread freread" 2>&1
-fi
diff --git a/src/components/appio/tests/iozone/gnu3d.dem b/src/components/appio/tests/iozone/gnu3d.dem
deleted file mode 100644
index df14ef1f0..000000000
--- a/src/components/appio/tests/iozone/gnu3d.dem
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# $Id: 3D plot of performance
-#
-# Processes files that were created by Generate_Graphs
-# and displays the results. Also, saves a postscript copy.
-#
-# Don Capps
-
-dirs = "write rewrite read reread randread randwrite bkwdread recrewrite strideread fwrite frewrite fread freread"
-titles = "Write ReWrite Read Reread Random_read Random_write Read_Backwards Record_rewrite Stride_read Fwrite Frewrite Fread Freread"
-
-file(n) = sprintf("%s/iozone_gen_out.gnuplot", word(dirs,n))
-outfile(n) = sprintf("%s/%s.ps", word(dirs,n), word(dirs,n))
-title(n) = word(titles,n)
-
-set title "Iozone performance"
-set grid lt 2 lw 1
-set surface
-set parametric
-set xtics
-set ytics
-set logscale x 2
-set logscale y 2
-set xlabel "File size in 2^n KBytes"
-set ylabel "Record size in 2^n Kbytes"
-set zlabel "Kbytes/sec"
-set style data lines
-set dgrid3d 80,80,3
-
-i = 1
-set terminal x11
-set output
-splot file(i) title title(i)
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 2
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 3
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 4
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 5
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 6
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 7
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 8
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 9
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 10
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 11
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 12
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
-i = 13
-set terminal x11
-set output
-replot
-pause -1 "Hit return to continue"
-set terminal postscript color
-set output outfile(i)
-replot
-
diff --git a/src/components/appio/tests/iozone/gnuplot.dem b/src/components/appio/tests/iozone/gnuplot.dem
deleted file mode 100644
index d1abdf500..000000000
--- a/src/components/appio/tests/iozone/gnuplot.dem
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "wol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system write latency "
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'wol.dat' using 1:2 title "Latency Plot" with lines
-pause -1 "Hit return to continue"
-
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "rwol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system re-write latency "
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'rwol.dat' using 1:2 title "Latency Plot" with lines
-pause -1 "Hit return to continue"
-
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "rol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system read latency "
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'rol.dat' using 1:2 title "Latency Plot" with lines
-pause -1 "Hit return to continue"
-
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "rrol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system re-read latency "
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'rrol.dat' using 1:2 title "Latency Plot" with lines
-pause -1 "Hit return to continue"
-
diff --git a/src/components/appio/tests/iozone/gnuplotps.dem b/src/components/appio/tests/iozone/gnuplotps.dem
deleted file mode 100644
index 39e1c71af..000000000
--- a/src/components/appio/tests/iozone/gnuplotps.dem
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "wol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system write latency "
-set terminal postscript
-set output "gnu_wol.ps"
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'wol.dat' using 1:2 title "Latency Plot" with lines
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "rwol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system re-write latency "
-set terminal postscript
-set output "gnu_rwol.ps"
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'rwol.dat' using 1:2 title "Latency Plot" with lines
-
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "rol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system read latency "
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-set terminal postscript
-set output "gnu_rol.ps"
-plot 'rol.dat' using 1:2 title "Latency Plot" with lines
-
-#
-# $Id: Plot of latency versus offset in a file
-#
-# Requires data file "rrol.dat" from this directory,
-# so change current working directory to this directory before running.
-#
-
-set title "File system re-read latency "
-set terminal postscript
-set output "gnu_rrol.ps"
-set autoscale x
-set xtics
-set xlabel "Offset in file (KB)"
-set ylabel "Latency in Microseconds"
-plot 'rrol.dat' using 1:2 title "Latency Plot" with lines
-
diff --git a/src/components/appio/tests/iozone/iozone.c b/src/components/appio/tests/iozone/iozone.c
deleted file mode 100644
index 7708cd76c..000000000
--- a/src/components/appio/tests/iozone/iozone.c
+++ /dev/null
@@ -1,25297 +0,0 @@
-/************************************************************************/
-/*	Original Author: 						*/
-/*		William Norcott (wnorcott@us.oracle.com)		*/
-/*              4 Dunlap Drive						*/
-/*              Nashua, NH 03060					*/
-/*  									*/
-/************************************************************************/
-/*      Enhancements by:						*/
-/*	 	Don Capps (capps@iozone.org)				*/
-/* 		7417 Crenshaw						*/
-/* 		Plano, TX 75025						*/
-/*  									*/
-/************************************************************************/
-/*  Copyright 1991, 1992, 1994, 1998, 2000, 2001  William D. Norcott	*/
-/************************************************************************/
-/*									*/
-/* Iozone is based on the original work done by William Norrcot. It has	*/
-/* been enhanced so that it provides a more complete filesystem   	*/
-/* characterization.							*/
-/* Its purpose is to provide automated filesystem characterization.	*/
-/* Enhancements have been made by:					*/
-/*									*/
-/* Don Capps	   	         capps@iozone.org			*/ 
-/*									*/
-/* Iozone can perform single stream and multi stream I/O		*/
-/* also it now performs read, write, re-read, re-write, 		*/
-/* read backwards, read/write random, re-read record, 			*/
-/* pread, re-pread, re-pwrite, preadv, re-preadv, pwritev,		*/
-/* stride read, and re-pwritev,mmap, POSIX async I/O, NFS               */
-/* cluster testing and much more.					*/
-/*									*/
-/* The frontend now uses getopt() and the user can control many more	*/
-/* of the actions.							*/
-/*									*/
-/*									*/
-/************************************************************************/
-/* THIS SOFTWARE IS PROVIDED BY DON CAPPS AND THE IOZONE CREW "AS IS    */
-/* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED    */
-/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A      */
-/* PARTICULAR PURPOSE ARE DISCLAIMED.					*/
-/*									*/
-/* IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY      */
-/* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL   */
-/* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE    */
-/* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS        */
-/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER */
-/* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      */
-/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE.       */
-/************************************************************************/
-
-/************************************************************************/
-/* For the beginner... 						        */
-/* 									*/
-/* 1. make linux  (linux, hpux, convex, hpux_no_ansi)			*/
-/* 2. type ./iozone -Ra							*/
-/* 									*/
-/*  Hint: Type make    (it will give you a list of valid targets)	*/
-/* 									*/
-/************************************************************************/
-
-
-/* The version number */
-#define THISVERSION "        Version $Revision$"
-
-#if defined(linux)
-  #define _GNU_SOURCE
-#endif
-/* Include for Cygnus development environment for Windows */
-#if defined (Windows)
-#include <windows.h>
-#include <errno.h>
-#else
-#if defined(linux) || defined(solaris) || defined(macosx) || defined(__AIX__) || defined(FreeBSD) || defined(_HPUX_SOURCE)
-#include <errno.h>
-#else
-extern  int errno;   /* imported for errors */
-extern  int h_errno; /* imported for errors */
-#endif
-#endif
-
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#if defined (__LP64__) || defined(OSF_64) || defined(__alpha__) || defined(__arch64__) || defined(_LP64) || defined(__s390x__) || defined(__AMD64__)
-#define MODE "\tCompiled for 64 bit mode."
-#define _64BIT_ARCH_
-#else
-#define MODE "\tCompiled for 32 bit mode."
-#endif
-
-#ifndef NO_THREADS
-#include <pthread.h>
-#endif
-
-#if defined(HAVE_ANSIC_C) && defined(linux)
-#include <stdlib.h>
-#include <sys/wait.h>
-#endif
-
-#ifdef HAVE_PROTO
-#include "proto.h"
-#else
-int atoi();
-int close();
-int unlink();
-int main();
-void record_command_line();
-#if !defined(linux)
-int wait();
-#endif
-int fsync();
-void srand48();
-long lrand48();
-void create_list();
-void Poll();
-void print_header();
-void Kill();
-long long l_min();
-long long l_max();
-long long mythread_create();
-int gen_new_buf();
-void touch_dedup();
-void init_by_array64(unsigned long long *, unsigned long long );
-unsigned long long genrand64_int64(void);
-#endif
-
-#include <fcntl.h>
-
-char *help[] = {
-"    Usage: iozone [-s filesize_Kb] [-r record_size_Kb] [-f [path]filename] [-h]",
-"                  [-i test] [-E] [-p] [-a] [-A] [-z] [-Z] [-m] [-M] [-t children]",
-"                  [-l min_number_procs] [-u max_number_procs] [-v] [-R] [-x] [-o]",
-"                  [-d microseconds] [-F path1 path2...] [-V pattern] [-j stride]",
-"                  [-T] [-C] [-B] [-D] [-G] [-I] [-H depth] [-k depth] [-U mount_point]",
-"                  [-S cache_size] [-O] [-L cacheline_size] [-K] [-g maxfilesize_Kb]",
-"                  [-n minfilesize_Kb] [-N] [-Q] [-P start_cpu] [-e] [-c] [-b Excel.xls]",
-"                  [-J milliseconds] [-X write_telemetry_filename] [-w] [-W]",
-"                  [-Y read_telemetry_filename] [-y minrecsize_Kb] [-q maxrecsize_Kb]",
-"                  [-+u] [-+m cluster_filename] [-+d] [-+x multiplier] [-+p # ]",
-"                  [-+r] [-+t] [-+X] [-+Z] [-+w percent dedupable] [-+y percent_interior_dedup]",
-"                  [-+C percent_dedup_within]",
-" ",
-"           -a  Auto mode",
-"           -A  Auto2 mode",
-"           -b Filename  Create Excel worksheet file",
-"           -B  Use mmap() files",
-"           -c  Include close in the timing calculations",
-"           -C  Show bytes transferred by each child in throughput testing",
-"           -d #  Microsecond delay out of barrier",
-"           -D  Use msync(MS_ASYNC) on mmap files",
-"           -e  Include flush (fsync,fflush) in the timing calculations",
-"           -E  Run extension tests",
-"           -f filename  to use",
-"           -F filenames  for each process/thread in throughput test",
-"           -g #  Set maximum file size (in Kbytes) for auto mode (or #m or #g)",
-"           -G  Use msync(MS_SYNC) on mmap files",
-"           -h  help",
-"           -H #  Use POSIX async I/O with # async operations",
-"           -i #  Test to run (0=write/rewrite, 1=read/re-read, 2=random-read/write",
-"                 3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-fwrite",
-"                 7=fread/Re-fread, 8=random_mix, 9=pwrite/Re-pwrite, 10=pread/Re-pread",
-"                 11=pwritev/Re-pwritev, 12=preadv/Re-preadv)",
-"           -I  Use VxFS VX_DIRECT, O_DIRECT,or O_DIRECTIO for all file operations",
-"           -j #  Set stride of file accesses to (# * record size)",
-"           -J #  milliseconds of compute cycle before each I/O operation",
-"           -k #  Use POSIX async I/O (no bcopy) with # async operations",
-"           -K  Create jitter in the access pattern for readers",
-"           -l #  Lower limit on number of processes to run",
-"           -L #  Set processor cache line size to value (in bytes)",
-"           -m  Use multiple buffers",
-"           -M  Report uname -a output",
-"           -n #  Set minimum file size (in Kbytes) for auto mode (or #m or #g)",
-"           -N  Report results in microseconds per operation",
-"           -o  Writes are synch (O_SYNC)",
-"           -O  Give results in ops/sec.",
-"           -p  Purge on",
-"           -P #  Bind processes/threads to processors, starting with this cpu",
-"           -q #  Set maximum record size (in Kbytes) for auto mode (or #m or #g)",
-"           -Q  Create offset/latency files",
-"           -r #  record size in Kb",
-"              or -r #k .. size in Kb",
-"              or -r #m .. size in Mb",
-"              or -r #g .. size in Gb",
-"           -R  Generate Excel report",
-"           -s #  file size in Kb",
-"              or -s #k .. size in Kb",
-"              or -s #m .. size in Mb",
-"              or -s #g .. size in Gb",
-"           -S #  Set processor cache size to value (in Kbytes)",
-"           -t #  Number of threads or processes to use in throughput test",
-"           -T  Use POSIX pthreads for throughput tests",
-"           -u #  Upper limit on number of processes to run",
-"           -U  Mount point to remount between tests",
-"           -v  version information",
-"           -V #  Verify data pattern write/read",
-"           -w  Do not unlink temporary file",
-"           -W  Lock file when reading or writing",
-"           -x  Turn off stone-walling",
-"           -X filename  Write telemetry file. Contains lines with (offset reclen compute_time) in ascii",
-"           -y #  Set minimum record size (in Kbytes) for auto mode (or #m or #g)",
-"           -Y filename  Read  telemetry file. Contains lines with (offset reclen compute_time) in ascii",
-"           -z  Used in conjunction with -a to test all possible record sizes",
-"           -Z  Enable mixing of mmap I/O and file I/O",
-"           -+E Use existing non-Iozone file for read-only testing",
-"           -+K Sony special. Manual control of test 8.",
-"           -+m  Cluster_filename   Enable Cluster testing",
-"           -+d  File I/O diagnostic mode. (To troubleshoot a broken file I/O subsystem)",
-"           -+u  Enable CPU utilization output (Experimental)",
-"           -+x # Multiplier to use for incrementing file and record sizes",
-"           -+p # Percentage of mix to be reads",
-"           -+r Enable O_RSYNC|O_SYNC for all testing.",
-"           -+t Enable network performance test. Requires -+m ",
-"           -+n No retests selected.",
-"           -+k Use constant aggregate data set size.",
-"           -+q Delay in seconds between tests.",
-"           -+l Enable record locking mode.",
-"           -+L Enable record locking mode, with shared file.",
-"           -+B Sequential mixed workload.",
-#if defined(O_DSYNC)
-"           -+D Enable O_DSYNC mode.",
-#endif
-#ifndef NO_MADVISE
-"           -+A #  Enable madvise. 0 = normal, 1=random, 2=sequential",
-"                                  3=dontneed, 4=willneed",
-#endif
-"           -+N Do not truncate existing files on sequential writes.",
-"           -+S # Dedup-able data is limited to sharing within each numerically",
-"                 identified file set",
-"           -+V Enable shared file. No locking.",
-#if defined(Windows)
-"           -+U Windows Unbufferd I/O API (Very Experimental)",
-#endif
-"           -+X Enable short circuit mode for filesystem testing ONLY",
-"               ALL Results are NOT valid in this mode.",
-"           -+Z Enable old data set compatibility mode. WARNING.. Published",
-"               hacks may invalidate these results and generate bogus, high",
-"               values for results.",
-"           -+w ## Percent of dedup-able data in buffers.",
-"           -+y ## Percent of dedup-able within & across files in buffers.",
-"           -+C ## Percent of dedup-able within & not across files in buffers.",
-"           -+H Hostname    Hostname of the PIT server.",
-"           -+P Service     Service  of the PIT server.",
-"           -+z Enable latency histogram logging.",
-"" };
-
-char *head1[] = {
-  "       'Iozone' Filesystem Benchmark Program",
-  " ",
-THISVERSION,
-  MODE,
-  " ",
-  "       Original Author: William Norcott (wnorcott@us.oracle.com)",
-  "               4 Dunlap Drive",
-  "               Nashua, NH 03060",
-  " ",
-  "       Enhancements: Don Capps (capps@iozone.org)",
-  "        	  7417 Crenshaw",
-  "        	  Plano, TX 75025",
-  " ",
-  "  Copyright 1991, 1992, 1994, 1998, 1999, 2002   William D. Norcott",
-  " ",
-  "  License to freely use and distribute this software is hereby granted ",
-  "  by the author, subject to the condition that this copyright notice ",
-  "  remains intact.  The author retains the exclusive right to publish ",
-  "  derivative works based on this work, including, but not limited to, ",
-  "  revised versions of this work",
-  " ",
-  "  Other contributors:",
-  " ",
-  "  Don Capps       (Network Appliance)	capps@iozone.org",
-  " ",
-  ""};
-
-/******************************************************************
-
-    INCLUDE FILES (system-dependent)
-
-******************************************************************/
-#include <sys/mman.h>
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-
-#include <fcntl.h>
-#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(__DragonFly__)
-#include <malloc.h>
-#endif
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__)
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#if defined (__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__APPLE__) || defined(__DragonFly__)
-#ifndef O_SYNC
-#define O_SYNC O_FSYNC
-#endif
-#endif
-
-#if defined (__FreeBSD__)
-#ifndef O_RSYNC
-#define O_RSYNC O_FSYNC
-#endif
-#endif
-
-#if ((defined(solaris) && defined(__LP64__)) || defined(__s390x__))
-/* If we are building for 64-bit Solaris, all functions that return pointers
- * must be declared before they are used; otherwise the compiler will assume
- * that they return ints and the top 32 bits of the pointer will be lost,
- * causing segmentation faults.  The following includes take care of this.
- * It should be safe to add these for all other OSs too, but we're only
- * doing it for Solaris now in case another OS turns out to be a special case.
- */
-#include <strings.h>
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#endif
-#if ( defined(solaris) && defined(studio11) )
-#include <strings.h>
-#include <stdlib.h>
-#endif
-
-#if defined(OSFV5) || defined(linux)
-#include <string.h>
-#endif
-
-#if defined(linux)
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
-#ifndef MAP_FAILED
-#define MAP_FAILED -1
-#endif
-
-#ifdef generic
-typedef long long off64_t;
-#endif
-
-#if defined(__DragonFly__)
-#define __off64_t_defined
-typedef off_t off64_t;
-#endif
-
-
-#ifndef solaris
-#ifndef off64_t
-#ifndef _OFF64_T
-#ifndef __AIX__
-#ifndef __off64_t_defined
-#ifndef SCO_Unixware_gcc
-#ifndef UWIN
-#ifndef __DragonFly__
-typedef long long off64_t;
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-
-#ifdef __AIX__
-#include <fcntl.h>
-#endif
-
-#ifdef VXFS
-#include <sys/fs/vx_ioctl.h>
-#endif
-
-#ifdef unix
-#if defined (__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) \
-   || defined(_SUA_)
-#include <sys/time.h>
-#endif
-#include <sys/times.h>
-#include <sys/file.h>
-#include <sys/resource.h>
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef nolimits
-#include <limits.h>
-#endif
-#endif
-
-#ifdef HAVE_ANSIC_C
-#define VOLATILE volatile
-#else 
-#define VOLATILE 
-#endif
-
-#include <sys/time.h>
-
-#ifdef SHARED_MEM
-#include <sys/shm.h>
-#endif
-
-#if defined(bsd4_2) && !defined(MS_SYNC)
-#define MS_SYNC 0
-#define MS_ASYNC 0
-#endif
-
-#if defined(bsd4_4) || defined(__DragonFly__)
-#define MAP_ANONYMOUS MAP_ANON
-#endif
-
-#if defined(SCO_Unixware_gcc) || defined(solaris) || defined(UWIN) || defined(SCO)
-#define MAP_FILE (0)
-#endif
-
-#if defined(IRIX) || defined(IRIX64) || defined(Windows) || defined(bsd4_2) || defined(bsd4_4) || defined(SCO) || defined(Solaris) || defined(SCO_Unixware_gcc)
-long long page_size = 4096;
-#define GOT_PAGESIZE 1
-#elif defined(NBPG)
-long long page_size = NBPG;
-#define GOT_PAGESIZE 1
-#elif defined(old_linux)
-#include <asm/page.h>
-long long page_size = PAGE_SIZE;
-#define GOT_PAGESIZE 1
-#elif !defined(GOT_PAGESIZE)
-long long page_size = 4096; /* Used when all else fails */
-#endif
-
-#ifdef HAVE_PREAD
-#ifdef HAVE_PREADV
-#define PVECMAX 16
-
-#ifdef _HPUX_SOURCE
-#define PER_VECTOR_OFFSET
-#include <sys/puio.h>
-struct piovec piov[PVECMAX];
-#else
-#include <sys/uio.h>
-struct iovec piov[PVECMAX];
-#define piov_base iov_base
-#define piov_len iov_len
-#endif
-
-#endif
-#endif
-
-#define DEDUPSEED 0x2719362
-
-
-/*
- * In multi thread/process throughput mode each child keeps track of
- * statistics and communicates them through various flavors of
- * shared memory, and via messages.
- */
-struct child_stats {
-	long long flag;		/* control space */
-	long long flag1;	/* pad */
-	float walltime;	        /* child elapsed time */
-	float cputime;		/* child CPU time */
-	float throughput; 	/* Throughput in either kb/sec or ops/sec */
-	float actual;	   	/* Either actual kb read or # of ops performed */
-} VOLATILE *child_stat;
-
-/*
- * Used for cpu time statistics.
- */
-struct runtime {
-	float	walltime;
-	float	cputime;
-	float	cpuutil;
-};
-
-#ifdef __convex_spp
-#include <sys/cnx_ail.h>
-#endif
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-
-
-/* 
- * Messages the controlling process sends to children.
- * Internal representation that is arch specific.
- * This is used when using the network distributed mode.
- */
-struct client_command {
-	char c_host_name[100];
-	char c_pit_hostname[40];
-	char c_pit_service[8];
-	char c_client_name[100];
-	char c_working_dir[200];
-	char c_file_name[200];
-	char c_path_dir[200];
-	char c_execute_name[200];
-	char c_write_traj_filename[200];
-	char c_read_traj_filename[200];
-	int c_oflag;
-	int c_mfflag;
-	int c_unbuffered;
-	int c_noretest;
-	int c_notruncate;
-	int c_read_sync;
-	int c_jflag;
-	int c_async_flag;
-	int c_k_flag;
-	int c_h_flag;
-	int c_mflag;
-	int c_pflag;
-	int c_stride_flag;
-	int c_verify;
-	int c_sverify;
-	int c_odsync;
-	int c_diag_v;
-	int c_dedup;
-	int c_dedup_interior;
-	int c_dedup_compress;
-	int c_dedup_mseed;
-	int c_hist_summary;
-	int c_op_rate;
-	int c_op_rate_flag;
-	int c_Q_flag;
-	int c_L_flag;
-	int c_OPS_flag;
-	int c_mmapflag;
-	int c_mmapasflag;
-	int c_mmapnsflag;
-	int c_mmapssflag;
-	int c_no_copy_flag;
-	int c_include_close;
-	int c_include_flush;
-	int c_disrupt_flag;
-	int c_compute_flag;
-	int c_xflag;
-	int c_MS_flag;
-	int c_mmap_mix;
-	int c_Kplus_flag;
-	int c_stop_flag;
-	int c_w_traj_flag;
-	int c_r_traj_flag;
-	int c_direct_flag;
-	int c_cpuutilflag;
-	int c_seq_mix;
-	int c_client_number;
-	int c_command;
-	int c_testnum;
-	int c_no_unlink;
-	int c_no_write;
-	int c_file_lock;
-	int c_rec_lock;
-	int c_Kplus_readers;
-	int c_multiplier;
-	int c_share_file;
-	int c_pattern;
-	int c_version;
-	int c_base_time;
-	int c_num_child;
-	int c_pct_read;
-	int c_advise_op;
-	int c_advise_flag;
-	int c_restf;
-	int c_mygen;
-	long long c_stride;
-	long long c_rest_val;
-	long long c_delay;
-	long long c_purge;
-	long long c_fetchon;
-	long long c_numrecs64;
-	long long c_reclen;
-	long long c_child_flag;
-	long long c_delay_start;
-	long long c_depth;
-	float c_compute_time;
-};	
-
-/*
- * All data in this is in string format for portability in a 
- * hetrogeneous environment.
- *
- * Messages that the master will send to the clients
- * over the socket. This provides neutral format
- * so that heterogeneous clusters will work.
- * This is used when using the network distributed mode.
- * WARNING !!! This data structure MUST not be bigger
- * than 1448 bytes or fragmentation will kick your butt.
- */
-struct client_neutral_command {
-	char c_host_name[100];
-	char c_pit_hostname[40];
-	char c_pit_service[8];
-	char c_client_name[100];
-	char c_working_dir[200];
-	char c_file_name[200];
-	char c_path_dir[200];
-	char c_execute_name[200];
-	char c_write_traj_filename[200];
-	char c_read_traj_filename[200];
-	char c_oflag[2];
-	char c_mfflag[2];
-	char c_unbuffered[2];
-	char c_noretest[2];
-	char c_notruncate[2];
-	char c_read_sync[2];
-	char c_jflag[2];
-	char c_async_flag[2];
-	char c_k_flag[2];
-	char c_h_flag[2];
-	char c_mflag[2];
-	char c_pflag[2];
-	char c_stride_flag[2];
-	char c_verify[2];
-	char c_sverify[2];
-	char c_odsync[2];
-	char c_diag_v[2];
-	char c_dedup[4];
-	char c_dedup_interior[4];
-	char c_dedup_compress[4];
-	char c_dedup_mseed[4];
-	char c_hist_summary[4];
-	char c_op_rate[4];
-	char c_op_rate_flag[2];
-	char c_Q_flag[2];
-	char c_L_flag[2];
-	char c_OPS_flag[2];
-	char c_mmapflag[2];
-	char c_mmapasflag[2];
-	char c_mmapnsflag[2];
-	char c_mmapssflag[2];
-	char c_no_copy_flag[2];
-	char c_include_close[2];
-	char c_include_flush[2];
-	char c_disrupt_flag[2];
-	char c_compute_flag[2];
-	char c_stop_flag[2];
-	char c_xflag[2];
-	char c_MS_flag[2];
-	char c_mmap_mix[2];
-	char c_Kplus_flag[2];
-	char c_w_traj_flag[2];		/* small int */
-	char c_r_traj_flag[2];		/* small int */
-	char c_direct_flag[2]; 		/* small int */
-	char c_cpuutilflag[2]; 		/* small int */
-	char c_seq_mix[2]; 		/* small int */
-	char c_stride[10]; 		/* small long long */
-	char c_rest_val[10]; 		/* small long long */
-	char c_purge[10]; 		/* very small long long */
-	char c_fetchon[10]; 		/* very small long long */
-	char c_multiplier[10]; 		/* small int */
-	char c_share_file[10];		/* small int */
-	char c_file_lock[10]; 		/* small int */
-	char c_rec_lock[10]; 		/* small int */
-	char c_Kplus_readers[10];	/* small int */
-	char c_client_number[20]; 	/* int */
-	char c_command[20]; 		/* int */
-	char c_testnum[20]; 		/* int */
-	char c_no_unlink[4]; 		/* int */
-	char c_no_write[4]; 		/* int */
-	char c_pattern[20]; 		/* int */
-	char c_version[20]; 		/* int */
-	char c_base_time[20]; 		/* int */
-	char c_num_child[20]; 		/* int */
-	char c_pct_read[6]; 		/* small int */
-	char c_advise_op[4]; 		/* small int */
-	char c_advise_flag[4]; 		/* small int */
-	char c_restf[4]; 		/* small int */
-	char c_mygen[20]; 		/* long */
-	char c_depth[20]; 		/* small long long */
-	char c_child_flag[40]; 		/* small long long */
-	char c_delay[80]; 		/* long long */
-	char c_numrecs64[80]; 		/* long long */
-	char c_reclen[80]; 		/* long long */
-	char c_delay_start[80]; 	/* long long */
-	char c_compute_time[80]; 	/* float */
-};	
-
-/* 
- * Messages the clients will send to the master.
- * Internal representation on each client and the master.
- * This is used when using the network distributed mode.
- */
-struct master_command {
-	char m_host_name[100];
-	char m_client_name[100];
-	char m_stop_flag; 
-	int m_client_number;
-	int m_client_error;
-	int m_child_port;
-	int m_child_async_port;
-	int m_command;
-	int m_testnum;
-	int m_version;
-	int m_mygen;
-	float m_throughput;
-	float m_cputime;
-	float m_walltime;
-	float m_actual;
-	long long m_child_flag;
-};	
-
-/*
- * Messages that the clients will send to the master
- * over the socket. This provides neutral format
- * so that heterogeneous clusters will work.
- * This is used when using the network distributed mode.
- */
-struct master_neutral_command {
-	char m_host_name[100];
-	char m_client_name[100];
-	char m_client_number[20];	/* int */
-	char m_client_error[20];	/* int */
-	char m_stop_flag[4];		/* char +space */
-	char m_child_port[20];		/* int */
-	char m_child_async_port[20];	/* int */
-	char m_command[20];		/* int */
-	char m_testnum[20];		/* int */
-	char m_version[20];		/* int */
-	char m_mygen[20];		/* int */
-	char m_throughput[80];		/* float */
-	char m_cputime[80];		/* float */
-	char m_walltime[80];		/* float */
-	char m_actual[80];		/* float */
-	char m_child_flag[80];		/* long long */
-};	
-
-
-/*
- * Possible values for the commands sent to the master
- */
-#define R_CHILD_JOIN        1
-#define R_STAT_DATA         2
-#define R_FLAG_DATA         3
-
-/*
- * Possible values for the master's commands sent to a client
- *
- * The R_FLAG_DATA is also used by the master to tell the 
- * client to update its flags.
- */
-#define R_JOIN_ACK        4
-#define R_STOP_FLAG       5
-#define R_TERMINATE       6
-#define R_DEATH           7
-
-
-/* These are the defaults for the processor. They can be 
- * over written by the command line options.
- */
-#define CACHE_LINE_SIZE 32
-#define CACHE_SIZE ( 1024 * 1024 )
-
-
-#define MEG (1024 * 1024)
-
-/*
- * For stride testing use a prime number to avoid stripe
- * wrap hitting the same spindle.
- */
-#define STRIDE 17
-
-
-
-/************************************************************************/
-/*									*/
-/*    DEFINED CONSTANTS							*/
-/*									*/
-/* Never add a comment to the end of a #define. Some compilers will     */
-/* choke and fail the compile.						*/
-/************************************************************************/
-
-/*
- * Size of buffer for capturing the machine's name.
- */
-#define IBUFSIZE 100
-/*
- * How many I/Os before a non-uniform access.
- */
-#define DISRUPT 100
-
-/*
- * Set the crossover size. This is where the small transfers
- * are skipped to save time. There is an option to 
- * disable the skipping.
- */
-#define LARGE_REC 65536
-
-/* Default number of kilobytes in file */
-#define KILOBYTES 512 			
-
-/* Default number of bytes in a record */
-#define RECLEN 1024			
-
-/* Default size of file in bytes*/
-#define FILESIZE (KILOBYTES*1024)	
-
-/* Default number of records */
-#define NUMRECS FILESIZE/RECLEN		
-
-#ifdef __bsdi__
-/* At 8 Meg switch to large records */
-#define CROSSOVER (8*1024)		
-/*maximum buffer size*/
-#define MAXBUFFERSIZE (8*1024*1024)		
-#else
-/* At 16 Meg switch to large records */
-#define CROSSOVER (16*1024)		
-/* Maximum buffer size*/
-#define MAXBUFFERSIZE (16*1024*1024)		
-#endif
-
-/* Maximum number of children. Threads/procs/clients */
-#define	MAXSTREAMS	256		
-
-/* Minimum buffer size */
-#define MINBUFFERSIZE 128
-/* If things ran way too fast */
-#define TOOFAST 10
-/* Set the maximum number of types of tests */
-#define MAXTESTS 12
-/* Default fill pattern for verification */
-#define PATTERN get_pattern();
-#define PATTERN1 0xBB
-/* Used for Excel internal tables */
-#define MAX_X 100			
-/* Used for Excel internal tables */
-#define MAX_Y 512			
-
-#define USAGE  "\tUsage: For usage information type iozone -h \n\n"
-
-
-/* Maximum number of characters in filename */
-#define MAXNAMESIZE 1000                
-
-/*
- * Define the typical output that the user will see on their
- * screen.
- */
-#ifdef NO_PRINT_LLD
-#ifdef HAVE_PREAD
-#include <sys/times.h>
-#if defined(HAVE_PREAD) && defined(HAVE_PREADV)
-#define CONTROL_STRING1 "%16ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld %8ld %8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld%9ld%10ld%10ld%9ld\n"
-#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s%8s%9s%7s%10s%10s%10s%9s%9s\n"
-#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"
-#else
-#define CONTROL_STRING1 "%16ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld %8ld %8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld\n"
-#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s%8s%9s%7s%10s\n"
-#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s\n"
-#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"
-#endif
-#else
-#define CONTROL_STRING1 "%16ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld %8ld %8ld%8ld%8ld%9ld%9ld\n"
-#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"
-#endif
-#endif
-
-#ifndef NO_PRINT_LLD
-#ifdef HAVE_PREAD
-#include <sys/times.h>
-#if defined(HAVE_PREAD) && defined(HAVE_PREADV)
-#define CONTROL_STRING1 "%16lld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld %8ld %8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld%9ld%10ld%10ld%9ld\n"
-#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s%8s%9s%7s%10s%10s%10s%9s%9s\n"
-#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"
-#else
-#define CONTROL_STRING1 "%16lld%8ld%8ld%8ld%8ld%8ld%8ld%8ld%8ld %8ld %8ld%8ld%8ld%9ld%9ld%8ld%10ld%9ld%10ld\n"
-#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s%8s%9s%7s%10s\n"
-#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"
-#endif
-#else
-#define CONTROL_STRING1 "%16lld%8ld%8ld%8ld%8ld%8ld%8ld%8ld %8ld %8ld%8ld%8ld%8ld%9ld%9ld\n"
-#define CONTROL_STRING2 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING3 "%16s%8s%8s%8s%8s%10s%8s%8s%8s %8s %8s%9s%9s%8s%9s\n"
-#define CONTROL_STRING4 "%16s%8s%8s%8s%8s%10s\n"
-#endif
-#endif
-
-/* 
-    For 'auto mode', these defines determine the number of iterations
-    to perform for both the file size and the record length.
-*/ 
-
-/* Start with 64 kbyte minimum file size by default */
-#define KILOBYTES_START       64
-/* Default maximum file size. This is 512 Mbytes */
-#define KILOBYTES_END (1024*512)
-/* Default starting record size */
-#define RECLEN_START  4096
-/* Default maximum record size */
-#define RECLEN_END    (MAXBUFFERSIZE)
-/* Multiplier for each itteration on file and record size */
-#define MULTIPLIER    2
-
-/*
- * Assign numeric values to each of the tests.
- */
-#define WRITER_TEST		0
-#define READER_TEST		1
-#define RANDOM_RW_TEST		2
-#define REVERSE_TEST		3
-#define REWRITE_REC_TEST	4
-#define STRIDE_READ_TEST	5
-#define FWRITER_TEST		6
-#define FREADER_TEST		7
-#define RANDOM_MIX_TEST		8
-#ifdef HAVE_PREAD
-#define PWRITER_TEST		9
-#define PREADER_TEST		10	
-#endif /* HAVE_PREAD */
-#ifdef HAVE_PREADV
-#define PWRITEV_TEST		11
-#define PREADV_TEST		12
-#endif /* HAVE_PREADV */
-
-#define WRITER_MASK		(1 << WRITER_TEST)
-#define READER_MASK		(1 << READER_TEST)
-#define RANDOM_RW_MASK		(1 << RANDOM_RW_TEST)
-#define RANDOM_MIX_MASK		(1 << RANDOM_MIX_TEST)
-#define REVERSE_MASK		(1 << REVERSE_TEST)
-#define REWRITE_REC_MASK	(1 << REWRITE_REC_TEST)
-#define STRIDE_READ_MASK	(1 << STRIDE_READ_TEST)
-#define FWRITER_MASK		(1 << FWRITER_TEST)
-#define FREADER_MASK		(1 << FREADER_TEST)
-#ifdef HAVE_PREAD
-#define PWRITER_MASK		(1 << PWRITER_TEST)
-#define PREADER_MASK		(1 << PREADER_TEST)
-#endif /* HAVE_PREAD */
-#ifdef HAVE_PREADV
-#define PWRITEV_MASK		(1 << PWRITEV_TEST)
-#define PREADV_MASK		(1 << PREADV_TEST)
-#endif /* HAVE_PREADV */
-
-/*
- * child_stat->flag values and transitions
- */
-/* Parent initializes children to HOLD */
-#define CHILD_STATE_HOLD	0	
-/* Child tells master when it's READY */
-#define CHILD_STATE_READY	1	
-/* Parent tells child to BEGIN */
-#define CHILD_STATE_BEGIN	2	
-/* Child tells parent that it's DONE */
-#define CHILD_STATE_DONE	3	
-
-#define MERSENNE
-
-/******************************************************************/
-/*								  */
-/*    FUNCTION DECLARATIONS					  */
-/*								  */
-/******************************************************************/
-char *initfile();
-/*int pit_gettimeofday( struct timeval *, struct timezone *, char *, char *);*/
-int pit_gettimeofday( );
-static int openSckt( const char *, const char *, unsigned int );
-static void pit( int, struct timeval *);
-void mmap_end();
-void alloc_pbuf();
-void auto_test();		/* perform automatic test series  */
-void show_help();		/* show development help          */
-static double time_so_far();	/* time since start of program    */
-#ifdef unix
-static double utime_so_far();	/* user time 			  */
-static double stime_so_far();	/* system time   		  */
-static double clk_tck();	/* Get clocks/tick		  */
-static double cputime_so_far();
-#else
-#define cputime_so_far()	time_so_far()
-#endif
-static double time_so_far1();	/* time since start of program    */
-void get_resolution();
-void get_rusage_resolution();
-void signal_handler();		/* clean up if user interrupts us */
-void begin();			/* The main worker in the app     */
-void fetchit();			/* Prime on chip cache		  */
-void purgeit();			/* Purge on chip cache		  */
-void throughput_test();		/* Multi process throughput 	  */
-void multi_throughput_test();	/* Multi process throughput 	  */
-void prepage();			/* Pre-fault user buffer	  */
-void get_date();
-int get_pattern();		/* Set pattern based on version   */
-#ifdef HAVE_ANSIC_C
-float do_compute(float);	/* compute cycle simulation       */
-#else
-float do_compute();		/* compute cycle simulation       */
-#endif
-void write_perf_test();		/* write/rewrite test		  */
-void fwrite_perf_test();	/* fwrite/refwrite test		  */
-void fread_perf_test();		/* fread/refread test		  */
-void read_perf_test();		/* read/reread test		  */
-void mix_perf_test();		/* read/reread test		  */
-void random_perf_test();	/* random read/write test	  */
-void reverse_perf_test();	/* reverse read test		  */
-void rewriterec_perf_test();	/* rewrite record test		  */
-void read_stride_perf_test();	/* read with stride test	  */
-#ifdef HAVE_PREAD
-void pread_perf_test();		/* pread/re-pread test		  */
-void pwrite_perf_test();	/* pwrite/re-pwrite test	  */
-#endif /* HAVE_PREAD */
-#ifdef HAVE_PREADV
-void preadv_perf_test();	/* preadv/re-preadv test	  */
-void pwritev_perf_test();	/* pwritev/re-pwritev test	  */
-#endif /* HAVE_PREADV */
-void store_dvalue();		/* Store doubles array 		  */
-void dump_excel();
-void dump_throughput();
-int sp_start_child_send();
-int sp_start_master_listen();
-#ifdef HAVE_ANSIC_C
-#if defined (HAVE_PREAD) && defined(_LARGEFILE64_SOURCE)
-ssize_t pwrite64(); 
-ssize_t pread64(); 
-#endif
-#if !defined(linux)
-char *getenv();
-char *inet_ntoa();
-int system();
-#endif
-void my_nap();
-void my_unap();
-int thread_exit();
-#ifdef ASYNC_IO
-size_t async_write();
-void async_release();
-int async_read();
-int async_read_no_copy();
-size_t async_write_no_copy();
-void end_async();
-void async_init();
-#else
-size_t async_write();
-size_t async_write_no_copy();
-void async_release();
-#endif
-void do_float();
-int create_xls();
-void close_xls();
-void do_label();
-int mylockf(int, int, int);
-int mylockr(int,int, int, off64_t, off64_t);
-int rand(void);
-void srand(unsigned int);
-int get_client_info(void);
-void exit(int);
-void find_remote_shell(char *);
-void find_external_mon(char *,char *);
-void start_monitor(char *);
-void stop_monitor(char *);
-void takeoff_cache();
-void del_cache();
-void fill_area(long long *, long long *, long long);
-void fill_buffer(char *,long long ,long long ,char, long long );
-void store_value(off64_t);
-void store_times(double, double);
-static double cpu_util(double, double);
-void dump_cputimes(void);
-void purge_buffer_cache(void);
-char *alloc_mem(long long,int);
-void *(thread_rwrite_test)(void *);
-void *(thread_write_test)(void *);
-void *(thread_fwrite_test)(void *);
-void *(thread_fread_test)(void *);
-void *(thread_read_test)(void*);
-#ifdef HAVE_PREAD
-void *(thread_pread_test)(void*);
-void *(thread_pwrite_test)(void*);
-#endif
-void *(thread_cleanup_test)(void*);
-void *(thread_cleanup_quick)(void*);
-void *(thread_ranread_test)(void *);
-void *(thread_mix_test)(void *);
-void *(thread_ranwrite_test)(void *);
-void *(thread_rread_test)(void *);
-void *(thread_reverse_read_test)(void *);
-void *(thread_stride_read_test)(void *);
-void *(thread_set_base)(void *);
-void *(thread_join)(long long, void *);
-void disrupt(int);
-#if defined(Windows)
-void disruptw(HANDLE);
-#endif
-long long get_traj(FILE *, long long *, float *, long);
-void create_temp(off64_t, long long );
-FILE *open_w_traj(void);
-FILE *open_r_traj(void);
-void traj_vers(void);
-void r_traj_size(void);
-long long w_traj_size(void);
-void init_file_sizes();
-off64_t get_next_file_size(off64_t);
-void add_file_size(off64_t);
-void init_file_sizes( off64_t,  off64_t);
-off64_t get_next_record_size(off64_t);
-void add_record_size(off64_t);
-void init_record_sizes( off64_t,  off64_t);
-void del_record_sizes( void );
-void hist_insert(double );
-void dump_hist(char *,int );
-void do_speed_check(int);
-#else
-void do_speed_check();
-#if !defined(linux)
-char *getenv();
-char *inet_ntoa();
-int system();
-#endif
-void my_nap();
-void my_unap();
-int thread_exit();
-void close_xls();
-void do_label();
-int create_xls();
-void do_float();
-#ifdef ASYNC_IO
-void async_release();
-size_t async_write();
-size_t async_write_no_copy();
-int async_read();
-int async_read_no_copy();
-#endif
-int mylockf();
-int mylockr();
-int rand();
-void srand();
-int get_client_info();
-void exit();
-void find_remote_shell();
-void traj_vers();
-void r_traj_size();
-long long w_traj_size();
-FILE *open_w_traj();
-FILE *open_r_traj();
-void create_temp();
-void fill_buffer();
-char *alloc_mem();
-void *(thread_rwrite_test)();
-void *(thread_write_test)();
-void *(thread_fwrite_test)();
-void *(thread_fread_test)();
-void *(thread_read_test)();
-void *(thread_cleanup_test)();
-void *(thread_ranread_test)();
-void *(thread_mix_test)();
-void *(thread_ranwrite_test)();
-void *(thread_rread_test)();
-void *(thread_reverse_read_test)();
-void *(thread_stride_read_test)();
-void *(thread_set_base)();
-void *(thread_join)();
-void disrupt();
-long long get_traj();
-void init_file_sizes();
-off64_t get_next_file_size();
-void add_file_size();
-void init_record_sizes();
-off64_t get_next_record_size();
-void add_record_size();
-void dump_cputimes();
-static double cpu_util();
-void del_record_sizes();
-void hist_insert();
-void dump_hist();
-#endif
-
-#ifdef _LARGEFILE64_SOURCE
-#define I_LSEEK(x,y,z) 	lseek64(x,(off64_t)(y),z)
-#define I_OPEN(x,y,z) 	open64(x,(int)(y),(int)(z))
-#define I_CREAT(x,y) 	creat64(x,(int)(y))
-#define I_FOPEN(x,y) 	fopen64(x,y)
-#define I_STAT(x,y) 	stat64(x,y)
-#ifdef HAVE_PREAD
-#define I_PREAD(a,b,c,d)	pread64(a,b,(size_t)(c),(off64_t)(d))
-#define I_PWRITE(a,b,c,d)	pwrite64(a,b,(size_t)(c),(off64_t)(d))
-#endif
-#define I_MMAP(a,b,c,d,e,f) 	mmap64((void *)(a),(size_t)(b),(int)(c),(int)(d),(int)(e),(off64_t)(f))
-#else
-#define I_LSEEK(x,y,z) 	lseek(x,(off_t)(y),z)
-#define I_OPEN(x,y,z) 	open(x,(int)(y),(int)(z))
-#define I_CREAT(x,y) 	creat(x,(int)(y))
-#define I_FOPEN(x,y) 	fopen(x,y)
-#define I_STAT(x,y) 	stat(x,y)
-#ifdef HAVE_PREAD
-#define I_PREAD(a,b,c,d)	pread(a,b,(size_t)(c),(off_t)(d))
-#define I_PWRITE(a,b,c,d)	pwrite(a,b,(size_t)(c),(off_t)(d))
-#endif
-#define I_MMAP(a,b,c,d,e,f) 	mmap((void *)(a),(size_t)(b),(int)(c),(int)(d),(int)(e),(off_t)(f))
-#endif
-
-
-/************************************************************************/
-/* The list of tests to be called.					*/
-/************************************************************************/
-void (*func[])() = { 
-			write_perf_test, 
-			read_perf_test,
-			random_perf_test,
-			reverse_perf_test,
-			rewriterec_perf_test,
-			read_stride_perf_test,
-			fwrite_perf_test,
-			fread_perf_test,
-			mix_perf_test 
-#ifdef HAVE_PREAD
-			,
-			pwrite_perf_test,
-			pread_perf_test
-#ifdef HAVE_PREADV
-			,
-			pwritev_perf_test,
-			preadv_perf_test
-#endif /* HAVE_PREADV */
-#endif /* HAVE_PREAD */
-	};
-
-/*
-char *test_output[] = {"                ",
-		      "                  ",
-		      "                ",
-		      "        ",
-		      "        ",
-		      "        ",
-		      "                  ",
-		      "                ",
-		      "                 ",
-		      "                 ",
-		      "                   ",
-		      "                   \n" };
-*/
-char *test_output[] = {"                ",
-		      "                  ",
-		      "                ",
-		      "        ",
-		      "        ",
-		      "        ",
-		      "                  ",
-		      "                ",
-		      "",
-		      "                 ",
-		      "                   ",
-		      "                   ",
-		      "                   ",
-		      "                   ",
-		      "                   ",
-		      "                   \n" };
-long long test_soutput[] = {2,2,2,1,1,1,2,2,2,2,2,2,2,2};
-
-
-/******************************************************************/
-/*								  */
-/*    GLOBAL VARIABLES					          */
-/*								  */
-/*******************************************************************/
-
-/*
- * Set the size of the shared memory segment for the children
- * to put their results.
- */
-#define SHMSIZE  ((( sizeof(struct child_stats) * MAXSTREAMS) )+4096 )
-/*
- * Pointer to the shared memory segment.
- */
-VOLATILE struct child_stats *shmaddr;
-double totaltime,total_time, temp_time ,total_kilos;
-off64_t report_array[MAX_X][MAX_Y];
-double report_darray[MAX_X][MAXSTREAMS];
-double time_res,cputime_res;
-long long throughput_array[MAX_X];	/* Filesize & record size are constants */
-short current_x, current_y;
-long long orig_size;
-long long max_x, max_y;
-unsigned long long goodkilos;
-off64_t kilobytes64 = (off64_t)KILOBYTES;
-long long goodrecl;
-off64_t offset = 0;               /*offset for random I/O */
-off64_t offset64 = 0;               /*offset for random I/O */
-off64_t filebytes64;
-off64_t r_range[100];
-off64_t s_range[100];
-int t_range[100];
-int t_count = 0;
-int r_count,s_count;
-char *barray[MAXSTREAMS];
-char *haveshm;
-extern int optind;
-long long onetime, auto_mode, sfd, multi_buffer;
-int fd;
-int sp_msfd,sp_mrfd,sp_csfd,sp_crfd;
-int begin_proc,num_processors,ioz_processor_bind;
-long long res_prob,rec_prob;
-char silent,read_sync;
-char master_iozone, client_iozone,distributed;
-int bif_fd,s_count;
-int bif_row,bif_column;
-int dedup_mseed = 1;
-int hist_summary;
-int op_rate;
-int op_rate_flag;
-char aflag, Eflag, hflag, Rflag, rflag, sflag;
-char diag_v,sent_stop,dedup,dedup_interior,dedup_compress;
-char *dedup_ibuf;
-char *dedup_temp;
-char bif_flag;
-int rlocking;
-int share_file;
-int ecount;
-char gflag,nflag;
-char yflag,qflag;
-#ifdef Windows
-char *build_name = "Windows";
-#else
-char *build_name = NAME;
-#endif
-char imon_start[256],imon_stop[256]; 
-char imon_sync;
-char trflag; 
-char cpuutilflag;
-char seq_mix;
-long base_time;
-long long mint, maxt; 
-long long w_traj_ops, r_traj_ops, w_traj_fsize,r_traj_fsize;
-long long r_traj_ops_completed,r_traj_bytes_completed;
-long long w_traj_ops_completed,w_traj_bytes_completed;
-int w_traj_items, r_traj_items;
-char fflag, Uflag,uflag,lflag,include_tflag; 
-struct runtime runtimes [MAX_X] [MAX_Y];	/* in parallel with report_array[][] */
-long long include_test[50];
-long long include_mask;
-char RWONLYflag, NOCROSSflag;		/*auto mode 2 - kcollins 8-21-96*/
-char mfflag;
-long long status, x, y, childids[MAXSTREAMS+1], myid, num_child;
-int pct_read,speed_code;
-#ifndef NO_THREADS
-pthread_t p_childids[MAXSTREAMS+1];
-#endif
-off64_t next64;
-char wol_opened, rol_opened;
-FILE *wqfd,*rwqfd,*rqfd,*rrqfd;
-
-extern char *optarg;
-#ifndef __AIX__
-long long ret;
-#else
-short ret;
-#endif
-struct size_entry {
-	struct size_entry *next;
-	off64_t size;
-};
-struct size_entry *size_list=0;
-struct size_entry *rec_size_list=0;
-off64_t maximum_file_size;
-off64_t minimum_file_size;
-
-char bif_filename [MAXNAMESIZE];           /* name of biff file      */
-char filename [MAXNAMESIZE];               /* name of temporary file */
-char mountname [MAXNAMESIZE];              /* name of device         */
-char dummyfile [MAXSTREAMS][MAXNAMESIZE];  /* name of dummy file     */
-char dummyfile1 [MAXNAMESIZE];             /* name of dummy file     */
-char *filearray[MAXSTREAMS];		   /* array of file names    */
-char tfile[] = "iozone";
-char *buffer,*buffer1, *mbuffer,*mainbuffer;
-FILE *pi,*r_traj_fd,*w_traj_fd;
-VOLATILE char *pbuffer;
-char *default_filename="iozone.tmp"; /*default name of temporary file*/
-VOLATILE char stoptime;
-char Cflag;
-char use_thread = 0;
-long long debug1=0;		
-long long debug=0;
-unsigned long cache_size=CACHE_SIZE;
-unsigned long cache_line_size=CACHE_LINE_SIZE;
-long long *pstatus;
-off64_t min_file_size = KILOBYTES_START;
-off64_t max_file_size = KILOBYTES_END;
-long long min_rec_size = RECLEN_START;
-long long max_rec_size = RECLEN_END;
-long long orig_min_rec_size = RECLEN_START;
-long long orig_max_rec_size = RECLEN_END;
-long long xover = CROSSOVER;
-char *throughput_tests[] = {"Initial write","Rewrite","Read","Re-read",
-	"Reverse Read","Stride read","Random read","Mixed workload","Random write","Pwrite","Pread","Fwrite","Fread"};
-char command_line[1024] = "\0";
-#ifdef unix
-double sc_clk_tck;
-#endif
-
-int argcsave;
-char **argvsave;
-char splash[80][80];
-int splash_line;
-char client_filename[256];
-char remote_shell[256];
-int client_error;
-
-char pit_hostname[40];
-char pit_service[8];
-int junk;
-
-/* 
- * Host ports used to listen, and handle errors.
- */
-#define HOST_LIST_PORT 20000
-#define HOST_ESEND_PORT (HOST_LIST_PORT+MAXSTREAMS)
-#define HOST_ASEND_PORT (HOST_ESEND_PORT+MAXSTREAMS)
-int controlling_host_port = HOST_LIST_PORT;
-
-/* 
- * Childs ports used to listen, and handle errors.
- */
-#define CHILD_ESEND_PORT (HOST_ASEND_PORT+MAXSTREAMS)
-#define CHILD_LIST_PORT (CHILD_ESEND_PORT+MAXSTREAMS)
-
-/* Childs async message port. Used for stop flag and terminate */
-#define CHILD_ALIST_PORT (CHILD_LIST_PORT+MAXSTREAMS)
-
-/* Ports for the network speed code */
-#define SP_CHILD_LISTEN_PORT 31000
-#define SP_CHILD_ESEND_PORT (SP_CHILD_LISTEN_PORT+10)
-#define SP_MASTER_LISTEN_PORT (SP_CHILD_ESEND_PORT+10)
-#define SP_MASTER_ESEND_PORT (SP_MASTER_LISTEN_PORT+10)
-#define SP_MASTER_RESULTS_PORT (SP_MASTER_ESEND_PORT+10)
-
-
-#define THREAD_WRITE_TEST 1
-#define THREAD_REWRITE_TEST 2
-#define THREAD_READ_TEST 3
-#define THREAD_REREAD_TEST 4
-#define THREAD_STRIDE_TEST 5
-#define THREAD_RANDOM_READ_TEST 6
-#define THREAD_RANDOM_WRITE_TEST 7
-#define THREAD_REVERSE_READ_TEST 8
-#define THREAD_RANDOM_MIX_TEST 9
-#define THREAD_PWRITE_TEST 10
-#define THREAD_PREAD_TEST 11
-#define THREAD_FWRITE_TEST 12
-#define THREAD_FREAD_TEST 13
-#define THREAD_CLEANUP_TEST 14
-
-/*
- * Child states that the master is tracking.
- * The master uses these to determine how to shutdown
- * the clients when some fool hits control-C.
- */
-#define C_STATE_ZERO 1
-#define C_STATE_WAIT_WHO 2
-#define C_STATE_WAIT_BARRIER 3
-
-
-int c_port,a_port; /* port number */
-int child_port; /* Virtualized due to fork */
-int child_async_port; /* Virtualized due to fork */
-int client_listen_pid; /* Virtualized due to fork */
-int master_join_count; /* How many children have joined */
-int l_sock,l_async_sock; /* Sockets for listening */
-char master_rcv_buf[4096]; /* Master's receive buffer */
-int master_listen_pid; /* Pid of the master's async listener proc */
-char master_send_buf[4096]; /* Master's send buffer */
-char child_rcv_buf[4096]; /* Child's receive buffer */
-char child_async_rcv_buf[4096]; /* Child's async recieve buffer */
-char child_send_buf[4096]; /* Child's send buffer */
-int child_send_socket; /* Child's send socket */
-int child_listen_socket; /* Child's listener socket */
-int child_listen_socket_async; /* Child's async listener socket */
-int master_send_socket; /* Needs to be an array. One for each child*/
-int master_send_sockets[MAXSTREAMS]; /* Needs to be an array. One for each child*/
-int master_send_async_sockets[MAXSTREAMS]; /* Needs to be an array. One for each child*/
-int master_listen_port; /* Master's listener port number */
-int master_listen_socket; /* Master's listener socket */
-int clients_found; /* Number of clients found in the client file */
-FILE *newstdin, *newstdout, *newstderr; /* used for debug in cluster mode.*/
-char toutput[20][20]; /* Used to help format the output */
-int toutputindex; /* Index to the current output line */
-int cdebug = 0; /* Use to turn on child/client debugging in cluster mode. */
-int mdebug = 0; /* Use to turn on master debug in cluster mode */
-int aggflag; /* Used to indicate constant aggregate data set size */
-struct sockaddr_in child_sync_sock, child_async_sock;
-
-/*
- * Change this whenever you change the message format of master or client.
- */
-int proto_version = 25;
-
-/******************************************************************************/
-/* Tele-port zone. These variables are updated on the clients when one is     */
-/* using cluster mode. (-+m)                                                  */
-/* Do not touch these unless you have become one with the universe !!         */
-/******************************************************************************/
-char controlling_host_name[100];
-struct child_ident {
-	char child_name[100];
-	char workdir[200];
-	char execute_path[200];
-	char file_name[200];
-	int state;
-	int child_number;
-	int child_port;
-	int child_async_port;
-	int master_socket_num;
-	int master_async_socket_num;
-}child_idents[MAXSTREAMS];
-int Kplus_readers;
-char write_traj_filename [MAXNAMESIZE];     /* name of write telemetry file */
-char read_traj_filename [MAXNAMESIZE];    /* name of read telemetry file  */
-char oflag,jflag,k_flag,h_flag,mflag,pflag,unbuffered,Kplus_flag;
-char noretest;
-char notruncate;   /* turn off truncation of files */
-char async_flag,stride_flag,mmapflag,mmapasflag,mmapssflag,mmapnsflag,mmap_mix;
-char verify = 1;
-int restf;
-char sverify = 1;
-char odsync = 0;
-char Q_flag,OPS_flag;
-char L_flag=0;
-char no_copy_flag,include_close,include_flush;
-char disrupt_flag,compute_flag,xflag,Z_flag, X_flag;
-int no_unlink = 0;
-int no_write = 0;
-int r_traj_flag,w_traj_flag;
-int mygen;
-char MS_flag;
-int advise_op,advise_flag;
-int direct_flag;
-int current_client_number;
-long long chid;
-int file_lock;
-unsigned int pattern;
-long long stride = STRIDE;
-long long delay,purge,fetchon;
-off64_t  numrecs64 = (off64_t)NUMRECS;
-long long reclen = RECLEN;
-long long delay_start,depth;
-VOLATILE char *stop_flag;		/* Used to stop all children */
-float compute_time;
-int multiplier = MULTIPLIER;
-long long rest_val;
-#if defined(Windows)
-	HANDLE hand;
-#endif
-
-/******************************************************************************/
-/* End of Tele-port zone.                                                     */
-/******************************************************************************/
-
-
-/* 
- * Prototypes
- * Sort of... Full prototypes break non-ansi C compilers. No protos is 
- * a bit sloppy, so the compromise is this.
- */
-void child_send();
-int start_child_listen();
-int start_child_listen_async();
-void start_child_listen_loop();
-void child_listen();
-void child_listen_async();
-void stop_child_send();
-void stop_child_listen();
-void cleanup_comm();
-void master_send();
-int start_master_send();
-int start_master_listen();
-int check_filename();
-void master_listen();
-void stop_master_send();
-void stop_master_listen();
-long long start_child_proc();
-int parse_client_line();
-void wait_dist_join();
-void tell_children_begin();
-void start_master_listen_loop();
-void wait_for_master_go();
-void tell_master_ready();
-void stop_master_listen_loop();
-void tell_master_stats();
-void become_client();
-int pick_client();
-long long start_child_proc();
-int start_master_send();
-void child_listen();
-int start_child_listen();
-void stop_master_send();
-void stop_master_listen();
-void stop_child_send();
-void stop_child_listen();
-void master_send();
-void child_send();
-void master_listen();
-int start_master_listen();
-void child_remove_files();
-void terminate_child_async();
-void distribute_stop();
-void send_stop();
-void cleanup_children();
-
-
-/****************************************************************/
-/*								*/
-/*   MAIN () 							*/
-/*								*/
-/****************************************************************/
-
-int
-main(argc,argv) 
-int argc;
-char **argv;
-{
-
-	long long fileindx,i,tval;
-	long long ind;
-	int ret;
-	FILE *pi;
-	char reply[IBUFSIZE];
-	unsigned char inp_pat;
-	time_t time_run;
-	char *port,*m,*subarg;
-	int num_child1;
-	int cret;
-	int anwser,bind_cpu;
-	char *evalue;
-
-
-	anwser=bind_cpu=0;
-	/* Used to make fread/fwrite do something better than their defaults */
-	setvbuf( stdout, NULL, _IONBF, (size_t) NULL );
-	setvbuf( stderr, NULL, _IONBF, (size_t) NULL );
-	
-	/* Save the master's name */
-	gethostname(controlling_host_name,100);
-
-	/* Let user activate mdebug or cdebug via environmental variables */
-	evalue = (char *)NULL;
-	evalue=(char *)getenv("CDEBUG");
-	if(evalue)
-		cdebug=atoi(evalue);
-	evalue = (char *)NULL;
-	evalue=(char *)getenv("MDEBUG");
-	if(evalue)
-		mdebug=atoi(evalue);
-
-	srand(time(0));
-	mygen=rand(); /* Pick a random generation number */
-
-	/* Try to find the actual VM page size, if possible */
-#if defined (solaris) || defined (_HPUX_SOURCE) || defined (linux) || defined(IRIX) || defined (IRIX64)
-#ifndef __convex_spp
-	page_size=getpagesize();
-#endif
-#endif
-	/* Try to find the actual number of ticks per second */
-#ifdef unix
-	sc_clk_tck = clk_tck();
-#endif
-	for(ind=0;ind<MAXSTREAMS;ind++)
-		filearray[ind]=(char *)tfile;
-
-	/* base_time=(long)time_so_far(); */
-	myid=(long long)getpid(); 	/* save the master's PID */
-	/* get_resolution(); 		 Get clock resolution */
-	time_run = time(0);		/* Start a timer */
-	(void)find_external_mon(imon_start, imon_stop);
-
-	/*
- 	 * Save the splash screen for later display. When in distributed network
-	 * mode this output does not get displayed on the clients.
-	 */
-	sprintf(splash[splash_line++],"\tIozone: Performance Test of File I/O\n");
-    	sprintf(splash[splash_line++],"\t%s\n\t%s\n", THISVERSION,MODE);
-    	sprintf(splash[splash_line++],"\t\tBuild: %s \n\n",build_name);
-    	sprintf(splash[splash_line++],"\tContributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins\n");
-	sprintf(splash[splash_line++],"\t             Al Slater, Scott Rhine, Mike Wisner, Ken Goss\n");
-    	sprintf(splash[splash_line++],"\t             Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,\n");
-    	sprintf(splash[splash_line++],"\t             Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,\n");
-    	sprintf(splash[splash_line++],"\t             Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,\n");
-    	sprintf(splash[splash_line++],"\t             Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,\n");
-    	sprintf(splash[splash_line++],"\t             Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer.\n");
-    	sprintf(splash[splash_line++],"\t             Ben England.\n\n");
-	sprintf(splash[splash_line++],"\tRun began: %s\n",ctime(&time_run));
-	argcsave=argc;
-	argvsave=argv;
-
-    	signal(SIGINT, signal_handler);	 	/* handle user interrupt */
-    	signal(SIGTERM, signal_handler);	/* handle kill from shell */
-
-        /********************************************************/
-        /* Allocate and align buffer with beginning of the 	*/
-        /* on chip data cache. 					*/
-        /********************************************************/
-
-     	buffer = (char *) alloc_mem((long long)(MAXBUFFERSIZE + (2 * cache_size)),(int)0);
-	if(buffer == 0) {
-        	perror("Memory allocation failed:");
-        	exit(1);
-        }
-
-#ifdef _64BIT_ARCH_
-     	buffer = (char *) ((long long )(buffer + cache_size ) & 
-		~(cache_size-1));
-#else
-     	buffer = (char *) ((long)(buffer + cache_size ) & 
-		~((long)cache_size-1));
-#endif
-	mainbuffer = buffer;
-
-	/* de-dup input buf */
-     	buffer1 = (char *) alloc_mem((long long)(MAXBUFFERSIZE + (2 * cache_size)),(int)0);
-	if(buffer1 == 0) {
-        	perror("Memory allocation failed:");
-        	exit(1);
-        }
-
-#ifdef _64BIT_ARCH_
-     	buffer1 = (char *) ((long long )(buffer1 + cache_size ) & 
-		~(cache_size-1));
-#else
-     	buffer1 = (char *) ((long)(buffer1 + cache_size ) & 
-		~((long)cache_size-1));
-#endif
-	dedup_ibuf = buffer1;
-	touch_dedup(buffer1, MAXBUFFERSIZE);
-
-#ifdef FOOB
-	/* de-dup temp buf */
-     	buffer1 = (char *) alloc_mem((long long)(MAXBUFFERSIZE + (2 * cache_size)),(int)0);
-	if(buffer1 == 0) {
-        	perror("Memory allocation failed:");
-        	exit(1);
-        }
-
-#ifdef _64BIT_ARCH_
-     	buffer1 = (char *) ((long long )(buffer1 + cache_size ) & 
-		~(cache_size-1));
-#else
-     	buffer1 = (char *) ((long)(buffer1 + cache_size ) & 
-		~((long)cache_size-1));
-#endif
-#endif
-	dedup_temp = mainbuffer;
-
-	fetchon++;  /* By default, prefetch the CPU cache lines associated with the buffer */
-  	strcpy(filename,default_filename); 	/* Init default filename */
-  	sprintf(dummyfile[0],"%s.DUMMY",default_filename);
-	if(argc <=1){
-		printf(USAGE);
-		exit(255);
-	}
-	auto_mode = 0; 		/* Default is to disable auto mode */
-	inp_pat = PATTERN; 	/* Init default pattern for verification */
-	/* Fill the entire pattern variable with the same character */
-	pattern = ((inp_pat << 24) | (inp_pat << 16) | (inp_pat << 8) | inp_pat);
-
-	/*
-	 * Parse all of the options that the user specified.
-	 */
-	while((cret = getopt(argc,argv,"ZQNIBDGCTOMREWovAxamwphcezKJ:j:k:V:r:t:s:f:F:d:l:u:U:S:L:H:+:P:i:b:X:Y:g:n:y:q: ")) != EOF){
-		switch(cret){
-		case 'k':	/* Async I/O with no bcopys */
-			depth = (long long)(atoi(optarg));
-			if(depth <0)
-				depth=0;
-			/*
-			if(depth > 60)
-				depth=60;
-			*/
-#ifdef NO_PRINT_LLD
-			sprintf(splash[splash_line++],"\tPOSIX Async I/O (no bcopy). Depth %ld \n",depth);
-#else
-			sprintf(splash[splash_line++],"\tPOSIX Async I/O (no bcopy). Depth %lld \n",depth);
-#endif
-			no_copy_flag=1;
-			async_flag++;
-			k_flag++;
-			break;
-		case 'T':	/* Switch to POSIX thread based */
-#ifndef NO_THREADS
-			use_thread++;
-#else
-			printf("\tThreads not supported in this version\n");
-			exit(2);
-#endif
-			break;
-		case 'H':	/* Use POSIX async_io */
-			h_flag++;
-			depth = (long long)(atoi(optarg));
-			if(depth <0)
-				depth=0;
-			/*
-			 * Hmmm. many systems fail is strange ways when the maximum
-			 * number of async I/Os per user or proc is exceeded.
-			 */
-			/*
-			if(depth > 60)
-				depth=60;
-			*/
-#ifdef NO_PRINT_LLD
-			sprintf(splash[splash_line++],"\tPOSIX async I/O (with bcopy). Depth %ld\n",depth);
-#else
-			sprintf(splash[splash_line++],"\tPOSIX async I/O (with bcopy). Depth %lld\n",depth);
-#endif
-			async_flag++;
-			break;
-		case 'I':	/* Use VXFS direct advisory or O_DIRECT from Linux or AIX , or O_DIRECTIO for TRU64  or Solaris directio */
-#ifdef VXFS
-			direct_flag++;
-			sprintf(splash[splash_line++],"\tVxFS advanced feature SET_CACHE, VX_DIRECT enabled\n");
-			break;
-#endif
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined(__FreeBSD__) || defined(solaris)
-			direct_flag++;
-			sprintf(splash[splash_line++],"\tO_DIRECT feature enabled\n");
-			break;
-#endif
-#if defined(TRU64)
-			direct_flag++;
-			sprintf(splash[splash_line++],"\tO_DIRECTIO feature enabled\n");
-			break;
-#endif
-#else
-			break;
-#endif
-#if defined(Windows)
-			sprintf(splash[splash_line++],"\tO_DIRECTIO feature not available in Windows version.\n");
-			break;
-#endif
-		case 'B':	/* Use mmap file for test file */
-			sprintf(splash[splash_line++],"\tUsing mmap files\n");
-			mmapflag++;
-			mmapnsflag++;
-			break;
-		case 'D':	/* Use async msync mmap file */
-			sprintf(splash[splash_line++],"\tUsing msync(MS_ASYNC) on mmap files\n");
-			mmapflag++;
-			mmapasflag++;
-			mmapnsflag=0;
-			break;
-		case 'G':	/* Use msync sync for mmap file */
-			sprintf(splash[splash_line++],"\tUsing msync(MS_SYNC) on mmap files\n");
-			mmapssflag++;
-			mmapnsflag=0;
-			break;
-		case 'C':	/* show children xfer counts */
-			Cflag++;
-			break;
-		case 'Q':	/* Enable output offset/latency files */
-	    		sprintf(splash[splash_line++],"\tOffset/latency files enabled.\n");
-			Q_flag++;
-			break;
-		case 'x':	/* Disable stone_wall */
-	    		sprintf(splash[splash_line++],"\tStonewall disabled\n");
-			xflag++;
-			break;
-
-		case 'a':	/* auto mode */
-			fetchon=1;
-			purge=0;
-			multi_buffer=0;
-	    		auto_mode = 1;
-			aflag++;
-	    		sprintf(splash[splash_line++],"\tAuto Mode\n");
-			break;
-		case 'c':	/* Include close in timing */
-			include_close++;
-	    		sprintf(splash[splash_line++],"\tInclude close in write timing\n");
-			break;
-		case 'e':	/* Include fsync in timing */
-			include_flush++;
-	    		sprintf(splash[splash_line++],"\tInclude fsync in write timing\n");
-			break;
-		case 'A':	/* auto2 mode. Soon to go away. Please use -az */
-			fetchon=1;
-			purge=0;
-			multi_buffer=0;
-	    		auto_mode = 1;
-			aflag++;
-	    		sprintf(splash[splash_line++],"\tAuto Mode 2. This option is obsolete. Use -az -i0 -i1 \n");
-			RWONLYflag++;
-			NOCROSSflag++;
-			include_tflag++;	/* automatically set WRITER_TEST and READER_TEST */
-			include_test[WRITER_TEST]++;
-			include_test[READER_TEST]++;
-			break;
-		case 's': 	/* Set file size */
-#ifdef NO_PRINT_LLD
-			sscanf(optarg,"%ld",&kilobytes64);
-#else
-			sscanf(optarg,"%lld",&kilobytes64);
-#endif
-			if(optarg[strlen(optarg)-1]=='k' ||
-				optarg[strlen(optarg)-1]=='K'){
-				;
-			}
-			if(optarg[strlen(optarg)-1]=='m' ||
-				optarg[strlen(optarg)-1]=='M'){
-				kilobytes64 = kilobytes64 * 1024;
-			}
-			if(optarg[strlen(optarg)-1]=='g' ||
-				optarg[strlen(optarg)-1]=='G'){
-				kilobytes64 = kilobytes64 *1024 * 1024;
-			}
-			if(kilobytes64 <= 0)
-				kilobytes64=512;
-
-			s_range[s_count++]=kilobytes64;
-			max_file_size = (off64_t)s_range[s_count-1];   /* Make visable globally */
-			min_file_size = (off64_t)s_range[0];   /* Make visable globally */
-
-#ifdef NO_PRINT_LLD
-	    		sprintf(splash[splash_line++],"\tFile size set to %ld KB\n",kilobytes64);
-#else
-	    		sprintf(splash[splash_line++],"\tFile size set to %lld KB\n",kilobytes64);
-#endif
-			sflag++;
-			break;
-		case 'l': 	/* Set lower thread/proc limit  */
-			mint = (long long)(atoi(optarg));
-			if(mint <= 0)
-			{
-				mint=1;
-				num_child=1;
-			}else
-				num_child=mint;
-			if(mint > (unsigned long long)MAXSTREAMS){
-			  printf("Invalid options: maximum streams for ");
-			  printf("throughput is MAXSTREAMS\n");
-			  exit(4);
-			}
-			lflag++;
-			trflag++;
-			if(Uflag)
-			{
-				printf("Can not run throughput tests with unmount & remounts.\n");
-				exit(5);
-			}
-			break;
-		case 'u': 	/* Set upper thread/proc limit  */
-			maxt = (long long)(atoi(optarg));
-			if(maxt <= 0)
-				maxt=1;
-			if(maxt > MAXSTREAMS){
-			  printf("Invalid options: maximum streams for ");
-			  printf("throughput is MAXSTREAMS\n");
-			  exit(6);
-			}
-			uflag++;
-			trflag++;
-			if(Uflag)
-			{
-				printf("Can not run throughput tests with unmount & remounts.\n");
-				exit(7);
-			}
-			break;
-		case 'm':	/* Use multiple buffers */
-			fetchon=0;
-			multi_buffer=1;
-			mflag++;
-     			mbuffer = (char *) alloc_mem((long long)MAXBUFFERSIZE,(int)0);
-			if(mbuffer == 0) {
-                        	perror("Memory allocation failed:");
-                          	exit(8);
-			}
-	    		sprintf(splash[splash_line++],"\tMulti_buffer. Work area %d bytes\n",
-				MAXBUFFERSIZE);
-			break;
-                case 'M':       /* Report machine name and OS */
-			bzero(reply,sizeof(reply));
-                        pi=popen("uname -a", "r");
-			if(pi == (FILE *)0)
-			{
-				sprintf(splash[splash_line++],"\n\tError using popen() on uname\n");
-				sprintf(splash[splash_line++],"\t-M option suppressed.\n");
-			}
-			else
-			{
-                        	junk=fread(reply,IBUFSIZE-1,1,pi);
-                        	pclose(pi);
-				m=reply;
-                        	while(*m) /* Strip new line */
-				{
-					if(*m=='\n')
-                               		 	*m=0;
-					else	
-                               		 	m++;
-				}
-                        	sprintf(splash[splash_line++],"\n\tMachine = %s\n",reply);
-			}
-                        break;
-
-		case 'P':	/* Set beginning processor for binding. */
-#ifndef NO_THREADS
-#if defined(_HPUX_SOURCE) || defined(linux)
-#if defined(_HPUX_SOURCE)
-			num_processors= pthread_num_processors_np();
-#else
-      num_processors = sysconf(_SC_NPROCESSORS_ONLN);
-#endif      
-			begin_proc = atoi(optarg);
-			if(begin_proc < 0)
-				begin_proc=0;
-			if(begin_proc > num_processors)
-				begin_proc=0;
-                        sprintf(splash[splash_line++],"\tBinding of processors beginning with %d \n",begin_proc);
-			ioz_processor_bind++;
-#else
-			sprintf(splash[splash_line++],"\tProcessor binding not available in this version\n");
-#endif
-#endif
-                        break;
-		case 'p':	/* purge the processor cache */
-	    		sprintf(splash[splash_line++],"\tPurge Mode On\n");
-			fetchon=0;
-			pflag++;
-			purge=1;
-			break;
-		case 'h':	/* show help */
-			hflag++;
-	    		show_help();
-			exit(0);
-			break;
-		case 'E':	/* Extended testing for pread/pwrite... */
-			Eflag++;
-			break;
-		case 'R':	/* Generate Excel compatible Report */
-			Rflag++;
-	    		sprintf(splash[splash_line++],"\tExcel chart generation enabled\n");
-			break;
-		case 'o':	/* Open OSYNC */
-	    		sprintf(splash[splash_line++],"\tSYNC Mode. \n");
-			oflag++;
-			break;
-		case 'O':	/* Report in Ops/sec instead of KB/sec */
-	    		sprintf(splash[splash_line++],"\tOPS Mode. Output is in operations per second.\n");
-			OPS_flag++;
-			break;
-		case 'N':	/* Report in usec/op  */
-	    		sprintf(splash[splash_line++],"\tMicroseconds/op Mode. Output is in microseconds per operation.\n");
-			MS_flag++;
-			break;
-		case 'V':	/* Turn on Verify every byte */
-			sverify=0;
-			inp_pat = (char)(atoi(optarg));
-			if(inp_pat == 0)
-				inp_pat = PATTERN;
-			pattern = ((inp_pat << 24) | (inp_pat << 16) | (inp_pat << 8) 
-				| inp_pat);
-			verify=1;
-	    		sprintf(splash[splash_line++],"\tVerify Mode. Pattern %x\n",pattern);
-    			sprintf(splash[splash_line++],"\tPerformance measurements are invalid in this mode.\n");
-			break;
-		case 'S':	/* Set the processor cache size */
-			cache_size = (long)(atoi(optarg)*1024);
-			if(cache_size == 0)
-				cache_size = CACHE_SIZE;
-			break;
-		case 'L':	/* Set processor cache line size */
-			cache_line_size = (long)(atoi(optarg));
-			if(cache_line_size == 0)
-				cache_line_size = CACHE_LINE_SIZE;
-			break;
-		case 'f':	/* Specify the file name */
-			if(mfflag) {
-			  printf("invalid options: -f and -F are mutually exclusive\n");
-			  exit(10);
-			}
-			fflag++;
-			strcpy(filename,optarg);
-	  		sprintf(dummyfile[0],"%s.DUMMY",optarg);
-			break;
-		case 'b':	/* Specify the biff file name */
-			Rflag++;
-			bif_flag++;
-			strcpy(bif_filename,optarg);
-			break;
-		case 'F':	/* Specify multiple file names for -t */
-	 		mfflag++;
-			if(fflag) {
-			  printf("invalid options: -f and -F are mutually exclusive\n");
-			  exit(11);
-			}
-			if(!trflag) {
-			  printf("invalid options: must specify -t N before -F\n");
-			  exit(12);
-			}
-			optind--;
-			for(fileindx=0;fileindx<maxt;fileindx++) {
-			  filearray[fileindx]=argv[optind++];
-			  if(optind > argc) {
-#ifdef NO_PRINT_LLD
-			    printf("invalid options: not enough filenames for %ld streams\n",num_child);
-#else
-			    printf("invalid options: not enough filenames for %lld streams\n",num_child);
-#endif
-			    exit(13);
-			  }
-			}
-			break;
-		case 'r':	/* Specify the record size to use */
-			rflag++;
-			reclen = ((long long)(atoi(optarg))*1024);
-			if(optarg[strlen(optarg)-1]=='k' ||
-				optarg[strlen(optarg)-1]=='K'){
-				reclen = (long long)(1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='m' ||
-				optarg[strlen(optarg)-1]=='M'){
-				reclen = (long long)(1024 * 1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='g' ||
-				optarg[strlen(optarg)-1]=='G'){
-				reclen = (long long)(1024 * 1024 * 1024 *(long long)atoi(optarg));
-			}
-			if(reclen <= 0)
-				reclen=(long long)4096;
-
-			r_range[r_count++]=reclen;
-			max_rec_size = (off64_t)r_range[r_count-1];   /* Make visable globally */
-			min_rec_size = (off64_t)r_range[0];   /* Make visable globally */
-#ifdef NO_PRINT_LLD
-	    		sprintf(splash[splash_line++],"\tRecord Size %ld KB\n",reclen/1024);
-#else
-	    		sprintf(splash[splash_line++],"\tRecord Size %lld KB\n",reclen/1024);
-#endif
-			if(max_rec_size > MAXBUFFERSIZE) {
-#ifdef NO_PRINT_LLD
-				printf("Error: maximum record size %ld KB is greater than maximum buffer size %ld KB\n ",
-					max_rec_size/1024, MAXBUFFERSIZE/1024);
-#else
-				printf("Error: maximum record size %lld KB is greater than maximum buffer size %lld KB\n ",
-					(long long)(max_rec_size/1024LL), (long long)MAXBUFFERSIZE/1024LL);
-#endif
-				exit(23);
-			}
-			break;
-		case 'J':	/* Specify the compute time in millisecs */
-			compute_time = (float)(atoi(optarg));
-			compute_time=compute_time/1000;	
-			if(compute_time < (float)0)
-				compute_time=(float)0;
-			else
-				compute_flag=1;
-			jflag++;
-			break;
-		case 'j':	/* Specify the stride in records */
-			stride = (long long)(atoi(optarg));
-			if(stride < 0)
-				stride=0;
-			stride_flag=1;
-			break;
-		case 't':	/* Specify the number of children to run */
-			num_child1=(atoi(optarg));
-			num_child = (long long)num_child1;
-			if(num_child > (long long)MAXSTREAMS) {
-			  printf("invalid options: maximum streams for throughput is MAXSTREAMS\n");
-#ifdef NO_PRINT_LLD
-			  printf("Numchild %ld %s\n",num_child,optarg);
-#else
-			  printf("Numchild %lld %s\n",num_child,optarg);
-#endif
-			  exit(14);
-			}
-			if(num_child <= 0)
-				num_child = 8;
-			if(num_child == 0)
-				num_child=1;
-                        t_range[t_count++]=num_child;
-                        maxt = (maxt>num_child?maxt:num_child);
-			trflag++;
-			if(Uflag)
-			{
-				printf("Can not run throughput tests with unmount & remounts.\n");
-				exit(15);
-			}
-			break;
-		case 'd':	/* Specify the delay of children to run */
-			delay_start = (long long)(atoi(optarg));
-			if(delay_start < 0)
-				delay_start=0;
-			break;
-		case 'i':	/* Specify specific tests */
-			tval=(long long)(atoi(optarg));
-			if(tval < 0) tval=0;
-#ifndef HAVE_PREAD
-			if(tval > RANDOM_MIX_TEST)
-			{
-				printf("\tPread tests not available on this operating system.\n");
-				exit(183);
-			}
-#endif
-			if(tval > sizeof(func)/sizeof(char *)) 
-			{
-				tval=0;
-				sprintf(splash[splash_line++],"\tSelected test not available on the version.\n");
-			}
-			include_test[tval]++;
-			include_tflag++;
-			break;
-		case 'v':	/* Show version information */
-    			for(ind=0; strlen(head1[ind]); ind++)
-    			{
-				printf("%s\n", head1[ind]);
-    			}
-			exit(0);
-			break;
-		case 'U':	/* Specify the dev name for umount/mount*/
-			Uflag++;
-			strcpy(mountname,optarg);
-			if(trflag)
-			{
-				printf("Can not run throughput tests with unmount & remounts.\n");
-				exit(16);
-			}
-			break;
-		case 'w':	/* Do not unlink files */
-			sprintf(splash[splash_line++],"\tSetting no_unlink\n");
-			no_unlink = 1;
-			break;
-		case 'Z':	/* Turn on the mmap and file I/O mixing */
-			sprintf(splash[splash_line++],"\tEnable mmap & file I/O mixing.\n");
-			mmap_mix = 1;
-			break;
-		case 'W':	/* Read/Write with file locked */
-			file_lock=1;
-			sprintf(splash[splash_line++],"\tLock file when reading/writing.\n");
-			break;
-		case 'K':	/* Cause disrupted read pattern */
-			disrupt_flag=1;
-			sprintf(splash[splash_line++],"\tDisrupted read patterns selected.\n");
-			break;
-		case 'X':	/* Open write telemetry file */
-			compute_flag=1;
-			sverify=2;  /* touch lightly */
-			w_traj_flag=1;
-			strcpy(write_traj_filename,optarg);
-			traj_vers();
-			w_traj_size();
-			sprintf(splash[splash_line++],"\tUsing write telemetry file \"%s\"\n",
-				write_traj_filename);
-			w_traj_fd=open_w_traj();
-			if(w_traj_fd == (FILE *)0)
-				exit(200);
-			break;
-		case 'Y':	/* Open Read telemetry file */
-			compute_flag=1;
-			sverify=2;  /* touch lightly */
-			r_traj_flag=1;
-			strcpy(read_traj_filename,optarg);
-			sprintf(splash[splash_line++],"\tUsing read telemetry file \"%s\"\n",
-				read_traj_filename);
-			traj_vers();
-			r_traj_size();
-			r_traj_fd=open_r_traj();
-			if(r_traj_fd == (FILE*) 0)
-				exit(200);
-			break;
-		case 'n':	/* Set min file size for auto mode */
-			nflag=1;
-			minimum_file_size = (off64_t)atoi(optarg);
-			if(optarg[strlen(optarg)-1]=='k' ||
-				optarg[strlen(optarg)-1]=='K'){
-				;
-			}
-			if(optarg[strlen(optarg)-1]=='m' ||
-				optarg[strlen(optarg)-1]=='M'){
-				minimum_file_size = (long long)(1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='g' ||
-				optarg[strlen(optarg)-1]=='G'){
-				minimum_file_size = (long long)(1024 * 1024 * (long long)atoi(optarg));
-			}
-			if(minimum_file_size < RECLEN_START/1024)
-				minimum_file_size=(off64_t)(RECLEN_START/1024);
-			if(minimum_file_size < page_size/1024)
-				minimum_file_size=(off64_t)(page_size/1024);
-#ifdef NO_PRINT_LLD
-			sprintf(splash[splash_line++],"\tUsing minimum file size of %ld kilobytes.\n",minimum_file_size);
-#else
-			sprintf(splash[splash_line++],"\tUsing minimum file size of %lld kilobytes.\n",minimum_file_size);
-#endif
-			break;
-		case 'g':	/* Set maximum file size for auto mode */
-			gflag=1;
-			maximum_file_size = (off64_t)atoi(optarg);
-			if(optarg[strlen(optarg)-1]=='k' ||
-				optarg[strlen(optarg)-1]=='K'){
-				;
-			}
-			if(optarg[strlen(optarg)-1]=='m' ||
-				optarg[strlen(optarg)-1]=='M'){
-				maximum_file_size = (long long)(1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='g' ||
-				optarg[strlen(optarg)-1]=='G'){
-				maximum_file_size = (long long)(1024 * 1024 * (long long)atoi(optarg));
-			}
-			if(maximum_file_size < RECLEN_START/1024)
-				maximum_file_size=(off64_t)(RECLEN_START/1024);
-#ifdef NO_PRINT_LLD
-			sprintf(splash[splash_line++],"\tUsing maximum file size of %ld kilobytes.\n",maximum_file_size);
-#else
-			sprintf(splash[splash_line++],"\tUsing maximum file size of %lld kilobytes.\n",maximum_file_size);
-#endif
-			break;
-		case 'z':	/* Set no cross over */
-			sprintf(splash[splash_line++],"\tCross over of record size disabled.\n");
-			NOCROSSflag=1;
-			break;
-		case 'y':		/* Set min record size for auto mode */
-			yflag=1;
-			min_rec_size = ((long long)(atoi(optarg))*1024);
-			if(optarg[strlen(optarg)-1]=='k' ||
-				optarg[strlen(optarg)-1]=='K'){
-				min_rec_size = (long long)(1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='m' ||
-				optarg[strlen(optarg)-1]=='M'){
-				min_rec_size = (long long)(1024 * 1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='g' ||
-				optarg[strlen(optarg)-1]=='G'){
-				min_rec_size = (long long)(1024 * 1024 * 1024 *(long long)atoi(optarg));
-			}
-			if(min_rec_size <= 0)
-				min_rec_size=(long long)RECLEN_START;
-#ifdef NO_PRINT_LLD
-	    		sprintf(splash[splash_line++],"\tUsing Minimum Record Size %ld KB\n", min_rec_size/1024);
-#else
-	    		sprintf(splash[splash_line++],"\tUsing Minimum Record Size %lld KB\n", min_rec_size/1024);
-#endif
-			break;
-		case 'q':		/* Set max record size for auto mode */
-			qflag=1;
-			max_rec_size = ((long long)(atoi(optarg))*1024);
-			if(optarg[strlen(optarg)-1]=='k' ||
-				optarg[strlen(optarg)-1]=='K'){
-				max_rec_size = (long long)(1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='m' ||
-				optarg[strlen(optarg)-1]=='M'){
-				max_rec_size = (long long)(1024 * 1024 * atoi(optarg));
-			}
-			if(optarg[strlen(optarg)-1]=='g' ||
-				optarg[strlen(optarg)-1]=='G'){
-				max_rec_size = (long long)(1024 * 1024 * 1024 *(long long)atoi(optarg));
-			}
-			if(max_rec_size <= 0)
-				min_rec_size=(long long)RECLEN_END;
-			if(max_rec_size > MAXBUFFERSIZE) {
-#ifdef NO_PRINT_LLD
-				printf("Error: maximum record size %ld KB is greater than maximum buffer size %ld KB\n ",
-					max_rec_size/1024, MAXBUFFERSIZE/1024);
-#else
-				printf("Error: maximum record size %lld KB is greater than maximum buffer size %lld KB\n ",
-					(long long)(max_rec_size/1024LL), (long long)MAXBUFFERSIZE/1024LL);
-#endif
-				exit(23);
-			}
-#ifdef NO_PRINT_LLD
-			sprintf(splash[splash_line++],"\tUsing Maximum Record Size %ld KB\n", max_rec_size/1024);
-#else
-			sprintf(splash[splash_line++],"\tUsing Maximum Record Size %lld KB\n", max_rec_size/1024);
-#endif
-			break;
-
-		/* 
-		 * The + operator is for the new extended options mechanism 
-		 * Syntax is -+ followed by option leter, and if the optino
-		 * takes an operand  then it is implemented below. An example
-		 * -+a arg    is shown below. This is a sub option with an argument.
-		 * -+b  is shown below. This is a sub option with no argument.
-		 */
-		case '+':
-			/* printf("Plus option = >%s<\n",optarg);*/
-			switch (*((char *)optarg))
-			{
-				case 'a':  /* Example: Has argument */
-					subarg=argv[optind++];
-					/* if(subarg!=(char *)0)   Error checking. */
-					/* printf("Plus option argument = >%s<\n",subarg);*/
-					break;
-				case 'b':  /* Example: Does not have an argument */
-					break;
-				case 'c':  /* Argument is the controlling host name */
-					/* I am a client for distributed Iozone */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+c takes an operand !!\n");
-					     exit(200);
-					}
-					strcpy(controlling_host_name,subarg);
-					distributed=1;
-					client_iozone=1;
-					master_iozone=0;
-					break;
-                                case 'h':  /* Argument is the controlling host name */
-                                        subarg=argv[optind++];
-                                        if(subarg==(char *)0)
-                                        {
-                                             printf("-+h takes an operand !!\n");
-                                             exit(200);
-                                        }
-                                        strcpy(controlling_host_name,subarg);
-                                        sprintf(splash[splash_line++],"\tHostname = %s\n",controlling_host_name);
-                                        break;
-				case 'm':  /* I am the controlling process for distributed Iozone */
-					   /* Does not have an argument */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+m takes an operand. ( filename )\n");
-					     exit(201);
-					}
-					strcpy(client_filename,subarg);
-					ret=get_client_info();
-					if(ret <= 0)
-					{
-						printf("Error reading client file\n");
-						exit(178);
-					}
-					clients_found=ret;
-					distributed=1;
-					master_iozone=1;
-					client_iozone=0;
-					sprintf(splash[splash_line++],"\tNetwork distribution mode enabled.\n");
-					break;
-				case 'N':  /* turn off truncating the file before write test */
-					notruncate = 1;
-					break;
-				case 'u':	/* Set CPU utilization output flag */
-					cpuutilflag = 1;	/* only used if R(eport) flag is also set */
-					get_rusage_resolution();
-    					sprintf(splash[splash_line++],"\tCPU utilization Resolution = %5.3f seconds.\n",cputime_res);
-	    				sprintf(splash[splash_line++],"\tCPU utilization Excel chart enabled\n");
-					break;
-				case 's':  /* Clients operate in silent mode. */
-					   /* Does not have an argument */
-					silent=1;
-					break;
-				case 'd':  /* Diagnostics mode */
-					sprintf(splash[splash_line++],"\t>>> I/O Diagnostic mode enabled. <<<\n");
-    					sprintf(splash[splash_line++],"\tPerformance measurements are invalid in this mode.\n");
-					diag_v=1;
-					sverify=0;
-					break;
-				case 'x':  /* Argument is the multiplier for rec size and file size */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+c takes an operand !!\n");
-					     exit(200);
-					}
-					multiplier = atoi(subarg);
-					if(multiplier <=1)
-						multiplier = 2;
-					break;
-				case 'i':  /* Argument is the host port */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+i takes an operand !!\n");
-					     exit(200);
-					}
-					controlling_host_port = atoi(subarg);
-					break;
-				case 'p':  /* Argument is the percentage read */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+p takes an operand !!\n");
-					     exit(200);
-					}
-					pct_read = atoi(subarg);
-					if(pct_read < 1)
-						pct_read = 1;
-					if(pct_read >=100)
-						pct_read = 100;
-    					sprintf(splash[splash_line++],"\tPercent read in mix test is %d\n",pct_read);
-					break;
-				case 't':  /* Speed code activated */
-					speed_code=1;
-					break;
-#if defined(_HPUX_SOURCE) || defined(linux) || defined(solaris)
-				case 'r':  /* Read sync too */
-					read_sync=1;
-    					sprintf(splash[splash_line++],"\tRead & Write sync mode active.\n");
-					break;
-#endif
-#ifndef NO_MADVISE
-				case 'A':  /* Argument is madvise selector */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					   printf("-+A take an operand !!\n");
-					   exit(200);
-					}
-					advise_flag=1;
-					advise_op=atoi(subarg);
-					sprintf(splash[splash_line++],"\tMadvise enabled: %d\n",advise_op);
-					break;
-#endif
-				case 'n':	/* Set no-retest */
-					noretest = 1;	
-    					sprintf(splash[splash_line++],"\tNo retest option selected\n");
-					break;
-				case 'k':	/* Constant aggregate data set size */
-					aggflag=1;
-					break;
-				case 'q':  /* Argument is the rest time between tests in seconds */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+q takes an operand !!\n");
-					     exit(200);
-					}
-					rest_val = (long long)atoi(subarg);
-					if(rest_val <=0)
-						rest_val = 0;
-					restf=1;
-					sprintf(splash[splash_line++],"\tDelay %d seconds between tests enabled.\n",atoi(subarg));
-					break;
-#if defined(O_DSYNC)
-				case 'D':  /* O_DSYNC mode */
-					sprintf(splash[splash_line++],"\t>>> O_DSYNC mode enabled. <<<\n");
-					odsync=1;
-					break;
-#endif
-				case 'l':  /* Record locking mode */
-					sprintf(splash[splash_line++],"\t>>> Record locking mode enabled. <<<\n");
-					rlocking=1;
-					break;
-				case 'L':  /* Record locking mode shared files*/
-					sprintf(splash[splash_line++],"\t>>> Record locking, shared file mode enabled. <<<\n");
-					share_file=1;
-					rlocking=1;
-					break;
-				case 'V':  /* No Record locking shared files*/
-					sprintf(splash[splash_line++],"\t>>> Shared file mode enabled. <<<\n");
-					share_file=1;
-					break;
-				case 'B':  /* Sequential mix */
-					sprintf(splash[splash_line++],"\t>>> Sequential Mixed workload. <<<\n");
-					seq_mix=1;
-					break;
- 				        /* Use an existing user file, that does
-					 not contain Iozone's pattern. Use file
-	                                 for testing, but read only, and no 
-                                         delete at the end of the test. Also, 
-                                         no pattern verification, but do touch
-                                         the pages. */
-				case 'E':  
-					sprintf(splash[splash_line++],"\t>>> No Verify mode. <<<\n");
-					sverify=2;
-					no_unlink=1;
-					no_write=1;
-					break;
-				case 'T':  /* Time stamps on */
-					L_flag=1;
-					break;
-				case 'X': /* Short circuit test mode */
-					X_flag = 1;
-					sverify=1;
-					verify=1;
-					inp_pat = 0xBB;
-					pattern = ((inp_pat << 24) | 
-					  (inp_pat << 16) | (inp_pat << 8) |
-					   inp_pat);
-	    				sprintf(splash[splash_line++],"\tShort circuit mode. For\n");
-	    				sprintf(splash[splash_line++],"\t filesystem development testing ONLY !\n");
-					break;
-				case 'Z': /* Compatibility mode for 0xA5 */	
-					Z_flag = 1;
-					sverify=1;
-					verify=1;
-					inp_pat = 0xA5;
-					pattern = ((inp_pat << 24) | 
-					  (inp_pat << 16) | (inp_pat << 8) |
-					   inp_pat);
-	    				sprintf(splash[splash_line++],"\tUsing old data sets.\n");
-    					sprintf(splash[splash_line++],"\t Performance measurements may be invalid in this\n");
-    					sprintf(splash[splash_line++],"\t mode due to published hack.\n");
-					break;
-#if defined(Windows)
-				case 'U':  /* Windows only Unbufferd I/O */
-					unbuffered=1;
-					sprintf(splash[splash_line++],"\tUnbuffered Windows API usage. >>> Very Experimental <<<\n");
-					break;
-#endif
-				case 'K':  /* Sony special for manual control of test 8 */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+K takes an operand !!\n");
-					     exit(204);
-					}
-					Kplus_readers = (int)atoi(subarg);
-					if(Kplus_readers <=0)
-						Kplus_readers = 1;
-					Kplus_flag=1;
-					sprintf(splash[splash_line++],"\tManual control of test 8. >>> Very Experimental. Sony special <<<\n");
-					break;
-				case 'w':  /* Argument is the percent of dedup */
-					   /* Sets size of dedup region across files */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+w takes an operand !!\n");
-					     exit(200);
-					}
-					dedup = atoi(subarg);
-					if(dedup <=0)
-						dedup = 0;
-					if(dedup >100)
-						dedup = 100;
-					sprintf(splash[splash_line++],"\tDedup activated %d percent.\n",dedup);
-					break;
-				case 'y':  /* Argument is the percent of interior dedup */
-					   /* Sets size of dedup region within and across files */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+y takes an operand !!\n");
-					     exit(200);
-					}
-					dedup_interior = atoi(subarg);
-					if(dedup_interior <0)
-						dedup_interior = 0;
-					if(dedup_interior >100)
-						dedup_interior = 100;
-					sprintf(splash[splash_line++],"\tDedupe within & across %d percent.\n",dedup_interior);
-					break;
-				case 'C':  /* Argument is the percent of dedupe within & !across */
-					   /* Sets size of dedup region within and !across files */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+C takes an operand !!\n");
-					     exit(200);
-					}
-					dedup_compress = atoi(subarg);
-					if(dedup_compress <0)
-						dedup_compress = 0;
-					if(dedup_compress >100)
-						dedup_compress = 100;
-					sprintf(splash[splash_line++],"\tDedupe within %d percent.\n",dedup_compress);
-					break;
-				case 'S':  /* Argument is the seed for dedup */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+S takes an operand !!\n");
-					     exit(200);
-					}
-					dedup_mseed = atoi(subarg);
-					if(dedup_mseed ==0)
-						dedup_mseed = 1;
-					sprintf(splash[splash_line++],"\tDedup manual seed %d .\n",dedup_mseed);
-					break;
-				case 'H':  /* Argument is hostname of the PIT */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+H takes operand !!\n");
-					     exit(200);
-					}
-					strcpy(pit_hostname,subarg);
-					sprintf(splash[splash_line++],"\tPIT_host %s\n",pit_hostname);
-					
-					break;
-				case 'P':  /* Argument is port of the PIT */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+P takes operand !!\n");
-					     exit(200);
-					}
-					strcpy(pit_service,subarg);
-					sprintf(splash[splash_line++],"\tPIT_port %s\n",pit_service);
-					break;
-				case 'z':  /* Enable hist summary*/
-					hist_summary=1;
-					sprintf(splash[splash_line++],"\tHistogram summary enabled.\n");
-					break;
-				case 'O':  /* Argument is the Op rate */
-					subarg=argv[optind++];
-					if(subarg==(char *)0)
-					{
-					     printf("-+O takes an operand !!\n");
-					     exit(200);
-					}
-					op_rate = atoi(subarg);
-					if(op_rate <= 0)
-						op_rate = 1;
-					op_rate_flag = 1;
-					sprintf(splash[splash_line++],"\tRate control active %d Ops/sec .\n",op_rate);
-					break;
-				default:
-					printf("Unsupported Plus option -> %s <-\n",optarg);
-					exit(255);
-					break;
-			}	
-			break;
-		default:
-			printf("Unsupported option -> %s <-\n",optarg);
-			exit(255);
-		}
-	}
-	base_time=(long)time_so_far();
-	get_resolution(); 		/* Get clock resolution */
-	if(speed_code)
-	{
-		do_speed_check(client_iozone);
-		exit(0);
-	}
-	if(r_count > 1)
-	{
-		aflag=1;
-		rflag=0;
-		NOCROSSflag=1;
-	}
-	if(s_count > 1)
-	{
-		aflag=1;
-		sflag=0;
-		NOCROSSflag=1;
-	}
-	/*
-         * If not in silent mode then display the splash screen.
-	 */
-	for(i=0;i<splash_line;i++)
-		if(!silent) printf("%s",splash[i]);
-	/*
-	 * Save the command line for later 
-	 */
-	record_command_line(argcsave, argvsave);
-
-	if(pflag) /* Allocate after cache_size is set */
-	{
-		alloc_pbuf();
-	}
-	if(distributed && master_iozone)
-	{
-		if(maxt > clients_found)
-		{
-			printf("You can not specify more threads/processes than you have in the client file list\n");
-			exit(202);
-		}
-	}
-	
-	if(!OPS_flag && !MS_flag)
-	{
-		if(!silent) printf("\tOutput is in Kbytes/sec\n");
-	}
-	if (min_rec_size > max_rec_size) {
-#ifdef NO_PRINT_LLD
-		printf("Error: minimum record size %ld KB is greater than maximum record size %ld KB\n ",
-			min_rec_size/1024, max_rec_size/1024);
-#else
-		printf("Error: minimum record size %lld KB is greater than maximum record size %lld KB\n ",
-			min_rec_size/1024, max_rec_size/1024);
-#endif
-		exit(23);
-        }
-	orig_min_rec_size=min_rec_size;
-	orig_max_rec_size=max_rec_size;
-	/*
- 	 * No telemetry files... just option selected 
-	 */
-	if(compute_flag && jflag  && !(r_traj_flag || w_traj_flag))
-		if(!silent) printf("\tCompute time %f seconds for reads and writes.\n",compute_time);
-	/*
- 	 * Read telemetry file and option selected
-	 */
-	if(compute_flag && r_traj_flag && !w_traj_flag)
-	{
-		if(r_traj_items==3)
-		{
-			if(!silent) printf("\tCompute time from telemetry files for reads.\n");
-		}
-		else
-		{
-			if(jflag)
-				if(!silent) printf("\tCompute time %f seconds for reads.\n",compute_time);
-		}
-		if(jflag)
-			if(!silent) printf("\tCompute time %f seconds for writes.\n",compute_time);
-	}
-	/*
- 	 * Write telemetry file and option selected
-	 */
-	if(compute_flag && !r_traj_flag && w_traj_flag)
-	{
-		if(w_traj_items==3)
-		{
-			if(!silent) printf("\tCompute time from telemetry files for writes.\n");
-		}
-		else
-		{
-			if(jflag)
-				if(!silent) printf("\tCompute time %f seconds for writes.\n",compute_time);
-		}
-		if(jflag)
-			if(!silent) printf("\tCompute time %f seconds for reads.\n",compute_time);
-	}
-	if(compute_flag && r_traj_flag && w_traj_flag && jflag)
-	{
-		if(r_traj_items==3)
-		{
-			if(!silent) printf("\tCompute time from telemetry files for reads.\n");
-		}
-		else
-		{
-			if(!silent) printf("\tCompute time %f seconds for reads.\n",compute_time);
-		}
-		if(w_traj_items==3) 
-		{
-			if(!silent) printf("\tCompute time from telemetry files for writes.\n");
-		}
-		else
-		{
-			if(!silent) printf("\tCompute time %f seconds for writes.\n",compute_time);
-		}
-	}
-	if(compute_flag && r_traj_flag && w_traj_flag && !jflag)
-	{
-		if(r_traj_items==3)
-		{
-			if(!silent) printf("\tCompute time from telemetry files for reads.\n");
-		}
-		else
-		{
-			if(!silent) printf("\tNo compute time for reads.\n");
-		}
-
-		if(w_traj_items==3) 
-		{
-			if(!silent) printf("\tCompute time from telemetry files for writes.\n");
-		}
-		else
-		{
-			if(!silent) printf("\tNo compute time for writes.\n");
-		}
-	}
-
-        /* Enforce only write,rewrite,read,reread */
-        if(w_traj_flag || r_traj_flag)
-        {
-                for(i=2;i<sizeof(func)/sizeof(char *);i++)
-                {
-                        if(seq_mix && (i==8))
-                                ;
-                        else
-                                include_test[i] = 0;
-                }
-        }
-
-	if(r_traj_flag)
-	{
-		if(include_test[READER_TEST] == 0) 
-		{
-			include_test[WRITER_TEST]=1;
-			include_test[READER_TEST]=1;
-			include_tflag=1;
-		}
-	}
-	if(w_traj_flag)
-	{
-		if(include_test[WRITER_TEST] == 0) 
-		{
-			include_test[WRITER_TEST]=1;
-			include_tflag=1;
-		}
-	}
-	if(w_traj_flag && w_traj_fsize != 0)
-		kilobytes64=w_traj_fsize/1024;
-	if(r_traj_flag && r_traj_fsize != 0)
-		kilobytes64=r_traj_fsize/1024;
-
-	if( sverify==0 && (w_traj_flag || r_traj_flag))
-	{
-		printf("\n\tFull verification not supported in telemetry mode.\n\n");
-		exit(17);
-	}
-	;
-	if(disrupt_flag &&(w_traj_flag || r_traj_flag) )
-	{
-		printf("\n\tDisrupt not supported in telemetry mode.\n\n");
-		exit(17);
-	}
-	if(aflag &&(w_traj_flag || r_traj_flag) )
-	{
-		printf("\n\tAuto mode not supported in telemetry mode.\n");
-		printf("\tTry:   -i 0 -i 1 \n\n");
-		exit(17);
-	}
-	if(sflag && w_traj_flag )
-	{
-		printf("\n\tSize of file is determined by telemetry file.\n\n");
-		exit(17);
-	}
-	if(rflag && w_traj_flag )
-	{
-		printf("\n\tRecord size of file is determined by telemetry file.\n\n");
-		exit(17);
-	}
-	if(stride_flag && (w_traj_flag || r_traj_flag))
-	{
-		printf("\n\tStride size is determined by telemetry file.\n\n");
-		exit(17);
-	}
-	if(trflag && MS_flag)
-	{
-		printf("\n\tMicrosecond mode not supported in throughput mode.\n\n");
-		exit(17);
-	}
-	if (trflag	/* throughput mode, don't allow auto-mode options: */
-		&& (auto_mode || aflag || yflag || qflag || nflag || gflag))
-	{
-		printf("\n\tCan not mix throughput mode and auto-mode flags.\n\n");
-		exit(17);
-	}
-	if(fflag && trflag)
-	{
-		printf("\n\tYou must use -F when using multiple threads or processes.\n\n");
-		exit(17);
-	}
-	if(aflag && mfflag)
-	{
-		printf("\n\tYou must use -f when using auto mode.\n\n");
-		exit(17);
-	}
-	if(async_flag && mmapflag)
-	{
-		printf("\n\tSorry ... Only mmap or async but not both\n\n");
-		exit(18);
-	}
-#ifndef ASYNC_IO
-	if(async_flag)
-	{
-		printf("\n\tSorry ... This version does not support async I/O\n\n");
-		exit(19);
-	}
-#endif
-	if(no_write)
-	{
-	   if(!include_tflag)
-	   {
-	     printf("You must specify which tests ( -i # ) when using -+E\n");
-	     exit(19);
-	   }
-	}
-	if(include_tflag)
-	{
-		for(i=0;i<sizeof(func)/sizeof(char *);i++)
-			if(include_test[i])
-				include_mask|=(long long)(1<<i);
-		/* printf(">> %llx",include_mask);  HERE */
-	}
-	if(no_write) /* Disable if any writer would disturbe existing file */
-	{
-	   if(include_test[0] || include_test[4] ||
-	      include_test[6] || include_test[8] || include_test[9] ||
-              include_test[11])
-	   {
-	      printf("You must disable any test that writes when using -+E\n");
-	      exit(20);
-	   }
-	}
-	if(no_write) /* User must specify the existing file name */
-	{
-	   if(!(fflag | mfflag))
-	   {
-	      printf("You must use -f or -F when using -+E\n");
-	      exit(20);
-	   }
-	}
-	if(h_flag && k_flag)
-	{
-		printf("\n\tCan not do both -H and -k\n");
-		exit(20);
-	}
-	if((dedup | dedup_interior) && diag_v)
-	{
-		printf("\n\tCan not do both -+d and -+w\n");
-		exit(20);
-	}
-		
-	if(!aflag && !rflag)
-		max_rec_size=min_rec_size;
-
-	init_record_sizes(min_rec_size,max_rec_size);
-    	if(!silent) printf("\tTime Resolution = %1.6f seconds.\n",time_res);
-#ifdef NO_PRINT_LLD
-    	if(!silent) printf("\tProcessor cache size set to %ld Kbytes.\n",cache_size/1024);
-    	if(!silent) printf("\tProcessor cache line size set to %ld bytes.\n",cache_line_size);
-	if(!silent) printf("\tFile stride size set to %ld * record size.\n",stride);
-#else
-    	if(!silent) printf("\tProcessor cache size set to %ld Kbytes.\n",cache_size/1024);
-    	if(!silent) printf("\tProcessor cache line size set to %ld bytes.\n",cache_line_size);
-	if(!silent) printf("\tFile stride size set to %lld * record size.\n",stride);
-#endif
-	if(!rflag)
-		reclen=(long long)4096;
-
-	if(uflag && !lflag)
-		num_child=mint = 1;
-	if(lflag && !uflag)
-		maxt = mint;
-	if(use_thread)
-		port="thread";
-	else
-		port="process";
-	if(lflag || uflag){
-#ifdef NO_PRINT_LLD
-		if(!silent) printf("\tMin %s = %ld \n",port,mint);
-		if(!silent) printf("\tMax %s = %ld \n",port,maxt);
-#else
-		if(!silent) printf("\tMin %s = %lld \n",port,mint);
-		if(!silent) printf("\tMax %s = %lld \n",port,maxt);
-#endif
-	}
-	if(trflag)
-	{
-		if(num_child > 1)
-		{
-			if(use_thread)
-			{
-				port="threads";
-			}
-			else
-			{
-				port="processes";
-			}
-		}
-
-#ifdef NO_PRINT_LLD
-		if(!silent) printf("\tThroughput test with %ld %s\n", num_child,port);
-#else
-		if(!silent) printf("\tThroughput test with %lld %s\n", num_child,port);
-#endif
-	}
-        numrecs64 = (long long)(kilobytes64*1024)/reclen;
-        if (reclen >  (long long)MAXBUFFERSIZE) {
-#ifdef NO_PRINT_LLD
-                printf("Error: Maximum record length is %ld bytes\n",
-                                MAXBUFFERSIZE);
-#else
-                printf("Error: Maximum record length is %lld bytes\n",
-                                (long long)MAXBUFFERSIZE);
-#endif
-                exit(21);
-        }
-        if (reclen < (long long)MINBUFFERSIZE) {
-#ifdef NO_PRINT_LLD
-                printf("Error: Minimum record length is %ld bytes\n",
-                                MINBUFFERSIZE);
-#else
-                printf("Error: Minimum record length is %lld bytes\n",
-                                (long long)MINBUFFERSIZE);
-#endif
-                exit(22);
-        }
-	/* Only bzero or fill that which you will use. The buffer is very large */
-	if(verify )	
-	{
-		fill_buffer((char *)buffer,l_min(reclen,(long long)cache_size),(long long)pattern,(char)sverify,(long long)0);
-		if(pflag)
-			fill_buffer((char *)pbuffer,l_min(reclen,(long long)cache_size),(long long)pattern,(char)sverify,(long long)0);
-		if(mflag)
-			fill_buffer((char *)mbuffer,l_min(reclen,(long long)cache_size),(long long)pattern,(char)sverify,(long long)0);
-	}
-	else
-	{
-		bzero(buffer,(size_t)l_min(reclen,(long long)cache_size));
-	}
-
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=begin_proc;
-#if defined( _HPUX_SOURCE )
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	orig_size=kilobytes64;
-	if(trflag){
-	    (void)multi_throughput_test(mint,maxt);
-	    goto out;
-	}
-	if(trflag && (mint == maxt)){
-		auto_mode=0;
-		throughput_test();
-	    	goto out;
-	}
-    	if (aflag) {
-		print_header();
-		auto_test();
-		goto out;
-	} 
-	print_header();
-	(void) begin(kilobytes64,reclen);
-out:
-	if(r_traj_flag)
-		fclose(r_traj_fd);
-	if(w_traj_flag)
-		fclose(w_traj_fd);
-	if (!no_unlink)
-	{
-		if(check_filename(dummyfile[0]))
-	      	   unlink(dummyfile[0]);	/* delete the file */
-	}
-	if(!silent) printf("\niozone test complete.\n");
-	if(res_prob)
-	{
-		printf("Timer resolution is poor. Some small transfers may have \n");
-		printf("reported inaccurate results. Sizes %ld Kbytes and below.\n",
-			(long)(rec_prob/(long long)1024));
-	}
-
-	if(Rflag && !trflag){
-		dump_excel();
-	}
-	return(0);	
-}
-
-#ifdef HAVE_ANSIC_C
-void
-record_command_line(int argc, char **argv)
-#else
-void
-record_command_line(argc, argv)
-int argc;
-char **argv;
-#endif
-{
-	int ix, len = 0;
-
-	/* print and save the entire command line */
-	if(!silent) printf("\tCommand line used:");
-	for (ix=0; ix < argc; ix++) {
-		if(!silent) printf(" %s", argv[ix]);
-		if ((len + strlen(argv[ix])) < sizeof(command_line)) {
-			strcat (command_line, argv[ix]);
-			strcat (command_line, " ");
-			len += strlen(argv[ix]) + 1;
-		}
-		else {
-			printf ("Command line too long to save completely.\n");
-			break;
-		}
-	}
-	if(!silent) printf("\n");
-}
-
-/*************************************************************************/
-/* BEGIN()								 */
-/* This is the main work horse. It is called from main and from 	 */
-/* auto_test. The caller provides the size of file and the record length.*/
-/*************************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-begin(off64_t kilos64,long long reclength)
-#else
-void
-begin(kilos64,reclength)
-off64_t kilos64;
-long long reclength;
-#endif
-{
-	long long num_tests,test_num,i,j;
-	long long data1[MAXTESTS], data2[MAXTESTS];
-	num_tests = sizeof(func)/sizeof(char *);
-#if defined(HAVE_PREAD) 
-	if(!Eflag)
-	{
-#if defined(HAVE_PREAD) && defined(HAVE_PREADV)
-		num_tests -= 4;
-#else
-		num_tests -= 2;
-#endif
-		if(mmapflag || async_flag)
-		{
-			num_tests -= 2;
-		}
-	}
-	else
-	{
-		if(mmapflag || async_flag)
-#if defined(HAVE_PREAD) && defined(HAVE_PREADV)
-			num_tests -= 6;
-#else
-			num_tests -= 4;
-#endif
-	}
-#else
-	if(mmapflag || async_flag)
-	{
-		num_tests -= 2;
-	}
-#endif
-
-	if(RWONLYflag) num_tests = 2;		/* kcollins 8-21-96*/
-	sync(); 		/* just in case there were some dirty */
-	sync();
-	kilobytes64=kilos64;
-	reclen=reclength;
-	numrecs64 = (kilobytes64*1024)/reclen;
-	store_value(kilobytes64);
-	if(r_traj_flag || w_traj_flag)
-		store_value((off64_t)0);
-	else	
-		store_value((off64_t)(reclen/1024));
-
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%16ld",kilobytes64);
-	if(r_traj_flag || w_traj_flag)
-	{
-		if(!silent) printf("%8ld",0);
-	}
-	else
-	{
-		if(!silent) printf("%8ld",reclen/1024);
-	}
-#else
-	if(!silent) printf("%16lld",kilobytes64);
-	if(r_traj_flag || w_traj_flag)
-	{
-		if(!silent) printf("%8lld",(long long )0);
-	}
-	else
-	{
-		if(!silent) printf("%8lld",reclen/1024);
-	}
-#endif
-	if(include_tflag)
-	{
-		for(i=0;i<num_tests;i++)
-		{
-			if(include_mask & (long long)(1<<i))
-			   func[i](kilobytes64,reclen,&data1[i],&data2[i]);
-			else
-			{
-			       	if(!silent) printf("%s",test_output[i]); 
-				fflush(stdout);
-				for(j=0;j<test_soutput[i];j++)
-					store_value((off64_t)0);
-			}
-		}
-	}
-	else
-	{
-		for(test_num=0;test_num < num_tests;test_num++)
-		{
-			func[test_num](kilobytes64,reclen,&data1[test_num],&data2[test_num]);
-		};
-	}
-	if(!silent) printf("\n");
-	if(!OPS_flag && !include_tflag){			/* Report in ops/sec ? */
-	   if(data1[1]!=0 && data2[1] != 0)
-	   {   
-		totaltime = data1[1] + data1[0];
-		if (totaltime < TOOFAST) 
-		{
-		   	goodkilos = (TOOFAST/totaltime)*2*kilobytes64;
-		    	printf("\nThe test completed too quickly to give a good result\n");
-		    	printf("You will get a more precise measure of this machine's\n");
-		    	printf("performance by re-running iozone using the command:\n");
-#ifdef NO_PRINT_LLD
-		    	printf("\n\tiozone %ld ", goodkilos);
-		    	printf("\t(i.e., file size = %ld kilobytes64)\n", goodkilos);
-#else
-		    	printf("\n\tiozone %lld ", goodkilos);
-		    	printf("\t(i.e., file size = %lld kilobytes64)\n", goodkilos);
-#endif
-		}
-	   } else {
-	    	goodrecl = reclen/2;
-	    	printf("\nI/O error during read.  Try again with the command:\n");
-#ifdef NO_PRINT_LLD
-	    	printf("\n\tiozone %ld %ld ", kilobytes64,  goodrecl);
-	    	printf("\t(i.e. record size = %ld bytes)\n",  goodrecl);
-#else
-	    	printf("\n\tiozone %lld %lld ", kilobytes64,  goodrecl);
-	    	printf("\t(i.e. record size = %lld bytes)\n",  goodrecl);
-#endif
-	   }
-	}
-	if (!no_unlink)
-	{
-		if(check_filename(filename))
-    		  unlink(filename);	/* delete the file */
-	}
-					/*stop timer*/
-	return ;
-}
-/******************************************************************
-
-    SHOW_HELP -- show development help of this program
-
-******************************************************************/
-#ifdef HAVE_ANSIC_C
-void show_help(void)
-#else
-void show_help()
-#endif
-{
-    	long long i;
-    	if(!silent) printf("iozone: help mode\n\n");
-    	for(i=0; strlen(help[i]); i++)
-    	{
-		if(!silent) printf("%s\n", help[i]);
-    	}
-}
-/******************************************************************
-
-    SIGNAL_HANDLER -- clean up if user interrupts the program
-
-******************************************************************/
-#ifdef HAVE_ANSIC_C
-void signal_handler(void)
-#else
-void signal_handler()
-#endif
-{
-	long long i;
-	if(distributed)
-	{
-		if(master_iozone)
-			cleanup_children();
-	}
-	if((long long)getpid()==myid)
-	{
-    		if(!silent) printf("\niozone: interrupted\n\n");
-#ifndef VMS
-		if (!no_unlink)
-		{
-		   if(check_filename(filename))
-    			unlink(filename);	/* delete the file */
-		}
-		for(i=1;i<num_child;i++)
-		{
-		   if(check_filename(dummyfile[i]))
-    			unlink(dummyfile[i]);	/* delete the file */
-		}
-		if (!no_unlink)
-		{
-		   if(check_filename(dummyfile[0]))
-    			unlink(dummyfile[0]);	/* delete the file */
-		}
-		
-#endif
-		if(Rflag && !trflag){
-			dump_excel();
-		}
-		if(Rflag && trflag){
-			dump_throughput();
-		}
-
-	    	if(!silent) printf("exiting iozone\n\n");
-		if(res_prob)
-		{
-			printf("Timer resolution is poor. Some small transfers may have \n");
-			printf("reported inaccurate results. Sizes %ld Kbytes and below.\n",
-				(long)rec_prob/1024);
-		}
-		if(trflag && !use_thread)
-		   for(i=0;i<num_child;i++)
-			kill((pid_t)childids[i],SIGTERM);
-		if(r_traj_flag)
-			fclose(r_traj_fd);
-		if(w_traj_flag)
-			fclose(w_traj_fd);
-	}
-	if(sp_msfd)
-		close(sp_msfd);
-	if(sp_mrfd)
-		close(sp_mrfd);
-    	exit(0);
-}
-
-/****************************************************************/
-/*								*/
-/*   AUTO_TEST -- perform series of tests and tabulate results  */
-/*								*/
-/****************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-auto_test(void)
-#else
-void auto_test()
-#endif
-{
-    	off64_t kilosi;
-	long long recszi,count1;
-	long long mult;
-	long long xx;
-
-	/****************************************************************/
-	/* Start with file size of 1 megabyte and repeat the test 	*/
-	/* KILOBYTES_ITER_LIMIT  					*/
-	/* times.  Each time we run, the file size is doubled		*/
-	/****************************************************************/
-/*
-        if(sflag) {
-          min_file_size = kilobytes64;
-          max_file_size = kilobytes64;
-        }
-        if(rflag) {
-          min_rec_size = reclen;
-          max_rec_size = reclen;
-        }
-*/
-	if(gflag)
-		max_file_size = maximum_file_size;
-	if(nflag)
-		min_file_size = minimum_file_size;
-
-        if (min_rec_size > (long long)(min_file_size*1024)) {
-#ifdef NO_PRINT_LLD
-            printf("Error: record length %ld is greater than filesize %ld KB\n ",
-                                min_rec_size,min_file_size);
-#else
-            printf("Error: record length %lld is greater than filesize %lld KB\n ",
-                                min_rec_size,min_file_size);
-#endif
-                exit(23);
-        }
-
-	if(NOCROSSflag) xover = max_file_size;
-
-	init_file_sizes(min_file_size, max_file_size);
-	del_record_sizes();
-	orig_min_rec_size=min_rec_size;
-	orig_max_rec_size=max_rec_size;
-	init_record_sizes(min_rec_size, max_rec_size);
-
-        for(kilosi=get_next_file_size((off64_t)0); kilosi>0; kilosi=get_next_file_size(kilosi))
-        {
-	/****************************************************************/
-	/* Start with record size of min_rec_size bytes and repeat the 	*/
-	/* test, multiplying the record size by MULTIPLIER each time, 	*/
-	/* until we reach max_rec_size.	 At the CROSSOVER we stop doing */
-	/* small buffers as it takes forever and becomes very 		*/
-	/* un-interesting.						*/
-	/****************************************************************/
-             if(!rflag && !sflag && !yflag && !qflag)
-             	if(kilosi > xover){
-                	min_rec_size = LARGE_REC;
-			mult = orig_min_rec_size/1024;
-			del_record_sizes();
-			init_record_sizes(min_rec_size, max_rec_size);
-		     	/************************************/
-			/* Generate dummy entries in the    */
-			/* Excel buffer for skipped         */
-			/* record sizes			 */
-			/************************************/
-			for(count1=min_rec_size;
-			     	(count1 != orig_min_rec_size) && (
-				     	mult <= (kilosi*1024)) ;
-						count1=(count1>>1))
-			{
-			    	current_x=0;
-			     	store_value((off64_t)kilosi);
-			     	store_value((off64_t)mult);
-			     	for(xx=0;xx<20;xx++)
-			     		store_value((off64_t)0);
-			     	mult=mult*2;
-			     	current_y++;
-			     	if(current_y>max_y)
-			     		max_y=current_y;
-			     	current_x=0;
-			}
-	     }
-
-             for (recszi=get_next_record_size((off64_t)0);recszi!=0;recszi=get_next_record_size(recszi))
-             {
-                     if(recszi > (kilosi*1024)) 
-			break;
-                     begin(kilosi, recszi );
-		     current_x=0;
-		     current_y++;
-             }
-	}
-}
-
-
-/****************************************************************/
-/*								*/
-/* THROUGHPUT_TEST () Multi process throughput test		*/
-/*								*/
-/* Note: States for share memory barrier are:			*/
-/* 0 = Child not running or has finished.			*/
-/* 1 = Child is ready to begin.					*/
-/* 2 = Child is told to begin.					*/
-/****************************************************************/
-/* Data in shared memory format is:				*/
-/*								*/
-/* struct child_stats {						*/
-/* 	long long flag; 	Used to barrier			*/
-/*	double walltime;	Child's elapsed time		*/
-/*	double cputime;		Child's CPU time		*/
-/* 	double throughput;	Child's throughput		*/
-/* 	double actual;		Child's actual read/written	*/
-/* } 								*/
-/*								*/
-/* There is an array of child_stat structures layed out in 	*/
-/* shared memory.						*/
-/*								*/
-/****************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void 
-throughput_test(void)
-#else
-void 
-throughput_test()
-#endif
-{
-	char *unit;
-	double starttime1 = 0;
-	double jstarttime = 0;
-	double jtime = 0;
-	double walltime = 0;
-	double cputime = 0;
-	char *port;
-	char getout;
-	long long throughsize = KILOBYTES;
-	long long xx,xy,i;
-	long long xyz;
-	double ptotal;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-	VOLATILE char *temp;
-	double min_throughput = 0;
-	double max_throughput = 0;
-	double avg_throughput = 0;
-	double min_xfer = 0; 
-
-
-	toutputindex=0;
-	strcpy(&toutput[0][0],throughput_tests[0]);
-	ptotal=written_so_far=read_so_far=re_written_so_far=re_read_so_far=0 ;
-
-	if(OPS_flag)
-		unit="ops";
-	else
-		unit="KB";
-
-	if(!haveshm)
-	{
-		shmaddr=(struct child_stats *)alloc_mem((long long)SHMSIZE,(int)1);
-#ifdef _64BIT_ARCH_
-		if((long long)shmaddr==(long long)-1)
-#else
-		if((long )shmaddr==(long)-1)
-#endif
-		{
-			printf("\nShared memory not working\n");
-			exit(24);
-		}
-		haveshm=(char*)shmaddr;
-	}
-	else
-		shmaddr=(struct child_stats *)haveshm;
-
-	if(use_thread)
-		stop_flag = &stoptime;
-	else
-	{
-		temp = (char *)&shmaddr[0];
-		stop_flag = (char *)&temp[(long long)SHMSIZE]-4;
-	}
-	for(xyz=0;xyz<num_child;xyz++){ /* all children to state 0 (HOLD) */
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		child_stat->flag=CHILD_STATE_HOLD;
-		child_stat->actual=0;
-		child_stat->throughput=0;
-		child_stat->cputime=0;
-		child_stat->walltime=0;
-	}
-	*stop_flag = 0;
-	if(!sflag)
-		kilobytes64=throughsize;
-	if(!rflag)
-        	reclen=(long long)4096;
-	if(aggflag)
-		kilobytes64=orig_size/num_child;
-        numrecs64 = (long long)(kilobytes64*1024)/reclen;
-	buffer=mainbuffer;
-	if(use_thread)
-		port="thread";
-	else
-		port="process";
-	if(w_traj_flag)
-	{
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tEach %s writes a %ld Kbyte file in telemetry controlled records\n",
-		port,kilobytes64);
-#else
-	if(!silent) printf("\tEach %s writes a %lld Kbyte file in telemetry controlled records\n",
-		port,kilobytes64);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tEach %s writes a %ld Kbyte file in %ld Kbyte records\n",
-		port,kilobytes64,reclen/1024);
-#else
-	if(!silent) printf("\tEach %s writes a %lld Kbyte file in %lld Kbyte records\n",
-		port,kilobytes64,reclen/1024);
-#endif
-	}
-
-	if(fflag)		/* Each child has a file name to write */
-	  for(xx=0;xx<num_child;xx++)
-	    filearray[xx] = filename;
-	myid = (long long)getpid();
-
-	/* rags: skip writer test */
-	if(include_tflag)
-		if(!(include_mask & (long long)WRITER_MASK))
-		{
-			store_dvalue( (double)0);
-			store_dvalue( (double)0);
-			toutputindex++;
-			goto next0;
-		}
-
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Write");
-	/* Hooks to start the distributed Iozone client/server code */
-	if(distributed)
-	{
-		use_thread=0;  /* Turn of any Posix threads */
-		if(master_iozone)
-			master_listen_socket = start_master_listen();
-		else
-			become_client();
-	}
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_WRITE_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				if(!use_thread)
-					kill((pid_t)childids[xy],SIGTERM);
-			}
-			exit(25);
-		}
-		if(childids[xx]!=0 && debug1)
-#ifdef NO_PRINT_LLD
-			printf("Parent starting slot %ld\n",xx);	
-#else
-			printf("Parent starting slot %lld\n",xx);	
-#endif
-		if( childids[xx] == 0 ){
-#ifdef _64BIT_ARCH_
-		  thread_write_test((void *)xx);
-#else
-		  thread_write_test((void *)(long)xx);
-#endif
-		}else {
-#ifdef NO_PRINT_LLD
-		  sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx], xx);
-#else
-		  sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx], xx);
-#endif
-		}
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx], xx);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx], xx);
-#endif
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create(thread_write_test,(void*)xx);
-#else
-		childids[xx] = mythread_create(thread_write_test,(void*)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("Thread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,SIGTERM);
-			}
-			exit(27);
-		}
-	   }
-	}
-#endif
-	if((long long)getpid() == myid)
-	{
-		prepage(buffer,reclen);		/* Force copy on write */
-				/* wait for children to start */
-		if(distributed && master_iozone)
-		{
-			start_master_listen_loop((int) num_child);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];	
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++)	/* Start all children going */
-		{
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-						/* State "go" */
-			child_stat = (struct child_stats *)&shmaddr[i];	
-			child_stat->flag=CHILD_STATE_BEGIN;
-			if(distributed && master_iozone)
-				tell_children_begin(i);
-		}
-		starttime1 = time_so_far();	/* Start parents timer */
-		goto waitout;
-	}
-
-waitout:
-	getout=0;
-	if((long long)getpid() == myid) {	/* Parent only */
-		starttime1 = time_so_far(); /* Wait for all children */
-		for( i = 0; i < num_child; i++){
-			child_stat = (struct child_stats *) &shmaddr[i];
-			if(distributed && master_iozone)
-			{
-				printf("\n\tTest running:");
-				wait_dist_join();
-				break;
-			}
-			else
-			{
-			 if(use_thread)
-			 {
-				thread_join(childids[i],(void *)&pstatus);
-			 }
-			 else
-			 {
-		   	 	wait(0);
-			 }
-			}
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* get parents total time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res; 
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-
-	total_kilos=0;
-	ptotal=0;
-	walltime = 0.0;
-	cputime = 0.0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *) &shmaddr[xyz];
-		total_kilos += child_stat->throughput; /* add up the children */
-		ptotal += child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		/* Add up the cpu times of all children */
-		cputime += child_stat->cputime;
-
-		/* and find the child with the longest wall time */
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *) &shmaddr[xyz];
-		child_stat->flag = CHILD_STATE_HOLD; /* Start children at state 0 (HOLD) */
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %2ld initial writers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2ld initial writers \t= %10.2f %s/sec\n",num_child,((double)(ptotal)/total_time),unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %2lld initial writers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2lld initial writers \t= %10.2f %s/sec\n",num_child,((double)(ptotal)/total_time),unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU Utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) 
-					printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Write");
-	/**********************************************************/
-	/*************** End of intitial writer *******************/
-	/**********************************************************/
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-	*stop_flag=0;
-	if(distributed && master_iozone)
-	{
-		stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-
-	/**********************************************************/
-	/* Re-write throughput performance test. ******************/
-	/**********************************************************/
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	total_kilos=0;
-	toutputindex=1;
-	strcpy(&toutput[1][0],throughput_tests[1]);
-	if(noretest)
-	{
-		store_dvalue( (double)0);
-		goto next0;
-	}
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Rewrite");
-	/* Hooks to start the distributed Iozone client/server code */
-	if(distributed)
-	{
-		use_thread=0;  /* Turn of any Posix threads */
-		if(master_iozone)
-			master_listen_socket = start_master_listen();
-		else
-			become_client();
-	}
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_REWRITE_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(28);
-		}
-		if(childids[xx] == 0){
-#ifdef _64BIT_ARCH_
-			thread_rwrite_test((void *)xx);
-#else
-			thread_rwrite_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_rwrite_test,xx);
-#else
-		childids[xx] = mythread_create( thread_rwrite_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)myid,(long long)SIGTERM);
-			}
-			exit(29);
-		}
-	   }
-	}
-#endif
-	if((long long)myid == getpid())
-	{
-		if(distributed && master_iozone)
-		{
-			start_master_listen_loop((int) num_child);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-					/* wait for children to start */
-			while(child_stat->flag==CHILD_STATE_HOLD) 
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++)
-		{
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-			if(distributed && master_iozone)
-				tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-		goto jump3;
-	}
-	
-jump3:
-	getout=0;
-	if((long long)myid == getpid()){	/* Parent only here */
-		for( i = 0; i < num_child; i++){
-			child_stat=(struct child_stats *)&shmaddr[i];
-			if(distributed && master_iozone)
-			{
-				printf("\n\tTest running:");
-				wait_dist_join();
-				break;
-			}
-			else
-			{
-			   if(use_thread)
-			   {
-				thread_join(childids[i],(void *)&pstatus);
-			   }
-			   else
-			   {
-		   		wait(0);
-			   }
-			}
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res;
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents total time */
-	if(total_time  < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	
-
-	total_kilos=0;
-	ptotal=0;
-
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat=(struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-/*
-		if (walltime < cputime_res)
-			walltime = 0.0;
-*/
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-
-	for(xyz=0;xyz<num_child;xyz++){	/* Reset state to 0 (HOLD) */
-		child_stat=(struct child_stats *)&shmaddr[xyz];
-		child_stat->flag = CHILD_STATE_HOLD;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %2ld rewriters \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2ld rewriters \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %2lld rewriters \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2lld rewriters \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	*stop_flag=0;
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Rewrite");
-	/**********************************************************/
-	/*************** End of rewrite throughput ****************/
-	/**********************************************************/
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-	if(distributed && master_iozone)
-	{
-		stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-next0:
-	if(include_tflag)
-		if(!(include_mask & (long long)READER_MASK))
-			goto next1;
-	/**************************************************************/
-	/*** Reader throughput tests **********************************/
-	/**************************************************************/
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Read");
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[2]);
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	total_kilos=0;
-	if(distributed)
-	{
-		use_thread=0;
-		if(master_iozone)
-			master_listen_socket=start_master_listen();
-		else
-			become_client();
-	}
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_READ_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(30);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_read_test((void *)xx);
-#else
-			thread_read_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_read_test,xx);
-#else
-		childids[xx] = mythread_create( thread_read_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(31);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-		if(distributed && master_iozone)
-		{
-			start_master_listen_loop((int) num_child);
-		}
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat=(struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++)
-		{
-			child_stat=(struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN; /* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-			if(distributed && master_iozone)
-				tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-		goto jumpend4;
-	}
-jumpend4:
-	getout=0;
-	if(myid == (long long)getpid()){	/* Parent here */
-		for( i = 0; i < num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			if(distributed && master_iozone)
-			{
-				printf("\n\tTest running:");
-				wait_dist_join();
-				break;
-			}
-			else
-			{
-			   if(use_thread)
-			   {
-				thread_join(childids[i],(void *)&pstatus);
-			   }
-			   else
-			   {
-				wait(0);
-			   }
-			}
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res; 
-		if(jtime < (double).000001)
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res; 
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat=(struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %2ld readers \t\t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2ld readers \t\t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %2lld readers \t\t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2lld readers \t\t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Read");
-	/**********************************************************/
-	/*************** End of readers throughput ****************/
-	/**********************************************************/
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-	if(distributed && master_iozone)
-	{
-		stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-
-	/**************************************************************/
-	/*** ReReader throughput tests **********************************/
-	/**************************************************************/
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[3]);
-	if(noretest)
-	{
-		store_dvalue( (double)0);
-		goto next1;
-	}
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Reread");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_REREAD_TEST, numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(32);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_rread_test((void *)xx);
-#else
-			thread_rread_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_rread_test,xx);
-#else
-		childids[xx] = mythread_create( thread_rread_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(33);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-		goto jumpend2;
-	}
-	
-jumpend2:
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-			   if(use_thread)
-			   {
-				thread_join(childids[i],(void *)&pstatus);
-			   }
-			   else
-			   {
-				wait(0);
-			   }
-			}
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res; 
-		if(jtime < (double).000001)
-		{
-			jtime=time_res;
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	min_throughput=max_throughput=min_xfer=0;
-	total_kilos=0;
-	ptotal=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-/*
-		if (walltime < cputime_res)
-			walltime = 0.0;
-*/
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld re-readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld re-readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld re-readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld re-readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Reread");
-	/**********************************************************/
-	/*************** End of re-readers throughput ****************/
-	/**********************************************************/
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-
-next1:
-	if(include_tflag)
-		if(!(include_mask & (long long)REVERSE_MASK))
-			goto next2;
-	sync();
-	sleep(2);
-
-	/**************************************************************/
-	/*** Reverse reader throughput tests **************************/
-	/**************************************************************/
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[4]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Revread");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_REVERSE_READ_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(34);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_reverse_read_test((void *)xx);
-#else
-			thread_reverse_read_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_reverse_read_test,xx);
-#else
-		childids[xx] = mythread_create( thread_reverse_read_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(35);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001)
-		{
-			jtime=time_res;
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		/* walltime += child_stat->walltime; */
-		cputime += child_stat->cputime;
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-/*
-		if (walltime < cputime_res)
-			walltime = 0.0;
-*/
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld reverse readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld reverse readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld reverse readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld reverse readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Revread");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-next2:
-	if(include_tflag)
-		if(!(include_mask & (long long)STRIDE_READ_MASK))
-			goto next3;
-	/**************************************************************/
-	/*** stride reader throughput tests **************************/
-	/**************************************************************/
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[5]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Strideread");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	sync();
-	sleep(2);
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_STRIDE_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(36);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_stride_read_test((void *)xx);
-#else
-			thread_stride_read_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_stride_read_test,xx);
-#else
-		childids[xx] = mythread_create( thread_stride_read_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(37);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		/* walltime += child_stat->walltime; */
-		cputime += child_stat->cputime;
-		/* Get the biggest walltime */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-/*
-		if (walltime < cputime_res)
-			walltime = 0.0;
-*/
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld stride readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld stride readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld stride readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld stride readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Strideread");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-	/**************************************************************/
-	/*** random reader throughput tests ***************************/
-	/**************************************************************/
-next3:
-	if(include_tflag)
-		if(!(include_mask & (long long)RANDOM_RW_MASK))
-			goto next4;
-	
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[6]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Randread");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	sync();
-	sleep(2);
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_RANDOM_READ_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(38);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_ranread_test((void *)xx);
-#else
-			thread_ranread_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_ranread_test,xx);
-#else
-		childids[xx] = mythread_create( thread_ranread_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(39);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the biggest walltime */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld random readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld random readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld random readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld random readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Randread");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-	/**************************************************************/
-	/***  mixed workload throughput tests ***************************/
-	/**************************************************************/
-next4:
-	if(include_tflag)
-		if(!(include_mask & (long long)RANDOM_MIX_MASK))
-			goto next5;
-	
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[7]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Mixed");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	sync();
-	sleep(2);
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_RANDOM_MIX_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(38);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_mix_test((void *)xx);
-#else
-			thread_mix_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_mix_test,xx);
-#else
-		childids[xx] = mythread_create( thread_mix_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(39);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the biggest walltime */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld mixed workload \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld mixed workload \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld mixed workload \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld mixed workload \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Mixed");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-next5:
-	/**************************************************************/
-	/*** random writer throughput tests  **************************/
-	/**************************************************************/
-	if(include_tflag)
-		if(!(include_mask & (long long)RANDOM_RW_MASK) || no_write)
-			goto next6;
-	
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[8]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Randwrite");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	sync();
-	sleep(2);
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_RANDOM_WRITE_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(38);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_ranwrite_test((void *)xx);
-#else
-			thread_ranwrite_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_ranwrite_test,xx);
-#else
-		childids[xx] = mythread_create( thread_ranwrite_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(39);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the biggest walltime */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld random writers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld random writers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld random writers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld random writers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Randwrite");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-next6:
-	/**************************************************************/
-	/*** Pwrite writer throughput tests  **************************/
-	/**************************************************************/
-#ifndef HAVE_PREAD
-		goto next7;
-#else
-	if(include_tflag)
-		if(!(include_mask & (long long)PWRITER_MASK))
-			goto next7;
-	
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[9]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Pwrite");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	sync();
-	sleep(2);
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_PWRITE_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(38);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_pwrite_test((void *)xx);
-#else
-			thread_pwrite_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_pwrite_test,xx);
-#else
-		childids[xx] = mythread_create( thread_pwrite_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(39);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the biggest walltime*/
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld pwrite writers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld pwrite writers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld pwrite writers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld pwrite writers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Pwrite");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-#endif
-	/**************************************************************/
-	/*** Pread reader throughput tests  **************************/
-	/**************************************************************/
-next7:
-
-#ifndef HAVE_PREAD
-		goto next8;
-#else
-	if(include_tflag)
-		if(!(include_mask & (long long)PREADER_MASK))
-			goto next8;
-	
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[10]);
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Pread");
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	sync();
-	sleep(2);
-	*stop_flag=0;
-	total_kilos=0;
-        /* Hooks to start the distributed Iozone client/server code */
-        if(distributed)
-        {
-                use_thread=0;  /* Turn of any Posix threads */
-                if(master_iozone)
-                        master_listen_socket = start_master_listen();
-                else
-                        become_client();
-        }
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_PREAD_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(38);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_pread_test((void *)xx);
-#else
-			thread_pread_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		chid=xx;
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_pread_test,xx);
-#else
-		childids[xx] = mythread_create( thread_pread_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(39);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-                if(distributed && master_iozone)
-                {
-                        start_master_listen_loop((int) num_child);
-                }
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat = (struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-                       if(distributed && master_iozone)
-                                tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-	}
-	
-	getout=0;
-	if(myid == (long long)getpid()){	 /* Parent here */
-		for( i = 0; i < num_child; i++){ /* wait for children to stop */
-			child_stat = (struct child_stats *)&shmaddr[i];
-                        if(distributed && master_iozone)
-                        {
-				printf("\n\tTest running:");
-                                wait_dist_join();
-                                break;
-                        }
-                        else
-                        {
-                           if(use_thread)
-                           {
-                                thread_join(childids[i],(void *)&pstatus);
-                           }
-                           else
-                           {
-                                wait(0);
-                           }
-                        }
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res;
-		if(jtime < (double).000001) 
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat = (struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the biggest walltime*/
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %ld pread readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %ld pread readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %lld pread readers \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %lld pread readers \t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Pread");
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-        if(distributed && master_iozone)
-	{
-                stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-#endif
-next8:
-	if(include_tflag)
-		if(!(include_mask & (long long)FWRITER_MASK))
-			goto next9;
-	/**************************************************************/
-	/*** fwriter throughput tests *********************************/
-	/**************************************************************/
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Fwrite");
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[11]);
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	total_kilos=0;
-	if(distributed)
-	{
-		use_thread=0;
-		if(master_iozone)
-			master_listen_socket=start_master_listen();
-		else
-			become_client();
-	}
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_FWRITE_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(30);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_fwrite_test((void *)xx);
-#else
-			thread_fwrite_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_fwrite_test,xx);
-#else
-		childids[xx] = mythread_create( thread_fwrite_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(31);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-		if(distributed && master_iozone)
-		{
-			start_master_listen_loop((int) num_child);
-		}
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat=(struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++)
-		{
-			child_stat=(struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN; /* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-			if(distributed && master_iozone)
-				tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-		goto jumpend1;
-	}
-jumpend1:
-	getout=0;
-	if(myid == (long long)getpid()){	/* Parent here */
-		for( i = 0; i < num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			if(distributed && master_iozone)
-			{
-				printf("\n\tTest running:");
-				wait_dist_join();
-				break;
-			}
-			else
-			{
-			   if(use_thread)
-			   {
-				thread_join(childids[i],(void *)&pstatus);
-			   }
-			   else
-			   {
-				wait(0);
-			   }
-			}
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res; 
-		if(jtime < (double).000001)
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res; 
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat=(struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %2ld fwriters \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2ld fwriters \t\t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %2lld fwriters \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2lld fwriters \t\t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Fwrite");
-	/**********************************************************/
-	/*************** End of fwrite throughput ****************/
-	/**********************************************************/
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-	if(distributed && master_iozone)
-	{
-		stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-next9:
-	if(include_tflag)
-		if(!(include_mask & (long long)FREADER_MASK))
-			goto next10;
-	/**************************************************************/
-	/*** freader throughput tests *********************************/
-	/**************************************************************/
-	if((!distributed) || (distributed && master_iozone))
-		start_monitor("Fread");
-	toutputindex++;
-	strcpy(&toutput[toutputindex][0],throughput_tests[12]);
-	walltime = 0.0;
-	cputime = 0.0;
-	jstarttime=0;
-	total_kilos=0;
-	if(distributed)
-	{
-		use_thread=0;
-		if(master_iozone)
-			master_listen_socket=start_master_listen();
-		else
-			become_client();
-	}
-	if(!use_thread)
-	{
-	   for(xx = 0; xx< num_child ; xx++){
-		chid=xx;
-		childids[xx] = start_child_proc(THREAD_FREAD_TEST,numrecs64,reclen);
-		if(childids[xx]==-1){
-			printf("\nFork failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				Kill((long long)childids[xy],(long long)SIGTERM);
-			}
-			exit(30);
-		}
-		if(childids[xx]==0){
-#ifdef _64BIT_ARCH_
-			thread_fread_test((void *)xx);
-#else
-			thread_fread_test((void *)((long)xx));
-#endif
-		}	
-	   }
-	}
-#ifndef NO_THREADS
-	else
-	{
-	   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-		if(!barray[xx])
-		{
-			barray[xx]=(char *) alloc_mem((long long)(MAXBUFFERSIZE+cache_size),(int)0);
-			if(barray[xx] == 0) {
-        		   perror("Memory allocation failed:");
-        		   exit(26);
-        		}
-     			barray[xx] =(char *)(((long)barray[xx] + cache_size ) & 
-			~(cache_size-1));
-		}
-#ifdef _64BIT_ARCH_
-		childids[xx] = mythread_create( thread_fread_test,xx);
-#else
-		childids[xx] = mythread_create( thread_fread_test,(void *)(long)xx);
-#endif
-		if(childids[xx]==-1){
-			printf("\nThread create failed\n");
-			for(xy = 0; xy< xx ; xy++){
-				kill((pid_t)myid,(int)SIGTERM);
-			}
-			exit(31);
-		}
-	   }
-	}
-#endif
-	if(myid == (long long)getpid()){
-		if(distributed && master_iozone)
-		{
-			start_master_listen_loop((int) num_child);
-		}
-		for(i=0;i<num_child; i++){ /* wait for children to start */
-			child_stat=(struct child_stats *)&shmaddr[i];
-			while(child_stat->flag==CHILD_STATE_HOLD)
-				Poll((long long)1);
-		}
-		for(i=0;i<num_child; i++)
-		{
-			child_stat=(struct child_stats *)&shmaddr[i];
-			child_stat->flag = CHILD_STATE_BEGIN; /* tell children to go */
-			if(delay_start!=0)
-				Poll((long long)delay_start);
-			if(distributed && master_iozone)
-				tell_children_begin(i);
-		}
-		starttime1 = time_so_far();
-		goto jumpend3;
-	}
-jumpend3:
-	getout=0;
-	if(myid == (long long)getpid()){	/* Parent here */
-		for( i = 0; i < num_child; i++){
-			child_stat = (struct child_stats *)&shmaddr[i];
-			if(distributed && master_iozone)
-			{
-				printf("\n\tTest running:");
-				wait_dist_join();
-				break;
-			}
-			else
-			{
-			   if(use_thread)
-			   {
-				thread_join(childids[i],(void *)&pstatus);
-			   }
-			   else
-			   {
-				wait(0);
-			   }
-			}
-			if(!jstarttime)
-				jstarttime = time_so_far(); 
-		}
-		jtime = (time_so_far()-jstarttime)-time_res; 
-		if(jtime < (double).000001)
-		{
-			jtime=time_res; 
-		}
-	}
-	total_time = (time_so_far() - starttime1)-time_res; /* Parents time */
-	if(total_time < (double).000001) 
-	{
-		total_time=time_res; 
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-#ifdef JTIME
-	total_time=total_time-jtime;/* Remove the join time */
-	if(!silent) printf("\nJoin time %10.2f\n",jtime);
-#endif
-	
-	total_kilos=0;
-	ptotal=0;
-	min_throughput=max_throughput=min_xfer=0;
-	if(!silent) printf("\n");
-	for(xyz=0;xyz<num_child;xyz++){
-		child_stat=(struct child_stats *)&shmaddr[xyz];
-		total_kilos+=child_stat->throughput;
-		ptotal+=child_stat->actual;
-		if(!min_xfer)
-			min_xfer=child_stat->actual;
-		if(child_stat->actual < min_xfer)
-			min_xfer=child_stat->actual;
-		if(!min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput < min_throughput)
-			min_throughput=child_stat->throughput;
-		if(child_stat->throughput > max_throughput)
-			max_throughput=child_stat->throughput;
-		cputime += child_stat->cputime;
-		/* Get the earliest start time and latest fini time to calc. elapsed time. */
-		if (child_stat->walltime < child_stat->cputime)
-			child_stat->walltime = child_stat->cputime;
-		if (child_stat->walltime > walltime)
-			walltime = child_stat->walltime;
-	}
-	avg_throughput=total_kilos/num_child;
-	if(cpuutilflag)
-	{
-		if (cputime < cputime_res)
-			cputime = 0.0;
-	}
-	if(cpuutilflag)
-		store_times (walltime, cputime);	/* Must be Before store_dvalue(). */
-	store_dvalue(total_kilos);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\tChildren see throughput for %2ld freaders \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2ld freaders \t\t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#else
-	if(!silent) printf("\tChildren see throughput for %2lld freaders \t= %10.2f %s/sec\n", num_child, total_kilos,unit);
-	if(!silent && !distributed) printf("\tParent sees throughput for %2lld freaders \t\t= %10.2f %s/sec\n", num_child, (double)(ptotal)/total_time,unit);
-#endif
-	if(!silent) printf("\tMin throughput per %s \t\t\t= %10.2f %s/sec \n", port,min_throughput,unit);
-	if(!silent) printf("\tMax throughput per %s \t\t\t= %10.2f %s/sec\n", port,max_throughput,unit);
-	if(!silent) printf("\tAvg throughput per %s \t\t\t= %10.2f %s/sec\n", port,avg_throughput,unit);
-	if(!silent) printf("\tMin xfer \t\t\t\t\t= %10.2f %s\n", min_xfer,unit);
-	/* CPU% can be > 100.0 for multiple CPUs */
-	if(cpuutilflag)
-	{
-		if(walltime == 0.0)
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 0.0);
-		}
-		else
-		{
-			if(!silent) printf("\tCPU utilization: Wall time %8.3f    CPU time %8.3f    CPU utilization %6.2f %%\n\n",
-				walltime, cputime, 100.0 * cputime / walltime);
-		}
-	}
-	if(Cflag)
-	{
-		for(xyz=0;xyz<num_child;xyz++)
-		{
-			child_stat = (struct child_stats *) &shmaddr[xyz];
-			if(cpuutilflag)
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec, wall=%6.3f, cpu=%6.3f, %%=%6.2f\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit, child_stat->walltime, 
-					child_stat->cputime, cpu_util(child_stat->cputime, child_stat->walltime));
-			}
-			else
-			{
-				if(!silent) printf("\tChild[%ld] xfer count = %10.2f %s, Throughput = %10.2f %s/sec\n",
-					(long)xyz, child_stat->actual, unit, child_stat->throughput, unit);
-			}
-		}
-	}
-	if((!distributed) || (distributed && master_iozone))
-		stop_monitor("Fread");
-	/**********************************************************/
-	/*************** End of fread throughput ******************/
-	/**********************************************************/
-	sync();
-	sleep(2);
-	if(restf)
-		sleep((int)rest_val);
-	if(distributed && master_iozone)
-	{
-		stop_master_listen(master_listen_socket);
-		cleanup_comm();
-	}
-next10:
-	sleep(2); /* You need this. If you stop and restart the 
-		     master_listen it will fail on Linux */
-	if (!no_unlink) {
-		/**********************************************************/
-		/* Cleanup all of the temporary files 			  */
-		/* This is not really a test. It behaves like a test so   */
-		/* it can unlink all of the same files that the other     */
-		/* tests left hanging around.				  */
-		/**********************************************************/
-		/* Hooks to start the distributed Iozone client/server code */
-		if(distributed)
-		{
-			use_thread=0;  /* Turn of any Posix threads */
-			if(master_iozone)
-				master_listen_socket = start_master_listen();
-			else
-				become_client();
-		}
-		if(!use_thread)
-		{
-		   for(xx = 0; xx< num_child ; xx++){
-			chid=xx;
-			childids[xx] = start_child_proc(THREAD_CLEANUP_TEST,numrecs64,reclen);
-			if(childids[xx]==-1){
-				printf("\nFork failed\n");
-				for(xy = 0; xy< xx ; xy++){
-					Kill((long long)childids[xy],(long long)SIGTERM);
-				}
-				exit(28);
-			}
-			if(childids[xx] == 0){
-#ifdef _64BIT_ARCH_
-				thread_cleanup_test((void *)xx);
-#else
-				thread_cleanup_test((void *)((long)xx));
-#endif
-			}	
-		   }
-		}
-#ifndef NO_THREADS
-		else
-		{
-		   for(xx = 0; xx< num_child ; xx++){	/* Create the children */
-#ifdef _64BIT_ARCH_
-			childids[xx] = mythread_create( thread_cleanup_test,xx);
-#else
-			childids[xx] = mythread_create( thread_cleanup_test,(void *)(long)xx);
-#endif
-			if(childids[xx]==-1){
-				printf("\nThread create failed\n");
-				for(xy = 0; xy< xx ; xy++){
-					Kill((long long)myid,(long long)SIGTERM);
-				}
-				exit(29);
-			}
-		   }
-		}
-#endif
-		if((long long)myid == getpid())
-		{
-			if(distributed && master_iozone)
-			{
-				start_master_listen_loop((int) num_child);
-			}
-			for(i=0;i<num_child; i++){
-				child_stat = (struct child_stats *)&shmaddr[i];
-						/* wait for children to start */
-				while(child_stat->flag==CHILD_STATE_HOLD) 
-					Poll((long long)1);
-			}
-			for(i=0;i<num_child; i++)
-			{
-				child_stat = (struct child_stats *)&shmaddr[i];
-				child_stat->flag = CHILD_STATE_BEGIN;	/* tell children to go */
-				if(delay_start!=0)
-					Poll((long long)delay_start);
-				if(distributed && master_iozone)
-					tell_children_begin(i);
-			}
-		}
-	
-		getout=0;
-		if((long long)myid == getpid()){	/* Parent only here */
-			for( i = 0; i < num_child; i++){
-				child_stat=(struct child_stats *)&shmaddr[i];
-				if(distributed && master_iozone)
-				{
-					printf("\n\tTest cleanup:");
-					wait_dist_join();
-					break;
-				}
-				else
-				{
-				   if(use_thread)
-				   {
-					thread_join(childids[i],(void *)&pstatus);
-				   }
-				   else
-				   {
-			   		wait(0);
-				   }
-				}
-			}
-		}
-
-		for(xyz=0;xyz<num_child;xyz++){	/* Reset state to 0 (HOLD) */
-			child_stat=(struct child_stats *)&shmaddr[xyz];
-			child_stat->flag = CHILD_STATE_HOLD;
-		}
-		sync();
-		sleep(2);
-		if(distributed && master_iozone)
-		{
-			stop_master_listen(master_listen_socket);
-#ifdef Windows
-			/* windows needs time before shutting down sockets */
-			sleep(1);
-#endif
-			cleanup_comm();
-		}
-	}
-	/********************************************************/
-	/* End of cleanup					*/
-	/********************************************************/
-	sync();
-	if(!silent) printf("\n");
-	if(!silent) printf("\n");
-	return;
-}
-
-	
-/************************************************************************/
-/* Time measurement routines.						*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-static double
-time_so_far(void)
-#else
-static double
-time_so_far()
-#endif
-{
-#ifdef Windows
-   LARGE_INTEGER freq,counter;
-   double wintime,bigcounter;
-   struct timeval tp;
-   /* For Windows the time_of_day() is useless. It increments in 55 milli 
-    * second increments. By using the Win32api one can get access to the 
-    * high performance measurement interfaces. With this one can get back 
-    * into the 8 to 9 microsecond resolution.
-    */
-   if(pit_hostname[0]){
-     if (pit_gettimeofday(&tp, (struct timezone *) NULL, pit_hostname, 
- 		pit_service) == -1)
-         perror("pit_gettimeofday");
-  	 return ((double) (tp.tv_sec)) + (((double) tp.tv_usec) * 0.000001 );
-   }
-   else
-   {
-        QueryPerformanceFrequency(&freq);
-        QueryPerformanceCounter(&counter);
-        bigcounter=(double)counter.HighPart *(double)0xffffffff +
-                (double)counter.LowPart;
-        wintime = (double)(bigcounter/(double)freq.LowPart);
-        return((double)wintime);
-   }
-#else
-#if defined (OSFV4) || defined(OSFV3) || defined(OSFV5)
-  struct timespec gp;
-
-  if (getclock(TIMEOFDAY, (struct timespec *) &gp) == -1)
-    perror("getclock");
-  return (( (double) (gp.tv_sec)) +
-    ( ((float)(gp.tv_nsec)) * 0.000000001 ));
-#else
-  struct timeval tp;
-
-  if(pit_hostname[0]){
-     if (pit_gettimeofday(&tp, (struct timezone *) NULL, pit_hostname, pit_service) == -1)
-         perror("pit_gettimeofday");
-  	 return ((double) (tp.tv_sec)) + (((double) tp.tv_usec) * 0.000001 );
-  }
-  else
-  {
-     if (gettimeofday(&tp, (struct timezone *) NULL) == -1)
-         perror("gettimeofday");
-  	 return ((double) (tp.tv_sec)) + (((double) tp.tv_usec) * 0.000001 );
-  }
-#endif
-#endif
-}
-
-/************************************************************************/
-/* FETCHIT ()								*/
-/*									*/
-/* Routine to make the on chip data cache hot for this buffer. The	*/
-/* on chip cache may have been blown by other code in the application	*/
-/* or in the OS.  Remember, on some machines, the data cache is direct  */
-/* mapped and virtual indexed.						*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void fetchit(char *buffer,long long length)
-#else
-void fetchit(buffer,length)
-char *buffer;
-long long length;
-#endif
-{
-	char *where;
-	volatile long long x[4];
-	long long i;
-	where=(char *)buffer;
-	for(i=0;i<(length/cache_line_size);i++)
-	{
-		x[(i & 3)]=*(where);
-		where+=cache_line_size;
-		
-	}
-}
-
-/************************************************************************/
-/* Verify that the buffer contains expected pattern			*/
-/************************************************************************/
-/* sverify == 0 means full check of pattern for every byte.             */
-/* severify == 1 means partial check of pattern for each page.          */
-/* sverify == 2 means no check, but partial touch for each page.        */
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-long long 
-verify_buffer(volatile char *buffer,long long length, off64_t recnum, long long recsize,unsigned long long patt,
-	char sverify)
-#else
-long long 
-verify_buffer(buffer,length, recnum, recsize,patt,sverify)
-char *buffer;
-long long length; 
-off64_t recnum; 
-long long recsize;
-unsigned long long patt;
-char sverify;
-#endif
-{
-	volatile unsigned long long *where;
-	volatile unsigned long long dummy;
-	long *de_ibuf, *de_obuf;
-	long long j,k;
-	off64_t file_position=0;
-	off64_t i;
-	char *where2;
-	char *pattern_ptr;
-	long long mpattern,xx2;
-	unsigned int seed;
-	unsigned long x;
-	unsigned long long value,value1;
-	unsigned long long a= 0x01020304;
-	unsigned long long b = 0x05060708;
-	unsigned long long c= 0x01010101;
-	unsigned long long d = 0x01010101;
-	unsigned long long pattern_buf;
-	int lite = 1;	/* Only validate 1 long when running 
-			   de-deup validation */
-
-	value = (a<<32) | b;
-	value1 = (c<<32) | d;
-
-	/* printf("Verify Sverify %d verify %d diag_v %d\n",sverify,verify,diag_v); */
-	x=0;
-	xx2=chid;
-	if(share_file)
-		xx2=(long long)0;
-	mpattern=patt;
-	pattern_buf=patt;
-	where=(unsigned long long *)buffer;
-	if(sverify == 2)
-	{
-	  for(i=0;i<(length);i+=page_size)
-	  {
-	      dummy = *where;
-	      where+=(page_size/sizeof(long long));
-	  }
-	  return(0);
-	}
-	if(dedup)
-	{
-		gen_new_buf((char *)dedup_ibuf,(char *)dedup_temp, (long)recnum, (int)length,(int)dedup, (int) dedup_interior, dedup_compress, 0);
-		de_ibuf = (long *)buffer;
-		de_obuf = (long *)dedup_temp;
-		if(lite)	/* short touch to reduce intrusion */
-			length = (long) sizeof(long);
-		for(i=0;i<length/sizeof(long);i++)
-		{
-			if(de_ibuf[i]!= de_obuf[i])
-			{
-				if(!silent)
-#ifdef NO_PRINT_LLD
-				   printf("\nDedup mis-compare at %ld\n",
-					(long long)((recnum*recsize)+(i*sizeof(long))) );
-#else
-				   printf("\nDedup mis-compare at %lld\n",
-					(long long)((recnum*recsize)+(i*sizeof(long))) );
-				   printf("Found %.lx Expecting %.lx \n",de_ibuf[i], de_obuf[i]);
-#endif
-				return(1);
-			}
-		}
-		return(0);
-	}
-	if(diag_v)
-	{
-		if(no_unlink)
-			base_time=0;
-		seed= (unsigned int)(base_time+xx2+recnum);
-	        srand(seed);
-	        mpattern=(long long)rand();
-	        mpattern=(mpattern<<48) | (mpattern<<32) | (mpattern<<16) | mpattern;
-		mpattern=mpattern+value;
-	}
-
-	/* printf("verify patt %llx CHid %d\n",mpattern,chid);*/
-
-	where=(unsigned long long *)buffer;
-
-	if(!verify)
-		printf("\nOOPS You have entered verify_buffer unexpectedly !!! \n");
-
-	if(sverify == 1)
-	{
-	  for(i=0;i<(length);i+=page_size)
-	  {
-	      if((unsigned long long)(*where) != (unsigned long long)((pattern_buf<<32) | pattern_buf))
-	      {
-		   file_position = (off64_t)( (recnum * recsize)+ i);
-	printf("\n\n");
-#ifdef NO_PRINT_LLD
-	printf("Error in file: Found ?%lx? Expecting ?%lx? addr %lx\n",*where, (long long)((pattern_buf<<32)|pattern_buf),where);
-	printf("Error in file: Position %ld \n",file_position);
-	printf("Record # %ld Record size %ld kb \n",recnum,recsize/1024);
-	printf("where %8.8llx loop %ld\n",where,i);
-#else
-	printf("Error in file: Found ?%llx? Expecting ?%llx? addr %lx\n",*where, (long long)((pattern_buf<<32)|pattern_buf),((long)where));
-	printf("Error in file: Position %lld \n",file_position);
-	printf("Record # %lld Record size %lld kb \n",recnum,recsize/1024);
-	printf("where %8.8lx loop %lld\n",(long)where,(long long)i);
-#endif
-		   return(1);
-	      }
-	      where+=(page_size/sizeof(long long));
-	  }
-	}
-	if(sverify == 0)
-	{
-	  for(i=0;i<(length/cache_line_size);i++)
-	  {
-	   for(j=0;j<(cache_line_size/sizeof(long long));j++)
-	   {
-              if(diag_v)
-	      {
-		 pattern_buf=mpattern;
-	      }
-	      else
-              {
-		pattern_buf= mpattern<<32 | mpattern;
-	      }
-
-	      pattern_ptr =(char *)&pattern_buf;
-
-	      if(*where != (unsigned long long)pattern_buf)
-	      {
-		   file_position = (off64_t)( (recnum * recsize))+
-			((i*cache_line_size)+(j*sizeof(long long)));
-		   where2=(char *)where;
-		   for(k=0;k<sizeof(long long);k++){
-		   	if(*where2 != *pattern_ptr)
-				break;
-		   	where2++;
-		   	pattern_ptr++;
-		   }
-		   file_position+=k;
-	printf("\n\n");
-#ifdef NO_PRINT_LLD
-	printf("Error in file: Position %ld %ld %ld \n",i,j,k);
-	printf("Error in file: Position %ld \n",file_position);
-	printf("Record # %ld Record size %ld kb \n",recnum,recsize/1024);
-#else
-	printf("Error in file: Position %lld %lld %lld \n",i,j,k);
-	printf("Error in file: Position %lld \n",file_position);
-	printf("Record # %lld Record size %lld kb \n",recnum,recsize/1024);
-#endif
-	printf("Found pattern: Char >>%c<< Expecting >>%c<<\n", *where2,*pattern_ptr);
-	printf("Found pattern: Hex >>%x<< Expecting >>%x<<\n", *where2,*pattern_ptr);
-		   return(1);
-	      }
-	      where++;
-	      if(diag_v)
-	         mpattern=mpattern+value1;
-	   }	
-	  }
-	}
-	return(0);
-}
-/************************************************************************/
-/* Fill  the buffer 							*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-fill_buffer(char *buffer,long long length,long long pattern,char sverify,long long recnum)
-#else
-void 
-fill_buffer(buffer,length,pattern,sverify,recnum)
-char *buffer;
-long long length;
-long long pattern;
-long long recnum;
-char sverify;
-#endif
-{
-	unsigned long long *where;
-	long long i,j,xx2;
-	long long mpattern;
-	unsigned int seed;
-	unsigned long x;
-	unsigned long long value,value1;
-	unsigned long long a = 0x01020304;
-	unsigned long long b = 0x05060708;
-	unsigned long long c = 0x01010101;
-	unsigned long long d = 0x01010101;
-
-	value = (a << 32) | b;
-	value1 = (c << 32) | d;
-
-	xx2=chid;
-	if(share_file)
-		xx2=(long long)0;
-	x=0;
-	mpattern=pattern;
-	/* printf("Fill: Sverify %d verify %d diag_v %d\n",sverify,verify,diag_v);*/
-	if(dedup)
-	{
-		gen_new_buf((char *)dedup_ibuf,(char *)buffer, (long)recnum, (int)length,(int)dedup, (int) dedup_interior, dedup_compress, 1);
-		return;
-	}
-	if(diag_v)
-	{
-		/*if(client_iozone)
-			base_time=0;
-		*/
-		if(no_unlink)
-			base_time=0;
-		seed= (unsigned int)(base_time+xx2+recnum);
-	        srand(seed);
-		mpattern=(long long)rand();
-		mpattern=(mpattern<<48) | (mpattern<<32) | (mpattern<<16) | mpattern;
-		mpattern=mpattern+value;
-	}
-	where=(unsigned long long *)buffer;
-	if(sverify == 1)
-	{
-		for(i=0;i<(length);i+=page_size)
-		{
-			*where = (long long)((pattern<<32) | pattern);
-			where+=(page_size/sizeof(long long)); 
-			/* printf("Filling page %lld \n",i/page_size);*/
-		}	
-	}
-	else
-	{
-		for(i=0;i<(length/cache_line_size);i++)
-		{
-			for(j=0;j<(cache_line_size/sizeof(long long));j++)
-			{
-				if(diag_v)
-				{
-					*where = (long long)(mpattern);
-					mpattern=mpattern+value1;
-				}
-				else
-					*where = (long long)((pattern<<32) | pattern);
-				where++;
-			}	
-		}
-	}
-}
-
-/************************************************************************/
-/* PURGEIT() 								*/
-/* 	 								*/
-/* Routine to make the on chip data cache cold for this buffer.		*/
-/* Remember, on some machines, the data cache is direct mapped and	*/
-/* virtual indexed.							*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void 
-purgeit(char *buffer,long long reclen)
-#else
-void 
-purgeit(buffer,reclen)
-char *buffer;
-long long reclen;
-#endif
-{
-	char *where;
-	long rsize;
-	long tsize;
-	VOLATILE long long x[200];
-	long i,cache_lines_per_rec;
-	long cache_lines_per_cache;
-	tsize = 200;
-	cache_lines_per_rec = (long)(reclen/cache_line_size);
-	cache_lines_per_cache = (long)(cache_size/cache_line_size);
-	rsize = (long)l_min((long long)cache_lines_per_rec,(long long)cache_lines_per_cache);
-#ifdef _64BIT_ARCH_
-	where=(char *)pbuffer + ((unsigned long long)buffer & (cache_size-1));
-#else
-	where=(char *)pbuffer + ((long)buffer & ((long)cache_size-1));
-#endif
-	for(i=0;i<(rsize);i++)
-	{
-		x[i%tsize]=*(where);
-		where+=cache_line_size;
-
-	}
-}
-
-#ifdef HAVE_ANSIC_C
-void
-prepage(char *buffer,long long reclen)
-#else
-void
-prepage(buffer, reclen)
-char *buffer;
-long long reclen; 
-#endif
-{
-	char *where;
-	long long i;
-	where=(char *)buffer;
-	for(i=0;i<(reclen/cache_line_size);i++)
-	{
-		*(where)=PATTERN;
-		where+=cache_line_size;
-	}
-}
-
-/************************************************************************/
-/* write_perf_test ()				        		*/
-/* Write and re-write test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void write_perf_test(off64_t kilo64,long long reclen ,long long *data1,long long *data2)
-#else
-void write_perf_test(kilo64,reclen ,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1;
-long long *data2;
-#endif
-{
-	double starttime1;
-	double writetime[2];
-	double walltime[2], cputime[2];
-	double qtime_start,qtime_stop;
-	double hist_time;
-	double compute_val = (double)0;
-#ifdef unix
-	double qtime_u_start,qtime_u_stop;
-	double qtime_s_start,qtime_s_stop;
-#endif
-	long long i,j;
-	off64_t numrecs64,traj_offset;
-	off64_t lock_offset=0;
-	long long Index = 0;
-	long long file_flags = 0;
-	long long traj_size;
-	unsigned long long writerate[2];
-	off64_t filebytes64;
-	int ltest;
-	char *maddr;
-	char *wmaddr,*free_addr;
-	char *pbuff;
-	char *nbuff;
-	int fd,wval;
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-
-	int test_foo;
-
-#ifdef unix
-	qtime_u_start=qtime_u_stop=0;
-	qtime_s_start=qtime_s_stop=0;
-#endif
-	nbuff=wmaddr=free_addr=0;
-	traj_offset=0;
-	test_foo=0;
-	hist_time=qtime_start=qtime_stop=0;
-	maddr=0;
-	pbuff=mainbuffer;
-	if(w_traj_flag)
-	{
-		filebytes64 = w_traj_fsize;
-		numrecs64=w_traj_ops;
-	}
-	else
-	{
-		numrecs64 = (kilo64*1024)/reclen;
-		filebytes64 = numrecs64*reclen;
-	}
-
-	if(Q_flag && (!wol_opened))
-	{
-		wol_opened++;
-		wqfd=fopen("wol.dat","a");
-		if(wqfd==0)
-		{
-			printf("Unable to open wol.dat\n");
-			exit(40);
-		}
-		fprintf(wqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-		rwqfd=fopen("rwol.dat","a");
-		if(rwqfd==0)
-		{
-			printf("Unable to open rwol.dat\n");
-			exit(41);
-		}
-		fprintf(rwqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	fd = 0;
-	if(oflag)
-		file_flags = O_RDWR|O_SYNC;
-	else
-		file_flags = O_RDWR;
-#if defined(O_DSYNC)
-	if(odsync)
-		file_flags |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux) || defined(__FreeBSD__) || defined(__DragonFly__)
-	if(read_sync)
-		file_flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		file_flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		file_flags |=O_DIRECTIO;
-#endif
-#endif
-
-/* Sanity check */
-/* Some filesystems do not behave correctly and fail
- * when this sequence is performned. This is a very
- * bad thing. It breaks many applications and lurks
- * around quietly. This code should never get
- * triggered, but in the case of running iozone on
- * an NFS client, the filesystem type on the server
- * that is being exported can cause this failure.
- * If this failure happens, then the NFS client is
- * going to going to have problems, but the acutal
- * problem is the filesystem on the NFS server.
- * It's not NFS, it's the local filesystem on the
- * NFS server that is not correctly permitting
- * the sequence to function.
- */
-/* _SUA_ Services for Unix Applications, under Windows
-    does not have a truncate, so this must be skipped */
-#if !defined(_SUA_)
-        if((fd = I_OPEN(filename, (int)O_CREAT|O_WRONLY,0))<0)
-        {
-                printf("\nCan not open temp file: %s\n",
-                        filename);
-                perror("open");
-                exit(44);
-        }
-		if(!notruncate)
-		{
-			if(check_filename(filename))
-			{
-				wval=ftruncate(fd,0);
-				if(wval < 0)
-				{
-					printf("\n\nSanity check failed. Do not deploy this filesystem in a production environment !\n");
-					exit(44);
-				}
-			}
-			close(fd);
-
-			if(check_filename(filename))
-				unlink(filename);
-		}
-/* Sanity check */
-
-#endif
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-
-	for( j=0; j<ltest; j++)
-	{
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-		if(j==0)
-		{
-#if defined(Windows)
-	        	if(unbuffered)
-		        {
-		        	hand=CreateFile(filename,
-				  GENERIC_READ|GENERIC_WRITE,
-			          FILE_SHARE_WRITE|FILE_SHARE_READ,
-				  NULL,OPEN_ALWAYS,FILE_FLAG_NO_BUFFERING|
-				  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-				  NULL);
-            		}
-		        else
-		        {
-#endif
-				if(!notruncate)
-				{
-	  		   		if((fd = I_CREAT(filename, 0640))<0)
-	  		   		{
-						printf("\nCan not create temp file: %s\n", 
-							filename);
-						perror("creat");
-						exit(42);
-	  		   		}
-				}
-#if defined(Windows)
-			}
-#endif
-		}
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-		{
-#endif
-		  if(fd) 
-			close(fd);
-#if defined(Windows)
-		}
-#endif
-
-#if defined(Windows)
-	       	if(unbuffered)
-	        {
-	        	hand=CreateFile(filename,
-			  GENERIC_READ|GENERIC_WRITE,
-		          FILE_SHARE_WRITE|FILE_SHARE_READ,
-			  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-			  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-			  NULL);
-            	}
-	        else
-	        {
-#endif
-	  	   if((fd = I_OPEN(filename, (int)file_flags,0))<0)
-	  	   {
-			printf("\nCan not open temp file: %s\n", 
-				filename);
-			perror("open");
-			exit(44);
-	  	   }
-#if defined(Windows)
-	  	}
-#endif
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-
-		if(file_lock)
-			if(mylockf((int) fd, (int) 1, (int)0)!=0)
-				printf("File lock for write failed. %d\n",errno);
-		if(mmapflag)
-		{
-			maddr=(char *)initfile(fd,filebytes64,1,PROT_READ|PROT_WRITE);
-		}
-		if(mmap_mix)
-		{
-			wval=write(fd, pbuff, (size_t) page_size);
-			if(wval != page_size)
-			{
-#ifdef NO_PRINT_LLD
-			    	printf("\nError writing block %ld, fd= %d\n", (long long)0, fd);
-#else
-			    	printf("\nError writing block %lld, fd= %d\n", (long long)0, fd);
-#endif
-				if(wval==-1)
-					perror("write");
-				signal_handler();
-			}
-			I_LSEEK(fd,0,SEEK_SET);
-		};
-		wval=fsync(fd);
-		if(wval==-1){
-			perror("fsync");
-			signal_handler();
-		}
-#ifdef ASYNC_IO
-		if(async_flag)
-			async_init(&gc,fd,direct_flag);
-#endif
-		pbuff=mainbuffer;
-		if(fetchon)
-			fetchit(pbuff,reclen);
-		if(verify || dedup || dedup_interior)
-			fill_buffer(pbuff,reclen,(long long)pattern,sverify,(long long)0);
-		starttime1 = time_so_far();
-#ifdef unix
-		if(Q_flag)
-		{
-			qtime_u_start=utime_so_far();
-			qtime_s_start=stime_so_far();
-		}
-#endif
-		if(w_traj_flag)
-		{
-			rewind(w_traj_fd);
-		}
-		compute_val=(double)0;
-		w_traj_ops_completed=0;
-		w_traj_bytes_completed=0;
-		for(i=0; i<numrecs64; i++){
-			if(w_traj_flag)
-			{
-				traj_offset=get_traj(w_traj_fd, (long long *)&traj_size,(float *)&compute_time,(long)1);
-				reclen=traj_size;
-#if defined(Windows)
-			if(unbuffered)
-			  SetFilePointer(hand,(LONG)traj_offset,0,FILE_BEGIN);
-			else
-#endif
-				I_LSEEK(fd,traj_offset,SEEK_SET);
-			}
-			if(Q_flag)
-			{
-#if defined(Windows)
-			if(unbuffered)
-			  traj_offset=SetFilePointer(hand,(LONG)0,0,FILE_CURRENT);
-			else
-#endif
-				traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-			}
-			if(rlocking)
-			{
-				lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-				mylockr((int) fd, (int) 1, (int)0,
-				  lock_offset, reclen);
-			}
-			if((verify && diag_v) || dedup || dedup_interior)
-				fill_buffer(pbuff,reclen,(long long)pattern,sverify,i);
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-			if(multi_buffer)
-			{
-				Index +=reclen;
-				if(Index > (MAXBUFFERSIZE-reclen))
-					Index=0;
-				pbuff = mbuffer + Index;	
-				if(verify || dedup || dedup_interior)
-					fill_buffer(pbuff,reclen,(long long)pattern,sverify,(long long)0);
-			}
-			if(async_flag && no_copy_flag)
-			{
-				free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-				nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-				if(verify || dedup || dedup_interior)
-					fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-				if(purge)
-					purgeit(nbuff,reclen);
-			}
-			if(purge)
-				purgeit(pbuff,reclen);
-			if(Q_flag || hist_summary)
-			{
-				qtime_start=time_so_far();
-			}
-			if(mmapflag)
-			{
-				wmaddr = &maddr[i*reclen];
-				fill_area((long long*)pbuff,(long long*)wmaddr,(long long)reclen);
-				if(!mmapnsflag)
-				{
-				  if(mmapasflag)
-				    msync(wmaddr,(size_t)reclen,MS_ASYNC);
-				  if(mmapssflag)
-				    msync(wmaddr,(size_t)reclen,MS_SYNC);
-				}
-			}
-			else
-			{
-			  if(async_flag)
-			  {
-			     if(no_copy_flag)
-			       async_write_no_copy(gc, (long long)fd, nbuff, reclen, (i*reclen), depth,free_addr);
-			     else
-			       async_write(gc, (long long)fd, pbuff, reclen, (i*reclen), depth);
-			  }
-			  else
-			  {
-#if defined(Windows)
-       			    if(unbuffered)
-        		    {
-				WriteFile(hand, pbuff, reclen,(LPDWORD)&wval,
-					0);
-			    }
-			    else
-			    {
-#endif
-			    wval=write(fd, pbuff, (size_t ) reclen);
-			    if(wval != reclen)
-			    {
-#ifdef NO_PRINT_LLD
-			    	printf("\nError writing block %ld, fd= %d\n", i,
-					 fd);
-#else
-			    	printf("\nError writing block %lld, fd= %d\n", i,
-					 fd);
-#endif
-			    	if(wval == -1)
-					perror("write");
-				signal_handler();
-			    }
-#if defined(Windows)
-			    }
-#endif
-			  }
-			}
-			if(hist_summary)
-			{
-				qtime_stop=time_so_far();
-				hist_time =(qtime_stop-qtime_start-time_res);
-				hist_insert(hist_time);
-			}
-			if(Q_flag)
-			{
-				qtime_stop=time_so_far();
-				if(j==0)
-#ifdef NO_PRINT_LLD
-				fprintf(wqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((qtime_stop-qtime_start-time_res))*1000000,reclen);
-				else
-				fprintf(rwqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((qtime_stop-qtime_start-time_res))*1000000,reclen);
-#else
-				fprintf(wqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((qtime_stop-qtime_start-time_res))*1000000,reclen);
-				else
-				fprintf(rwqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((qtime_stop-qtime_start-time_res))*1000000,reclen);
-#endif
-			}
-			w_traj_ops_completed++;
-			w_traj_bytes_completed+=reclen;
-			if(rlocking)
-			{
-				mylockr((int) fd, (int) 0, (int)0,
-				  lock_offset, reclen);
-			}
-		}
-#ifdef unix
-		if(Q_flag)
-		{
-		   qtime_u_stop=utime_so_far();
-		   qtime_s_stop=stime_so_far();
-		   if(j==0)
-			 fprintf(wqfd,"\nSystem time %10.3f User time %10.3f Real %10.3f  (seconds)\n",
-				(qtime_s_stop-qtime_s_start)/sc_clk_tck,
-				(qtime_u_stop-qtime_u_start)/sc_clk_tck,
-				time_so_far()-starttime1);
-		   else
-			fprintf(rwqfd,"\nSystem time %10.3f User time %10.3f Real %10.3f  (seconds)\n",
-				(qtime_s_stop-qtime_s_start)/sc_clk_tck,
-				(qtime_u_stop-qtime_u_start)/sc_clk_tck,
-				time_so_far()-starttime1);
-		}
-#endif
-
-#ifdef ASYNC_IO
-		if(async_flag)
-		{
-			end_async(gc);
-			gc=0;
-		}
-#endif
-		if(include_flush)
-		{
-			if(mmapflag){
-				msync(maddr,(size_t)filebytes64,MS_SYNC);
-			}
-			else
-			{
-				wval=fsync(fd);
-				if(wval==-1){
-					perror("fsync");
-					signal_handler();
-				}
-			}
-		}
-		if(file_lock)
-			if(mylockf((int) fd,(int)0,(int)0))
-				printf("Unlock failed %d\n",errno);
-		if(include_close)
-		{
-			if(mmapflag)
-			{
-				mmap_end(maddr,(unsigned long long)filebytes64);
-			}
-#if defined(Windows)
-			if(unbuffered)
-				CloseHandle(hand);
-			else
-#endif
-			   wval=close(fd);
-			   if(wval==-1){
-				perror("close");
-				signal_handler();
-			   }
-		}
-		writetime[j] = ((time_so_far() - starttime1)-time_res)
-			-compute_val;
-		if(writetime[j] < (double).000001) 
-		{
-			writetime[j]=time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			if(mmapflag)
-				msync(maddr,(size_t)filebytes64,MS_SYNC);/* Clean up before read starts */
-			else
-			{
-				wval=fsync(fd);
-				if(wval==-1){
-					perror("fsync");
-					signal_handler();
-				}
-			}
-			if(mmapflag)
-			{
-				mmap_end(maddr,(unsigned long long)filebytes64);
-			}
-#if defined(Windows)
-			if(unbuffered)
-				CloseHandle(hand);
-			else
-#endif
-			wval=close(fd);
-			if(wval==-1){
-				perror("close");
-				signal_handler();
-			}
-		}
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-	}
-	if(OPS_flag || MS_flag){
-	   filebytes64=w_traj_ops_completed;
-	   /*filebytes64=filebytes64/reclen;*/
-	}else
-	   filebytes64=w_traj_bytes_completed;
-		
-        for(j=0;j<ltest;j++)
-        {
-		if(MS_flag)
-		{
-			writerate[j]=1000000.0*(writetime[j] / (double)filebytes64);
-			continue;
-		}
-              else
-            {
-                  writerate[j] = 
-                    (unsigned long long) ((double) filebytes64 / writetime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-		   writerate[j] >>= 10;
-	}
-	data1[0]=writerate[0];
-	if(noretest)
-	{	
-		writerate[1]=(long long) 0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)writerate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)writerate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%8ld",writerate[0]);
-	if(!silent) printf("%8ld",writerate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%8lld",writerate[0]);
-	if(!silent) printf("%8lld",writerate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-/************************************************************************/
-/* fwrite_perf_test ()				        		*/
-/* fWrite and fre-write test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void fwrite_perf_test(off64_t kilo64,long long reclen ,long long *data1,long long *data2)
-#else
-void fwrite_perf_test(kilo64,reclen ,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1;
-long long *data2;
-#endif
-{
-	double starttime1;
-	double writetime[2];
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long i,j;
-	off64_t numrecs64;
-	long long Index = 0;
-	unsigned long long writerate[2];
-	off64_t filebytes64;
-	FILE *stream = NULL;
-	int fd;
-	int wval;
-	int ltest;
-	char *how;
-	char *stdio_buf;
-
-	if(mmapflag || async_flag)
-		return;
-	numrecs64 = (kilo64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-	stdio_buf=(char *)malloc((size_t)reclen);
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-
-	for( j=0; j<ltest; j++)
-	{
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-		if(j==0)
-		{
-			if(check_filename(filename))
-				how="r+"; /* file exists, don't create and zero a new one. */
-			else
-				how="w+"; /* file doesn't exist. create it. */
-		}
-		else
-			how="r+"; /* re-tests should error out if file does not exist. */
-#ifdef IRIX64
-		if((stream=(FILE *)fopen(filename,how)) == 0)
-		{
-			printf("\nCan not fdopen temp file: %s %lld\n", 
-				filename,errno);
-			perror("fdopen");
-			exit(48);
-		}
-#else
-		if((stream=(FILE *)I_FOPEN(filename,how)) == 0)
-		{
-#ifdef NO_PRINT_LLD
-			printf("\nCan not fdopen temp file: %s %d\n", 
-				filename,errno);
-#else
-			printf("\nCan not fdopen temp file: %s %d\n", 
-				filename,errno);
-#endif
-			perror("fdopen");
-			exit(49);
-		}
-#endif
-		fd=fileno(stream);
-		fsync(fd);
-		setvbuf(stream,stdio_buf,_IOFBF,reclen);
-		buffer=mainbuffer;
-		if(fetchon)
-			fetchit(buffer,reclen);
-		if(verify || dedup || dedup_interior)
-			fill_buffer(buffer,reclen,(long long)pattern,sverify,(long long)0);
-		starttime1 = time_so_far();
-		compute_val=(double)0;
-		for(i=0; i<numrecs64; i++){
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-			if(multi_buffer)
-			{
-				Index +=reclen;
-				if(Index > (MAXBUFFERSIZE-reclen))
-					Index=0;
-				buffer = mbuffer + Index;	
-			}
-			if((verify & diag_v) || dedup || dedup_interior)
-				fill_buffer(buffer,reclen,(long long)pattern,sverify,i);
-			if(purge)
-				purgeit(buffer,reclen);
-			if(fwrite(buffer, (size_t) reclen, 1, stream) != 1)
-			{
-#ifdef NO_PRINT_LLD
-			    	printf("\nError fwriting block %ld, fd= %d\n", i,
-					 fd);
-#else
-			    	printf("\nError fwriting block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				perror("fwrite");
-				signal_handler();
-			}
-		}
-
-		if(include_flush)
-		{
-			fflush(stream);
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-		if(include_close)
-		{
-			wval=fclose(stream);
-			if(wval==-1){
-				perror("fclose");
-				signal_handler();
-			}
-		}
-		writetime[j] = ((time_so_far() - starttime1)-time_res)
-			-compute_val;
-		if(writetime[j] < (double).000001) 
-		{
-			writetime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			wval=fflush(stream);
-			if(wval==-1){
-				perror("fflush");
-				signal_handler();
-			}
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-			wval=fclose(stream);
-			if(wval==-1){
-				perror("fclose");
-				signal_handler();
-			}
-		}
-
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)(int)rest_val);
-	}
-	free(stdio_buf);
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-        for(j=0;j<ltest;j++)
-        {
-		if(MS_flag)
-		{
-			writerate[j]=1000000.0*(writetime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  writerate[j] = 
-		      (unsigned long long) ((double) filebytes64 / writetime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			writerate[j] >>= 10;
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(noretest)
-	{
-		writerate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)writerate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)writerate[1]);
-	data1[0]=writerate[0];
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%9ld",writerate[0]);
-	if(!silent) printf("%9ld",writerate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%9lld",writerate[0]);
-	if(!silent) printf("%9lld",writerate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-
-/************************************************************************/
-/* fread_perf_test				        		*/
-/* fRead and fre-read test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void fread_perf_test(off64_t kilo64,long long reclen,long long *data1,long long *data2)
-#else
-void fread_perf_test(kilo64,reclen,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	double starttime2;
-	double readtime[2];
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long j;
-	off64_t i,numrecs64;
-	long long Index = 0;
-	unsigned long long readrate[2];
-	off64_t filebytes64;
-	FILE *stream = 0;
-	char *stdio_buf;
-	int fd,ltest;
-
-	if(mmapflag || async_flag)
-		return;
-	numrecs64 = (kilo64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-	stdio_buf=(char *)malloc((size_t)reclen);
-
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-
-	for( j=0; j<ltest; j++ )
-	{
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-#ifdef IRIX64
-		if((stream=(FILE *)fopen(filename,"r")) == 0)
-		{
-			printf("\nCan not fdopen temp file: %s\n", 
-				filename);
-			perror("fdopen");
-			exit(51);
-		}
-#else
-		if((stream=(FILE *)I_FOPEN(filename,"r")) == 0)
-		{
-			printf("\nCan not fdopen temp file: %s\n", 
-				filename);
-			perror("fdopen");
-			exit(52);
-		}
-#endif
-		fd=I_OPEN(filename,O_RDONLY,0);
-		fsync(fd);
-		close(fd);
-		setvbuf(stream,stdio_buf,_IOFBF,reclen);
-		buffer=mainbuffer;
-		if(fetchon)
-			fetchit(buffer,reclen);
-		compute_val=(double)0;
-		starttime2 = time_so_far();
-		for(i=0; i<numrecs64; i++) 
-		{
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-                        if(multi_buffer)
-                        {
-                                Index +=reclen;
-                                if(Index > (MAXBUFFERSIZE-reclen))
-                                        Index=0;
-                                buffer = mbuffer + Index;
-                        }
-			if(purge)
-				purgeit(buffer,reclen);
-			if(fread(buffer, (size_t) reclen,1, stream) != 1)
-			{
-#ifdef _64BIT_ARCH_
-#ifdef NO_PRINT_LLD
-				printf("\nError freading block %lu %lx\n", i,
-					(unsigned long long)buffer);
-#else
-				printf("\nError freading block %llu %llx\n", i,
-					(unsigned long long)buffer);
-#endif
-#else
-#ifdef NO_PRINT_LLD
-				printf("\nError freading block %lu %lx\n", i,
-					(long)buffer);
-#else
-				printf("\nError freading block %llu %lx\n", i,
-					(long)buffer);
-#endif
-#endif
-				perror("read");
-				exit(54);
-			}
-			if(verify){
-				if(verify_buffer(buffer,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-					exit(55);
-				}
-			}
-		}
-		if(include_flush)
-			fflush(stream);
-		if(include_close)
-		{
-			fclose(stream);
-		}
-		readtime[j] = ((time_so_far() - starttime2)-time_res)
-			-compute_val;
-		if(readtime[j] < (double).000001) 
-		{
-			readtime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			fflush(stream);
-			fclose(stream);
-		}
-		stream = NULL;
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-    	}
-	free(stdio_buf);
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-        for(j=0;j<ltest;j++)
-        {
-		if(MS_flag)
-		{
-			readrate[j]=1000000.0*(readtime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  readrate[j] = 
-                  (unsigned long long) ((double) filebytes64 / readtime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			readrate[j] >>= 10;
-	}
-	data1[0]=readrate[0];
-	data2[0]=1;
-	if(noretest)
-	{
-		readrate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)readrate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)readrate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%8ld",readrate[0]);
-	if(!silent) printf("%9ld",readrate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%8lld",readrate[0]);
-	if(!silent) printf("%9lld",readrate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-
-/************************************************************************/
-/* read_perf_test				        		*/
-/* Read and re-fread test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-read_perf_test(off64_t kilo64,long long reclen,long long *data1,long long *data2)
-#else
-void 
-read_perf_test(kilo64,reclen,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	double starttime2;
-	double compute_val = (double)0;
-	double readtime[2];
-	double walltime[2], cputime[2];
-#ifdef unix
-	double qtime_u_start,qtime_u_stop;
-	double qtime_s_start,qtime_s_stop;
-#endif
-	long long j;
-	long long traj_size;
-	off64_t i,numrecs64,traj_offset;
-	off64_t lock_offset=0;
-	long long Index = 0;
-	unsigned long long readrate[2];
-	off64_t filebytes64;
-	volatile char *buffer1;
-	char *nbuff;
-	char *maddr;
-	char *wmaddr;
-	int fd,open_flags;
-	int test_foo,ltest;
-	long wval;
-	double qtime_start,qtime_stop;
-	double hist_time;
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-
-#else
-	long long *gc=0;
-#endif
-#ifdef unix
-	qtime_u_start=qtime_u_stop=0;
-	qtime_s_start=qtime_s_stop=0;
-#endif
-	hist_time=qtime_start=qtime_stop=0;
-	maddr=0;
-	traj_offset=0;
-	test_foo=0;
-	numrecs64 = (kilo64*1024)/reclen;
-
-	open_flags = O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		open_flags |=O_RSYNC|O_SYNC;
-#endif
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		open_flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		open_flags |=O_DIRECTIO;
-#endif
-#endif
-	if(r_traj_flag)
-	{
-		numrecs64=r_traj_ops;
-		filebytes64 = r_traj_fsize;
-	} else
-		filebytes64 = numrecs64*reclen;
-	fd = 0;
-	if(Q_flag && (!rol_opened))
-	{
-		rol_opened++;
-		rqfd=fopen("rol.dat","a");
-		if(rqfd==0)
-		{
-			printf("Unable to open rol.dat\n");
-			exit(56);
-		}
-		fprintf(rqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-		rrqfd=fopen("rrol.dat","a");
-		if(rrqfd==0)
-		{
-			printf("Unable to open rrol.dat\n");
-			exit(57);
-		}
-		fprintf(rrqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	/* 
-	 * begin real testing
-	 */
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-
-	for( j=0; j<ltest; j++ )
-	{
-
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-#if defined(Windows)
-	       	if(unbuffered)
-	        {
-	        	hand=CreateFile(filename,
-			  GENERIC_READ|GENERIC_WRITE,
-		          FILE_SHARE_WRITE|FILE_SHARE_READ,
-			  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-			  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-			  NULL);
-            	}
-	        else
-	        {
-#endif
-		if((fd = I_OPEN(filename, open_flags,0))<0)
-		{
-			printf("\nCan not open temporary file %s for read\n",filename);
-			perror("open");
-			exit(58);
-		}
-#if defined(Windows)
-		}
-#endif
-#ifdef ASYNC_IO
-		if(async_flag)
-			async_init(&gc,fd,direct_flag);
-#endif
-
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-		if(file_lock)
-			if(mylockf((int) fd, (int) 1, (int)1) != 0)
-				printf("File lock for read failed. %d\n",errno);
-		if(mmapflag)
-		{
-			maddr=(char *)initfile(fd,filebytes64,0,PROT_READ);
-		}
-#if defined(Windows)
-		if(!unbuffered)
-#endif
-		  fsync(fd);
-		/* 
-		 *  Need to prime the instruction cache & TLB
-		 */
-		nbuff=mainbuffer;
-		if(fetchon)
-			fetchit(nbuff,reclen);
-#if defined(Windows)
-		if(!unbuffered)
-		{
-#endif
-		if(read(fd, (void *)nbuff, (size_t) reclen) != reclen)
-		{
-#ifdef _64BIT_ARCH_
-			printf("\nError reading block %d %llx\n", 0,
-				(unsigned long long)nbuff);
-#else
-			printf("\nError reading block %d %lx\n", 0,
-				(long)nbuff);
-#endif
-			perror("read");
-			exit(60);
-		}
-		I_LSEEK(fd,0,SEEK_SET);
-#if defined(Windows)
-		}
-		if(unbuffered)
-			SetFilePointer(hand,(LONG)0,0,FILE_BEGIN);
-#endif
-		nbuff=mainbuffer;
-
-		if(fetchon)
-			fetchit(nbuff,reclen);
-		starttime2 = time_so_far();
-#ifdef unix
-		if(Q_flag || hist_summary)
-		{
-			qtime_u_start=utime_so_far();
-			qtime_s_start=stime_so_far();
-		}
-#endif
-		if(r_traj_flag)
-		{
-			rewind(r_traj_fd);
-		}
-		compute_val=(double)0;
-		r_traj_ops_completed=0;
-		r_traj_bytes_completed=0;
-		for(i=0; i<numrecs64; i++) 
-		{
-			if(disrupt_flag && ((i%DISRUPT)==0))
-			{
-#if defined(Windows)
-	
-				if(unbuffered)
-				   disruptw(hand);
-				else
-				   disrupt(fd);
-#else
-				disrupt(fd);
-#endif
-			}
-			if(r_traj_flag)
-			{
-				traj_offset=get_traj(r_traj_fd, (long long *)&traj_size,(float *)&compute_time, (long)0);
-				reclen=traj_size;
-#if defined(Windows)
-			if(unbuffered)
-			  SetFilePointer(hand,(LONG)traj_offset,0,FILE_BEGIN);
-			else
-#endif
-				I_LSEEK(fd,traj_offset,SEEK_SET);
-			}
-			if(Q_flag)
-			{
-#if defined(Windows)
-			if(unbuffered)
-			  traj_offset=SetFilePointer(hand,(LONG)0,0,FILE_CURRENT);
-			else
-#endif
-				traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-			}
-			if(rlocking)
-			{
-				lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-				mylockr((int) fd, (int) 1, (int)1,
-				  lock_offset, reclen);
-			}
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-                        if(multi_buffer)
-                        {
-                                Index +=reclen;
-                                if(Index > (MAXBUFFERSIZE-reclen))
-                                        Index=0;
-                                nbuff = mbuffer + Index;
-                        }
-			if(purge)
-				purgeit(nbuff,reclen);
-			if(Q_flag || hist_summary)
-				qtime_start=time_so_far();
-			if(mmapflag)
-			{
-				wmaddr=&maddr[i*reclen];
-				fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-			}
-			else
-			{
-			  if(async_flag)
-			  {
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (i*reclen), reclen,
-			    	1LL,(numrecs64*reclen),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (i*reclen),reclen,
-			    	1LL,(numrecs64*reclen),depth);
-			  }
-			  else
-			  {
-#if defined(Windows)
-       			    if(unbuffered)
-        		    {
-				ReadFile(hand, nbuff, reclen,(LPDWORD)&wval,
-					0);
-			    }
-			    else
-#endif
-			      wval=read((int)fd, (void*)nbuff, (size_t) reclen);
-			    if(wval != reclen)
-			    {
-#ifdef _64BIT_ARCH_
-#ifdef NO_PRINT_LLD
-				printf("\nError reading block %ld %lx\n", i,
-					(unsigned long long)nbuff);
-#else
-				printf("\nError reading block %lld %llx\n", i,
-					(unsigned long long)nbuff);
-#endif
-#else
-#ifdef NO_PRINT_LLD
-				printf("\nError reading block %ld %x\n", i,
-					(long)nbuff);
-#else
-				printf("\nError reading block %lld %lx\n", i,
-					(long)nbuff);
-#endif
-#endif
-				perror("read");
-				exit(61);
-			    }
-			  }
-			}
-			if(verify) {
-			  if(async_flag && no_copy_flag)
-			  {
-				if(verify_buffer(buffer1,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-					exit(62);
-				}
-			  }
-			  else
-			  {
-				if(verify_buffer(nbuff,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-					exit(63);
-				}
-			  }
-			}
-			if(async_flag && no_copy_flag)
-				async_release(gc);
-			buffer1=0;
-			if(hist_summary)
-			{
-				qtime_stop=time_so_far();
-				hist_time =(qtime_stop-qtime_start-time_res);
-				hist_insert(hist_time);
-			}
-			if(Q_flag)
-			{
-				qtime_stop=time_so_far();
-				if(j==0)
-#ifdef NO_PRINT_LLD
-				fprintf(rqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,(qtime_stop-qtime_start-time_res)*1000000,reclen);
-				else
-				fprintf(rrqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,(qtime_stop-qtime_start-time_res)*1000000,reclen);
-#else
-				fprintf(rqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,(qtime_stop-qtime_start-time_res)*1000000,reclen);
-				else
-				fprintf(rrqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,(qtime_stop-qtime_start-time_res)*1000000,reclen);
-#endif
-			}
-			r_traj_ops_completed++;
-			r_traj_bytes_completed+=reclen;
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-		if(file_lock)
-			if(mylockf((int) fd, (int) 0, (int)1))
-				printf("Read unlock failed. %d\n",errno);
-#ifdef unix
-		if(Q_flag)
-		{
-		   qtime_u_stop=utime_so_far();
-		   qtime_s_stop=stime_so_far();
-		   if(j==0)
-			 fprintf(rqfd,"\nSystem time %10.3f User time %10.3f Real %10.3f  (seconds)\n",
-				(qtime_s_stop-qtime_s_start)/sc_clk_tck,
-				(qtime_u_stop-qtime_u_start)/sc_clk_tck,
-				time_so_far()-starttime2);
-		   else
-			fprintf(rrqfd,"\nSystem time %10.3f User time %10.3f Real %10.3f  (seconds)\n",
-				(qtime_s_stop-qtime_s_start)/sc_clk_tck,
-				(qtime_u_stop-qtime_u_start)/sc_clk_tck,
-				time_so_far()-starttime2);
-		}
-#endif
-#ifdef ASYNC_IO
-		if(async_flag)
-		{
-			end_async(gc);
-			gc=0;
-		}
-#endif
-		if(include_flush)
-		{
-			if(mmapflag)
-				msync(maddr,(size_t)filebytes64,MS_SYNC);
-			else
-				fsync(fd);
-		}
-		if(include_close)
-		{
-			if(mmapflag)
-			{
-				mmap_end(maddr,(unsigned long long)filebytes64);
-			}
-#if defined(Windows)
-			if(unbuffered)
-				CloseHandle(hand);
-			else
-#endif
-			close(fd);
-		}
-		readtime[j] = ((time_so_far() - starttime2)-time_res)-compute_val;
-		if(readtime[j] < (double).000001) 
-		{
-			readtime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			if(mmapflag)
-				msync(maddr,(size_t)filebytes64,MS_SYNC);
-			else
-				fsync(fd);
-			if(mmapflag)
-			{
-				mmap_end(maddr,(unsigned long long)filebytes64);
-			}
-#if defined(Windows)
-			if(unbuffered)
-				CloseHandle(hand);
-			else
-#endif
-			close(fd);
-		}
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-    	}
-	if(OPS_flag || MS_flag){
-	   filebytes64=r_traj_ops_completed;
-	   /*filebytes64=filebytes64/reclen;*/
-	} else
-	   filebytes64=r_traj_bytes_completed;
-
-        for(j=0;j<ltest;j++)
-        {
-		if(MS_flag)
-		{
-			readrate[j]=1000000.0*(readtime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  readrate[j] = 
-                  (unsigned long long) ((double) filebytes64 / readtime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			readrate[j] >>= 10;
-			
-	}
-	data1[0]=readrate[0];
-	data2[0]=1;
-	if(noretest)
-	{
-		readrate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)readrate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)readrate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%9ld",readrate[0]);
-	if(!silent) printf("%9ld",readrate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%9lld",readrate[0]);
-	if(!silent) printf("%9lld",readrate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-
-
-/************************************************************************/
-/* random_perf_test				        		*/
-/* Random read and write test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void random_perf_test(off64_t kilo64,long long reclen,long long *data1,long long *data2)
-#else
-void random_perf_test(kilo64,reclen,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1, *data2;
-#endif
-{
-	double randreadtime[2];
-	double starttime2;
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-#if defined (bsd4_2) || defined(Windows)
-	long long rand1,rand2,rand3;
-#endif
-	unsigned long long big_rand;
-	long long j;
-	off64_t i,numrecs64;
-	long long Index=0;
-	int flags;
-	unsigned long long randreadrate[2];
-	off64_t filebytes64;
-	off64_t lock_offset=0;
-	volatile char *buffer1;
-	char *wmaddr,*nbuff;
-	char *maddr,*free_addr;
-	int fd,wval;
-	long long *recnum= 0;
-#if defined(VXFS) || defined(solaris)
-	int test_foo=0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-#ifdef MERSENNE
-    unsigned long long init[4]={0x12345ULL, 0x23456ULL, 0x34567ULL, 0x45678ULL};
-    unsigned long long length=4;
-#endif
-
-	maddr=free_addr=0;
-	numrecs64 = (kilo64*1024)/reclen;
-#ifdef MERSENNE
-       init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-        srand(0);
-#else
-#ifdef Windows
-        srand(0);
-#else
-        srand48(0);
-#endif
-#endif
-#endif
-        recnum = (long long *)malloc(sizeof(*recnum)*numrecs64);
-        if (recnum){
-             /* pre-compute random sequence based on 
-		Fischer-Yates (Knuth) card shuffle */
-            for(i = 0; i < numrecs64; i++){
-                recnum[i] = i;
-            }
-            for(i = 0; i < numrecs64; i++) {
-                long long tmp;
-#ifdef MERSENNE
-      	       big_rand=genrand64_int64();
-#else
-#ifdef bsd4_2
-               rand1=(long long)rand();
-               rand2=(long long)rand();
-               rand3=(long long)rand();
-               big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-#else
-#ifdef Windows
-               rand1=(long long)rand();
-               rand2=(long long)rand();
-               rand3=(long long)rand();
-               big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-#else
-               big_rand = lrand48();
-#endif
-#endif
-#endif
-               big_rand = big_rand%numrecs64;
-               tmp = recnum[i];
-               recnum[i] = recnum[big_rand];
-               recnum[big_rand] = tmp;
-            }
-        }
-	else
-	{
-		fprintf(stderr,"Random uniqueness fallback.\n");
-	}
-	flags = O_RDWR;
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-	fd=0;
-	if(oflag)
-		flags |= O_SYNC;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-	filebytes64 = numrecs64*reclen;
-	for( j=0; j<2; j++ )
-	{
-		if(j==0)
-			flags |=O_CREAT;
-		if (no_write && (j == 1))
-			continue;
-		if(cpuutilflag)
-		{
-		     walltime[j] = time_so_far();
-		     cputime[j]  = cputime_so_far();
-	     }
-	     if(Uflag) /* Unmount and re-mount the mountpoint */
-	     {
-			purge_buffer_cache();
-	     }
-	     if((fd = I_OPEN(filename, ((int)flags),0640))<0){
-			printf("\nCan not open temporary file for read/write\n");
-			perror("open");
-			exit(66);
-	     }
-#ifdef ASYNC_IO
-		if(async_flag)
-			async_init(&gc,fd,direct_flag);
-#endif
-
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-	     if(mmapflag)
-	     {
-			maddr=(char *)initfile(fd,filebytes64,0,PROT_READ|PROT_WRITE);
-	     }
-	     nbuff=mainbuffer;
-	     if(fetchon)
-		   fetchit(nbuff,reclen);
-#ifdef MERSENNE
-    	    init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-	     srand(0);
-#else
-#ifdef Windows
-             srand(0);
-#else
-             srand48(0);
-#endif
-#endif
-#endif
-	     compute_val=(double)0;
-	     starttime2 = time_so_far();
-	     if ( j==0 ){
-		for(i=0; i<numrecs64; i++) {
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-                        if(multi_buffer)
-                        {
-                                Index +=reclen;
-                                if(Index > (MAXBUFFERSIZE-reclen))
-                                        Index=0;
-                                nbuff = mbuffer + Index;
-                        }
-			if(purge)
-				purgeit(nbuff,reclen);
-                        if (recnum) {
-				offset64 = reclen * (long long)recnum[i];
-                        }
-			else
-			{
-
-#ifdef MERSENNE
-      			   big_rand =genrand64_int64();
-			   offset64 = reclen * (big_rand%numrecs64);
-#else
-#ifdef bsd4_2
-			   rand1=(long long)rand();
-			   rand2=(long long)rand();
-			   rand3=(long long)rand();
-			   big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-                           offset64 = reclen * (big_rand%numrecs64);
-#else
-#ifdef Windows
-			   rand1=(long long)rand();
-			   rand2=(long long)rand();
-			   rand3=(long long)rand();
-			   big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-                           offset64 = reclen * (big_rand%numrecs64);
-#else
-			   offset64 = reclen * (lrand48()%numrecs64);
-#endif
-#endif
-#endif
-			}
-
-			if( !(h_flag || k_flag || mmapflag))
-			{
-			   if(I_LSEEK( fd, offset64, SEEK_SET )<0)
-			   {
-				perror("lseek");
-				exit(68);
-			   };
-			}
-			if(rlocking)
-			{
-				lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-				mylockr((int) fd, (int) 1, (int)1,
-				  lock_offset, reclen);
-			}
-			if(mmapflag)
-			{
-				wmaddr=&maddr[offset64];
-				fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-			}
-			else
-			{
-			  if(async_flag)
-			  {
-			     if(no_copy_flag)
-			        async_read_no_copy(gc, (long long)fd, &buffer1, offset64,reclen,
-			    	  0LL,(numrecs64*reclen),depth);
-			     else
-				 async_read(gc, (long long)fd, nbuff, (offset64),reclen,
-					    	0LL,(numrecs64*reclen),0LL);
-			  }
-			  else
-			  {
-		  	     if(read(fd, (void *)nbuff, (size_t)reclen) != reclen)
-		  	     {
-#ifdef NO_PRINT_LLD
-				 printf("\nError reading block at %ld\n",
-					 offset64); 
-#else
-				 printf("\nError reading block at %lld\n",
-					 offset64); 
-#endif
-				 perror("read");
-				 exit(70);
-		 	     }
-			  }
-			}
-			if(verify){
-			  if(async_flag && no_copy_flag)
-			  {
-				if(verify_buffer(buffer1,reclen,(off64_t)offset64/reclen,reclen,(long long)pattern,sverify)){
-					exit(71);
-				}
-			  }
-			  else
-			  {
-				if(verify_buffer(nbuff,reclen,(off64_t)offset64/reclen,reclen,(long long)pattern,sverify)){
-					exit(72);
-				}
-			  }
-			}
-			if(async_flag && no_copy_flag)
-				async_release(gc);
-			if(rlocking)
-			{
-				lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-				mylockr((int) fd, (int) 1, (int)1,
-				  lock_offset, reclen);
-			}
-		}
-	     }
-	     else
-	     {
-			if(verify || dedup || dedup_interior)
-				fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-			for(i=0; i<numrecs64; i++) 
-			{
-				if(compute_flag)
-					compute_val+=do_compute(compute_time);
-                        	if(multi_buffer)
-                        	{
-                               	    Index +=reclen;
-                               	    if(Index > (MAXBUFFERSIZE-reclen))
-                               	         Index=0;
-                               	    nbuff = mbuffer + Index;
-                        	}
-                                if (recnum) {
-				  offset64 = reclen * (long long)recnum[i];
-                                }
-			        else
-			        {
-#ifdef bsd4_2
-				  rand1=(long long)rand();
-				  rand2=(long long)rand();
-				  rand3=(long long)rand();
-				  big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-				  offset64 = reclen * (big_rand%numrecs64);
-#else
-#ifdef Windows
-				  rand1=(long long)rand();
-				  rand2=(long long)rand();
-				  rand3=(long long)rand();
-				  big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-				  offset64 = reclen * (big_rand%numrecs64);
-#else
-				  offset64 = reclen * (lrand48()%numrecs64);
-#endif
-#endif
-				}
-				if(async_flag && no_copy_flag)
-				{
-					free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-					nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-					if(verify || dedup || dedup_interior)
-						fill_buffer(nbuff,reclen,(long long)pattern,sverify,offset64/reclen);
-				}
-				if(purge)
-					purgeit(nbuff,reclen);
-
-				if((verify & diag_v) || dedup || dedup_interior)
-					fill_buffer(nbuff,reclen,(long long)pattern,sverify,offset64/reclen);
-
-				if (!(h_flag || k_flag || mmapflag))
-				{
-				  I_LSEEK( fd, offset64, SEEK_SET );
-				}
-				if(rlocking)
-				{
-					lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-					mylockr((int) fd, (int) 1, (int)0,
-					  lock_offset, reclen);
-				}
-				if(mmapflag)
-				{
-					wmaddr=&maddr[offset64];
-					fill_area((long long*)nbuff,(long long*)wmaddr,(long long)reclen);
-					if(!mmapnsflag)
-					{
-					  	if(mmapasflag)
-						    	msync(wmaddr,(size_t)reclen,MS_ASYNC);
-					  	if(mmapssflag)
-					    		msync(wmaddr,(size_t)reclen,MS_SYNC);
-					}
-				}
-				else
-				{
-			  		if(async_flag)
-					{
-			     		   if(no_copy_flag)
-			       		      async_write_no_copy(gc, (long long)fd, nbuff, reclen, offset64, 
-					   	depth,free_addr);
-					   else
-			      			async_write(gc, (long long)fd, nbuff, reclen, offset64, depth);
-			  		}
-			  		else
-			  		{
-			  		  wval=write(fd, nbuff,(size_t)reclen);
-			  		  if(wval != reclen)
-			  		  {
-#ifdef NO_PRINT_LLD
-						printf("\nError writing block at %ld\n",
-							offset64); 
-#else
-						printf("\nError writing block at %lld\n",
-							offset64); 
-#endif
-						if(wval==-1)
-							perror("write");
-						signal_handler();
-			 		  }
-					}
-				}
-				if(rlocking)
-				{
-					mylockr((int) fd, (int) 0, (int)0,
-					  lock_offset, reclen);
-				}
-			}
-	     } 	/* end of modifications	*kcollins:2-5-96 */
-#ifdef ASYNC_IO
-	     if(async_flag)
-	     {
-		end_async(gc);
-	        gc=0;
-             }	
-#endif
-	     if(include_flush)
-	     {
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);/* Clean up before read starts running */
-		else
-		{
-	     		wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-	     }
-	     if(include_close)
-	     {
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-		wval=close(fd);
-		if(wval==-1){
-			perror("close");
-			signal_handler();
-		}
-	     }
-	     randreadtime[j] = ((time_so_far() - starttime2)-time_res)-
-			compute_val;
-	     if(randreadtime[j] < (double).000001) 
-	     {
-			randreadtime[j]=time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-	     }
-	    if(!include_close)
-	    {
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)filebytes64,MS_SYNC);/* Clean up before read starts running */
-		}
-		else
-		{
-	     		wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-		if(mmapflag)
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		wval=close(fd);
-		if(wval==-1){
-			perror("close");
-			signal_handler();
-		}
- 	    }
-            if(cpuutilflag)
-	    {
-	    	cputime[j]  = cputime_so_far() - cputime[j];
-	    	if (cputime[j] < cputime_res)
-			cputime[j] = 0.0;
-	    	walltime[j] = time_so_far() - walltime[j];
-		if (walltime[j] < cputime[j])
-		   walltime[j] = cputime[j];
-	    }
-	    if(restf)
-		sleep((int)rest_val);
-    	}
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-        for(j=0;j<2;j++)
-        {
-	    if(no_write && (j==1))
-	    {
-	        randreadrate[1] = 0.0;
-		continue;
-	    }
-	    if(MS_flag)
-	    {
-		randreadrate[j]=1000000.0*(randreadtime[j] / (double)filebytes64);
-		continue;
-	    }
-            else
-            {
-                  randreadrate[j] = 
-		      (unsigned long long) ((double) filebytes64 / randreadtime[j]);
-            }
-	    if(!(OPS_flag || MS_flag))
-		randreadrate[j] >>= 10;
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-        if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)randreadrate[0]);
-        if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)randreadrate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%8ld",randreadrate[0]);
-	if(!silent) printf("%8ld",randreadrate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%8lld",randreadrate[0]);
-	if(!silent) printf("%8lld",randreadrate[1]);
-	if(!silent) fflush(stdout);
-#endif
-	if(recnum)
-		free(recnum);
-}
-
-/************************************************************************/
-/* reverse_perf_test				        		*/
-/* Reverse read test							*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void reverse_perf_test(off64_t kilo64,long long reclen,long long *data1,long long *data2)
-#else
-void reverse_perf_test(kilo64,reclen,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	double revreadtime[2];
-	double starttime2;
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long j;
-	off64_t i,numrecs64;
-	long long Index = 0;
-	unsigned long long revreadrate[2];
-	off64_t filebytes64;
-	off64_t lock_offset=0;
-	int fd,open_flags;
-	char *maddr,*wmaddr;
-	volatile char *buffer1;
-	int ltest;
-	char *nbuff;
-#if defined(VXFS) || defined(solaris)
-	int test_foo=0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-
-	maddr=wmaddr=0;
-	open_flags=O_RDONLY;
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		open_flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		open_flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		open_flags |=O_RSYNC|O_SYNC;
-#endif
-	numrecs64 = (kilo64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-	fd = 0;
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-	for( j=0; j<ltest; j++ )
-	{
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-	 	if((fd = I_OPEN(filename, open_flags,0))<0){
-	 		printf("\nCan not open temporary file for read\n");
-	 		perror("open");
-	 		exit(75);
-	 	}
-#ifdef ASYNC_IO
-		if(async_flag)
-			async_init(&gc,fd,direct_flag);
-#endif
-
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-		if(mmapflag)
-		{
-			maddr=(char *)initfile(fd,filebytes64,0,PROT_READ);
-		}
-		fsync(fd);
-		nbuff=mainbuffer;
-		mbuffer=mainbuffer;
-		if(fetchon)
-			fetchit(nbuff,reclen);
-		starttime2 = time_so_far();
-		if (!(h_flag || k_flag || mmapflag))
-		{
-		  if(check_filename(filename))
-		  {
-		  	if(I_LSEEK( fd, -reclen, SEEK_END )<0)
-		  	{
-				perror("lseek");
-				exit(77);
-		  	};
-		  }
-		  else
-		  {
-		  	if(I_LSEEK( fd, filebytes64-reclen, SEEK_SET )<0)
-		  	{
-				perror("lseek");
-				exit(77);
-		  	};
-  		  }
-		}
-	        compute_val=(double)0;
-		for(i=0; i<numrecs64; i++) 
-		{
-			if(rlocking)
-			{
-				lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-				mylockr((int) fd, (int) 1, (int)1,
-				  lock_offset, reclen);
-			}
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-                        if(multi_buffer)
-                        {
-                                Index +=reclen;
-                                if(Index > (MAXBUFFERSIZE-reclen))
-                                        Index=0;
-                                nbuff = mbuffer + Index;
-                        }
-
-			if(purge)
-				purgeit(nbuff,reclen);
-			if(mmapflag)
-			{
-				wmaddr = &maddr[((numrecs64-1)-i)*reclen];
-				fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-			}
-			else
-			if(async_flag)
-			{
-			    if(no_copy_flag)
-			       async_read_no_copy(gc, (long long)fd, &buffer1, ((((numrecs64-1)-i)*reclen)),
-			          reclen, -1LL,(numrecs64*reclen),depth);
-			    else
-			       async_read(gc, (long long)fd, nbuff, (((numrecs64-1)-i)*reclen),
-			       	  reclen,-1LL,(numrecs64*reclen),depth);
-			}else
-			{
-				if(read((int)fd, (void*)nbuff, (size_t) reclen) != reclen)
-				{
-#ifdef NO_PRINT_LLD
-					printf("\nError reading block %ld\n", i); 
-#else
-					printf("\nError reading block %lld\n", i); 
-#endif
-					perror("read");
-					exit(79);
-				}
-			}
-			if(verify){
-			   if(async_flag && no_copy_flag)
-			   {
-				if(verify_buffer(buffer1,reclen,(off64_t)(numrecs64-1)-i,reclen,(long long)pattern,sverify)){
-					exit(80);
-				}
-			   }
-			   else
-			   {
-				if(verify_buffer(nbuff,reclen,(off64_t)(numrecs64-1)-i,reclen,(long long)pattern,sverify)){
-					exit(81);
-				}
-			   }
-			}
-			if(async_flag && no_copy_flag)
-				async_release(gc);
-			if(rlocking)
-			{
-				mylockr((int) fd, (int) 0, (int)1,
-				  lock_offset, reclen);
-			}
-			if (!(h_flag || k_flag || mmapflag))
-			{
-			  I_LSEEK( fd, (off64_t)-2*reclen, SEEK_CUR );
-			}
-		}
-#ifdef ASYNC_IO
-		if(async_flag)
-		{
-			end_async(gc);
-			gc=0;
-		}
-#endif
-		if(include_flush)	
-		{
-			if(mmapflag)
-				msync(maddr,(size_t)filebytes64,MS_SYNC);
-			else
-				fsync(fd);
-		}
-		if(include_close)
-		{
-			if(mmapflag)
-			{
-				mmap_end(maddr,(unsigned long long)filebytes64);
-			}
-			close(fd);
-		}
-		revreadtime[j] = ((time_so_far() - starttime2)-time_res)
-			-compute_val;
-		if(revreadtime[j] < (double).000001) 
-		{
-			revreadtime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			if(mmapflag)
-				msync(maddr,(size_t)filebytes64,MS_SYNC);
-			else
-				fsync(fd);
-			if(mmapflag)
-			{
-				mmap_end(maddr,(unsigned long long)filebytes64);
-			}
-			close(fd);
-		}
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-        }
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	for(j=0;j<ltest;j++){
-		if(MS_flag)
-		{
-			revreadrate[j]=1000000.0*(revreadtime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  revreadrate[j] = 
-		      (unsigned long long) ((double) filebytes64 / revreadtime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			revreadrate[j] >>= 10;
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)revreadrate[0]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%8ld",revreadrate[0]);
-#else
-	if(!silent) printf("%8lld",revreadrate[0]);
-#endif
-	if(!silent) fflush(stdout);
-}
-
-/************************************************************************/
-/* rewriterec_perf_test				        		*/
-/* Re-write the same record 						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void rewriterec_perf_test(off64_t kilo64 ,long long reclen,long long *data1,long long *data2)
-#else
-void rewriterec_perf_test(kilo64 ,reclen,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	double writeintime;
-	double starttime1;
-	double walltime, cputime;
-	double compute_val = (double)0;
-	long long i;
-	off64_t numrecs64;
-	long long flags;
-	long long Index=0;
-	unsigned long long writeinrate;
-	off64_t filebytes64;
-	off64_t lock_offset=0;
-	int fd,wval;
-	char *maddr;
-	char *wmaddr,*free_addr,*nbuff;
-#if defined(VXFS) || defined(solaris)
-	int test_foo=0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-
-	walltime=cputime=0;
-	maddr=wmaddr=free_addr=nbuff=0;
-	numrecs64 = (kilo64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-/*	flags = O_RDWR|O_CREAT|O_TRUNC;*/
-	flags = O_RDWR|O_CREAT;
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-	if(oflag)
-		flags |= O_SYNC;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-/*
-	if (!no_unlink)
-	{
-	   if(check_filename(filename))
-		unlink(filename);
-	}
-*/
-	if(Uflag) /* Unmount and re-mount the mountpoint */
-	{
-		purge_buffer_cache();
-	}
-        if((fd = I_OPEN(filename, (int)flags,0640))<0)
-        {
-                    printf("\nCan not open temporary file %s for write.\n",filename);
-		    perror("open");
-                    exit(84);
-        }
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,filebytes64,1,PROT_READ|PROT_WRITE);
-	}
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-	wval=fsync(fd);
-	if(wval==-1){
-		perror("fsync");
-		signal_handler();
-	}
-	nbuff=mainbuffer;
-	mbuffer=mainbuffer;
-	if(fetchon)
-		fetchit(nbuff,reclen);
-	/*
-	wval=write(fd, nbuff, (size_t) reclen);
-	if(wval != reclen)
-	{
-#ifdef NO_PRINT_LLD
-	    	printf("\nError writing block %ld, fd= %d\n", 0, fd);
-#else
-	    	printf("\nError writing block %lld, fd= %d\n", 0, fd);
-#endif
-		if(wval==-1)
-			perror("write");
-		signal_handler();
-	}
-	*/
-	if(verify || dedup || dedup_interior)
-		fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = time_so_far();
-		cputime  = cputime_so_far();
-	}
-	for(i=0; i<numrecs64; i++){
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)0,
-			  lock_offset, reclen);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(compute_time);
-        	if(multi_buffer)
-        	{
-                	Index +=reclen;
-                        if(Index > (MAXBUFFERSIZE-reclen))
-                                Index=0;
-                        nbuff = mbuffer + Index;
-                }
-		if(async_flag && no_copy_flag)
-		{
-			free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-			nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-			if(verify || dedup || dedup_interior)
-				fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-		}
-		if((verify & diag_v) || dedup || dedup_interior)
-			fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(mmapflag)
-		{
-			wmaddr = &maddr[i*reclen];
-			fill_area((long long*)nbuff,(long long*)wmaddr,(long long)reclen);
-			if(!mmapnsflag)
-			{
-			  if(mmapasflag)
-			    msync(wmaddr,(size_t)reclen,MS_ASYNC);
-			  if(mmapssflag)
-			    msync(wmaddr,(size_t)reclen,MS_SYNC);
-			}
-		}
-		else
-		{
-			  if(async_flag)
-			  {
-			     if(no_copy_flag)
-			       async_write_no_copy(gc, (long long)fd, nbuff, reclen, (i*reclen), depth,free_addr);
-			     else
-			       async_write(gc, (long long)fd, nbuff, reclen, (i*reclen), depth);
-			  }
-			  else
-			  {
-			       wval=write(fd, nbuff, (size_t) reclen);
-			       if(wval != reclen)
-			       {
-#ifdef NO_PRINT_LLD
-		    		   printf("\nError writing block %ld, fd= %d\n", i, fd);
-#else
-		    		   printf("\nError writing block %lld, fd= %d\n", i, fd);
-#endif
-				   if(wval==-1)
-				   	perror("write");
-				   signal_handler();
-			       }
-			  }
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)0,
-			  lock_offset, reclen);
-		}
-		if (!(h_flag || k_flag || mmapflag))
-		{
-		  I_LSEEK(fd, (off64_t)0,SEEK_SET);
-		}
-	}
-
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);/* Clean up before read starts running */
-		else
-		{
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-	}
-	if(include_close)
-	{
-		if(mmapflag)
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		wval=close(fd);
-		if(wval==-1){
-			perror("close");
-			signal_handler();
-		}
-	}
-	writeintime = ((time_so_far() - starttime1)-time_res)-
-		compute_val;
-	if(cpuutilflag)
-	{
-		cputime  = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		walltime = time_so_far() - walltime;
-		if (walltime < cputime)
-		   walltime = cputime;
-	}
-	if(writeintime < (double).000001) 
-	{
-		writeintime= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-
-	if(!include_close)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);/* Clean up before read starts running */
-		else
-		{
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-		if(mmapflag)
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		wval=close(fd);
-		if(wval==-1){
-			perror("close");
-			signal_handler();
-		}
-
-	}
-
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	if(MS_flag)
-	{
-		writeinrate=1000000.0*(writeintime / (double)filebytes64);
-	}
-      else
-      {
-            writeinrate = (unsigned long long) ((double) filebytes64 / writeintime);
-      }
-	if(!(OPS_flag || MS_flag))
-		writeinrate >>= 10;
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime, cputime);
-	store_value((off64_t)writeinrate);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf(" %8ld",writeinrate);
-#else
-	if(!silent) printf(" %8lld",writeinrate);
-#endif
-	if(!silent) fflush(stdout);
-	if(restf)
-		sleep((int)rest_val);
-}
-
-/************************************************************************/
-/* read_stride_perf_test			        		*/
-/* Read with a constant stride test					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void read_stride_perf_test(off64_t kilos64,long long reclen,long long *data1,long long *data2)
-#else
-void read_stride_perf_test(kilos64,reclen,data1,data2)
-off64_t kilos64;
-long long reclen;
-long long *data1, *data2;
-#endif
-{
-	double strideintime;
-	double starttime1;
-	double compute_val = (double)0;
-	double walltime, cputime;
-	off64_t numrecs64,current_position;
-	long long Index = 0;
-	off64_t i,savepos64 = 0;
-	unsigned long long strideinrate;
-	off64_t filebytes64;
-	off64_t lock_offset=0;
-	long long uu;
-	off64_t stripewrap=0;
-	int fd,open_flags;
-	volatile char *buffer1;
-	char *nbuff;
-	char *maddr;
-	char *wmaddr;
-#if defined(VXFS) || defined(solaris)
-	int test_foo=0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-
-	walltime=cputime=0;
-	nbuff=maddr=wmaddr=0;
-	open_flags=O_RDONLY;
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		open_flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		open_flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		open_flags |=O_RSYNC|O_SYNC;
-#endif
-	next64 = (off64_t)0;
-	numrecs64 = (kilos64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-	if(Uflag) /* Unmount and re-mount the mountpoint */
-	{
-		purge_buffer_cache();
-	}
-        if((fd = I_OPEN(filename, (int)open_flags, 0640))<0)
-        {
-                    printf("\nCan not open temporary file for read\n");
-		    perror("open");
-                    exit(86);
-        }
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,filebytes64,0,PROT_READ);
-	}
-	fsync(fd);
-	current_position=0;
-	nbuff=mainbuffer;
-	mbuffer=mainbuffer;
-	if(fetchon)
-		fetchit(nbuff,reclen);
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = time_so_far();
-		cputime  = cputime_so_far();
-	}
-	for(i=0; i<numrecs64; i++){
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)1,
-			  lock_offset, reclen);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(compute_time);
-        	if(multi_buffer)
-                {
-                       Index +=reclen;
-                       if(Index > (MAXBUFFERSIZE-reclen))
-                                Index=0;
-                       nbuff = mbuffer + Index;
-                }
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(verify)
-		{
-			savepos64=current_position/reclen;
-		}
-		if(mmapflag)
-		{
-			wmaddr = &maddr[current_position];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			if(async_flag)
-			{
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, current_position,
-			      	reclen, stride,(numrecs64*reclen),depth);
-			    else
-			       async_read(gc, (long long)fd, nbuff, current_position, reclen,
-			    	 stride,(numrecs64*reclen),depth);
-		   	}
-			else
-			{
-		   	  if((uu=read((int)fd, (void*)nbuff, (size_t) reclen)) != reclen)
-		   	  {
-#ifdef NO_PRINT_LLD
-		    		printf("\nError reading block %ld, fd= %d Filename %s Read returned %ld\n", i, fd,filename,uu);
-		    		printf("\nSeeked to %ld Reclen = %ld\n", savepos64,reclen);
-#else
-		    		printf("\nError reading block %lld, fd= %d Filename %s Read returned %lld\n", i, fd,filename,uu);
-		    		printf("\nSeeked to %lld Reclen = %lld\n", savepos64,reclen);
-#endif
-				perror("read");
-		    		exit(88);
-		   	  }
-			}
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-		current_position+=reclen;
-		if(verify){
-			if(async_flag && no_copy_flag)
-			{
-			   if(verify_buffer(buffer1,reclen, (off64_t)savepos64 ,reclen,(long long)pattern,sverify)){
-				exit(89);
-			   }
-			}
-			else
-			{
-			   if(verify_buffer(nbuff,reclen, (off64_t)savepos64 ,reclen,(long long)pattern,sverify)){
-				exit(90);
-			   }
-			}
-		}
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-			
-		/* This is a bit tricky.  The goal is to read with a stride through
-		   the file. The problem is that you need to touch all of the file
-		   blocks. So.. the first pass through you read with a constant stride.
-		   When you hit eof then add 1 to the beginning offset of the next
-		   time through the file. The rub here is that eventually adding
-		   1 will cause the initial start location plus the STRIDE to be
-		   beyond eof. So... when this happens the initial offset for the
-		   next pass needs to be set back to 0.
-		*/
-		if(current_position + (stride * reclen) >= (numrecs64 * reclen)-reclen) 
-		{
-			current_position=0;
-
-			stripewrap++;
-			  
-			if(numrecs64 <= stride)
-			{
-				current_position=0;
-			}
-			else
-			{
-				current_position = (off64_t)((stripewrap)%numrecs64)*reclen;
-			}
-
-			if (!(h_flag || k_flag || mmapflag))
-			{
-			  if(I_LSEEK(fd,current_position,SEEK_SET)<0)
-			  {
-				perror("lseek");
-				exit(91);
-			  }
-			}
-		}
-		else			
-		{
-			current_position+=(stride*reclen)-reclen;
-			if (!(h_flag || k_flag || mmapflag))
-			{
-			  if(I_LSEEK(fd,current_position,SEEK_SET)<0)
-			  {
-				perror("lseek");
-				exit(93);
-			  };
-			}
-		}
-	}
-	if(cpuutilflag)
-	{
-		cputime  = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		walltime = time_so_far() - walltime;
-		if (walltime < cputime)
-		   walltime = cputime;
-	}
-
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);
-		else
-			fsync(fd);
-	}
-	if(include_close)
-	{
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-		close(fd);
-	}
-	strideintime = ((time_so_far() - starttime1)-time_res)
-		-compute_val;
-	if(strideintime < (double).000001) 
-	{
-		strideintime= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-
-	if(!include_close)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);
-		else
-			fsync(fd);
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-		close(fd);
-	}
-
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	if(MS_flag)
-	{
-		strideinrate=1000000.0*(strideintime / (double)filebytes64);
-	}
-      else
-      {
-            strideinrate = (unsigned long long) ((double) filebytes64 / strideintime);
-      }
-	if(!(OPS_flag || MS_flag))
-		strideinrate >>= 10;
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime, cputime);
-	store_value((off64_t)strideinrate);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf(" %8ld",strideinrate);
-#else
-	if(!silent) printf(" %8lld",strideinrate);
-#endif
-	if(!silent) fflush(stdout);
-	if(restf)
-		sleep((int)rest_val);
-}
-
-#ifdef HAVE_PREAD
-/************************************************************************/
-/* pwrite_perf_test				        		*/
-/* pwrite and re-write test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void pwrite_perf_test(off64_t kilos64,long long reclen,long long *data1,long long *data2)
-#else
-void pwrite_perf_test(kilos64,reclen,data1,data2)
-off64_t kilos64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	double pwritetime[2];
-	double starttime1;
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long i,j;
-	long long Index = 0;
-	unsigned long long pwriterate[2];
-	off64_t filebytes64;
-	long long flags_here = 0;
-	int fd,ltest,wval;
-	off64_t numrecs64,traj_offset;
-	off64_t lock_offset=0;
-	long long traj_size;
-#if defined(VXFS) || defined(solaris)
-	int test_foo=0;
-#endif
-	char *nbuff;
-
-	traj_offset=0;
-	nbuff=mainbuffer;
-	if(w_traj_flag)
-	{
-		filebytes64 = w_traj_fsize;
-		numrecs64=w_traj_ops;
-	}
-	else
-	{
-		numrecs64 = (kilos64*1024)/reclen;
-		filebytes64 = numrecs64*reclen;
-	}
-	fd = 0;
-	if(oflag){
-		flags_here = O_SYNC|O_RDWR;
-	}
-	else
-	{
-		flags_here = O_RDWR;
-	}
-#if defined(O_DSYNC)
-	if(odsync)
-		flags_here |= O_DSYNC;
-#endif
-
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags_here |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags_here |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags_here |=O_DIRECTIO;
-#endif
-#endif
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-	for( j=0; j<ltest; j++)
-	{
-		if(j==0)
-			flags_here |=O_CREAT;
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-		if((fd = I_OPEN(filename, (int)flags_here,0640))<0)
-		{
-			printf("\nCan not open temp file: %s\n", 
-				filename);
-			perror("open");
-			exit(97);
-		}
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-		if(direct_flag)
-		{
-			test_foo = directio(fd, DIRECTIO_ON);
-			if(test_foo != 0)
-			{
-				if(!client_iozone)
-					printf("\ndirectio not available.\n");
-				exit(3);
-			}
-		}
-#endif
-		fsync(fd);
-		nbuff=mainbuffer;
-		mbuffer=mainbuffer;
-		if(fetchon)
-			fetchit(nbuff,reclen);
-		if(verify || dedup || dedup_interior)
-			fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-		starttime1 = time_so_far();
-	        compute_val=(double)0;
-		if(w_traj_flag)
-		{
-			rewind(w_traj_fd);
-		}
-		for(i=0; i<numrecs64; i++){
-			if(w_traj_flag)
-			{
-				traj_offset=get_traj(w_traj_fd, (long long *)&traj_size,(float *)&compute_time,(long)1);
-				reclen=traj_size;
-			}
-			else
-				traj_offset=(i * reclen);
-			if(rlocking)
-			{
-				lock_offset=traj_offset;
-				mylockr((int) fd, (int) 1, (int)0,
-				  lock_offset, reclen);
-			}
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-                        if(multi_buffer)
-                        {
-                                Index +=reclen;
-                                if(Index > (MAXBUFFERSIZE-reclen))
-                                        Index=0;
-                                nbuff = mbuffer + Index;
-                        }
-			if((verify && diag_v) || dedup || dedup_interior)
-				fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-			if(purge)
-				purgeit(nbuff,reclen);
-			if(I_PWRITE(fd, nbuff, reclen, traj_offset) != reclen)
-			{
-#ifdef NO_PRINT_LLD
-			    	printf("\nError pwriting block %ld, fd= %d\n", i,
-					 fd);
-#else
-			    	printf("\nError pwriting block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				perror("pwrite");
-				signal_handler();
-			}
-			if(rlocking)
-			{
-				mylockr((int) fd, (int) 0, (int)0,
-				  lock_offset, reclen);
-			}
-		}
-		if(include_flush)
-		{
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-		if(include_close)
-		{
-			wval=close(fd);
-			if(wval==-1){
-				perror("close");
-				signal_handler();
-			}
-		}
-		pwritetime[j] = ((time_so_far() - starttime1)-time_res)
-			-compute_val;
-		if(pwritetime[j] < (double).000001) 
-		{
-			pwritetime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-			wval=close(fd);
-			if(wval==-1){
-				perror("close");
-				signal_handler();
-			}
-		}
-
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-	}
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	for(j=0;j<ltest;j++){
-		if(MS_flag)
-		{
-			pwriterate[j]=1000000.0*(pwritetime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  pwriterate[j] = 
-		      (unsigned long long) ((double) filebytes64 / pwritetime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			pwriterate[j] >>= 10;
-	}
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(noretest)
-	{
-		pwriterate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-	
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)pwriterate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)pwriterate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%8ld",pwriterate[0]);
-	if(!silent) printf("%9ld",pwriterate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%8lld",pwriterate[0]);
-	if(!silent) printf("%9lld",pwriterate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-
-/************************************************************************/
-/* pread_perf_test				        		*/
-/* pread and re-pread test						*/
-/************************************************************************/
-#ifdef HAVE_PREAD
-#ifdef HAVE_ANSIC_C
-void pread_perf_test(off64_t kilos64,long long reclen,long long *data1,long long *data2)
-#else
-void pread_perf_test(kilos64,reclen,data1,data2)
-off64_t kilos64;
-long long reclen;
-long long *data1, *data2;
-#endif
-{
-	double starttime2;
-	double preadtime[2];
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long numrecs64,i;
-	long long j;
-	long long Index = 0;
-	unsigned long long preadrate[2];
-	off64_t filebytes64;
-	off64_t lock_offset=0;
-	int fd,open_flags;
-	int ltest;
-	off64_t traj_offset;
-	long long traj_size;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-	char *nbuff;
-
-	traj_offset=0;
-	nbuff=mainbuffer;
-	open_flags=O_RDONLY;
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		open_flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		open_flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux) || defined(__FreeBSD__) || defined(__DragonFly__)
-	if(read_sync)
-		open_flags |=O_RSYNC|O_SYNC;
-#endif
-	if(r_traj_flag)
-	{
-		filebytes64 = r_traj_fsize;
-		numrecs64=r_traj_ops;
-	}
-	else
-	{
-		numrecs64 = (kilos64*1024)/reclen;
-		filebytes64 = numrecs64*reclen;
-	}
-
-	fd = 0;
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-	for( j=0; j<ltest; j++ ) 		/* Pread and Re-Pread */
-	{
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-		if((fd = I_OPEN(filename, (int)open_flags,0))<0)
-		{
-			printf("\nCan not open temporary file %s for read\n",filename);
-			perror("open");
-			exit(101);
-		}
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-		nbuff=mainbuffer;
-		mbuffer=mainbuffer;
-		if(fetchon)
-			fetchit(nbuff,reclen);
-		starttime2 = time_so_far();
-	        compute_val=(double)0;
-		if(r_traj_flag)
-		{
-			rewind(r_traj_fd);
-		}
-		for(i=0; i<numrecs64; i++) 
-		{
-			if(r_traj_flag)
-			{
-				traj_offset=get_traj(r_traj_fd, (long long *)&traj_size,(float *)&compute_time,(long)1);
-				reclen=traj_size;
-			}
-			else
-				traj_offset=(i * reclen);
-			if(rlocking)
-			{
-				lock_offset=traj_offset;
-				mylockr((int) fd, (int) 1, (int)1,
-				  lock_offset, reclen);
-			}
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-                        if(multi_buffer)
-                        {
-                                Index +=reclen;
-                                if(Index > (MAXBUFFERSIZE-reclen))
-                                        Index=0;
-                                nbuff = mbuffer + Index;
-                        }
-
-			if(purge)
-				purgeit(nbuff,reclen);
-			if(I_PREAD(((int)fd), ((void*)nbuff), ((size_t) reclen),traj_offset ) 
-					!= reclen)
-			{
-#ifdef NO_PRINT_LLD
-				printf("\nError reading block %ld %lx\n", i,(unsigned long)nbuff);
-#else
-				printf("\nError reading block %lld %lx\n", i,(unsigned long)nbuff);
-#endif
-				perror("pread");
-				exit(103);
-			}
-			if(verify){
-				if(verify_buffer(nbuff,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-					exit(104);
-				}
-			}
-			if(rlocking)
-			{
-				lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-				mylockr((int) fd, (int) 1, (int)1,
-				  lock_offset, reclen);
-			}
-		}
-		if(include_flush)
-			fsync(fd);
-		if(include_close)
-			close(fd);
-		preadtime[j] = ((time_so_far() - starttime2)-time_res)
-			-compute_val;
-		if(preadtime[j] < (double).000001) 
-		{
-			preadtime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			fsync(fd);
-			close(fd);
-		}
-
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-    	}
-
-	filebytes64 = numrecs64*reclen;
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	for(j=0;j<ltest;j++){
-		if(MS_flag)
-		{
-			preadrate[j]=1000000.0*(preadtime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  preadrate[j] = 
-			(unsigned long long) ((double) filebytes64 / preadtime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			preadrate[j] >>= 10;
-	}
-	if(noretest)
-	{
-		preadrate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)preadrate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)preadrate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%8ld",preadrate[0]);
-	if(!silent) printf("%9ld",preadrate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%8lld",preadrate[0]);
-	if(!silent) printf("%9lld",preadrate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-#endif
-
-#ifdef HAVE_PREADV
-/************************************************************************/
-/* pwritev_perf_test				        		*/
-/* pwritev and re-pwritev test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void pwritev_perf_test(off64_t kilos64,long long reclen,long long *data1,long long *data2)
-#else
-void pwritev_perf_test(kilos64,reclen,data1,data2)
-off64_t kilos64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	int	wval;
-	double starttime1;
-	double pwritevtime[2];
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long list_off[PVECMAX];
-	long long numvecs,j,xx;
-	unsigned long long pwritevrate[2];
-	off64_t filebytes64,i;
-	off64_t numrecs64;
-	int fd,ltest;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-	long long flags_here;
-	char *nbuff;
-#ifdef MERSENNE
-        unsigned long long init[4]={0x12345ULL, 0x23456ULL, 0x34567ULL, 0x45678ULL}, length=4;
-#endif
-
-	numrecs64 = (kilos64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-	nbuff = mainbuffer;
-	fd = 0;
-	if(oflag)
-		flags_here = O_SYNC|O_RDWR;
-	else
-		flags_here = O_RDWR;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags_here |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags_here |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags_here |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags_here |=O_DIRECTIO;
-#endif
-#endif
-	 
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-
-	for( j=0; j<ltest; j++)
-	{
-		if(j==0)
-			flags_here |=O_CREAT;
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-		if((fd = I_OPEN(filename, (int)flags_here,0640))<0)
-		{
-			printf("\nCan not open temp file: %s\n", 
-				filename);
-			perror("open");
-			exit(109);
-		}
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-					printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-		if(direct_flag)
-		{
-			test_foo = directio(fd, DIRECTIO_ON);
-			if(test_foo != 0)
-			{
-				if(!client_iozone)
-					printf("\ndirectio not available.\n");
-				exit(3);
-			}
-		}
-#endif
-		nbuff=mainbuffer;
-		mbuffer=mainbuffer;
-		if(fetchon)
-			fetchit(nbuff,reclen);
-		numvecs=PVECMAX;
-                if(numrecs64 < numvecs) numvecs=numrecs64;
-                if(MAXBUFFERSIZE/reclen < PVECMAX) numvecs=MAXBUFFERSIZE/reclen;
-
-#ifdef MERSENNE
-    	        init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-	        srand(0);
-#else
-#ifdef Windows
-                srand(0);
-#else
-	        srand48(0);
-#endif
-#endif
-#endif
-		starttime1 = time_so_far();
-	        compute_val=(double)0;
-		for(i=0; i<numrecs64; i+=numvecs){
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-			if((numrecs64-i) < numvecs) 
-				numvecs=numrecs64-i;
-			create_list((long long *)list_off, reclen, numrecs64);
-			for(xx=0;xx<numvecs;xx++)
-			{
-				piov[xx].piov_base = 
-					(caddr_t)(nbuff+(xx * reclen));
-				if(verify || dedup || dedup_interior)
-					fill_buffer(piov[xx].piov_base,reclen,(long long)pattern,sverify,i);
-				piov[xx].piov_len = reclen;
-#ifdef PER_VECTOR_OFFSET
-				piov[xx].piov_offset = list_off[xx];
-#endif
-				if(purge)
-					purgeit(piov[xx].piov_base,reclen);
-			}
-			if(pwritev(fd, piov,numvecs
-#ifndef PER_VECTOR_OFFSET
-				, list_off[0]
-#endif
-				) != (reclen*numvecs))
-			{
-#ifdef NO_PRINT_LLD
-			    	printf("\nError pwriteving block %ld, fd= %d\n", i,
-					 fd);
-#else
-			    	printf("\nError pwriteving block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				perror("pwritev");
-			    	exit(113);
-			}
-		}
-
-		if(include_flush)
-		{
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-		}
-		if(include_close)
-		{
-			wval=close(fd);
-			if(wval==-1){
-				perror("close");
-				signal_handler();
-			}
-		}
-		pwritevtime[j] = ((time_so_far() - starttime1)-time_res)
-			-compute_val;
-		if(pwritevtime[j] < (double).000001) 
-		{
-			pwritevtime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			wval=fsync(fd);
-			if(wval==-1){
-				perror("fsync");
-				signal_handler();
-			}
-			wval=close(fd);
-			if(wval==-1){
-				perror("close");
-				signal_handler();
-			}
-		}
-
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-	}
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	for(j=0;j<ltest;j++){
-		if(MS_flag)
-		{
-			pwritevrate[j]=1000000.0*(pwritevtime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  pwritevrate[j] = 
-		      (unsigned long long) ((double) filebytes64 / pwritevtime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			pwritevrate[j] >>= 10;
-	}
-	if(noretest)
-	{
-		pwritevrate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}	
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)pwritevrate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)pwritevrate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%9ld",pwritevrate[0]);
-	if(!silent) printf("%10ld",pwritevrate[1]);
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%9lld",pwritevrate[0]);
-	if(!silent) printf("%10lld",pwritevrate[1]);
-	if(!silent) fflush(stdout);
-#endif
-}
-#endif
-
-
-#ifdef HAVE_PREADV
-/**************************************************************************/
-/* create_list() 							  */
-/* Creates a list of PVECMAX entries that are unique (non over lapping ). */
-/* Each of these offsets are then used in a vector (preadv/pwritev)	  */
-/**************************************************************************/
-#ifdef HAVE_ANSIC_C
-void create_list(long long *list_off, long long reclen, off64_t numrecs64)
-#else
-void create_list(list_off, reclen, numrecs64)
-long long *list_off;
-long long reclen; 
-off64_t numrecs64;
-#endif
-{
-	long long found,i,j;
-	long long numvecs;
-	unsigned long long big_rand = -1;
-#if defined (bsd4_2) || defined(Windows)
-	long long rand1,rand2,rand3;
-#endif
-
-	numvecs = PVECMAX;
-	if(numrecs64< numvecs)
-		numvecs = numrecs64;
-	for(j=0;j<numvecs;j++)
-		list_off[j]=0;	
-	for(j=0;j<numvecs;j++)
-	{
-again:
-		found = 0;
-#ifdef MERSENNE
-                big_rand = genrand64_int64();
-		offset64 = reclen * (big_rand%numrecs64);
-#else
-#ifdef bsd4_2
-		rand1=(long long)rand();
-		rand2=(long long)rand();
-		rand3=(long long)rand();
-		big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-		offset64 = reclen * (big_rand%numrecs64);
-#else
-#ifdef Windows
-		rand1=(long long)rand();
-		rand2=(long long)rand();
-		rand3=(long long)rand();
-		big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-		offset64 = reclen * (big_rand%numrecs64);
-#else
-		offset64 = reclen * (lrand48()%numrecs64);
-#endif
-#endif
-#endif
-
-		for(i=0;i<j;i++)
-		{
-			if(list_off[i] == offset64)
-			{
-				found++;
-				break;
-			}
-		}
-		if(!found)
-			list_off[j]=offset64;
-		else
-		{
-			goto again;
-		}
-	}
-}
-#endif
-
-#ifdef HAVE_PREADV
-/************************************************************************/
-/* preadv_perf_test				        		*/
-/* preadv and re-preadv test						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void preadv_perf_test(off64_t kilos64,long long reclen,long long *data1,long long *data2)
-#else
-void preadv_perf_test(kilos64,reclen,data1,data2)
-off64_t kilos64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	double starttime2;
-	double preadvtime[2];
-	double walltime[2], cputime[2];
-	double compute_val = (double)0;
-	long long list_off[PVECMAX];
-	long long numvecs,i,j,xx;
-	off64_t numrecs64;
-	unsigned long long preadvrate[2];
-	off64_t filebytes64;
-	int fd,open_flags,ltest;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-	char *nbuff;
-#ifdef MERSENNE
-        unsigned long long init[4]={0x12345ULL, 0x23456ULL, 0x34567ULL, 0x45678ULL}, length=4;
-#endif
-
-	open_flags=O_RDONLY;
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		open_flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		open_flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		open_flags |=O_RSYNC|O_SYNC;
-#endif
-	numrecs64 = (kilos64*1024)/reclen;
-	filebytes64 = numrecs64*reclen;
-	nbuff = mainbuffer;
-	fd = 0;
-	if(noretest)
-		ltest=1;
-	else
-		ltest=2;
-
-	for( j=0; j<ltest; j++ )
-	{
-		if(cpuutilflag)
-		{
-			walltime[j] = time_so_far();
-			cputime[j]  = cputime_so_far();
-		}
-		if(Uflag) /* Unmount and re-mount the mountpoint */
-		{
-			purge_buffer_cache();
-		}
-
-		if((fd = I_OPEN(filename, (int)open_flags,0))<0)
-		{
-			printf("\nCan not open temporary file for preadv\n");
-			perror("open");
-			exit(114);
-		}
-#ifdef VXFS
-		if(direct_flag)
-		{
-			ioctl(fd,VX_SETCACHE,VX_DIRECT);
-			ioctl(fd,VX_GETCACHE,&test_foo);
-			if(test_foo == 0)
-			{
-				if(!client_iozone)
-				  printf("\nVxFS advanced setcache feature not available.\n");
-				exit(3);
-			}
-		}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-		nbuff=mainbuffer;
-		mbuffer=mainbuffer;
-		if(fetchon)
-			fetchit(nbuff,reclen);
-		numvecs=PVECMAX;
-                if(numrecs64 < numvecs) numvecs=numrecs64;
-                if(MAXBUFFERSIZE/reclen < PVECMAX) numvecs=MAXBUFFERSIZE/reclen;
-
-#ifdef MERSENNE
-    	       init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-	        srand(0);
-#else
-#ifdef Windows
-                srand(0);
-#else
-	        srand48(0);
-#endif
-#endif
-#endif
-		starttime2 = time_so_far();
-	        compute_val=(double)0;
-		for(i=0; i<(numrecs64); i+=numvecs) 
-		{
-			if(compute_flag)
-				compute_val+=do_compute(compute_time);
-			if((numrecs64-i) < numvecs) 
-				numvecs=numrecs64-i;
-			create_list((long long *)list_off, reclen, numrecs64);
-			for(xx=0;xx<numvecs;xx++)
-			{
-				piov[xx].piov_base = 
-					(caddr_t)(nbuff+(xx * reclen));
-				piov[xx].piov_len = reclen;
-#ifdef PER_VECTOR_OFFSET
-				piov[xx].piov_offset = list_off[xx];
-#endif
-				if(purge)
-				   purgeit(piov[xx].piov_base,reclen);
-			}
-			if(preadv(fd, piov, numvecs
-#ifndef PER_VECTOR_OFFSET
-				, list_off[0]
-#endif
-				) != (numvecs * reclen))
-			{
-#ifdef NO_PRINT_LLD
-				printf("\nError preadving block %ld \n", i);
-#else
-				printf("\nError preadving block %lld \n", i);
-#endif
-				perror("preadv");
-				exit(116);
-			}
-		}
-		if(include_flush)
-			fsync(fd);
-		if(include_close)
-			close(fd);
-		preadvtime[j] = ((time_so_far() - starttime2)-time_res)
-			-compute_val;
-		if(preadvtime[j] < (double).000001) 
-		{
-			preadvtime[j]= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-		if(!include_close)
-		{
-			fsync(fd);
-			close(fd);
-		}
-
-		if(cpuutilflag)
-		{
-			cputime[j]  = cputime_so_far() - cputime[j];
-			if (cputime[j] < cputime_res)
-				cputime[j] = 0.0;
-			walltime[j] = time_so_far() - walltime[j];
-			if (walltime[j] < cputime[j])
-			   walltime[j] = cputime[j];
-		}
-		if(restf)
-			sleep((int)rest_val);
-    	}
-	if(OPS_flag || MS_flag){
-	   filebytes64=filebytes64/reclen;
-	}
-	for(j=0;j<ltest;j++){
-		if(MS_flag)
-		{
-			preadvrate[j]=1000000.0*(preadvtime[j] / (double)filebytes64);
-			continue;
-		}
-            else
-            {
-                  preadvrate[j] = 
-		      (unsigned long long) ((double) filebytes64 / preadvtime[j]);
-            }
-		if(!(OPS_flag || MS_flag))
-			preadvrate[j] >>= 10;
-	}
-	if(noretest)
-	{
-		preadvrate[1]=(long long)0;
-		if(cpuutilflag)
-		{
-			walltime[1]=0.0;
-			cputime[1]=0.0;
-		}
-	}
-	
-	/* Must save walltime & cputime before calling store_value() for each/any cell.*/
-	if(cpuutilflag)
-		store_times(walltime[0], cputime[0]);
-	store_value((off64_t)preadvrate[0]);
-	if(cpuutilflag)
-		store_times(walltime[1], cputime[1]);
-	store_value((off64_t)preadvrate[1]);
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%10ld",preadvrate[0]);
-	if(!silent) printf("%9ld",preadvrate[1]);
-	if(!silent) printf("\n");
-	if(!silent) fflush(stdout);
-#else
-	if(!silent) printf("%10lld",preadvrate[0]);
-	if(!silent) printf("%9lld",preadvrate[1]);
-	if(!silent) printf("\n");
-	if(!silent) fflush(stdout);
-#endif
-}
-#endif
-
-/************************************************************************/
-/* print_header()							*/
-/* Prints the header for the output from Iozone.			*/
-/************************************************************************/
-#endif
-#ifdef HAVE_ANSIC_C
-void print_header(void)
-#else
-void print_header()
-#endif
-{
-	if(Eflag)
-	{
-    	   if(!silent) printf(CONTROL_STRING2,
-		" ", 
-		" ",
-		" ",
-		" ",
-		" ",
-		" ",
-		"random",			/*kcollins:2-5-96*/
-		"random",			/*kcollins:2-5-96*/
-		"bkwd",
-		"record",
-		"stride",
-		" ",
-		" ",
-		" ",
-		" "
-#ifdef HAVE_PREAD
-		," ",
-		" ",
-		" ",
-		" "
-#ifdef HAVE_PREADV
-		," ",
-		" ",
-		" ",
-		" "
-#endif
-#endif
-		);
-    	if(!silent) printf(CONTROL_STRING2,
-		"KB", 
-		"reclen",
-		"write",
-		"rewrite",
-		"read",
-		"reread",
-		"read",				/*kcollins:2-5-96*/
-		"write",			/*kcollins:2-5-96*/
-		"read",
-		"rewrite",
-		"read",
-		"fwrite",
-		"frewrite",
-		"fread",
-		"freread"
-#ifdef HAVE_PREAD
-		,"pwrite",
-		"repwrite",
-		"pread",
-		"repread"
-#ifdef HAVE_PREADV
-		,"pwritev",
-		"repwritev",
-		"preadv",
-		"repreadv"
-#endif
-#endif
-		);
-	}else 
-	if(RWONLYflag){				/*kcollins 8-21-96*/
-    	   if(!silent) printf(CONTROL_STRING4,		/*kcollins 8-21-96*/
-		" ", 				/*kcollins 8-21-96*/
-		" ",				/*kcollins 8-21-96*/
-		" ",				/*kcollins 8-21-96*/
-		" ",				/*kcollins 8-21-96*/
-		" ",				/*kcollins 8-21-96*/
-		" "				/*kcollins 8-21-96*/
-		);				/*kcollins 8-21-96*/
-    	if(!silent) printf(CONTROL_STRING4,			/*kcollins 8-21-96*/
-		"KB", 				/*kcollins 8-21-96*/
-		"reclen",			/*kcollins 8-21-96*/
-		"write",			/*kcollins 8-21-96*/
-		"rewrite",			/*kcollins 8-21-96*/
-		"read",				/*kcollins 8-21-96*/
-		"reread"			/*kcollins 8-21-96*/
-		);				/*kcollins 8-21-96*/
-	}else{
-	   if(!(mmapflag || async_flag))
-	   {
-    	   	if(!silent) printf(CONTROL_STRING3,
-			" ", 
-			" ",
-			" ",
-			" ",
-			" ",
-			" ",
-			"random",			/*kcollins:2-5-96*/
-			"random",			/*kcollins:2-5-96*/
-			"bkwd",
-			"record",
-			"stride",
-			"",
-			"",
-			"",
-			""
-			);
-    		if(!silent) printf(CONTROL_STRING3,
-			"KB", 
-			"reclen",
-			"write",
-			"rewrite",
-			"read",
-			"reread",
-			"read",				/*kcollins:2-5-96*/
-			"write",			/*kcollins:2-5-96*/
-			"read",
-			"rewrite",
-			"read",
-			"fwrite",
-			"frewrite",
-			"fread",
-			"freread" 
-			);
-		}else
-		{
-    	   		if(!silent) printf(CONTROL_STRING3,
-				" ", 
-				" ",
-				" ",
-				" ",
-				" ",
-				" ",
-				"random",			/*kcollins:2-5-96*/
-				"random",			/*kcollins:2-5-96*/
-				"bkwd",
-				"record",
-				"stride",
-				"",
-				"",
-				"",
-				""
-				);
-    			if(!silent) printf(CONTROL_STRING3,
-				"KB", 
-				"reclen",
-				"write",
-				"rewrite",
-				"read",
-				"reread",
-				"read",				/*kcollins:2-5-96*/
-				"write",			/*kcollins:2-5-96*/
-				"read",
-				"rewrite",
-				"read",
-				"",
-				"",
-				"",
-				"" 
-				);
-		}
-	}
-}
-
-/************************************************************************/
-/* store_value()							*/
-/* Stores a value in an in memory array. Used by the report function    */
-/* to re-organize the output for Excel					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-store_value(off64_t value)
-#else
-store_value(value)
-off64_t value;
-#endif
-{
-	report_array[current_x][current_y]=value;
-	current_x++;
-	if(current_x > max_x)
-		max_x=current_x;
-	if(current_y > max_y)
-		max_y=current_y;
-	if(max_x >= MAX_X)
-	{
-		printf("\nMAX_X too small\n");
-		exit(117);
-	}
-	if(max_y >= MAX_Y)
-	{
-		printf("\nMAX_Y too small\n");
-		exit(118);
-	}
-}
-
-/************************************************************************/
-/* store_times()							*/
-/* Stores runtime (walltime & cputime) in a memory array.		*/
-/* Used by the report function to re-organize the output for Excel	*/
-/* For now, must be called immediately before calling store_value() for	*/
-/* each cell.								*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-store_times(double walltime, double cputime)
-#else
-store_times(walltime, cputime)
-double walltime, cputime;
-#endif
-{
-	runtimes [current_x][current_y].walltime = walltime;
-	runtimes [current_x][current_y].cputime  = cputime;
-	runtimes [current_x][current_y].cpuutil  = cpu_util(cputime, walltime);
-}
-
-/************************************************************************/
-/* dump_report()							*/
-/* Dumps the Excel report on standard output.				*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void dump_report(long long who)
-#else
-dump_report(who)
-long long who;
-#endif
-{
-	long long i;
-	off64_t current_file_size;
-	off64_t rec_size;
-
-	if(bif_flag)
-		bif_column++;
-	if(!silent) printf("      ");
-
-	/* 
-	 * Need to reconstruct the record size list
-	 * as the crossover in -a changed the list.
-	*/
-	del_record_sizes();
-	init_record_sizes(orig_min_rec_size, orig_max_rec_size);
-
-	for(rec_size=get_next_record_size(0); rec_size <= orig_max_rec_size;
-		rec_size=get_next_record_size(rec_size))
-	{
-		if (rec_size == 0) break;
-		if(bif_flag)
-			do_float(bif_fd,(double)(rec_size/1024),bif_row,bif_column++);
-#ifdef NO_PRINT_LLD
-		if(!silent) printf("  %c%ld%c",'"',rec_size/1024,'"');
-#else
-		if(!silent) printf("  %c%lld%c",'"',rec_size/1024,'"');
-#endif
-	}
-	if(!silent) printf("\n");
-	if(bif_flag)
-	{
-		bif_column=0;
-		bif_row++;
-	}
-
-	current_file_size = report_array[0][0];
-	if(bif_flag)
-	{
-		do_float(bif_fd,(double)(current_file_size),bif_row,bif_column++);
-	}
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%c%ld%c  ",'"',current_file_size,'"');
-#else
-	if(!silent) printf("%c%lld%c  ",'"',current_file_size,'"');
-#endif
-	for(i=0;i<=max_y;i++){
-		if(report_array[0][i] != current_file_size){
-			if(!silent) printf("\n");
-			current_file_size = report_array[0][i];
-			if(bif_flag)
-			{
-				bif_row++;
-				bif_column=0;
-				do_float(bif_fd,(double)(current_file_size),bif_row,bif_column++);
-			}
-#ifdef NO_PRINT_LLD
-			if(!silent) printf("%c%ld%c  ",'"',current_file_size,'"');
-#else
-			if(!silent) printf("%c%lld%c  ",'"',current_file_size,'"');
-#endif
-		}
-		if(bif_flag)
-			do_float(bif_fd,(double)(report_array[who][i]),bif_row,bif_column++);
-#ifdef NO_PRINT_LLD
-		if(!silent) printf(" %ld ",report_array[who][i]);
-#else
-		if(!silent) printf(" %lld ",report_array[who][i]);
-#endif
-	}
-	if(bif_flag)
-	{
-		bif_row++;
-		bif_column=0;
-	}
-	if(!silent) printf("\n");
-}
-
-/************************************************************************/
-/* Wrapper that dumps each of the collected data sets.			*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void dump_excel(void)
-#else
-void dump_excel()
-#endif
-{
-	if(bif_flag)
-	{
-		bif_fd=create_xls(bif_filename);
-		do_label(bif_fd,command_line,bif_row++,bif_column);
-		do_label(bif_fd," ",bif_row++,bif_column);
-                do_label(bif_fd,"The top row is records sizes, the left column is file sizes",bif_row++,bif_column);
-	}
-	if(!silent) printf("Excel output is below:\n");
-
-    if ((!include_tflag) || (include_mask & (long long)WRITER_MASK)) {
-	if(bif_flag)
-		do_label(bif_fd,"Writer Report",bif_row++,bif_column);
-	if(!silent) printf("\n%cWriter report%c\n",'"','"');
-	dump_report(2); 
-	if(bif_flag)
-		do_label(bif_fd,"Re-writer Report",bif_row++,bif_column);
-	if(!silent) printf("\n%cRe-writer report%c\n",'"','"');
-	dump_report(3); 
-    }
-
-    if ((!include_tflag) || (include_mask & (long long)READER_MASK)) {
-	if(bif_flag)
-		do_label(bif_fd,"Reader Report",bif_row++,bif_column);
-	if(!silent) printf("\n%cReader report%c\n",'"','"');
-	dump_report(4); 
-	if(bif_flag)
-		do_label(bif_fd,"Re-reader Report",bif_row++,bif_column);
-	if(!silent) printf("\n%cRe-Reader report%c\n",'"','"');
-	dump_report(5); 
-    }
-
-	if ((!include_tflag) || (include_mask & (long long)RANDOM_RW_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd,"Random Read Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cRandom read report%c\n",'"','"');
-		dump_report(6); 
-		if(bif_flag)
-			do_label(bif_fd,"Random Write Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cRandom write report%c\n",'"','"');
-		dump_report(7); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)REVERSE_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd,"Backward Read Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cBackward read report%c\n",'"','"');
-		dump_report(8); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)REWRITE_REC_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd,"Record Rewrite Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cRecord rewrite report%c\n",'"','"');
-		dump_report(9); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)STRIDE_READ_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd,"Stride Read Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cStride read report%c\n",'"','"');
-		dump_report(10); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)FWRITER_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd,"Fwrite Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cFwrite report%c\n",'"','"');
-		dump_report(11); 
-		if(bif_flag)
-			do_label(bif_fd,"Re-fwrite Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cRe-Fwrite report%c\n",'"','"');
-		dump_report(12); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)FREADER_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd,"Fread Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cFread report%c\n",'"','"');
-		dump_report(13); 
-		if(bif_flag)
-			do_label(bif_fd,"Re-fread Report",bif_row++,bif_column);
-		if(!silent) printf("\n%cRe-Fread report%c\n",'"','"');
-		dump_report(14); 
-	}
-
-#ifdef HAVE_PREAD
-	if(Eflag)
-	{
-		if ((!include_tflag) || (include_mask & (long long)PWRITER_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd,"Pwrite Report",bif_row++,bif_column);
-			if(!silent) printf("\n%cPwrite report%c\n",'"','"');
-			dump_report(15); 
-			if(bif_flag)
-				do_label(bif_fd,"Re-pwrite Report",bif_row++,bif_column);
-		 	if(!silent) printf("\n%cRe-Pwrite report%c\n",'"','"');
-		 	dump_report(16); 
-		}
-
-		if ((!include_tflag) || (include_mask & (long long)PREADER_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd,"Pread Report",bif_row++,bif_column);
-		 	if(!silent) printf("\n%cPread report%c\n",'"','"');
-		 	dump_report(17); 
-			if(bif_flag)
-				do_label(bif_fd,"Re-pread Report",bif_row++,bif_column);
-		 	if(!silent) printf("\n%cRe-Pread report%c\n",'"','"');
-		 	dump_report(18); 
-		}
-
-#ifdef HAVE_PREADV
-		if ((!include_tflag) || (include_mask & (long long)PWRITEV_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd,"Pwritev Report",bif_row++,bif_column);
- 			if(!silent) printf("\n%cPwritev report%c\n",'"','"');
- 			dump_report(19); 
-			if(bif_flag)
-				do_label(bif_fd,"Re-pwritev Report",bif_row++,bif_column);
- 			if(!silent) printf("\n%cRe-Pwritev report%c\n",'"','"');
- 			dump_report(20); 
-		}
-
-		if ((!include_tflag) || (include_mask & (long long)PREADV_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd,"Preadv Report",bif_row++,bif_column);
- 			if(!silent) printf("\n%cPreadv report%c\n",'"','"');
- 			dump_report(21); 
-			if(bif_flag)
-				do_label(bif_fd,"Re-preadv Report",bif_row++,bif_column);
- 			if(!silent) printf("\n%cRe-Preadv report%c\n",'"','"');
- 			dump_report(22); 
-		}
-#endif
-	}
-#endif
-	if (cpuutilflag)
-		dump_cputimes();
-	if(bif_flag)
-		close_xls(bif_fd);
-}
-
-/************************************************************************/
-/* dump_times()		 						*/
-/* Dumps the Excel CPU times report to stdout and to the bif file.	*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void dump_times(long long who)
-#else
-dump_times(who)
-long long who;
-#endif
-{
-	long long i;
-	off64_t current_file_size;
-	off64_t rec_size;
-
-	if (bif_flag)
-		bif_column++;
-	if(!silent) printf("      ");
-
-	for (rec_size = get_next_record_size(0); rec_size <= orig_max_rec_size;
-		rec_size = get_next_record_size(rec_size))
-	{
-		if (rec_size == 0) break;
-		if (bif_flag)
-			do_float(bif_fd, (double)(rec_size/1024), bif_row, bif_column++);
-#ifdef NO_PRINT_LLD
-		if(!silent) printf("  %c%ld%c",'"',rec_size/1024,'"');
-#else
-		if(!silent) printf("  %c%lld%c",'"',rec_size/1024,'"');
-#endif
-	}
-	if(!silent) printf("\n");
-	if (bif_flag)
-	{
-		bif_column=0;
-		bif_row++;
-	}
-
-	current_file_size = report_array[0][0];
-	if (bif_flag)
-	{
-		do_float(bif_fd, (double)(current_file_size), bif_row, bif_column++);
-	}
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("%c%ld%c  ",'"',current_file_size,'"');
-#else
-	if(!silent) printf("%c%lld%c  ",'"',current_file_size,'"');
-#endif
-	for (i = 0; i <= max_y; i++) {
-		if (report_array[0][i] != current_file_size) {
-			if(!silent) printf("\n");
-			current_file_size = report_array[0][i];
-			if (bif_flag)
-			{
-				bif_row++;
-				bif_column=0;
-				do_float(bif_fd, (double)(current_file_size), bif_row, bif_column++);
-			}
-#ifdef NO_PRINT_LLD
-			if(!silent) printf("%c%ld%c  ",'"',current_file_size,'"');
-#else
-			if(!silent) printf("%c%lld%c  ",'"',current_file_size,'"');
-#endif
-		}
-		if (bif_flag)
-			do_float(bif_fd, (double)(runtimes [who][i].cpuutil), bif_row, bif_column++);
-		if(!silent) printf(" %6.2f", runtimes [who][i].cpuutil);
-	}
-	if(!silent) printf("\n");
-	if (bif_flag)
-	{
-		bif_row++;
-		bif_column=0;
-	}
-}
-
-/************************************************************************/
-/* Wrapper that dumps each of the collected data sets.			*/
-/* This one dumps only the collected CPU times.				*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void dump_cputimes(void)
-#else
-void dump_cputimes(void)
-#endif
-{
-	bif_row++;
-	bif_column = 0;
-
-    if ((!include_tflag) || (include_mask & (long long)WRITER_MASK)) {
-	if(bif_flag)
-		do_label(bif_fd, "Writer CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-	if(!silent) printf("\n%cWriter CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-	dump_times(2); 
-	if(bif_flag)
-		do_label(bif_fd, "Re-writer CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-	if(!silent) printf("\n%cRe-writer CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-	dump_times(3); 
-    }
-
-    if ((!include_tflag) || (include_mask & (long long)READER_MASK)) {
-	if(bif_flag)
-		do_label(bif_fd, "Reader CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-	if(!silent) printf("\n%cReader CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-	dump_times(4); 
-	if(bif_flag)
-		do_label(bif_fd, "Re-reader CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-	if(!silent) printf("\n%cRe-Reader CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-	dump_times(5); 
-    }
-
-	if ((!include_tflag) || (include_mask & (long long)RANDOM_RW_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd, "Random Read CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cRandom read CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(6); 
-		if(bif_flag)
-			do_label(bif_fd, "Random Write CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cRandom write CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(7); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)REVERSE_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd, "Backward Read CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cBackward read CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(8); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)REWRITE_REC_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd, "Record Rewrite CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cRecord rewrite CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(9); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)STRIDE_READ_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd, "Stride Read CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cStride read CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(10); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)FWRITER_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd, "Fwrite CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cFwrite CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(11); 
-		if(bif_flag)
-			do_label(bif_fd, "Re-fwrite CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cRe-Fwrite CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(12); 
-	}
-
-	if ((!include_tflag) || (include_mask & (long long)FREADER_MASK)) {
-		if(bif_flag)
-			do_label(bif_fd, "Fread CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cFread CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(13); 
-		if(bif_flag)
-			do_label(bif_fd, "Re-fread CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		if(!silent) printf("\n%cRe-Fread CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		dump_times(14); 
-	}
-
-#ifdef HAVE_PREAD
-	if(Eflag)
-	{
-		if ((!include_tflag) || (include_mask & (long long)PWRITER_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd, "Pwrite CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-			if(!silent) printf("\n%cPwrite CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-			dump_times(15); 
-			if(bif_flag)
-				do_label(bif_fd, "Re-pwrite CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		 	if(!silent) printf("\n%cRe-Pwrite CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		 	dump_times(16); 
-		}
-
-		if ((!include_tflag) || (include_mask & (long long)PREADER_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd, "Pread CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		 	if(!silent) printf("\n%cPread CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		 	dump_times(17); 
-			if(bif_flag)
-				do_label(bif_fd, "Re-pread CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-		 	if(!silent) printf("\n%cRe-Pread CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-		 	dump_times(18); 
-		}
-
-#ifdef HAVE_PREADV
-		if ((!include_tflag) || (include_mask & (long long)PWRITEV_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd, "Pwritev CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
- 			if(!silent) printf("\n%cPwritev CPU utilization report (Zero values should be ignored)%c\n",'"','"');
- 			dump_times(19); 
-			if(bif_flag)
-				do_label(bif_fd, "Re-pwritev CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
- 			if(!silent) printf("\n%cRe-Pwritev CPU utilization report (Zero values should be ignored)%c\n",'"','"');
- 			dump_times(20); 
-		}
-
-		if ((!include_tflag) || (include_mask & (long long)PREADV_MASK)) {
-			if(bif_flag)
-				do_label(bif_fd, "Preadv CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-			if(!silent) printf("\n%cPreadv CPU utilization report (Zero values should be ignored)%c\n",'"','"');
- 			dump_times(21); 
-			if(bif_flag)
-				do_label(bif_fd, "Re-preadv CPU utilization report (Zero values should be ignored)", bif_row++, bif_column);
-			if(!silent) printf("\n%cRe-Preadv CPU utilization report (Zero values should be ignored)%c\n",'"','"');
-			dump_times(22); 
-		}
-#endif
-	}
-#endif
-}
-
-/************************************************************************/
-/* Internal memory allocation mechanism. Uses shared memory or mmap 	*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-char *
-alloc_mem(long long size, int shared_flag)
-#else
-char *
-alloc_mem(size,shared_flag)
-long long size;
-int shared_flag;
-#endif
-{
-	long long size1;
-	char *addr,*dumb;
-	int shmid;
-	int tfd;
-	long long tmp;
-#if defined(solaris) 
-        char mmapFileName[]="mmap_tmp_XXXXXX";
-#endif
-
-	tmp = 0;
-	dumb = (char *)0;
-	tfd=0;
-	size1=l_max(size,page_size);
-	if(!distributed)
-	{
-		if(!trflag)
-		{
-			addr=(char *)malloc((size_t)size1);
-			return(addr);
-		}
-		if(use_thread)
-		{
-			addr=(char *)malloc((size_t)size1);
-			return(addr);
-		}
-	}
-	if(!shared_flag)
-	{
-		addr=(char *)malloc((size_t)size1);
-		return(addr);
-	}
-#ifdef SHARED_MEM
-	size1=l_max(size,page_size);
-	size1=(size1 +page_size) & ~(page_size-1);
-	shmid=(int)shmget((key_t)(IPC_PRIVATE), (size_t)size1 , (int)(IPC_CREAT|0666));
-        if(shmid < (int)0)
-        {
-                printf("\nUnable to get shared memory segment(shmget)\n");
-#ifdef NO_PRINT_LLD
-                printf("shmid = %d, size = %ld, size1 = %lu, Error %d\n",shmid,size,(size_t)size1,errno);
-#else
-                printf("shmid = %d, size = %lld, size1 = %lu, Error %d\n",shmid,size,(unsigned long)size1,errno);
-#endif
-                exit(119);
-        }
-        /*addr = (char *)shmat(shmid, 0, SHM_W);*/
-	/* Some systems will not take the above but
-	 * will default to read/write if no flags
-	 * are provided. (AIX)
-	 * The POSIX standard states that if SHM_RDONLY
-	 * is not specified then it will be read/write.
-	 */
-        addr = (char *)shmat((int)shmid, 0, 0);
-#ifdef _64BIT_ARCH_
-        if((long long)addr == (long long)-1)
-#else
-        if((long)addr == (long)-1)
-#endif
-        {
-                printf("\nUnable to get shared memory segment\n");
-                printf("..Error %d\n",errno);
-                exit(120);
-        }
-	shmctl(shmid, IPC_RMID, 0);
-	return(addr);
-#else
-
-	size1=l_max(size,page_size);
-	size1=(size1 +page_size) & ~(page_size-1);
-#if defined(bsd4_2) && !defined(macosx)
-	if((tfd = creat("mmap.tmp", 0666))<0)
-	{
-		printf("Unable to create tmp file\n");
-		exit(121);
-	}
-	addr=(char *)mmap(0,&size1,PROT_WRITE|PROT_READ,
-		MAP_ANON|MAP_SHARED, tfd, 0);
-	unlink("mmap.tmp");
-#else
-
-
-#if defined(solaris) 
-	tfd=mkstemp(mmapFileName);
-        if(tfd < 0)
-	{
-		printf("Unable to create tmp file\n");
-		exit(121);
-	}
-	dumb=(char *)malloc((size_t)size1);
-	bzero(dumb,size1);
-	write(tfd,dumb,size1);
-	free(dumb);
-	addr=(char *)mmap(0,(size_t)size1,PROT_WRITE|PROT_READ,
-		MAP_SHARED, tfd, 0);
-	unlink(mmapFileName);
-#else
-#if defined(SCO) || defined(SCO_Unixware_gcc) || defined(Windows)
-        char mmapFileName[]="mmap_tmp_XXXXXX";
-	tfd=mkstemp(mmapFileName);
-        if(tfd < 0)
-        {
-                printf("Unable to create tmp file\n");
-                exit(121);
-        }
-        dumb=(char *)malloc((size_t)size1);
-	bzero(dumb,size1);
-        write(tfd,dumb,size1);
-        free(dumb);
-        addr=(char *)mmap(0,(size_t)size1,PROT_WRITE|PROT_READ,
-                MAP_SHARED, tfd, 0);
-	unlink(mmapFileName);
-#else
-	addr=(char *)mmap(0,(size_t)size1,PROT_WRITE|PROT_READ,
-		MAP_ANONYMOUS|MAP_SHARED, -1, 0);
-#endif
-#endif
-#endif
-	if((char *)addr == (char *)-1)
-	{
-		printf("\nUnable to get memory segment\n");
-		printf("Error %d\n",errno);
-		exit(122);
-	}
-	if(debug1)
-		printf("Got shared memory for size %d\n",size1);
-
-	return(addr);
-#endif
-}
-
-/************************************************************************/
-/* Implementation of poll() function.					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void Poll(long long time1)
-#else
-void Poll(time1)
-long  long time1;
-#endif
-{
-	struct timeval howlong;
-	howlong.tv_sec=(int)(time1/100000);
-	howlong.tv_usec=(int)(time1%100000); /* Get into u.s. */
-	select(0, 0, 0, 0, &howlong);
-}
-
-/************************************************************************/
-/* Implementation of max() function.					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-long long l_max(long long one,long long two)
-#else
-long long l_max(one,two)
-long long one,two;
-#endif
-{
-	if(one > two)
-		return(one);
-	else
-		return(two);
-}
-
-/************************************************************************/
-/* Internal Kill. With stonewalling disabled, kill does nothing 	*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void Kill(long long pid,long long sig)
-#else
-void Kill(pid,sig)
-long long pid,sig;
-#endif
-{
-	if(!xflag)
-	{
-		/*printf("Killing %d\n",pid);*/
-		kill((pid_t)pid,(int)sig);
-	}
-}
-/************************************************************************/
-/* Implementation of min() function.					*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-long long l_min(long long num1,long long num2)
-#else
-long long l_min(num1,num2)
-long long num1,num2;
-#endif
-{
-	if(num1 >= num2)
-		return num2;
-	else
-		return num1;
-}
-
-/************************************************************************/
-/* Routine to call throughput tests many times.				*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void
-multi_throughput_test(long long mint,long long maxt)
-#else
-void multi_throughput_test(mint, maxt)
-long long mint, maxt;
-#endif
-{
-        int *t_rangeptr, *t_rangecurs;
-        int *saveptr = (int *)0;
-        int tofree = 0;
-	long long i;
-        if(t_count == 0){
-            t_count = (int) maxt - mint + 1;
-            t_rangeptr = (int *) malloc((size_t)sizeof(int)*t_count);
-	    saveptr = t_rangeptr;
-            tofree = 1;
-            t_rangecurs = t_rangeptr;
-            for(i=mint; i<= maxt; i++) {
-                *(t_rangecurs++) = i;
-            }
-        }
-        else {
-            t_rangeptr = &t_range[0];
-        }
-	for(i=0; i < t_count; i++){
-		num_child = *(t_rangeptr++);
-		current_client_number=0; /* Need to start with 1 */
-		throughput_test();
-		current_x=0;
-		current_y++;
-	}
-	if(Rflag)
-		dump_throughput();
-        if(tofree)
-            free(saveptr);
-
-}
-
-
-
-/************************************************************************/
-/* Routine to purge the buffer cache by unmounting drive.		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-purge_buffer_cache()
-#else
-purge_buffer_cache()
-#endif
-{
-	char command[1024];
-	int ret,i;
-	strcpy(command,"umount ");
-	strcat(command, mountname);
-        /*
-           umount might fail if the device is still busy, so
-           retry unmounting several times with increasing delays
-        */
-        for (i = 1; i < 200; ++i) {
-               ret = system(command);
-               if (ret == 0)
-                       break;
-               sleep(i); /* seconds */
-        }
-	strcpy(command,"mount ");
-	strcat(command, mountname);
-	/*
-         mount might fail if the device is still busy, so
-         retry mounting several times with increasing delays
-        */
-        for (i = 1; i < 10; ++i) {
-              ret = system(command);
-              if (ret == 0)
-                   break;
-                   sleep(i); /* seconds */
-         }
-}
-
-/************************************************************************/
-/* Thread write test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_write_test(void *x)
-#else
-void *
-thread_write_test( x)
-#endif
-{
-
-	struct child_stats *child_stat;
-	double starttime1 = 0;
-	double temp_time;
-	double walltime, cputime;
-	double compute_val = (double)0;
-	float delay = (float)0;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	off64_t save_offset=0;
-	long long flags,traj_size;
-	long long w_traj_bytes_completed;
-	long long w_traj_ops_completed;
-	FILE *w_traj_fd;
-	int fd;
-	long long recs_per_buffer;
-	long long stopped,i;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-	long long xx,xx2;
-	char *dummyfile [MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff;
-	char *maddr;
-	char *wmaddr,*free_addr;
-	char now_string[30];
-	int anwser,bind_cpu,wval;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-	off64_t filebytes64;
-	char tmpname[256];
-	FILE *thread_wqfd;
-	FILE *thread_Lwqfd;
-
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-
-#else
-	long long *gc=0;
-#endif
-
-	if(compute_flag)
-		delay=compute_time;
-	nbuff=maddr=wmaddr=free_addr=0;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	thread_wqfd=w_traj_fd=thread_Lwqfd=(FILE *)0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	if(w_traj_flag)
-	{
-		filebytes64 = w_traj_fsize;
-		numrecs64=w_traj_ops;
-	}
-	else
-	{
-		filebytes64 = numrecs64*reclen;
-	}
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	w_traj_bytes_completed=w_traj_ops_completed=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-	{
-		xx = (long long)((long)x);
-	}
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	if(debug1 )
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	/*****************/
-	/* Children only */
-	/*******************************************************************/
-	/* Initial write throughput performance test. **********************/
-	/*******************************************************************/
-#if defined(Windows)
-	if(unbuffered)
-	{
-		hand=CreateFile(dummyfile[xx],
-			GENERIC_READ|GENERIC_WRITE,
-			FILE_SHARE_WRITE|FILE_SHARE_READ,
-			NULL,OPEN_ALWAYS,FILE_FLAG_NO_BUFFERING|
-			FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-			NULL);
-		CloseHandle(hand);
-	}
-#endif
-	if(oflag)
-		flags=O_RDWR|O_SYNC|O_CREAT;
-	else
-		flags=O_RDWR|O_CREAT;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-       	}
-        else
-        {
-#endif
-	if((fd = I_OPEN(dummyfile[xx], (int)flags,0640))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		printf("\nCan not open temp file: %s\n", 
-			filename);
-		perror("open");
-		exit(125);
-	}
-#if defined(Windows)
-	}
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-               if(direct_flag)
-               {
-                       test_foo = directio(fd, DIRECTIO_ON);
-                       if(test_foo != 0)
-                       {
-                               if(!client_iozone)
-                                 printf("\ndirectio not available.\n");
-                               exit(3);
-                       }
-               }
-#endif
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(filebytes64),1,PROT_READ|PROT_WRITE);
-	}
-	if(reclen < cache_size )
-	{
-		recs_per_buffer = cache_size/reclen ;
-		nbuff=&nbuff[(xx%recs_per_buffer)*reclen];
-	}
-	if(fetchon)			/* Prefetch into processor cache */
-		fetchit(nbuff,reclen);
-	if((verify && !no_copy_flag) || dedup || dedup_interior)
-		fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-
-	if(w_traj_flag)
-		w_traj_fd=open_w_traj();
-
-	child_stat = (struct child_stats *)&shmaddr[xx];	
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	child_stat->flag=CHILD_STATE_READY; /* Tell parent child is ready to go */
-	if(distributed && client_iozone)
-		tell_master_ready(chid);
-	if(distributed && client_iozone)
-	{
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d waiting for go from master\n",(int)xx);
-			fflush(newstdout);
-		}
-		wait_for_master_go(chid);
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d received go from master\n",(int)xx);
-			fflush(newstdout);
-		}
-	}
-	else
-	{
-		while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-			Poll((long long)1);
-	}
-
-	written_so_far=0;
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->actual = 0;
-	child_stat->throughput = 0;
-	stopped=0;
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)0) != 0)
-			printf("File lock for write failed. %d\n",errno);
-	if(Q_flag)
-	{
-		sprintf(tmpname,"Child_%d_wol.dat",(int)xx);
-		thread_wqfd=fopen(tmpname,"a");
-		if(thread_wqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		fprintf(thread_wqfd,"Offset in Kbytes   Latency in microseconds Transfer size in bytes\n");
-	}
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Write test start: ",now_string);
-	}
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-	if(w_traj_flag)
-		rewind(w_traj_fd);
-	for(i=0; i<numrecs64; i++){
-		if(w_traj_flag)
-		{
-			traj_offset=get_traj(w_traj_fd, (long long *)&traj_size,(float *)&delay, (long)1);
-			reclen=traj_size;
-#if defined(Windows)
-			if(unbuffered)
-			  SetFilePointer(hand,(LONG)traj_offset,0,FILE_BEGIN);
-			else
-#endif
-			I_LSEEK(fd,traj_offset,SEEK_SET);
-		}
-		if(Q_flag)
-		{
-#if defined(Windows)
-			if(unbuffered)
-			  traj_offset=SetFilePointer(hand,0,0,FILE_CURRENT);
-			else
-#endif
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)0,
-			  lock_offset, reclen);
-		}
-		if((verify && !no_copy_flag) || dedup || dedup_interior)
-			fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag && !stopped){
-			if(include_flush)
-			{
-				if(mmapflag)
-					msync(maddr,(size_t)filebytes64,MS_SYNC);
-				else
-					fsync(fd);
-			}
-			/* Close and re-open to get close in measurment */
-			if(include_close)
-			{
-			  save_offset=I_LSEEK(fd,0,SEEK_CUR);
-			  close(fd);
-			}
-			child_stat->throughput = 
-				(time_so_far() - starttime1)-time_res;
-			if(include_close)
-			{
-			  if((fd = I_OPEN(dummyfile[xx], (int)flags,0))<0)
-			  {
-				client_error=errno;
-				if(distributed && client_iozone)
-					send_stop();
-				printf("\nCan not open temp file: %s\n", 
-					filename);
-				perror("open");
-				exit(125);
-			  }
-			  I_LSEEK(fd,save_offset,SEEK_SET);
-			}
-			if(child_stat->throughput < (double).000001) 
-			{
-				child_stat->throughput = time_res;
-				if(rec_prob < reclen)
-					rec_prob = reclen;
-				res_prob=1;
-			}
-
-			if(OPS_flag){
-			   /*written_so_far=(written_so_far*1024)/reclen;*/
-			   written_so_far=w_traj_ops_completed;
-			}
-			child_stat->throughput = 
-			  (double)written_so_far/child_stat->throughput;
-			child_stat->actual = (double)written_so_far;
-			if(debug1)
-			{
-				printf("\n(%ld) Stopped by another\n", (long)xx);
-			}
-			stopped=1;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			thread_qtime_start=time_so_far();
-		}
-again:		
-		if(mmapflag)
-		{
-			wmaddr = &maddr[i*reclen];
-			fill_area((long long*)nbuff,(long long*)wmaddr,(long long)reclen);
-			/*printf("CHid: %lld  Writing offset %lld for length of %lld\n",chid,i*reclen,reclen);*/
-			if(!mmapnsflag)
-			{
-			  if(mmapasflag)
-			    msync(wmaddr,(size_t)reclen,MS_ASYNC);
-			  if(mmapssflag)
-			    msync(wmaddr,(size_t)reclen,MS_SYNC);
-			}
-		}
-		else
-		{
-		   if(async_flag)
-		   {
-			     if(no_copy_flag)
-			     {
-				free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-				nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-				if(verify || dedup || dedup_interior)
-					fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-			        async_write_no_copy(gc, (long long)fd, nbuff, reclen, (i*reclen), depth,free_addr);
-			     }
-			     else
-				async_write(gc, (long long)fd, nbuff, reclen, (i*reclen), depth);
-		   }
-		   else
-		   {
-#if defined(Windows)
-		      if(unbuffered)
-		      {
-			WriteFile(hand,nbuff,reclen, (LPDWORD)&wval,0);
-		      }
-		      else
-		      {
-#endif
-		      wval=write(fd, nbuff, (size_t) reclen);
-#if defined(Windows)
-		      }
-#endif
-		      if(wval != reclen)
-		      {
-			if(*stop_flag && !stopped){
-				if(include_flush)
-				{
-					if(mmapflag)
-						msync(maddr,(size_t)filebytes64,MS_SYNC);
-					else
-						fsync(fd);
-				}
-				temp_time = time_so_far();
-				child_stat->throughput = 
-					(temp_time - starttime1)-time_res;
-				if(child_stat->throughput < (double).000001) 
-				{
-					child_stat->throughput= time_res;
-					if(rec_prob < reclen)
-						rec_prob = reclen;
-					res_prob=1;
-				}
-
-				if(OPS_flag){
-				   /*written_so_far=(written_so_far*1024)/reclen;*/
-				   written_so_far=w_traj_ops_completed;
-				}
-				child_stat->throughput = 
-				  (double)written_so_far/child_stat->throughput;
-				child_stat->actual = (double)written_so_far;
-				if(debug1)
-				{
-					printf("\n(%ld) Stopped by another\n", (long)xx);
-				}
-				stopped=1;
-				goto again;
-			}
-			/* Note: Writer must finish even though told
-			   to stop. Otherwise the readers will fail.
-			   The code will capture bytes transfered
-			   before told to stop but let the writer
-			   complete.
-			*/
-#ifdef NO_PRINT_LLD
-		    	printf("\nError writing block %ld, fd= %d\n", i,
-				 fd);
-#else
-		    	printf("\nError writing block %lld, fd= %d\n", i,
-				 fd);
-#endif
-			if(wval==-1)
-				perror("write");
-			if (!no_unlink)
-			{
-			   if(check_filename(dummyfile[xx]))
-				unlink(dummyfile[xx]);
-			}
-			child_stat->flag = CHILD_STATE_HOLD;
-		    	exit(127);
-		      }
-		    }
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-			      my_unap((unsigned long long)((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-		if(Q_flag)
-		{
-			thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-			fprintf(thread_wqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-			fprintf(thread_wqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-		}
-		w_traj_ops_completed++;
-		w_traj_bytes_completed+=reclen;
-		written_so_far+=reclen/1024;
-		if(*stop_flag)
-		{
-			written_so_far-=reclen/1024;
-			w_traj_bytes_completed-=reclen;
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)0,
-			  lock_offset, reclen);
-		}
-	}
-	
-
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)0))
-			printf("Write unlock failed. %d\n",errno);
-	
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	
-	if(include_flush)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);
-		else
-			fsync(fd);
-	}
-	if(include_close)
-	{
-		if(mmapflag)
-			mmap_end(maddr,(unsigned long long)filebytes64);
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-	if(!stopped){
-		temp_time = time_so_far();
-		child_stat->throughput = ((temp_time - starttime1)-time_res)
-			-compute_val;
-		if(child_stat->throughput < (double).000001) 
-		{
-			child_stat->throughput= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-
-		if(OPS_flag){
-		   /*written_so_far=(written_so_far*1024)/reclen;*/
-		   written_so_far=w_traj_ops_completed;
-		}
-		child_stat->throughput =
-			(double)written_so_far/child_stat->throughput;
-		child_stat->actual = (double)written_so_far;
-	}
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid, child_stat->throughput,
-			child_stat->actual);
-		fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-	if(distributed && client_iozone)
-		tell_master_stats(THREAD_WRITE_TEST, chid, child_stat->throughput, 
-			child_stat->actual, 
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-			(long long)CHILD_STATE_HOLD);
-			
-	if (debug1) {
-		printf(" child/slot: %lld, wall-cpu: %8.3f %8.3fC" " -> %6.2f%%\n",
-			xx, walltime, cputime,
-			cpu_util(cputime, walltime));
-	}
-	child_stat->flag = CHILD_STATE_HOLD; /* Tell parent I'm done */
-	stopped=0;
-	/*******************************************************************/
-	/* End write performance test. *************************************/
-	/*******************************************************************/
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)numrecs64*reclen,MS_SYNC); /*Clean up before read starts running*/ 
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}else
-			fsync(fd);
-			
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-	if(Q_flag && (thread_wqfd !=0) )
-		fclose(thread_wqfd);
-	free(dummyfile[xx]);
-	if(w_traj_flag)
-		fclose(w_traj_fd);
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Write test finished: ",now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("write",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-#ifdef HAVE_PREAD
-/************************************************************************/
-/* Thread pwrite test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_pwrite_test(void *x)
-#else
-void *
-thread_pwrite_test( x)
-#endif
-{
-
-	struct child_stats *child_stat;
-	double starttime1 = 0;
-	double temp_time;
-	double walltime, cputime;
-	double compute_val = (double)0;
-	float delay = (float)0;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	long long flags,traj_size;
-	long long w_traj_bytes_completed;
-	long long w_traj_ops_completed;
-	FILE *w_traj_fd;
-	int fd;
-	long long recs_per_buffer;
-	long long stopped,i;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-	long long xx,xx2;
-	char *dummyfile [MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff;
-	char *maddr;
-	char *wmaddr,*free_addr;
-	char now_string[30];
-	int anwser,bind_cpu,wval;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-	off64_t filebytes64;
-	char tmpname[256];
-	FILE *thread_wqfd;
-	FILE *thread_Lwqfd;
-
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-
-#else
-	long long *gc=0;
-#endif
-
-	if(compute_flag)
-		delay=compute_time;
-	nbuff=maddr=wmaddr=free_addr=0;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	thread_wqfd=w_traj_fd=thread_Lwqfd=(FILE *)0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	if(w_traj_flag)
-	{
-		filebytes64 = w_traj_fsize;
-		numrecs64=w_traj_ops;
-	}
-	else
-	{
-		filebytes64 = numrecs64*reclen;
-	}
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	w_traj_bytes_completed=w_traj_ops_completed=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-	{
-		xx = (long long)((long)x);
-	}
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined( _HPUX_SOURCE )
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	if(debug1 )
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-	   sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-	   sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-	   sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-	   sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	/*****************/
-	/* Children only */
-	/*******************************************************************/
-	/* Initial pwrite throughput performance test. *********************/
-	/*******************************************************************/
-	if(!notruncate)
-	{
-		if((fd = I_CREAT(dummyfile[xx], 0640))<0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			perror(dummyfile[xx]);
-			exit(123);
-		}
-		close(fd);
-	}
-	if(oflag)
-		flags=O_RDWR|O_SYNC|O_CREAT;
-	else
-		flags=O_RDWR|O_CREAT;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-	if((fd = I_OPEN(dummyfile[xx], (int)flags,0640))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		printf("\nCan not open temp file: %s\n", 
-			filename);
-		perror("open");
-		exit(125);
-	}
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(filebytes64),1,PROT_READ|PROT_WRITE);
-	}
-	if(reclen < cache_size )
-	{
-		recs_per_buffer = cache_size/reclen ;
-		nbuff=&nbuff[(xx%recs_per_buffer)*reclen];
-	}
-	if(fetchon)			/* Prefetch into processor cache */
-		fetchit(nbuff,reclen);
-	if((verify && !no_copy_flag) || dedup || dedup_interior)
-		fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-
-	if(w_traj_flag)
-		w_traj_fd=open_w_traj();
-
-	child_stat = (struct child_stats *)&shmaddr[xx];	
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	child_stat->flag=CHILD_STATE_READY; /* Tell parent child is ready to go */
-	if(distributed && client_iozone)
-		tell_master_ready(chid);
-	if(distributed && client_iozone)
-	{
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d waiting for go from master\n",(int)xx);
-			fflush(newstdout);
-		}
-		wait_for_master_go(chid);
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d received go from master\n",(int)xx);
-			fflush(newstdout);
-		}
-	}
-	else
-	{
-		while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-			Poll((long long)1);
-	}
-
-	written_so_far=0;
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->actual = 0;
-	child_stat->throughput = 0;
-	stopped=0;
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)0) != 0)
-			printf("File lock for write failed. %d\n",errno);
-	if(Q_flag)
-	{
-		sprintf(tmpname,"Child_%d_pwol.dat",(int)xx);
-		thread_wqfd=fopen(tmpname,"a");
-		if(thread_wqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		fprintf(thread_wqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Pwrite test start: ",now_string);
-	}
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-	if(w_traj_flag)
-		rewind(w_traj_fd);
-	for(i=0; i<numrecs64; i++){
-		traj_offset= ( i * reclen );
-		if(w_traj_flag)
-		{
-			traj_offset=get_traj(w_traj_fd, (long long *)&traj_size,(float *)&delay, (long)1);
-			reclen=traj_size;
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)0,
-			  lock_offset, reclen);
-		}
-		if((verify && !no_copy_flag) || dedup || dedup_interior)
-			fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag && !stopped){
-			if(include_flush)
-			{
-				if(mmapflag)
-					msync(maddr,(size_t)filebytes64,MS_SYNC);
-				else
-					fsync(fd);
-			}
-			child_stat->throughput = 
-				(time_so_far() - starttime1)-time_res;
-			if(child_stat->throughput < (double).000001) 
-			{
-				child_stat->throughput = time_res;
-				if(rec_prob < reclen)
-					rec_prob = reclen;
-				res_prob=1;
-			}
-
-			if(OPS_flag){
-			   /*written_so_far=(written_so_far*1024)/reclen;*/
-			   written_so_far=w_traj_ops_completed;
-			}
-			child_stat->throughput = 
-			  (double)written_so_far/child_stat->throughput;
-			child_stat->actual = (double)written_so_far;
-			if(debug1)
-			{
-				printf("\n(%ld) Stopped by another\n", (long)xx);
-			}
-			stopped=1;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			thread_qtime_start=time_so_far();
-		}
-again:		
-		if(mmapflag)
-		{
-			wmaddr = &maddr[traj_offset];
-			fill_area((long long*)nbuff,(long long*)wmaddr,(long long)reclen);
-			/*printf("CHid: %lld  Writing offset %lld for length of %lld\n",chid,i*reclen,reclen);*/
-			if(!mmapnsflag)
-			{
-			  if(mmapasflag)
-			    msync(wmaddr,(size_t)reclen,MS_ASYNC);
-			  if(mmapssflag)
-			    msync(wmaddr,(size_t)reclen,MS_SYNC);
-			}
-		}
-		else
-		{
-		   if(async_flag)
-		   {
-			     if(no_copy_flag)
-			     {
-				free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-				nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-				if(verify || dedup || dedup_interior)
-					fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-			        async_write_no_copy(gc, (long long)fd, nbuff, reclen, (traj_offset), depth,free_addr);
-			     }
-			     else
-				async_write(gc, (long long)fd, nbuff, reclen, (traj_offset), depth);
-		   }
-		   else
-		   {
-		      wval=I_PWRITE(fd, nbuff, reclen, traj_offset);
-		      if(wval != reclen)
-		      {
-			if(*stop_flag && !stopped){
-				if(include_flush)
-				{
-					if(mmapflag)
-						msync(maddr,(size_t)filebytes64,MS_SYNC);
-					else
-						fsync(fd);
-				}
-				temp_time = time_so_far();
-				child_stat->throughput = 
-					(temp_time - starttime1)-time_res;
-				if(child_stat->throughput < (double).000001) 
-				{
-					child_stat->throughput= time_res;
-					if(rec_prob < reclen)
-						rec_prob = reclen;
-					res_prob=1;
-				}
-
-				if(OPS_flag){
-				   /*written_so_far=(written_so_far*1024)/reclen;*/
-				   written_so_far=w_traj_ops_completed;
-				}
-				child_stat->throughput = 
-				  (double)written_so_far/child_stat->throughput;
-				child_stat->actual = (double)written_so_far;
-				if(debug1)
-				{
-					printf("\n(%ld) Stopped by another\n", (long)xx);
-				}
-				stopped=1;
-				goto again;
-			}
-			/* Note: Writer must finish even though told
-			   to stop. Otherwise the readers will fail.
-			   The code will capture bytes transfered
-			   before told to stop but let the writer
-			   complete.
-			*/
-#ifdef NO_PRINT_LLD
-		    	printf("\nError pwriting block %ld, fd= %d\n", i,
-				 fd);
-#else
-		    	printf("\nError pwriting block %lld, fd= %d\n", i,
-				 fd);
-#endif
-			if(wval==-1)
-				perror("pwrite");
-			if (!no_unlink)
-			{
-			   if(check_filename(dummyfile[xx]))
-				unlink(dummyfile[xx]);
-			}
-			child_stat->flag = CHILD_STATE_HOLD;
-		    	exit(127);
-		      }
-		    }
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)0,
-			  lock_offset, reclen);
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-		if(Q_flag)
-		{
-			thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-			fprintf(thread_wqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-			fprintf(thread_wqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-		}
-		w_traj_ops_completed++;
-		w_traj_bytes_completed+=reclen;
-		written_so_far+=reclen/1024;
-		if(*stop_flag)
-		{
-			written_so_far-=reclen/1024;
-			w_traj_bytes_completed-=reclen;
-		}
-	}
-	
-
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)0))
-			printf("Write unlock failed. %d\n",errno);
-	
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	
-	if(include_flush)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);
-		else
-			fsync(fd);
-	}
-	if(include_close)
-	{
-		if(mmapflag)
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		close(fd);
-	}
-	if(!stopped){
-		temp_time = time_so_far();
-		child_stat->throughput = ((temp_time - starttime1)-time_res)
-			-compute_val;
-		if(child_stat->throughput < (double).000001) 
-		{
-			child_stat->throughput= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-
-		if(OPS_flag){
-		   /*written_so_far=(written_so_far*1024)/reclen;*/
-		   written_so_far=w_traj_ops_completed;
-		}
-		child_stat->throughput =
-			(double)written_so_far/child_stat->throughput;
-		child_stat->actual = (double)written_so_far;
-	}
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid, child_stat->throughput,
-			child_stat->actual);
-		fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-	if(distributed && client_iozone)
-		tell_master_stats(THREAD_PWRITE_TEST, chid, child_stat->throughput, 
-			child_stat->actual, 
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-			(long long)CHILD_STATE_HOLD);
-			
-	if (debug1) {
-		printf(" child/slot: %lld, wall-cpu: %8.3f %8.3fC" " -> %6.2f%%\n",
-			xx, walltime, cputime,
-			cpu_util(cputime, walltime));
-	}
-	child_stat->flag = CHILD_STATE_HOLD; /* Tell parent I'm done */
-	stopped=0;
-	/*******************************************************************/
-	/* End pwrite performance test. *************************************/
-	/*******************************************************************/
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)numrecs64*reclen,MS_SYNC); /*Clean up before read starts running*/ 
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}else
-			fsync(fd);
-			
-		close(fd);
-	}
-	if(Q_flag && (thread_wqfd !=0) )
-		fclose(thread_wqfd);
-	free(dummyfile[xx]);
-	if(w_traj_flag)
-		fclose(w_traj_fd);
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Pwrite test finished: ",now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Pwrite",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-#endif
-
-/************************************************************************/
-/* Thread re-write test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_rwrite_test(void *x)
-#else
-void *
-thread_rwrite_test(x)
-#endif
-{
-	/************************/
-	/* Children only here 	*/
-	/************************/
-	struct child_stats *child_stat;
-	long long xx,xx2;
-	double compute_val = (double)0;
-	double walltime, cputime;
-	float delay = (float)0;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	long long w_traj_bytes_completed;
-	long long w_traj_ops_completed;
-	int fd;
-	FILE *w_traj_fd;
-	long long flags = 0;
-	double starttime1 = 0;
-	double temp_time;
-	long long recs_per_buffer,traj_size;
-	long long i;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far=0;
-	char *dummyfile [MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff;
-	char *maddr,*free_addr;
-	char *wmaddr;
-	char now_string[30];
-	int anwser,bind_cpu,wval;
-	FILE *thread_rwqfd,*thread_Lwqfd;
-	char tmpname[256];
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-
-#else
-	long long *gc=0;
-#endif
-
-	if(compute_flag)
-		delay=compute_time;
-	wmaddr=nbuff=maddr=free_addr=0;
-	thread_rwqfd=w_traj_fd=thread_Lwqfd=(FILE *)0;
-	hist_time=traj_offset=thread_qtime_stop=thread_qtime_start=0;
-	walltime=cputime=0;
-	anwser=bind_cpu=0;
-	w_traj_bytes_completed=w_traj_ops_completed=0;
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-	if(w_traj_flag)
-	{
-		filebytes64 = w_traj_fsize;
-		numrecs64=w_traj_ops;
-	}
-	else
-	{
-		filebytes64 = numrecs64*reclen;
-	}
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx=(long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined( _HPUX_SOURCE )
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	flags = O_RDWR;
-	if(oflag)
-		flags|= O_SYNC;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags|= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_ALWAYS,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-       	}
-        else
-        {
-#endif
-	if((fd = I_OPEN(dummyfile[xx], (int)flags,0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-#ifdef NO_PRINT_LLD
-		printf("\nChild %ld\n",xx);
-#else
-		printf("\nChild %lld\n",xx);
-#endif
-		child_stat->flag = CHILD_STATE_HOLD;
-		perror(dummyfile[xx]);
-		exit(128);
-	}
-#if defined(Windows)
-	}
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(numrecs64*reclen),1,PROT_READ|PROT_WRITE);
-	}
-	if(fetchon)
-		fetchit(nbuff,reclen);
-	if(w_traj_flag)
-		w_traj_fd=open_w_traj();
-	if(Q_flag)
-	{
-		sprintf(tmpname,"Child_%d_rwol.dat",(int)xx);
-		thread_rwqfd=fopen(tmpname,"a");
-		if(thread_rwqfd==0)
-		{
-			printf("Unable to open %s\n",tmpname);
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			exit(40);
-		}
-		fprintf(thread_rwqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Rewrite test start: ",now_string);
-	}
-	child_stat->flag = CHILD_STATE_READY;
-	if(distributed && client_iozone)
-		tell_master_ready(chid);
-	if(distributed && client_iozone)
-	{
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d waiting for go from master\n",(int)xx);
-			fflush(newstdout);
-		}
-		wait_for_master_go(chid);
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d received go from master\n",(int)xx);
-			fflush(newstdout);
-		}
-	}
-	else
-	{
-		while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-			Poll((long long)1);
-	}
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)0) != 0)
-			printf("File lock for write failed. %d\n",errno);
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-	if(w_traj_flag)
-		rewind(w_traj_fd);
-	if((verify && !no_copy_flag) || dedup || dedup_interior)
-		fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-	for(i=0; i<numrecs64; i++){
-		traj_offset= i*reclen ;
-		if(w_traj_flag)
-		{
-			traj_offset=get_traj(w_traj_fd, (long long *)&traj_size,(float *)&delay,(long)1);
-			reclen=traj_size;
-#if defined(Windows)
-			if(unbuffered)
-			  SetFilePointer(hand,(LONG)traj_offset,0,FILE_BEGIN);
-			else
-#endif
-			I_LSEEK(fd,traj_offset,SEEK_SET);
-		}
-		if(Q_flag)
-		{
-#if defined(Windows)
-			if(unbuffered)
-			  traj_offset=SetFilePointer(hand,(LONG)0,0,FILE_CURRENT);
-			else
-#endif
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)0,
-			  lock_offset, reclen);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag && !mmapflag)
-		{
-			if(debug1)
-				printf("\nStop_flag 1\n");
-			break;
-		}
-		if((verify && !no_copy_flag) || dedup || dedup_interior)
-		{
-			fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			thread_qtime_start=time_so_far();
-		}
-		if(mmapflag)
-		{
-			wmaddr = &maddr[i*reclen];
-			if(cdebug)
-			{
-fprintf(newstdout,"Chid: %lld Rewriting offset %lld for length of %lld\n",chid, i*reclen,reclen);
-			  fflush(newstdout);
-			}
-			fill_area((long long*)nbuff,(long long*)wmaddr,(long long)reclen);
-			if(!mmapnsflag)
-			{
-			  if(mmapasflag)
-			    msync(wmaddr,(size_t)reclen,MS_ASYNC);
-			  if(mmapssflag)
-			    msync(wmaddr,(size_t)reclen,MS_SYNC);
-			}
-		}
-		else
-		{
-		   	if(async_flag)
-		   	{
-			     if(no_copy_flag)
-			     {
-				free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-				nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-				if(verify || dedup || dedup_interior)
-					fill_buffer(nbuff,reclen,(long long)pattern,sverify,i);
-			        async_write_no_copy(gc, (long long)fd, nbuff, reclen, (i*reclen), depth,free_addr);
-			     }
-			     else
-				async_write(gc, (long long)fd, nbuff, reclen, (i*reclen), depth);
-		   	}
-			else
-			{
-#if defined(Windows)
-			   if(unbuffered)
-			   {
-				WriteFile(hand,nbuff,reclen,(LPDWORD)&wval,0);
-			   }
-			   else
-#endif
-			   wval=write(fd, nbuff, (size_t) reclen);
-			   if(wval != reclen)
-			   {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\nStop_flag 2\n");
-					break;
-				}
-#ifdef NO_PRINT_LLD
-		    		printf("\nError writing block %ld, fd= %d\n", i,
-					 fd);
-#else
-		    		printf("\nError writing block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				if(wval==-1)
-					perror("write");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				signal_handler();
-			   }
-			}
-		}
-		re_written_so_far+=reclen/1024;
-	   	w_traj_ops_completed++;
-		w_traj_bytes_completed+=reclen;
-		if(*stop_flag)
-		{
-			re_written_so_far-=reclen/1024;
-			w_traj_bytes_completed-=reclen;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-		if(Q_flag)
-		{
-			thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-			fprintf(thread_rwqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-			fprintf(thread_rwqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)0,
-			  lock_offset, reclen);
-		}
-	}
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)0))
-			printf("Write unlock failed. %d\n",errno);
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-	temp_time=time_so_far();
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = ((temp_time - starttime1)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-
-	if(OPS_flag){
-	   /*re_written_so_far=(re_written_so_far*1024)/reclen;*/
-	   re_written_so_far=w_traj_ops_completed;
-	}
-	child_stat->throughput = 
-		(double)re_written_so_far/child_stat->throughput;
-	child_stat->actual = (double)re_written_so_far;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid, child_stat->throughput,
-			child_stat->actual);
-	  	fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-	if(distributed && client_iozone)
-		tell_master_stats(THREAD_REWRITE_TEST, chid, child_stat->throughput, 
-			child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-			(long long)CHILD_STATE_HOLD);
-	child_stat->flag = CHILD_STATE_HOLD;	/* Tell parent I'm done */
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-		else
-			fsync(fd);
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-	free(dummyfile[xx]);
-
-	if(Q_flag && (thread_rwqfd !=0) )
-		fclose(thread_rwqfd);
-
-	if(w_traj_flag)
-		fclose(w_traj_fd);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild Stopping  %ld\n",xx);
-#else
-		printf("\nChild Stopping  %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Rewrite test finished: ",now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Rewrite",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-/************************************************************************/
-/* Thread read test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_read_test(void *x)
-#else
-void *
-thread_read_test(x)
-#endif
-{
-	long long xx,xx2;
-	struct child_stats *child_stat;
-	double walltime, cputime;
-	long long r_traj_bytes_completed;
-	long long r_traj_ops_completed;
-	int fd;
-	FILE *r_traj_fd,*thread_rqfd;
-	FILE *thread_Lwqfd;
-	long long flags = 0;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	double starttime1 = 0;
-	float delay = 0;
-	double temp_time;
-	double thread_qtime_start,thread_qtime_stop;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	double compute_val = (double)0;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-	long long recs_per_buffer,traj_size;
-	off64_t i;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff=0;
-	char *maddr=0;
-	char *wmaddr=0;
-	char tmpname[256];
-	volatile char *buffer1;
-	char now_string[30];
-	int anwser,bind_cpu;
-	long wval;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-
-	if(compute_flag)
-		delay=compute_time;
-	thread_rqfd=thread_Lwqfd=r_traj_fd=(FILE *)0;
-	hist_time=traj_offset=thread_qtime_stop=thread_qtime_start=0;
-	walltime=cputime=0;
-	anwser=bind_cpu=0;
-	r_traj_bytes_completed=r_traj_ops_completed=0;
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-	if(r_traj_flag)
-	{
-		filebytes64 = r_traj_fsize;
-		numrecs64=r_traj_ops;
-	}
-	else
-	{
-		filebytes64 = numrecs64*reclen;
-	}
-	
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	if(oflag)
-		flags=O_RDONLY|O_SYNC;
-	else
-		flags=O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-		SetFilePointer(hand,(LONG)0,0,FILE_BEGIN);
-       	}
-	else
-	{
-#endif
-	if((fd = I_OPEN(dummyfile[xx], (int)flags,0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		perror(dummyfile[xx]);
-		exit(130);
-	}
-#if defined(Windows)
-	}
-#endif
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(numrecs64*reclen),0,PROT_READ);
-	}
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	/*****************/
-	/* Children only */
-	/*****************/
-	if(Q_flag)
-	{
-		sprintf(tmpname,"Child_%d_rol.dat",(int)xx);
-		thread_rqfd=fopen(tmpname,"a");
-		if(thread_rqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		fprintf(thread_rqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Read test start: ",now_string);
-	}
-
-	if(r_traj_flag)
-		r_traj_fd=open_r_traj();
-	if(fetchon)
-		fetchit(nbuff,reclen);
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->flag = CHILD_STATE_READY;
-	if(distributed && client_iozone)
-        {
-		tell_master_ready(chid);
-                wait_for_master_go(chid);
-        }
-        else
-        {
-		/* Wait for signal from parent */
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   
-                        Poll((long long)1);
-        }
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)1) != 0)
-			printf("File lock for read failed. %d\n",errno);
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-
-	if(r_traj_flag)
-		rewind(r_traj_fd);
-	for(i=0; i<numrecs64; i++){
-		traj_offset= i*reclen;
-		if(disrupt_flag && ((i%DISRUPT)==0))
-		{
-#if defined(Windows)
-	
-			if(unbuffered)
-			   disruptw(hand);
-			else
-			   disrupt(fd);
-#else
-			disrupt(fd);
-#endif
-		}
-		if(r_traj_flag)
-		{
-			traj_offset=get_traj(r_traj_fd, (long long *)&traj_size,(float *)&delay,(long)0);
-			reclen=traj_size;
-#if defined(Windows)
-			if(unbuffered)
-			  SetFilePointer(hand,(LONG)traj_offset,0,FILE_BEGIN);
-			else
-#endif
-			I_LSEEK(fd,traj_offset,SEEK_SET);
-		}
-		if(Q_flag)
-		{
-#if defined(Windows)
-			if(unbuffered)
-			  traj_offset=SetFilePointer(hand,0,0,FILE_CURRENT);
-			else
-#endif
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)1,
-			  lock_offset, reclen);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag)
-		{
-			if(debug1)
-				printf("\n(%ld) Stopped by another 2\n", (long)xx);
-			break;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-                {
-                        thread_qtime_start=time_so_far();
-                }
-		if(mmapflag)
-		{
-			wmaddr = &maddr[i*reclen];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			  if(async_flag)
-			  {
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (i*reclen), reclen,
-			    	1LL,(numrecs64*reclen),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (i*reclen), reclen,
-			    	1LL,(numrecs64*reclen),depth);
-			  }
-			  else
-			  {
-#if defined(Windows)
-			      if(unbuffered)
-			      {
-				ReadFile(hand,nbuff,reclen,(LPDWORD)&wval,0);
-			      }
-			      else
-#endif
-			      wval=read((int)fd, (void*)nbuff, (size_t) reclen);
-			      if(wval != reclen)
-			      {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\n(%ld) Stopped by another 2\n", (long)xx);
-					break;
-				}
-#ifdef NO_PRINT_LLD
-		    		printf("\nError reading block %ld, fd= %d\n", i,
-					 fd);
-#else
-		    		printf("\nError reading block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				perror("read");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-		    		exit(132);
-			      }
-			  }
-		}
-		if(verify){
-		   if(async_flag && no_copy_flag)
-		   {
-			   if(verify_buffer(buffer1,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(133);
-			   }
-		   }
-		   else
-		   {
-			   if(verify_buffer(nbuff,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(134);
-			   }
-		   }
-		}
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-		read_so_far+=reclen/1024;
-		r_traj_bytes_completed+=reclen;
-		r_traj_ops_completed++;
-		if(*stop_flag)
-		{
-			read_so_far-=reclen/1024;
-			r_traj_bytes_completed-=reclen;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-                if(Q_flag)
-                {
-                        thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-                        fprintf(thread_rqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-                        fprintf(thread_rqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-                }
-
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-	}
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)1))
-			printf("Read unlock failed. %d\n",errno);
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{	
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-#if defined(Windows)
-		if(unbuffered)
-		  CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-	temp_time = time_so_far();
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = ((temp_time - starttime1)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-
-	if(OPS_flag){
-	   /*read_so_far=(read_so_far*1024)/reclen;*/
-	   read_so_far=r_traj_ops_completed;
-	}
-	child_stat->throughput = read_so_far/child_stat->throughput;
-	child_stat->actual = read_so_far;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-        if(cdebug)
-	{
-                fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid,child_stat->throughput,
-                        child_stat->actual);
-		fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_READ_TEST, chid, child_stat->throughput,
-                        child_stat->actual, 
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-	child_stat->flag = CHILD_STATE_HOLD; 	/* Tell parent I'm done */
-	/*fsync(fd);*/
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}else
-			fsync(fd);
-#if defined(Windows)
-		if(unbuffered)
-		  CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-        if(Q_flag && (thread_rqfd !=0) )
-                fclose(thread_rqfd);
-	free(dummyfile[xx]);
-	if(r_traj_flag)
-		fclose(r_traj_fd);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Read test finished: ",now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Read",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-#ifdef HAVE_PREAD
-/************************************************************************/
-/* Thread pread test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_pread_test(void *x)
-#else
-void *
-thread_pread_test(x)
-#endif
-{
-	long long xx,xx2;
-	struct child_stats *child_stat;
-	double walltime, cputime;
-	long long r_traj_bytes_completed;
-	long long r_traj_ops_completed;
-	int fd;
-	FILE *r_traj_fd,*thread_rqfd;
-	FILE *thread_Lwqfd;
-	long long flags = 0;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	double starttime1 = 0;
-	float delay = 0;
-	double temp_time;
-	double thread_qtime_start,thread_qtime_stop;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	double compute_val = (double)0;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-	long long recs_per_buffer,traj_size;
-	off64_t i;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff=0;
-	char *maddr=0;
-	char *wmaddr=0;
-	char tmpname[256];
-	char now_string[30];
-	volatile char *buffer1;
-	int anwser,bind_cpu;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-
-	if(compute_flag)
-		delay=compute_time;
-	thread_rqfd=thread_Lwqfd=r_traj_fd=(FILE *)0;
-	hist_time=traj_offset=thread_qtime_stop=thread_qtime_start=0;
-	walltime=cputime=0;
-	anwser=bind_cpu=0;
-	r_traj_bytes_completed=r_traj_ops_completed=0;
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-	if(r_traj_flag)
-	{
-		filebytes64 = r_traj_fsize;
-		numrecs64=r_traj_ops;
-	}
-	else
-	{
-		filebytes64 = numrecs64*reclen;
-	}
-	
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#ifdef _HPUX_SOURCE
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	if(oflag)
-		flags=O_RDONLY|O_SYNC;
-	else
-		flags=O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-	if((fd = I_OPEN(dummyfile[xx], (int)flags,0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		perror(dummyfile[xx]);
-		exit(130);
-	}
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(numrecs64*reclen),0,PROT_READ);
-	}
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	/*****************/
-	/* Children only */
-	/*****************/
-	if(Q_flag)
-	{
-		sprintf(tmpname,"Child_%d_prol.dat",(int)xx);
-		thread_rqfd=fopen(tmpname,"a");
-		if(thread_rqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		fprintf(thread_rqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Pread test start: ",now_string);
-	}
-
-	if(r_traj_flag)
-		r_traj_fd=open_r_traj();
-	if(fetchon)
-		fetchit(nbuff,reclen);
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->flag = CHILD_STATE_READY;
-	if(distributed && client_iozone)
-        {
-		tell_master_ready(chid);
-                wait_for_master_go(chid);
-        }
-        else
-        {
-		/* Wait for signal from parent */
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   
-                        Poll((long long)1);
-        }
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)1) != 0)
-			printf("File lock for read failed. %d\n",errno);
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-
-	if(r_traj_flag)
-		rewind(r_traj_fd);
-	for(i=0; i<numrecs64; i++){
-		traj_offset = i*reclen;
-		if(disrupt_flag && ((i%DISRUPT)==0))
-		{
-			disrupt(fd);
-		}
-		if(r_traj_flag)
-		{
-			traj_offset=get_traj(r_traj_fd, (long long *)&traj_size,(float *)&delay,(long)0);
-			reclen=traj_size;
-			I_LSEEK(fd,traj_offset,SEEK_SET);
-		}
-		if(Q_flag)
-		{
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)0,
-			  lock_offset, reclen);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag)
-		{
-			if(debug1)
-				printf("\n(%ld) Stopped by another 2\n", (long)xx);
-			break;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-                {
-                        thread_qtime_start=time_so_far();
-                }
-		if(mmapflag)
-		{
-			wmaddr = &maddr[traj_offset];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			  if(async_flag)
-			  {
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (i*reclen), reclen,
-			    	1LL,(numrecs64*reclen),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (traj_offset), reclen,
-			    	1LL,(numrecs64*reclen),depth);
-			  }
-			  else
-			  {
-				if(I_PREAD((int)fd, (void*)nbuff, (size_t) reclen,(traj_offset) ) != reclen)
-			      {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\n(%ld) Stopped by another 2\n", (long)xx);
-					break;
-				}
-#ifdef NO_PRINT_LLD
-		    		printf("\nError preading block %ld, fd= %d\n", i,
-					 fd);
-#else
-		    		printf("\nError preading block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				perror("pread");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-		    		exit(132);
-			      }
-			  }
-		}
-		if(verify){
-		   if(async_flag && no_copy_flag)
-		   {
-			   if(verify_buffer(buffer1,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(133);
-			   }
-		   }
-		   else
-		   {
-			   if(verify_buffer(nbuff,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(134);
-			   }
-		   }
-		}
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-		read_so_far+=reclen/1024;
-		r_traj_bytes_completed+=reclen;
-		r_traj_ops_completed++;
-		if(*stop_flag)
-		{
-			read_so_far-=reclen/1024;
-			r_traj_bytes_completed-=reclen;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-                if(Q_flag)
-                {
-                        thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-                        fprintf(thread_rqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-                        fprintf(thread_rqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-                }
-
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-	}
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)1))
-			printf("Read unlock failed. %d\n",errno);
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{	
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-		close(fd);
-	}
-	temp_time = time_so_far();
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = ((temp_time - starttime1)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-
-	if(OPS_flag){
-	   /*read_so_far=(read_so_far*1024)/reclen;*/
-	   read_so_far=r_traj_ops_completed;
-	}
-	child_stat->throughput = read_so_far/child_stat->throughput;
-	child_stat->actual = read_so_far;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-        if(cdebug)
-	{
-                fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid,child_stat->throughput,
-                        child_stat->actual);
-		fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_READ_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-	child_stat->flag = CHILD_STATE_HOLD; 	/* Tell parent I'm done */
-	/*fsync(fd);*/
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}else
-			fsync(fd);
-		close(fd);
-	}
-        if(Q_flag && (thread_rqfd !=0) )
-                fclose(thread_rqfd);
-	free(dummyfile[xx]);
-	if(r_traj_flag)
-		fclose(r_traj_fd);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Pread test finished: ",
-			now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Pread",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-#endif
-
-/************************************************************************/
-/* Thread re-read test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_rread_test(void *x)
-#else
-void *
-thread_rread_test(x)
-#endif
-{
-	long long xx,xx2;
-	char *nbuff;
-	struct child_stats *child_stat;
-	int fd;
-	FILE *r_traj_fd,*thread_rrqfd;
-	FILE *thread_Lwqfd;
-	long long r_traj_bytes_completed;
-	double walltime, cputime;
-	long long r_traj_ops_completed;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	long long flags = 0;
-	double starttime1 = 0;
-	float delay = 0;
-	double temp_time;
-	double thread_qtime_start,thread_qtime_stop;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	double compute_val = (double)0;
-	long long recs_per_buffer,traj_size;
-	off64_t i;
-	off64_t written_so_far, read_so_far, re_written_so_far,
-		re_read_so_far;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	char *maddr=0;
-	char *wmaddr=0;
-	char now_string[30];
-	volatile char *buffer1;
-	int anwser,bind_cpu;
-	long wval;
-	char tmpname[256];
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-	/*****************/
-	/* Children only */
-	/*****************/
-	if(compute_flag)
-		delay=compute_time;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	thread_rrqfd=r_traj_fd=thread_Lwqfd=(FILE *)0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	r_traj_bytes_completed=r_traj_ops_completed=0;
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(r_traj_flag)
-	{
-		filebytes64 = r_traj_fsize;
-		numrecs64=r_traj_ops;
-	}
-	else
-	{
-		filebytes64 = numrecs64*reclen;
-	}
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	if(oflag)
-		flags=O_RDONLY|O_SYNC;
-	else
-		flags=O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-		SetFilePointer(hand,(LONG)0,0,FILE_BEGIN);
-       	}
-	else
-	{
-#endif
-	if((fd = I_OPEN(dummyfile[xx], ((int)flags),0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		perror(dummyfile[xx]);
-		exit(135);
-	}
-#if defined(Windows)
-	}
-#endif
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(filebytes64),0,PROT_READ);
-	}
-	if(r_traj_flag)
-		r_traj_fd=open_r_traj();
-	if(fetchon)
-		fetchit(nbuff,reclen);
-        if(Q_flag)
-        {
-                sprintf(tmpname,"Child_%d_rrol.dat",(int)xx);
-                thread_rrqfd=fopen(tmpname,"a");
-                if(thread_rrqfd==0)
-                {
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-		fprintf(thread_rrqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-        }
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Reread test start: ",now_string);
-	}
-
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	child_stat->flag = CHILD_STATE_READY;
-
-	if(distributed && client_iozone)
-	{
-		tell_master_ready(chid);
-		wait_for_master_go(chid);
-	}
-	else
-	
-		/* Wait for signal from parent */
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   
-                        Poll((long long)1);
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)1) != 0)
-			printf("File lock for read failed. %d\n",errno);
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-
-	if(r_traj_flag)
-		rewind(r_traj_fd);
-	for(i=0; i<numrecs64; i++){
-		traj_offset=i*reclen;
-		if(disrupt_flag && ((i%DISRUPT)==0))
-		{
-#if defined(Windows)
-	
-			if(unbuffered)
-			   disruptw(hand);
-			else
-			   disrupt(fd);
-#else
-			disrupt(fd);
-#endif
-		}
-		if(r_traj_flag)
-		{
-			traj_offset=get_traj(r_traj_fd, (long long *)&traj_size,(float *)&delay,(long)0);
-			reclen=traj_size;
-#if defined(Windows)
-			if(unbuffered)
-			  SetFilePointer(hand,(LONG)traj_offset,0,FILE_BEGIN);
-			else
-#endif
-			I_LSEEK(fd,traj_offset,SEEK_SET);
-		}
-		if(Q_flag)
-		{
-#if defined(Windows)
-			if(unbuffered)
-			  traj_offset=SetFilePointer(hand,(LONG)0,0,FILE_CURRENT);
-			else
-#endif
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)1,
-			  lock_offset, reclen);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag)
-		{
-			if(debug1)
-				printf("\n(%ld) Stopped by another 3\n", (long)xx);
-			break;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-                if(Q_flag || hist_summary || op_rate_flag)
-                {
-                        thread_qtime_start=time_so_far();
-                }
-		if(mmapflag)
-		{
-			wmaddr = &maddr[i*reclen];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			  if(async_flag)
-			  {
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (i*reclen),reclen,
-			    	1LL,(filebytes64),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (i*reclen),reclen,
-			    	1LL,(filebytes64),depth);
-			  }
-			  else
-			  {
-#if defined(Windows)
-			      if(unbuffered)
-			      {
-				ReadFile(hand,nbuff,reclen,(LPDWORD)&wval,0);
-			      }
-			      else
-#endif
-			      wval=read((int)fd, (void*)nbuff, (size_t) reclen);
-			      if(wval != reclen)
-			      {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\n(%ld) Stopped by another 4\n", (long)xx);
-					break;
-				}
-#ifdef NO_PRINT_LLD
-		    		printf("\nError writing block %ld, fd= %d\n", i,
-					 fd);
-#else
-		    		printf("\nError writing block %lld, fd= %d\n", i,
-					 fd);
-#endif
-				perror("read");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-		    		exit(137);
-			      }
-			   }
-		}
-		if(verify){
-		   if(async_flag && no_copy_flag)
-		   {
-			if(verify_buffer(buffer1,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(138);
-			}
-		   }
-		   else
-		   {
-			if(verify_buffer(nbuff,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(139);
-			}
-		   }
-		}
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-		re_read_so_far+=reclen/1024;
-		r_traj_bytes_completed+=reclen;
-		r_traj_ops_completed++;
-		if(*stop_flag)
-		{
-			re_read_so_far-=reclen/1024;
-			r_traj_bytes_completed-=reclen;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-                if(Q_flag)
-                {
-                        thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-                        fprintf(thread_rrqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-                        fprintf(thread_rrqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-                }
-
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-	}
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)1))
-			printf("Read unlock failed. %d\n",errno);
-	/*fsync(fd);*/
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{	
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-	temp_time = time_so_far();
-	child_stat->throughput = ((temp_time - starttime1)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-
-	if(OPS_flag){
-	   /*re_read_so_far=(re_read_so_far*1024)/reclen;*/
-	   re_read_so_far=r_traj_ops_completed;
-	}
-	child_stat->throughput = re_read_so_far/child_stat->throughput;
-	child_stat->actual = re_read_so_far;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-	if(distributed && client_iozone)
-	{
-		tell_master_stats(THREAD_REREAD_TEST,chid, child_stat->throughput,
-			child_stat->actual, 
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-			(long long)CHILD_STATE_HOLD);
-	}
-	child_stat->flag = CHILD_STATE_HOLD;	/* Tell parent I'm done */
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(filebytes64),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		}else
-			fsync(fd);
-#if defined(Windows)
-		if(unbuffered)
-			CloseHandle(hand);
-		else
-#endif
-		close(fd);
-	}
-        if(Q_flag && (thread_rrqfd !=0) )
-                fclose(thread_rrqfd);
-	free(dummyfile[xx]);
-	if(r_traj_flag)
-		fclose(r_traj_fd);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Reread test finished: ",now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Reread",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-/************************************************************************/
-/* Thread_reverse_perf_test				        	*/
-/* Reverse read test							*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_reverse_read_test(void *x)
-#else
-void *
-thread_reverse_read_test(x)
-#endif
-{
-	long long xx,xx2;
-	char *nbuff;
-	struct child_stats *child_stat;
-	int fd;
-	long long flags = 0;
-	double walltime, cputime;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	double starttime2 = 0;
-	float delay = 0;
-	double temp_time;
-	double compute_val = (double)0;
-	long long recs_per_buffer;
-	off64_t i,t_offset;
-	off64_t lock_offset=0;
-	off64_t current_position=0;
-	off64_t written_so_far, reverse_read, re_read_so_far,read_so_far;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	char *maddr=0;
-	char *wmaddr=0;
-	char now_string[30];
-	volatile char *buffer1;
-	int anwser,bind_cpu;
-	off64_t traj_offset;
-	char tmpname[256];
-	FILE *thread_revqfd=0;
-	FILE *thread_Lwqfd=0;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-	/*****************/
-	/* Children only */
-	/*****************/
-	if(compute_flag)
-		delay=compute_time;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	written_so_far=read_so_far=reverse_read=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	if(oflag)
-		flags=O_RDONLY|O_SYNC;
-	else
-		flags=O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-       	}
-#endif
-
-	if((fd = I_OPEN(dummyfile[xx], ((int)flags),0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		perror(dummyfile[xx]);
-		exit(140);
-	}
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(numrecs64*reclen),0,PROT_READ);
-	}
-	if(fetchon)
-		fetchit(nbuff,reclen);
-        if(Q_flag)
-        {
-                sprintf(tmpname,"Child_%d_revol.dat",(int)xx);
-                thread_revqfd=fopen(tmpname,"a");
-                if(thread_revqfd==0)
-                {
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-		fprintf(thread_revqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-        }
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Reverse read start: ",now_string);
-	}
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	child_stat->flag = CHILD_STATE_READY;
-        if(distributed && client_iozone)
-        {
-                tell_master_ready(chid);
-                wait_for_master_go(chid);
-        }
-        else
-        {
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-                        Poll((long long)1);
-        }
-	starttime2 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime2;
-		cputime = cputime_so_far();
-	}
-
-	t_offset = (off64_t)reclen;
-	if (!(h_flag || k_flag || mmapflag))
-	{
-	  if(check_filename(dummyfile[xx]))
-	  {
-	  	if((I_LSEEK( fd, -t_offset, SEEK_END ))<0)
-	  	{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			perror("lseek");
-			exit(142);
-	  	}
-	  }
-	  else
-	  {
-		if(I_LSEEK( fd, (numrecs64*reclen)-t_offset, SEEK_SET )<0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			perror("lseek");
-			exit(77);
-		}
-	  }
-	}
-	current_position=(reclen*numrecs64)-reclen;
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)1)!=0)
-			printf("File lock for read failed. %d\n",errno);
-	for(i=0; i<numrecs64; i++) 
-	{
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)1,
-			  lock_offset, reclen);
-		}
-		if(disrupt_flag && ((i%DISRUPT)==0))
-		{
-			disrupt(fd);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(Q_flag)
-		{
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(*stop_flag)
-		{
-			if(debug1)
-				printf("\n(%ld) Stopped by another 3\n", (long)xx);
-			break;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-                if(Q_flag || hist_summary || op_rate_flag)
-                {
-                        thread_qtime_start=time_so_far();
-                }
-		if(mmapflag)
-		{
-			wmaddr = &maddr[current_position];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			  if(async_flag)
-			  {
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (current_position),
-			      	reclen, -1LL,(numrecs64*reclen),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (current_position),reclen,
-			    	-1LL,(numrecs64*reclen),depth);
-			  }
-			  else
-			  {
-			      if(read((int)fd, (void*)nbuff, (size_t) reclen) != reclen)
-			      {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\n(%ld) Stopped by another 4\n", (long)xx);
-					break;
-				}
-#ifdef NO_PRINT_LLD
-				printf("\nError reading block %ld\n", i); 
-#else
-				printf("\nError reading block %lld\n", i); 
-#endif
-				perror("read");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(144);
-			      }
-			  }
-		}
-		if(verify){
-		   if(async_flag && no_copy_flag)
-		   {
-			if(verify_buffer(buffer1,reclen,(off64_t)(current_position/reclen),reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(145);
-			}
-		   }
-		   else
-		   {
-			if(verify_buffer(nbuff,reclen,(off64_t)(current_position/reclen),reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(146);
-			}
-		   }
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-		current_position+=reclen;
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-		t_offset = (off64_t)reclen*2;
-		if (!(h_flag || k_flag || mmapflag))
-		{
-		  I_LSEEK( fd, -t_offset, SEEK_CUR );
-		}
-		current_position-=(2 *reclen);
-		reverse_read +=reclen/1024;
-		if(*stop_flag)
-		{
-			reverse_read -=reclen/1024;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-                if(Q_flag)
-                {
-                        thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-                        fprintf(thread_revqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-                        fprintf(thread_revqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-                }
-	}
-	if(file_lock)
-		if(mylockf((int) fd,(int)0, (int)1))
-			printf("Read unlock failed %d\n",errno);
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(numrecs64*reclen),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{	
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}
-		close(fd);
-	}
-	temp_time = time_so_far();
-	child_stat->throughput = ((temp_time - starttime2)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-	if(OPS_flag){
-	   reverse_read=(reverse_read*1024)/reclen;
-	}
-	child_stat->throughput = reverse_read/child_stat->throughput;
-	child_stat->actual = reverse_read;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_REVERSE_READ_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-			(long long)CHILD_STATE_HOLD);
-	child_stat->flag = CHILD_STATE_HOLD;	/* Tell parent I'm done */
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(numrecs64*reclen),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}else
-			fsync(fd);
-		close(fd);
-	}
-	free(dummyfile[xx]);
-        if(Q_flag && (thread_revqfd !=0) )
-                fclose(thread_revqfd);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Reverse read finished: ",
-			now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Read Backwards",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-/************************************************************************/
-/* Thread_stride_read_test				        	*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_stride_read_test(void *x)
-#else
-void *
-thread_stride_read_test(x)
-#endif
-{
-	long long xx,xx2;
-	char *nbuff=0;
-	struct child_stats *child_stat;
-	double walltime, cputime;
-	int fd;
-	long long flags = 0;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	double starttime2 = 0;
-	float delay = 0;
-	double compute_val = (double)0;
-	double temp_time;
-	long long recs_per_buffer;
-	off64_t i;
-	off64_t lock_offset=0;
-	off64_t savepos64=0;
-	off64_t written_so_far, stride_read,re_read_so_far,read_so_far;
-	off64_t stripewrap = 0;
-	off64_t current_position = 0;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	char *maddr=0;
-	char *wmaddr=0;
-	volatile char *buffer1;
-	int anwser,bind_cpu;
-	off64_t traj_offset;
-	char tmpname[256];
-	char now_string[30];
-	FILE *thread_strqfd=0;
-	FILE *thread_Lwqfd=0;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-	/*****************/
-	/* Children only */
-	/*****************/
-	if(compute_flag)
-		delay=compute_time;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	written_so_far=read_so_far=stride_read=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	if(oflag)
-		flags=O_RDONLY|O_SYNC;
-	else
-		flags=O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-       	}
-#endif
-	if((fd = I_OPEN(dummyfile[xx], ((int)flags),0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		perror(dummyfile[xx]);
-		exit(147);
-	}
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(numrecs64*reclen),0,PROT_READ);
-	}
-	if(fetchon)
-		fetchit(nbuff,reclen);
-        if(Q_flag)
-        {
-                sprintf(tmpname,"Child_%d_strol.dat",(int)xx);
-                thread_strqfd=fopen(tmpname,"a");
-                if(thread_strqfd==0)
-                {
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-		fprintf(thread_strqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-        }
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Stride test start: ",
-			now_string);
-	}
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	child_stat->flag = CHILD_STATE_READY;
-        if(distributed && client_iozone)
-        {
-                tell_master_ready(chid);
-                wait_for_master_go(chid);
-        }
-        else
-
-		/* wait for parent to say go */
-                while(child_stat->flag!=CHILD_STATE_BEGIN)      
-                        Poll((long long)1);
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1,  (int)1)!=0)
-			printf("File lock for write failed. %d\n",errno);
-	starttime2 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime2;
-		cputime = cputime_so_far();
-	}
-	for(i=0; i<numrecs64; i++){
-		if(disrupt_flag && ((i%DISRUPT)==0))
-		{
-			disrupt(fd);
-		}
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(Q_flag)
-		{
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)1,
-			  lock_offset, reclen);
-		}
-		if(*stop_flag)
-		{
-			if(debug1)
-				printf("\n(%ld) Stopped by another 3\n", (long)xx);
-			break;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-                if(Q_flag || hist_summary || op_rate_flag)
-                {
-                        thread_qtime_start=time_so_far();
-                }
-		if(verify)
-			savepos64=current_position/(off64_t)reclen;
-		if(mmapflag)
-		{
-			wmaddr = &maddr[current_position];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			if(async_flag)
-			{
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (current_position),
-			      	reclen, stride,(numrecs64*reclen),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (current_position),reclen,
-			    	stride,(numrecs64*reclen),depth);
-			}
-			else
-			{
-			  if(read((int)fd, (void*)nbuff, (size_t) reclen) != reclen)
-			  {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\n(%ld) Stopped by another 4\n", (long)xx);
-					break;
-				}
-#ifdef NO_PRINT_LLD
-		    		printf("\nError reading block %ld, fd= %d\n", i, fd);
-#else
-		    		printf("\nError reading block %lld, fd= %d\n", i, fd);
-#endif
-				perror("read");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-		    		exit(149);
-			  }
-			}
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-		current_position+=reclen;
-		if(verify){
-		   if(async_flag && no_copy_flag)
-		   {
-			if(verify_buffer(buffer1,reclen,(off64_t)savepos64,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(150);
-			}
-		   }
-		   else
-		   {
-			if(verify_buffer(nbuff,reclen,(off64_t)savepos64,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(151);
-			}
-		   }
-		}
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-		if(current_position + (stride * reclen) >= (numrecs64 * reclen)-reclen) 
-		{
-			current_position=0;
-
-			stripewrap++;
-			  
-			if(numrecs64 <= stride)
-			{
-				current_position=0;
-			}
-			else
-			{
-				current_position = (off64_t)((stripewrap)%numrecs64)*reclen;
-			}
-			if (!(h_flag || k_flag || mmapflag))
-			{
-			  if(I_LSEEK(fd,current_position,SEEK_SET)<0)
-			  {
-				client_error=errno;
-				if(distributed && client_iozone)
-					send_stop();
-				perror("lseek");
-				exit(152);
-			  }
-			}
-		}
-		else			
-		{
-			current_position+=(stride*reclen)-reclen;
-			if (!(h_flag || k_flag || mmapflag))
-			{
-			  if(I_LSEEK(fd,current_position,SEEK_SET)<0)
-			  {
-				client_error=errno;
-				if(distributed && client_iozone)
-					send_stop();
-				perror("lseek");
-				exit(154);
-			  };
-			}
-		}
-		stride_read +=reclen/1024;
-		if(*stop_flag)
-		{
-			stride_read -=reclen/1024;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-                if(Q_flag)
-                {
-                        thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-                        fprintf(thread_strqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-                        fprintf(thread_strqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-                }
-	}
-	if(file_lock)
-		if(mylockf((int) fd,(int)0,(int)1))
-			printf("Read unlock failed %d\n",errno);
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(numrecs64*reclen),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{	
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}
-		close(fd);
-	}
-	temp_time = time_so_far();
-	child_stat->throughput = ((temp_time - starttime2)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-	if(OPS_flag){
-	   stride_read=(stride_read*1024)/reclen;
-	}
-	child_stat->throughput = stride_read/child_stat->throughput;
-	child_stat->actual = stride_read;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-        if(distributed && client_iozone)
-        {
-                tell_master_stats(THREAD_STRIDE_TEST,chid, child_stat->throughput,
-                        child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-        }
-	child_stat->flag = CHILD_STATE_HOLD;	/* Tell parent I'm done */
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(numrecs64*reclen),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}else
-			fsync(fd);
-		close(fd);
-	}
-        if(Q_flag && (thread_strqfd !=0) )
-                fclose(thread_strqfd);
-	free(dummyfile[xx]);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Stride test finished: ",
-			now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(hist_summary)
-	   dump_hist("Stride Read",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-/************************************************************************/
-/* Thread random test				        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_mix_test(void *x)
-#else
-void *
-thread_mix_test(x)
-#endif
-{
-	int selector;
-	int num_readers;
-	long xx;
-
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-	{
-		xx = (long)x;
-	}
-	else
-	{
-		xx=(long)chid;
-	}
-#endif
-	if(pct_read!=0)
-	{
- 		num_readers = (pct_read * num_child)/100;
-                if(xx < num_readers)
-                        selector=0;
-                else
-                        selector=1;
-	}
-	else
-	{
-	   if(Kplus_flag)
-	   {
-		if(xx+1 <= Kplus_readers)
-			selector=0;
-		else
-			selector=1;
-	   }
-	   else
-	   {
-		/* Simple round robin */
-		selector= ((int)xx) % 2;
-	   }		
-	}
-	if(selector==0)
-	{
-		if(seq_mix)
-			thread_read_test(x);
-		else
-			thread_ranread_test(x);
-	}
-	else
-	{
-		if(seq_mix)
-			thread_write_test(x);
-		else
-			thread_ranwrite_test(x);
-	}
-	return(0);
-}
-/************************************************************************/
-/* Thread random read test				        	*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_ranread_test(void *x)
-#else
-void *
-thread_ranread_test(x)
-#endif
-{
-	long long xx,xx2;
-	struct child_stats *child_stat;
-	double walltime, cputime;
-	int fd;
-	long long flags = 0;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	double starttime1 = 0;
-	float delay = 0;
-	double temp_time;
-	double compute_val = (double)0;
-	off64_t written_so_far, ranread_so_far, re_written_so_far,re_read_so_far;
-	long long recs_per_buffer;
-	off64_t current_offset=0;
-	off64_t i;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff=0;
-	char *maddr=0;
-	char *wmaddr=0;
-	volatile char *buffer1;
-	int anwser,bind_cpu;
-	off64_t traj_offset;
-	off64_t lock_offset=0;
-	char tmpname[256];
-	char now_string[30];
-	FILE *thread_randrfd=0;
-	FILE *thread_Lwqfd=0;
-	long long *recnum=0;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-	long long save_pos;
-#if defined (bsd4_2) || defined(Windows)
-	long long rand1,rand2,rand3;
-#endif
-	unsigned long long big_rand;
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-#else
-	long long *gc=0;
-#endif
-#ifdef MERSENNE
-        unsigned long long init[4]={0x12345ULL, 0x23456ULL, 0x34567ULL, 0x45678ULL}, length=4;
-#endif
-
-#ifdef MERSENNE
-        init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-        srand(0);
-#else
-#ifdef Windows
-        srand(0);
-#else
-        srand48(0);
-#endif
-#endif
-#endif
-        recnum = (long long *)malloc(sizeof(*recnum)*numrecs64);
-        if (recnum){
-             /* pre-compute random sequence based on 
-		Fischer-Yates (Knuth) card shuffle */
-            for(i = 0; i < numrecs64; i++){
-                recnum[i] = i;
-            }
-            for(i = 0; i < numrecs64; i++) {
-                long long tmp = recnum[i];
-#ifdef MERSENNE
-      	       big_rand = genrand64_int64();
-#else
-#ifdef bsd4_2
-               rand1=(long long)rand();
-               rand2=(long long)rand();
-               rand3=(long long)rand();
-               big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-#else
-#ifdef Windows
-               rand1=(long long)rand();
-               rand2=(long long)rand();
-               rand3=(long long)rand();
-               big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-#else
-               big_rand = lrand48();
-#endif
-#endif
-#endif
-               big_rand = big_rand%numrecs64;
-               tmp = recnum[i];
-               recnum[i] = recnum[big_rand];
-               recnum[big_rand] = tmp;
-            }
-        }
-	else
-	{
-		fprintf(stderr,"Random uniqueness fallback.\n");
-	}
-	if(compute_flag)
-		delay=compute_time;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	written_so_far=ranread_so_far=re_written_so_far=re_read_so_far=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	if(oflag)
-	{
-		flags=O_RDONLY|O_SYNC;
-	}
-	else
-		flags=O_RDONLY;
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-       	}
-#endif
-	if((fd = I_OPEN(dummyfile[xx], ((int)flags),0))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		perror(dummyfile[xx]);
-		exit(156);
-	}
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(numrecs64*reclen),0,PROT_READ);
-	}
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	if(debug1)
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	/*****************/
-	/* Children only */
-	/*****************/
-	if(fetchon)
-		fetchit(nbuff,reclen);
-        if(Q_flag)
-        {
-                sprintf(tmpname,"Child_%d_randrol.dat",(int)xx);
-                thread_randrfd=fopen(tmpname,"a");
-                if(thread_randrfd==0)
-                {
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-		fprintf(thread_randrfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-        }
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Random read start: ",
-			now_string);
-	}
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->flag = CHILD_STATE_READY;
-        if(distributed && client_iozone)
-        {
-                tell_master_ready(chid);
-                wait_for_master_go(chid);
-        }
-        else
-        {
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-                        Poll((long long)1);
-        }
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-
-#ifdef MERSENNE
-        init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-        srand(0);
-#else
-#ifdef Windows
-        srand(0);
-#else
-	srand48(0);
-#endif
-#endif
-#endif
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)1)!=0)
-			printf("File lock for read failed. %d\n",errno);
-	for(i=0; i<numrecs64; i++) {
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if(*stop_flag)
-		{
-			if(debug1)
-				printf("\n(%ld) Stopped by another 2\n", (long)xx);
-			break;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if (recnum) {
-			current_offset = reclen * (long long)recnum[i];
-                } else {
-#ifdef MERSENNE
-                   big_rand = genrand64_int64();
-		   current_offset = (off64_t)reclen * (big_rand%numrecs64);
-#else
-#ifdef bsd4_2
-		   rand1=(long long)rand();
-		   rand2=(long long)rand();
-		   rand3=(long long)rand();
-		   big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-		   current_offset = (off64_t)reclen * (big_rand%numrecs64);
-#else
-#ifdef Windows
-		   rand1=(long long)rand();
-		   rand2=(long long)rand();
-		   rand3=(long long)rand();
-		   big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-		   current_offset = (off64_t)reclen * (big_rand%numrecs64);
-#else
-		   current_offset = reclen * (lrand48()%numrecs64);
-#endif
-#endif
-#endif
-		}
-
-		if (!(h_flag || k_flag || mmapflag))
-		{
-		  if(I_LSEEK( fd, current_offset, SEEK_SET )<0)
-		  {
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			perror("lseek");
-			exit(158);
-		  };
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)1,
-			  lock_offset, reclen);
-		}
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-                        thread_qtime_start=time_so_far();
-		}
-		if(mmapflag)
-		{
-			wmaddr = &maddr[current_offset];
-			fill_area((long long*)wmaddr,(long long*)nbuff,(long long)reclen);
-		}
-		else
-		{
-			if(async_flag)
-			{
-			    if(no_copy_flag)
-			      async_read_no_copy(gc, (long long)fd, &buffer1, (current_offset),
-			      	 reclen, 0LL,(numrecs64*reclen),depth);
-			    else
-			      async_read(gc, (long long)fd, nbuff, (current_offset), reclen,
-			    	0LL,(numrecs64*reclen),depth);
-			}
-			else
-			{
-	  		  if(read((int)fd, (void*)nbuff, (size_t)reclen) != reclen)
-	  		  {
-				if(*stop_flag)
-				{
-					if(debug1)
-						printf("\n(%ld) Stopped by another 2\n", (long)xx);
-					break;
-				}
-#ifdef NO_PRINT_LLD
-				printf("\nError reading block at %ld\n",
-					 offset); 
-#else
-				printf("\nError reading block at %lld\n",
-					 offset); 
-#endif
-				perror("ranread");
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(160);
-	 		  }
-			}
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)1,
-			  lock_offset, reclen);
-		}
-		save_pos=current_offset/reclen;
-		current_offset+=reclen;
-		if(verify){
-		   if(async_flag && no_copy_flag)
-		   {
-			if(verify_buffer(buffer1,reclen,(off64_t)save_pos,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(161);
-			}
-		   }
-		   else
-		   {
-			if(verify_buffer(nbuff,reclen,(off64_t)save_pos,reclen,(long long)pattern,sverify)){
-				if (!no_unlink)
-				{
-				   if(check_filename(dummyfile[xx]))
-					unlink(dummyfile[xx]);
-				}
-				child_stat->flag = CHILD_STATE_HOLD;
-				exit(162);
-			}
-		   }
-		}
-		if(async_flag && no_copy_flag)
-			async_release(gc);
-		ranread_so_far+=reclen/1024;
-		if(*stop_flag)
-		{
-			ranread_so_far-=reclen/1024;
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-                if(Q_flag)
-                {
-                        thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-                        fprintf(thread_randrfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-                        fprintf(thread_randrfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-                }
-	}
-	if(file_lock)
-		if(mylockf((int) fd,(int)0,(int)1))
-			printf("Read unlock failed %d\n",errno);
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(include_flush)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(numrecs64*reclen),MS_SYNC);
-		}else
-			fsync(fd);
-	}
-	if(include_close)
-	{	
-		if(mmapflag)
-		{
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}
-		close(fd);
-	}
-	temp_time = time_so_far();
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->throughput = ((temp_time - starttime1)-time_res)
-		-compute_val;
-	if(child_stat->throughput < (double).000001) 
-	{
-		child_stat->throughput= time_res;
-		if(rec_prob < reclen)
-			rec_prob = reclen;
-		res_prob=1;
-	}
-	if(OPS_flag){
-	   ranread_so_far=(ranread_so_far*1024)/reclen;
-	}
-	child_stat->throughput = ranread_so_far/child_stat->throughput;
-	child_stat->actual = ranread_so_far;
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-        if(cdebug)
-	{
-                fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid,child_stat->throughput,
-                        child_stat->actual);
-		fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_RANDOM_READ_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-	child_stat->flag = CHILD_STATE_HOLD; 	/* Tell parent I'm done */
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)(numrecs64*reclen),MS_SYNC);
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}else
-			fsync(fd);
-		close(fd);
-	}
-        if(Q_flag && (thread_randrfd !=0) )
-                fclose(thread_randrfd);
-	free(dummyfile[xx]);
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Random read finished: ",now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(recnum)
-		free(recnum);
-	if(hist_summary)
-	   dump_hist("Random Read",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-/************************************************************************/
-/* Thread random write test			        		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_ranwrite_test(void *x)
-#else
-void *
-thread_ranwrite_test( x)
-#endif
-{
-
-	struct child_stats *child_stat;
-	double starttime1 = 0;
-	double temp_time;
-	double walltime, cputime;
-	double compute_val = (double)0;
-	float delay = (double)0;
-	double thread_qtime_stop,thread_qtime_start;
-	double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-	off64_t traj_offset;
-	off64_t current_offset=0;
-	long long flags;
-	long long w_traj_bytes_completed;
-	long long w_traj_ops_completed;
-	int fd;
-	long long recs_per_buffer;
-	long long stopped,i;
-	off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-	long long xx,xx2;
-	char *dummyfile [MAXSTREAMS];           /* name of dummy file     */
-	char *nbuff=0;
-	char *maddr=0;
-	char *wmaddr=0;
-	char *free_addr=0;
-	int anwser,bind_cpu,wval;
-	off64_t filebytes64;
-	off64_t lock_offset=0;
-	char tmpname[256];
-	char now_string[30];
-	FILE *thread_randwqfd=0;
-	FILE *thread_Lwqfd=0;
-	long long *recnum = 0;
-#if defined(VXFS) || defined(solaris)
-	int test_foo = 0;
-#endif
-#if defined (bsd4_2) || defined(Windows)
-	long long rand1,rand2,rand3;
-#endif
-	unsigned long long big_rand;
-
-#ifdef ASYNC_IO
-	struct cache *gc=0;
-
-#else
-	long long *gc=0;
-#endif
-#ifdef MERSENNE
-        unsigned long long init[4]={0x12345ULL, 0x23456ULL, 0x34567ULL, 0x45678ULL}, length=4;
-#endif
-
-	if(compute_flag)
-		delay=compute_time;
-	hist_time=thread_qtime_stop=thread_qtime_start=0;
-	traj_offset=walltime=cputime=0;
-	anwser=bind_cpu=0;
-	filebytes64 = numrecs64*reclen;
-	written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-	w_traj_bytes_completed=w_traj_ops_completed=0;
-	recs_per_buffer = cache_size/reclen ;
-#ifdef MERSENNE
-        init_by_array64(init, length);
-#else
-#ifdef bsd4_2
-        srand(0);
-#else
-#ifdef Windows
-        srand(0);
-#else
-        srand48(0);
-#endif
-#endif
-#endif
-        recnum = (long long *) malloc(sizeof(*recnum)*numrecs64);
-        if (recnum){
-             /* pre-compute random sequence based on 
-		Fischer-Yates (Knuth) card shuffle */
-            for(i = 0; i < numrecs64; i++){
-                recnum[i] = i;
-            }
-            for(i = 0; i < numrecs64; i++) {
-                long long tmp = recnum[i];
-#ifdef MERSENNE
-      	       big_rand = genrand64_int64();
-#else
-#ifdef bsd4_2
-               rand1=(long long)rand();
-               rand2=(long long)rand();
-               rand3=(long long)rand();
-               big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-#else
-#ifdef Windows
-               rand1=(long long)rand();
-               rand2=(long long)rand();
-               rand3=(long long)rand();
-               big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-#else
-               big_rand = lrand48();
-#endif
-#endif
-#endif
-               big_rand = big_rand%numrecs64;
-               tmp = recnum[i];
-               recnum[i] = recnum[big_rand];
-               recnum[big_rand] = tmp;
-            }
-        }
-	else
-	{
-		fprintf(stderr,"Random uniqueness fallback.\n");
-	}
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-	{
-		xx = (long long)((long)x);
-	}
-	else
-	{
-		xx=chid;
-	}
-#endif
-#ifndef NO_THREADS
-#if defined( _HPUX_SOURCE ) || defined ( linux )
-	if(ioz_processor_bind)
-	{
-		 bind_cpu=(begin_proc+(int)xx)%num_processors;
-#if defined(_HPUX_SOURCE)
-		 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-#else
-     cpu_set_t cpuset;
-
-     CPU_ZERO(&cpuset);
-     CPU_SET(bind_cpu, &cpuset);
-
-     pthread_setaffinity_np(pthread_self(), sizeof(cpuset),&cpuset);
-#endif
-		my_nap(40);	/* Switch to new cpu */
-	}
-#endif
-#endif
-	if(use_thread)
-		nbuff=barray[xx];
-	else
-		nbuff=buffer;
-	if(debug1 )
-	{
-	   if(use_thread)
-#ifdef NO_PRINT_LLD
-		printf("\nStarting child %ld\n",xx);
-#else
-		printf("\nStarting child %lld\n",xx);
-#endif
-	   else
-#ifdef NO_PRINT_LLD
-		printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-		printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-		
-	}
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	xx2=xx;
-	if(share_file)
-		xx2=(long long)0;
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-	}
-	/*****************/
-	/* Children only */
-	/*******************************************************************/
-	/* Random write throughput performance test. **********************/
-	/*******************************************************************/
-	if(oflag)
-		flags=O_RDWR|O_SYNC|O_CREAT;
-	else
-		flags=O_RDWR|O_CREAT;
-#if defined(O_DSYNC)
-	if(odsync)
-		flags |= O_DSYNC;
-#endif
-#if defined(_HPUX_SOURCE) || defined(linux)
-	if(read_sync)
-		flags |=O_RSYNC|O_SYNC;
-#endif
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-	if(direct_flag)
-		flags |=O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		flags |=O_DIRECTIO;
-#endif
-#endif
-#if defined(Windows)
-       	if(unbuffered)
-        {
-        	hand=CreateFile(dummyfile[xx],
-		  GENERIC_READ|GENERIC_WRITE,
-	          FILE_SHARE_WRITE|FILE_SHARE_READ,
-		  NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|
-		  FILE_FLAG_WRITE_THROUGH|FILE_FLAG_POSIX_SEMANTICS,
-		  NULL);
-       	}
-#endif
-	if((fd = I_OPEN(dummyfile[xx], ((int)flags),0640))<0)
-	{
-		client_error=errno;
-		if(distributed && client_iozone)
-			send_stop();
-		printf("\nCan not open temp file: %s\n", 
-			filename);
-		perror("open");
-		exit(125);
-	}
-#ifdef VXFS
-	if(direct_flag)
-	{
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-		ioctl(fd,VX_GETCACHE,&test_foo);
-		if(test_foo == 0)
-		{
-			if(!client_iozone)
-			  printf("\nVxFS advanced setcache feature not available.\n");
-			exit(3);
-		}
-	}
-#endif
-#if defined(solaris)
-        if(direct_flag)
-        {
-                test_foo = directio(fd, DIRECTIO_ON);
-                if(test_foo != 0)
-                {
-                        if(!client_iozone)
-                          printf("\ndirectio not available.\n");
-                        exit(3);
-                }
-        }
-#endif
-#ifdef ASYNC_IO
-	if(async_flag)
-		async_init(&gc,fd,direct_flag);
-#endif
-	if(mmapflag)
-	{
-		maddr=(char *)initfile(fd,(filebytes64),1,PROT_READ|PROT_WRITE);
-	}
-	if(reclen < cache_size )
-	{
-		recs_per_buffer = cache_size/reclen ;
-		nbuff=&nbuff[(xx%recs_per_buffer)*reclen];
-	}
-	if(fetchon)			/* Prefetch into processor cache */
-		fetchit(nbuff,reclen);
-
-	child_stat = (struct child_stats *)&shmaddr[xx];	
-	child_stat->throughput = 0;
-	child_stat->actual = 0;
-	child_stat->flag=CHILD_STATE_READY; /* Tell parent child is ready to go */
-	if(distributed && client_iozone)
-	{
-		tell_master_ready(chid);
-		wait_for_master_go(chid);
-	}
-	else
-	{
-		while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-			Poll((long long)1);
-	}
-	written_so_far=0;
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	child_stat->actual = 0;
-	child_stat->throughput = 0;
-	stopped=0;
-	if(file_lock)
-		if(mylockf((int) fd, (int) 1, (int)0) != 0)
-			printf("File lock for write failed. %d\n",errno);
-	if(Q_flag)
-	{
-		sprintf(tmpname,"Child_%d_randwol.dat",(int)xx);
-		thread_randwqfd=fopen(tmpname,"a");
-		if(thread_randwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		fprintf(thread_randwqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-	}
-	if(L_flag)
-	{
-		sprintf(tmpname,"Child_%d.log",(int)xx);
-		thread_Lwqfd=fopen(tmpname,"a");
-		if(thread_Lwqfd==0)
-		{
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			printf("Unable to open %s\n",tmpname);
-			exit(40);
-		}
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Random write start: ",
-			now_string);
-	}
-	if((verify && !no_copy_flag) || dedup || dedup_interior)
-		fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)0);
-	starttime1 = time_so_far();
-	if(cpuutilflag)
-	{
-		walltime = starttime1;
-		cputime = cputime_so_far();
-	}
-	for(i=0; i<numrecs64; i++){
-		if(compute_flag)
-			compute_val+=do_compute(delay);
-		if (recnum) {
-			current_offset = reclen * (long long)recnum[i];
-                } else {
-#ifdef bsd4_2
-		   rand1=rand();
-		   rand2=rand();
-		   rand3=rand();
-		   big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-		   current_offset = (off64_t)reclen * (big_rand%numrecs64);
-#else
-#ifdef Windows
-		   rand1=rand();
-		   rand2=rand();
-		   rand3=rand();
-		   big_rand=(rand1<<32)|(rand2<<16)|(rand3);
-		   current_offset = (off64_t)reclen * (big_rand%numrecs64);
-#else
-		   current_offset = reclen * (lrand48()%numrecs64);
-#endif
-#endif
-		}
-
-		if (!(h_flag || k_flag || mmapflag))
-		{
-		  if(I_LSEEK( fd, current_offset, SEEK_SET )<0)
-		  {
-			client_error=errno;
-			if(distributed && client_iozone)
-				send_stop();
-			perror("lseek");
-			exit(158);
-		  };
-		}
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			traj_offset=I_LSEEK(fd,0,SEEK_CUR);
-                        thread_qtime_start=time_so_far();
-		}
-		if(rlocking)
-		{
-			lock_offset=I_LSEEK(fd,0,SEEK_CUR);
-			mylockr((int) fd, (int) 1, (int)0,
-			  lock_offset, reclen);
-		}
-		if((verify && !no_copy_flag) || dedup || dedup_interior)
-			fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)(current_offset/reclen));
-		if(*stop_flag && !stopped){
-			if(include_flush)
-			{
-				if(mmapflag)
-					msync(maddr,(size_t)filebytes64,MS_SYNC);
-				else
-					fsync(fd);
-			}
-			child_stat->throughput = 
-				(time_so_far() - starttime1)-time_res;
-			if(child_stat->throughput < (double).000001) 
-			{
-				child_stat->throughput = time_res;
-				if(rec_prob < reclen)
-					rec_prob = reclen;
-				res_prob=1;
-			}
-
-			if(OPS_flag){
-			   /*written_so_far=(written_so_far*1024)/reclen;*/
-			   written_so_far=w_traj_ops_completed;
-			}
-			child_stat->throughput = 
-			  (double)written_so_far/child_stat->throughput;
-			child_stat->actual = (double)written_so_far;
-			if(debug1)
-			{
-				printf("\n(%ld) Stopped by another\n", (long)xx);
-			}
-			stopped=1;
-		}
-		if(purge)
-			purgeit(nbuff,reclen);
-		if(Q_flag || hist_summary)
-		{
-			thread_qtime_start=time_so_far();
-		}
-again:		
-		if(mmapflag)
-		{
-			wmaddr = &maddr[current_offset];
-			fill_area((long long*)nbuff,(long long*)wmaddr,(long long)reclen);
-			if(!mmapnsflag)
-			{
-			  if(mmapasflag)
-			    msync(wmaddr,(size_t)reclen,MS_ASYNC);
-			  if(mmapssflag)
-			    msync(wmaddr,(size_t)reclen,MS_SYNC);
-			}
-		}
-		else
-		{
-		   if(async_flag)
-		   {
-			     if(no_copy_flag)
-			     {
-				free_addr=nbuff=(char *)malloc((size_t)reclen+page_size);
-				nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-				if(verify || dedup || dedup_interior)
-					fill_buffer(nbuff,reclen,(long long)pattern,sverify,(long long)(current_offset/reclen));
-			        async_write_no_copy(gc, (long long)fd, nbuff, reclen, (current_offset), depth,free_addr);
-			     }
-			     else
-				async_write(gc, (long long)fd, nbuff, reclen, current_offset, depth);
-		   }
-		   else
-		   {
-		      wval = write(fd, nbuff, (size_t) reclen);
-		      if(wval != reclen)
-		      {
-			if(*stop_flag && !stopped){
-				if(include_flush)
-				{
-					if(mmapflag)
-						msync(maddr,(size_t)filebytes64,MS_SYNC);
-					else
-						fsync(fd);
-				}
-				temp_time = time_so_far();
-				child_stat->throughput = 
-					(temp_time - starttime1)-time_res;
-				if(child_stat->throughput < (double).000001) 
-				{
-					child_stat->throughput= time_res;
-					if(rec_prob < reclen)
-						rec_prob = reclen;
-					res_prob=1;
-				}
-
-				if(OPS_flag){
-				   /*written_so_far=(written_so_far*1024)/reclen;*/
-				   written_so_far=w_traj_ops_completed;
-				}
-				child_stat->throughput = 
-				  (double)written_so_far/child_stat->throughput;
-				child_stat->actual = (double)written_so_far;
-				if(debug1)
-				{
-					printf("\n(%ld) Stopped by another\n", (long)xx);
-				}
-				stopped=1;
-				goto again;
-			}
-			/* Note: Writer must finish even though told
-			   to stop. Otherwise the readers will fail.
-			   The code will capture bytes transfered
-			   before told to stop but let the writer
-			   complete.
-			*/
-#ifdef NO_PRINT_LLD
-		    	printf("\nError writing block %ld, fd= %d\n", i,
-				 fd);
-#else
-		    	printf("\nError writing block %lld, fd= %d\n", i,
-				 fd);
-#endif
-			if(wval==-1)
-				perror("write");
-			if (!no_unlink)
-			{
-		            if(check_filename(dummyfile[xx]))
-				unlink(dummyfile[xx]);
-			}
-			child_stat->flag = CHILD_STATE_HOLD;
-		    	exit(127);
-		      }
-		    }
-		}
-		if(rlocking)
-		{
-			mylockr((int) fd, (int) 0, (int)0,
-			  lock_offset, reclen);
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start-time_res);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-/*
-printf("Desired rate %g  Actual rate %g Nap %g microseconds\n",desired_op_rate_time,
-	actual_rate, (desired_op_rate_time-actual_rate));
-*/
-			if( actual_rate < desired_op_rate_time)
-				my_unap((unsigned long long) ((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-		if(Q_flag)
-		{
-			thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-			fprintf(thread_randwqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-			fprintf(thread_randwqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-		}
-		w_traj_ops_completed++;
-		w_traj_bytes_completed+=reclen;
-		written_so_far+=reclen/1024;
-		if(*stop_flag)
-		{
-			written_so_far-=reclen/1024;
-			w_traj_bytes_completed-=reclen;
-		}
-	}
-	
-
-	if(file_lock)
-		if(mylockf((int) fd, (int) 0, (int)0))
-			printf("Write unlock failed. %d\n",errno);
-	
-#ifdef ASYNC_IO
-	if(async_flag)
-	{
-		end_async(gc);
-		gc=0;
-	}
-#endif
-	if(!xflag)
-	{
-		*stop_flag=1;
-		if(distributed && client_iozone)
-			send_stop();
-	}
-	
-	if(include_flush)
-	{
-		if(mmapflag)
-			msync(maddr,(size_t)filebytes64,MS_SYNC);
-		else
-			fsync(fd);
-	}
-	if(include_close)
-	{
-		if(mmapflag)
-			mmap_end(maddr,(unsigned long long)filebytes64);
-		close(fd);
-	}
-	if(!stopped){
-		temp_time = time_so_far();
-		child_stat->throughput = ((temp_time - starttime1)-time_res)
-			-compute_val;
-		if(child_stat->throughput < (double).000001) 
-		{
-			child_stat->throughput= time_res;
-			if(rec_prob < reclen)
-				rec_prob = reclen;
-			res_prob=1;
-		}
-
-		if(OPS_flag){
-		   /*written_so_far=(written_so_far*1024)/reclen;*/
-		   written_so_far=w_traj_ops_completed;
-		}
-		child_stat->throughput =
-			(double)written_so_far/child_stat->throughput;
-		child_stat->actual = (double)written_so_far;
-	}
-	child_stat->flag = CHILD_STATE_HOLD; /* Tell parent I'm done */
-        if(cdebug)
-	{
-                fprintf(newstdout,"Child %d: throughput %f actual %f \n",(int)chid,child_stat->throughput,
-                        child_stat->actual);
-		fflush(newstdout);
-	}
-	if(cpuutilflag)
-	{
-		cputime = cputime_so_far() - cputime;
-		if (cputime < cputime_res)
-			cputime = 0.0;
-		child_stat->cputime = cputime;
-		walltime = time_so_far() - walltime;
-		child_stat->walltime = walltime;
-	}
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_RANDOM_WRITE_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-	stopped=0;
-	/*******************************************************************/
-	/* End random write performance test. ******************************/
-	/*******************************************************************/
-	if(debug1)
-#ifdef NO_PRINT_LLD
-		printf("\nChild finished %ld\n",xx);
-#else
-		printf("\nChild finished %lld\n",xx);
-#endif
-	if(!include_close)
-	{
-		if(mmapflag)
-		{
-			msync(maddr,(size_t)numrecs64*reclen,MS_SYNC); /*Clean up before read starts running*/ 
-			mmap_end(maddr,(unsigned long long)numrecs64*reclen);
-		}else
-			fsync(fd);
-			
-		close(fd);
-	}
-	if(Q_flag && (thread_randwqfd !=0) )
-		fclose(thread_randwqfd);
-	free(dummyfile[xx]);
-
-	if(L_flag)
-	{
-		get_date(now_string);
-		fprintf(thread_Lwqfd,"%-25s %s","Random write finished: ",
-			now_string);
-		fclose(thread_Lwqfd);
-	}
-	if(recnum)
-		free(recnum);
-	if(hist_summary)
-	   dump_hist("Random Write",(int)xx);
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-/************************************************************************/
-/* Thread cleanup test				        		*/
-/* This is not a measurement. It is a mechanism to cleanup all of the   */
-/* temporary files that were being used. This becomes very important    */
-/* when testing multiple clients over a network :-)                     */
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void *
-thread_cleanup_test(void *x)
-#else
-void *
-thread_cleanup_test(x)
-#endif
-{
-	long long xx;
-	struct child_stats *child_stat;
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-
-	
-#ifdef NO_THREADS
-	xx=chid;
-#else
-	if(use_thread)
-		xx = (long long)((long)x);
-	else
-	{
-		xx=chid;
-	}
-#endif
-	dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-	if(mfflag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s",filearray[xx]);
-#else
-		sprintf(dummyfile[xx],"%s",filearray[xx]);
-#endif
-	}
-	else
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx],xx);
-#else
-		sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx],xx);
-#endif
-	}
-	if(!no_unlink)
-	{
-	    if(check_filename(dummyfile[xx]))
-		unlink(dummyfile[xx]);
-	}
-
-	child_stat = (struct child_stats *)&shmaddr[xx];
-	/*****************/
-	/* Children only */
-	/*****************/
-	child_stat=(struct child_stats *)&shmaddr[xx];
-	child_stat->flag = CHILD_STATE_READY;
-	if(distributed && client_iozone)
-        {
-		tell_master_ready(chid);
-                wait_for_master_go(chid);
-        }
-        else
-        {
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-                        Poll((long long)1);
-        }
-
-	*stop_flag=1;
-	if(distributed && client_iozone)
-		send_stop();
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_CLEANUP_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-			child_stat->cputime, child_stat->walltime,
-			(char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-	child_stat->flag = CHILD_STATE_HOLD; 	/* Tell parent I'm done */
-	free(dummyfile[xx]);
-
-	if(distributed && client_iozone)
-		return(0);
-#ifdef NO_THREADS
-	exit(0);
-#else
-	if(use_thread)
-		thread_exit();
-	else
-		exit(0);
-#endif
-return(0);
-}
-
-
-/************************************************************************/
-/* mythread_create() Internal routine that calls pthread_create()	*/
-/************************************************************************/
-#ifndef NO_THREADS
-#ifdef HAVE_ANSIC_C
-long long 
-mythread_create( void *(*func)(void *),void *x)
-#else
-long long 
-mythread_create( func,x)
-void *(*func)(void *);
-void *x;
-#endif
-{
-	pthread_t ts;
-	pthread_attr_t attr;
-	int xx;
-	int *yy;
-#ifdef _64BIT_ARCH_
-	long long meme;
-	meme = (long long)x;
-#else
-	long meme;
-	meme = (long)x;
-#endif
-	yy=(int *)x;
-
-
-#ifdef OSFV3
-	
-	xx=(int )pthread_create(&ts, pthread_attr_default,
-		func, (void *)yy);
-
-#else
-	pthread_attr_init(&attr);
-	xx=(int )pthread_create((pthread_t *)&ts, (pthread_attr_t *) &attr,
-		func, (void *)yy);
-#endif
-	bcopy(&ts,&p_childids[meme],sizeof(pthread_t));
-	if(xx < (int)0)
-		printf("Thread create failed. Returned %d Errno = %d\n",xx,errno);
-	if(debug1 )
-	{
-		printf("\nthread created has an id of %lx\n",ts);
-		printf("meme %ld\n",meme);
-	}
-	return((long long)meme);
-}
-#else
-#ifdef HAVE_ANSIC_C
-long long 
-mythread_create( void *(*func)(void *),void *x)
-#else
-long long 
-mythread_create( func,x)
-void *(*func)(void *);
-void *x;
-#endif
-{
-	printf("This version does not support threads\n");
-	return(-1);
-}
-#endif
-
-/************************************************************************/
-/* thread_exit() Internal routine that calls pthread_exit()		*/
-/************************************************************************/
-#ifndef NO_THREADS
-#ifdef HAVE_ANSIC_C
-int
-thread_exit(void)
-#else
-int
-thread_exit()
-#endif
-{
-	pthread_exit((void *)NULL);
-return(0);
-}
-#else
-#ifdef HAVE_ANSIC_C
-int
-thread_exit(void)
-#else
-int
-thread_exit()
-#endif
-{
-	printf("This version does not support threads\n");
-	return(-1);
-}
-#endif
-
-/************************************************************************/
-/* mythread_self() Internal function that calls pthread_self()		*/
-/************************************************************************/
-#ifndef NO_THREADS
-#ifdef HAVE_ANSIC_C
-pthread_t
-mythread_self(void)
-#else
-pthread_t
-mythread_self()
-#endif
-{
-	pthread_t xx;
-	xx = pthread_self();
-	return(xx);
-}
-#else
-#ifdef HAVE_ANSIC_C
-int
-mythread_self(void)
-#else
-int
-mythread_self()
-#endif
-{
-	printf("This version does not support threads\n");
-	return(-1);
-}
-#endif
-
-/************************************************************************/
-/* Internal thread_join routine... calls pthread_join			*/
-/************************************************************************/
-#ifndef NO_THREADS
-#ifdef HAVE_ANSIC_C
-void *
-thread_join( long long tid, void *status) 
-#else
-void *
-thread_join( tid, status) 
-long long tid;
-void *status;
-#endif
-{
-	int xx;
-	pthread_t eek;
-	pthread_attr_t foo;
-
-	bcopy(&p_childids[tid],&eek,sizeof(pthread_t));
-	xx=pthread_join(eek,(void **)&foo);
-	if(xx<0)
-		printf("Thread join returned error %d\n",errno);
-	return(0);
-}
-#else
-#ifdef HAVE_ANSIC_C
-void *
-thread_join( long long tid, void *status) 
-#else
-void *
-thread_join( tid, status) 
-long long tid;
-void *status;
-#endif
-{
-	printf("This version does not support threads\n");
-	return((void *)-1);
-}
-#endif
-
-
-/************************************************************************/
-/* Dump the CPU utilization data.					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-dump_throughput_cpu(void)
-#else
-void
-dump_throughput_cpu()
-#endif
-{
-	long long x,y,i,j;
-	char *port;
-	char *label;
-	char print_str[300];
-	x=max_x;
-	y=max_y;
-
-	port = use_thread ? "threads" : "processes";
-	printf("\n\"CPU utilization report Y-axis is type of test X-axis is number of %s\"\n",port);
-	if (bif_flag)
-	{
-		sprintf(print_str, "CPU utilization report Y-axis is type of test X-axis is number of %s", port);
-		do_label(bif_fd, print_str, bif_row++, bif_column);
-	}
-	label = OPS_flag ?  "ops/sec" :
-		MS_flag ? "microseconds/op" : "Kbytes/sec";
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\"Record size = %ld Kbytes \"\n", reclen/1024);
-#else
-	if(!silent) printf("\"Record size = %lld Kbytes \"\n", reclen/1024);
-#endif
-	if(!silent) printf("\"Output is in CPU%%\"\n\n");
-	if (bif_flag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(print_str, "Record size = %ld Kbytes", reclen/1024);
-#else
-		sprintf(print_str, "Record size = %lld Kbytes", reclen/1024);
-#endif
-		do_label(bif_fd, print_str, bif_row++, bif_column);
-		sprintf(print_str, "Output is in CPU%%");
-		do_label(bif_fd, print_str, bif_row++, bif_column);
-	}
-	for (i = 0; i < x; i++)
-	{
-		if(!silent) printf("\"%15s \"", throughput_tests[i]);
-		if (bif_flag)
-		{
-			sprintf(print_str, "%15s ", throughput_tests[i]);
-			do_label(bif_fd, print_str, bif_row, bif_column++);
-			bif_column++;
-		}
-		for (j = 0; j <= y; j++)
-		{
-			if (bif_flag)
-				do_float(bif_fd, runtimes[i][j].cpuutil, bif_row, bif_column++);
-			if(!silent) printf(" %10.2f ", runtimes[i][j].cpuutil);
-		}
-		if(!silent) printf("\n\n");
-		if (bif_flag)
-		{
-			bif_column=0;
-			bif_row++;
-		}
-	}
-}
-
-
-/************************************************************************/
-/* Dump the throughput graphs 						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-dump_throughput(void)
-#else
-void
-dump_throughput()
-#endif
-{
-	long long x,y,i,j;
-	char *port;
-	char *label;
-	char print_str[300];
-	x=max_x;
-	y=max_y;
-
-	if(use_thread)
-		port="threads";
-	else
-		port="processes";
-	if(!silent) printf("\n\"Throughput report Y-axis is type of test X-axis is number of %s\"\n",port);
-	if(bif_flag)
-	{
-		bif_fd=create_xls(bif_filename);
-		do_label(bif_fd,command_line,bif_row++,bif_column);
-		sprintf(print_str,"Throughput report Y-axis is type of test X-axis is number of %s",port);
-		do_label(bif_fd,print_str,bif_row++,bif_column);
-	}
-	if(OPS_flag)
-		label="ops/sec";
-	else
-	if(MS_flag)
-		label="microseconds/op";
-	else
-		label="Kbytes/sec";
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\"Record size = %ld Kbytes \"\n",reclen/1024);
-#else
-	if(!silent) printf("\"Record size = %lld Kbytes \"\n",reclen/1024);
-#endif
-	if(!silent) printf("\"Output is in %s\"\n\n",label);
-	if(bif_flag)
-	{
-#ifdef NO_PRINT_LLD
-		sprintf(print_str,"Record size = %ld Kbytes",reclen/1024);
-#else
-		sprintf(print_str,"Record size = %lld Kbytes",reclen/1024);
-#endif
-		do_label(bif_fd,print_str,bif_row++,bif_column);
-		sprintf(print_str,"Output is in %s",label);
-		do_label(bif_fd,print_str,bif_row++,bif_column);
-	}
-	for(i=0;i<=toutputindex;i++)
-	{
-		   if(!silent) printf("\"%15s \"",toutput[i]);
-		   if(bif_flag)
-		   {
-			   sprintf(print_str,"%15s ",toutput[i]);
-			   do_label(bif_fd,print_str,bif_row,bif_column++);
-			   bif_column++;
-		   }
-		   for(j=0;j<=y;j++)
-		   {
-			   if(bif_flag)
-			   {
-				   do_float(bif_fd,(double)report_darray[i][j],bif_row,bif_column++);
-			   }
-			   if(!silent) printf(" %10.2f ",report_darray[i][j]);
-		   }
-		   if(!silent) printf("\n\n");
-		   if(bif_flag)
-		   {
-			   bif_column=0;
-			   bif_row++;
-		   }
-	}
-	if (cpuutilflag)
-		dump_throughput_cpu();
-	if(bif_flag)
-		close_xls(bif_fd);
-}
-
-/************************************************************************/
-/* store_dvalue()							*/
-/* Stores a value in an in memory array. Used by the report function    */
-/* to re-organize the output for Excel					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-store_dvalue(double value)
-#else
-void
-store_dvalue(value)
-double value;
-#endif
-{
-	report_darray[current_x][current_y]=value;
-	current_x++;
-	if(current_x > max_x)
-		max_x=current_x;
-	if(current_y > max_y)
-		max_y=current_y;
-	if(max_x >= MAX_X)
-	{
-		printf("\nMAX_X too small\n");
-		exit(163);
-	}
-	if(max_y >= MAXSTREAMS)
-	{
-		printf("\nMAXSTREAMS too small\n");
-		exit(164);
-	}
-}
-
-/************************************************************************/
-/* Initialize a file that will be used by mmap.				*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-char *
-initfile(int fd, off64_t filebytes,int flag,int prot)
-#else
-char *
-initfile(fd, filebytes,flag, prot)
-int fd;
-off64_t filebytes;
-int flag, prot;
-#endif
-{
-	 char *pa;
-	 int mflags=0;
-	 long long x;
-	 char *tmp,*stmp;
-	 int file_flags;
-	 long long recs;
-	 long long i;
-	 int dflag = 0;
-
-	 if(flag)
-	 {
-
-#ifdef _HPUX_SOURCE
-		/* 
-		 * Save time, just have the operating system prealloc 
-		 * the file 
-		 */
-		prealloc(fd,filebytes);
-#else
-	 	/* 
-		  * Allocate a temporary buffer to meet any alignment 
-		  * contraints of any method.
-		  */
-		 tmp=(char *)malloc((size_t)reclen * 2);
-		 stmp=tmp;
-		 /* 
-		  * Align to a reclen boundary.
-		  */
-		 tmp = (char *)((((long)tmp + (long)reclen))& ~(((long)reclen-1)));
-		/* 
-		 * Special case.. Open O_DIRECT, and going to be mmap() 
-		 * Under Linux, one can not create a sparse file using 
-		 * a file that is opened with O_DIRECT 
-		 */
-	 	file_flags=fcntl(fd,F_GETFL);
-
-#if ! defined(DONT_HAVE_O_DIRECT)
-#if defined(linux) || defined(__AIX__) || defined(IRIX) || defined(IRIX64) || defined(Windows) || defined (__FreeBSD__)
-		dflag = O_DIRECT;
-#endif
-#if defined(TRU64)
-	if(direct_flag)
-		dflag = O_DIRECTIO;
-#endif
-#endif
-	 	if((file_flags & dflag) !=0)
-	 	{
-	 		recs=filebytes/reclen;
-			for (i =0; i<recs ;i++)
-			{
-				x=write(fd,tmp,(size_t)reclen);
-				if(x < 1)
-				{
-					printf("Unable to write file\n");
-					exit(182);
-				}
-			}
-	 	}
-		else
-		{
-			/* Save time, just seek out and touch at the end */
-		 	I_LSEEK(fd,(filebytes-reclen),SEEK_SET);
-			x=write(fd,tmp,(size_t)reclen);
-			if(x < 1)
-			{
-				printf("Unable to write file\n");
-				exit(181);
-			}
-		}
-	 	free(stmp);
-	 	I_LSEEK(fd,0,SEEK_SET);
-#endif
-	 }
-
-#ifdef IRIX64
-	if((prot & PROT_WRITE)==PROT_WRITE)
-		mflags=MAP_SHARED;
-	else
-		mflags=MAP_PRIVATE;
-#else
-#ifdef IRIX
-	if((prot & PROT_WRITE)==PROT_WRITE)
-		mflags=MAP_SHARED;
-	else
-		mflags=MAP_PRIVATE;
-#else
-	if((prot & PROT_WRITE)==PROT_WRITE)
-		mflags=MAP_FILE|MAP_SHARED;
-	else
-		mflags=MAP_FILE|MAP_PRIVATE;
-#endif
-#endif
-
-#if defined(bsd4_2) && !defined(macosx)
-	 pa = (char *)mmap( 0,&filebytes, (int)prot, 
-	 		(int)mflags, (int)fd, 0);
-#else
-	 pa = (char *)I_MMAP( ((char *)0),filebytes, prot, 
-	 		mflags, fd, 0);
-#endif
-#ifdef __convex_spp
-	if(pa == (char *)-1)
-	{
-		printf("\nMmap failed, errno %d Flags %x\n",errno,(int)mflags);
-		exit(165);
-	}
-#else
-#ifdef linux
-	if(pa == (char *)-1)
-	{
-		printf("Mapping failed, errno %d\n",errno);
-		exit(166);
-	}
-#else
-#ifdef bsd4_2
-	if(pa == (char *)-1)
-	{
-		printf("Mapping failed, errno %d\n",errno);
-		exit(167);
-	}
-#else
-	if(pa == (char *)MAP_FAILED)
-	{
-		printf("\nMapping failed, errno %d Flags = %x\n",errno,mflags);
-		exit(168);
-	}
-#endif
-#endif
-#endif
-#ifndef NO_MADVISE
-	if(advise_flag)
-	{
-		switch(advise_op){
-		case 0:
-			madvise( (char *)pa, (size_t) filebytes, MADV_NORMAL);
-			break;
-		case 1: 
-			madvise( (char *)pa, (size_t) filebytes, MADV_RANDOM);
-			break;
-		case 2: 
-			madvise( (char *)pa, (size_t) filebytes, MADV_SEQUENTIAL);
-			break;
-		case 3: 
-			madvise( (char *)pa, (size_t) filebytes, MADV_DONTNEED);
-			break;
-		case 4: 
-			madvise( (char *)pa, (size_t) filebytes, MADV_WILLNEED);
-			break;
-		default: 
-			break;
-		};
-	}
-	
-#endif
-	return(pa);
-
-}
-
-
-/************************************************************************/
-/* Release the mmap area.						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-mmap_end( char *buffer, long long size)
-#else
-void
-mmap_end( buffer, size)
-char *buffer;
-long long size;
-#endif
-{
-	if(munmap(buffer,(size_t)size)<0)
-#ifdef NO_PRINT_LLD
-		printf("munmap buffer %lx, size %ld failed.\n",(long)buffer,size);
-#else
-		printf("munmap buffer %lx, size %lld failed.\n",(long)buffer,size);
-#endif
-	
-}
-
-/************************************************************************/
-/*	This is an interesting function. How much data to 		*/
-/*	copy is a very good question. Here we are using mmap to		*/
-/*	perform I/O. If the benchmark touches every byte then		*/
-/*	this will include a bcopy of the mmap area into the		*/
-/*	users buffer. This is represenative of an application		*/
-/*	that reads and touches every byte that it read. If		*/
-/*	the benchmark reduces the work to touching only			*/
-/*	a long per page then the numbers go up but it			*/
-/*	does not reflect the application to well. For now		*/
-/*	the best assumption is to believe that the application		*/
-/*	will indeed touch every byte.					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-fill_area(long long *src_buffer, long long *dest_buffer, long long length)
-#else
-fill_area( src_buffer, dest_buffer, length)
-long long *src_buffer;
-long long *dest_buffer;
-long long length;
-#endif
-{
-	/*printf("Fill area %d\n",(size_t)length);*/
-	bcopy((void *)src_buffer,(void *)dest_buffer,(size_t)length);
-}
-
-#ifndef ASYNC_IO
-int
-async_read()
-{
-	printf("Your system does not support async I/O\n");
-	exit(169);
-}
-size_t
-async_write_no_copy()
-{
-	printf("Your system does not support async I/O\n");
-	exit(170);
-}
-size_t
-async_write()
-{
-	printf("Your system does not support async I/O\n");
-	exit(171);
-}
-void
-async_init()
-{
-	printf("Your system does not support async I/O\n");
-	exit(172);
-}
-int
-async_read_no_copy()
-{
-	printf("Your system does not support async I/O\n");
-	exit(172);
-}
-void
-async_release()
-{
-	printf("Your system does not support async I/O\n");
-	exit(173);
-}
-#endif
-
-/************************************************************************/
-/* Nap in microseconds.							*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-my_nap( int ntime )
-#else
-void
-my_nap( ntime )
-int ntime;
-#endif
-{
-	struct timeval nap_time;
-	int seconds, microsecs;
-	seconds = ntime/1000; /* Now in seconds */
-	microsecs = (ntime*1000)%1000000;  /* Remaining microsecs */
-	nap_time.tv_sec=seconds;
-        nap_time.tv_usec=microsecs;
-        select(0,0,0,0,&nap_time);
-}
-/************************************************************************/
-/* Nap in microseconds.							*/
-/************************************************************************/
-int nap_once;
-double nap_res;
-#ifdef HAVE_ANSIC_C
-void
-my_unap( unsigned long long microsecs )
-#else
-void
-my_unap( microsecs )
-unsigned long long microsecs;
-#endif
-{
-	struct timeval nap_time;
-	int seconds;
-	double timein, timeout;
-
-	seconds = (int)(microsecs/1000000.0); /* Now in seconds */
-	nap_time.tv_sec=seconds;
-        nap_time.tv_usec=(int)microsecs;
-
-	timein=time_so_far1();
-	while(1)
-	{
-		timeout=time_so_far1();
-		/*printf("Sleep for %lld Curtime %g\n",microsecs,timeout-timein);*/
-		if(timeout-timein > microsecs)
-		   break;
-	}
-
-/*
-        select(0,0,0,0,&nap_time);
-*/
-
-
-}
-
-/************************************************************************/
-/* Function that establishes the resolution 				*/
-/* of the gettimeofday() function.					*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void
-get_resolution(void)
-#else
-void
-get_resolution()
-#endif
-{
-        double starttime, finishtime, besttime = 0;
-        long  j,delay;
-	int k;
-
-        finishtime=time_so_far1(); /* Warm up the instruction cache */
-        starttime=time_so_far1();  /* Warm up the instruction cache */
-        delay=j=0;                 /* Warm up the data cache */
-	for(k=0;k<10;k++)
-	{
-	        while(1)
-       	 	{
-       	         	starttime=time_so_far1();
-       	         	for(j=0;j< delay;j++)
-       	                ;
-       	         	finishtime=time_so_far1();
-       	         	if(starttime==finishtime)
-       	                 	delay++;
-       	         	else
-			{
-				if(k==0)
-					besttime=(finishtime-starttime);
-				if((finishtime-starttime) < besttime)
-					besttime=(finishtime-starttime);
-                       	 	break;
-			}
-		}
-        }
-	time_res=besttime/1000000.0;	
-}
-
-/************************************************************************/
-/* Function that establishes the resolution 				*/
-/* of the getrusage() function.						*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void
-get_rusage_resolution(void)
-#else
-void
-get_rusage_resolution()
-#endif
-{
-	double starttime, finishtime;
-	long  j;
-
-	finishtime=cputime_so_far(); /* Warm up the instruction cache */
-	starttime=cputime_so_far();  /* Warm up the instruction cache */
-	delay=j=0;		   /* Warm up the data cache */
-	while(1)
-	{
-		starttime=cputime_so_far();
-		for(j=0;j< delay;j++)
-			;
-		finishtime=cputime_so_far();
-		if(starttime==finishtime)
-			
-			delay++;
-		else
-			break;
-	}
-	cputime_res = (finishtime-starttime);	 /* in seconds */
-}
-/************************************************************************/
-/* Time measurement routines.						*/
-/* Return time in microseconds						*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-static double
-time_so_far1(void)
-#else
-static double
-time_so_far1()
-#endif
-{
-     /* For Windows the time_of_day() is useless. It increments in 
-        55 milli second  increments. By using the Win32api one can 
-	get access to the high performance measurement interfaces. 
-	With this one can get back into the 8 to 9 microsecond resolution
-      */
-#ifdef Windows
-	LARGE_INTEGER freq,counter;
-	double wintime;
-	double bigcounter;
-  	struct timeval tp;
-
-  	if(pit_hostname[0]){
-  	   pit_gettimeofday(&tp, (struct timezone *) NULL, pit_hostname, 
-		pit_service);
-	   return ((double) (tp.tv_sec)*1000000.0)+(((double)tp.tv_usec));
-	}
-	else
-	{	
-
-       	   QueryPerformanceFrequency(&freq);
-           QueryPerformanceCounter(&counter);
-           bigcounter=(double)counter.HighPart *(double)0xffffffff +
-                   (double)counter.LowPart;
-           wintime = (double)(bigcounter/(double)freq.LowPart);
-           return((double)wintime*1000000.0);
-	}
-#else
-#if defined (OSFV4) || defined(OSFV3) || defined(OSFV5)
-  struct timespec gp;
-
-  if (getclock(TIMEOFDAY, (struct timespec *) &gp) == -1)
-    perror("getclock");
-  return (( (double) (gp.tv_sec)*1000000.0) +
-    ( ((float)(gp.tv_nsec)) * 0.001 ));
-#else
-  struct timeval tp;
-
-  if(pit_hostname[0]){
-     if (pit_gettimeofday(&tp, (struct timezone *) NULL, pit_hostname, 
-		pit_service) == -1)
-        perror("pit_gettimeofday");
-     return ((double) (tp.tv_sec)*1000000.0) + (((double) tp.tv_usec) );
-  }
-  else
-  {
-     if (gettimeofday(&tp, (struct timezone *) NULL) == -1)
-        perror("gettimeofday");
-     return ((double) (tp.tv_sec)*1000000.0) + (((double) tp.tv_usec) );
-  }
-#endif
-#endif
-}
-
-/************************************************************************/
-/* Return the clocks per tick for the times() call.			*/
-/************************************************************************/
-#ifdef unix
-#ifdef HAVE_ANSIC_C
-static double
-clk_tck(void)		/* Get the clocks per tick for times */
-#else
-static double
-clk_tck()		/* Get the clocks per tick for times */
-#endif
-{
-	return((double)sysconf(_SC_CLK_TCK));
-}
-
-/************************************************************************/
-/* Return the user time in tics as a double.				*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-static double
-utime_so_far(void)	 /* Return user time in ticks as double */
-#else
-static double
-utime_so_far()
-#endif
-{
-  	struct tms tp;
-
-  	times(&tp);
-  	return ((double) (tp.tms_utime));
-}
-
-/************************************************************************/
-/* Return the system time in tics as a double.				*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-static double
-stime_so_far(void)  	/* Return system time in ticks as double */
-#else
-static double
-stime_so_far()
-#endif
-{
-  	struct tms tp;
-
-  	times(&tp);
-  	return ((double) (tp.tms_stime));
-}
-
-/************************************************************************/
-/* Return the CPU (user + system) time in seconds as a double.		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-static double
-cputime_so_far(void)  	/* Return CPU time in seconds as double */
-#else
-static double
-cputime_so_far()
-#endif
-{
-#if 0
-  	struct tms tp;
-
-  	times(&tp);
-  	return ((double) (tp.tms_utime + tp.tms_stime) / sc_clk_tck);
-#else
-	struct rusage ru;
-
-	if (getrusage (RUSAGE_SELF, &ru))
-		perror ("getrusage");
-	return ((double)(ru.ru_utime.tv_sec + ru.ru_stime.tv_sec) +
-		.000001 *(ru.ru_utime.tv_usec + ru.ru_stime.tv_usec));
-#endif
-}
-#endif
-
-/************************************************************************/
-/* Return the CPU utilization ((user + system) / walltime) as a percentage. */
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-static double
-cpu_util(double cputime, double walltime)
-#else
-static double
-cpu_util(cputime, walltime)
-double cputime, walltime;
-#endif
-{
-	double cpu;
-
-	if (walltime <= (double)0.0)
-	{
-		cpu = (double)0.0;
-		return cpu;
-	}
-	if (cputime <= (double)0.0)
-		cputime = 0.0;
-	if (walltime <= (double)0.0)
-		cpu = (double)100.0;
-	else {
-		cpu = (((double)100.0 * cputime) / walltime);
-		/*
-		if (cpu > (double)100.0)
-			cpu = (double)99.99;
-		*/
-	}
-	return cpu;
-}
-
-/************************************************************************/
-/* This is a locking function that permits the writes and 		*/
-/* reads during the test to hold a file lock. Since each		*/
-/* tmp file that Iozone creates is a private file, this seems		*/
-/* like a no-op but it turns out that when using Iozone			*/
-/* over NFS,  life is very, very different. Some vendors		*/
-/* read and write performance goes to zip when locks are held		*/
-/* even if there is only one process using the file and having		*/
-/* it locked. Some implementations of NFS transition from async		*/
-/* to fully sync reads and writes if any locks are used. Euck...	*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-int
-mylockf(int fd, int op, int rdwr)
-#else
-int
-mylockf(fd, op, rdwr)
-int fd, op, rdwr;
-#endif
-{
-	struct flock myflock;
-	int ret;
-	if(op==0) /* Generic unlock the whole file */
-	{
-		myflock.l_type=F_UNLCK;
-		myflock.l_whence=SEEK_SET;
-		myflock.l_start=0;
-		myflock.l_len=0; /* The whole file */
-		myflock.l_pid=getpid();
-		ret=fcntl(fd,F_SETLKW, &myflock);
-	}
-	else
-		  /* Generic lock the whole file */
-	{
-		if(rdwr==0)
-			myflock.l_type=F_WRLCK; /* Apply write lock */
-		else
-			myflock.l_type=F_RDLCK; /* Apply read lock */
-		myflock.l_whence=SEEK_SET;
-		myflock.l_start=0;
-		myflock.l_len=0; /* The whole file */
-		myflock.l_pid=getpid();
-		ret=fcntl(fd,F_SETLKW, &myflock);
-	}
-	return(ret);
-}
-
-#ifdef HAVE_ANSIC_C
-int
-mylockr(int fd, int op, int rdwr, off64_t offset, off64_t size)
-#else
-int
-mylockr(fd, op, rdwr, offset, size)
-int fd, op, rdwr;
-off64_t offset;
-off64_t size;
-#endif
-{
-	struct flock myflock;
-	int ret;
-	if(op==0) /* Generic unlock the whole file */
-	{
-		/*printf("Child: %lld Unlock offset %lld size %lld\n",chid,offset,size);*/
-		myflock.l_type=F_UNLCK;
-		myflock.l_whence=SEEK_SET;
-		myflock.l_start=offset;
-		myflock.l_len=size; /* The whole file */
-		myflock.l_pid=getpid();
-		ret=fcntl(fd,F_SETLKW, &myflock);
-	}
-	else
-		  /* Generic lock the range  */
-	{
-		if(rdwr==0)
-		{
-			myflock.l_type=F_WRLCK; /* Apply write lock */
-			/* printf("Write ");*/
-		}
-		else
-		{
-			myflock.l_type=F_RDLCK; /* Apply read lock */
-			/* printf("Read ");*/
-		}
-		/*printf("Child: %lld Lock offset %lld size %lld\n",chid, offset,size);*/
-		myflock.l_whence=SEEK_SET;
-		myflock.l_start=offset;
-		myflock.l_len=size; /* The whole file */
-		myflock.l_pid=getpid();
-		ret=fcntl(fd,F_SETLKW, &myflock);
-	}
-	return(ret);
-}
-/************************************************************************/
-/* This function is used to simulate compute time that does		*/
-/* not involve the I/O subsystem.					*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-float
-do_compute(float comp_delay)
-#else
-float
-do_compute(comp_delay)
-float comp_delay;
-#endif
-{
-	double starttime,tmptime;
-	if(comp_delay == (float)0.0)
-		return(0.0);
-	starttime=time_so_far();
-	while(1)
-	{	
-		tmptime=time_so_far()-starttime;
-		if(tmptime >= (double)comp_delay)
-			return(tmptime);
-	}
-	return(0.0);
-}
-
-/************************************************************************/
-/* This function is intended to cause an interruption			*/
-/* in the read pattern. It will make a reader have			*/
-/* jitter in its access behavior.					*/
-/* When using direct I/O one must use a pagesize transfer.		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-disrupt(int fd)
-#else
-void
-disrupt(fd)
-int fd;
-#endif
-{
-	char *nbuff,*free_addr;
-	off64_t current;
-
-	free_addr=nbuff=(char *)malloc((size_t)page_size+page_size);
-	nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-
-	/* Save current position */
-	current = I_LSEEK(fd,0,SEEK_CUR);
-
-	/* Move to beginning of file */
-	I_LSEEK(fd,0,SEEK_SET);
-
-	/* Read a little of the file */
-	if(direct_flag)
-		junk=read(fd,nbuff,page_size);
-	else
-		junk=read(fd,nbuff,1);
-
-	/* Skip into the file */
-	I_LSEEK(fd,page_size,SEEK_SET);
-
-	/* Read a little of the file */
-	if(direct_flag)
-		junk=read(fd,nbuff,page_size);
-	else
-		junk=read(fd,nbuff,1);
-
-	/* Restore current position in file, before disruption */
-	I_LSEEK(fd,current,SEEK_SET);
-	free(free_addr);
-	
-}
-
-#if defined(Windows)
-/************************************************************************/
-/* This function is intended to cause an interruption			*/
-/* in the read pattern. It will make a reader have			*/
-/* jitter in its access behavior.					*/
-/* When using direct I/O one must use a pagesize transfer.		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-disruptw(HANDLE hand)
-#else
-void
-disruptw(HANDLE)
-int hand;
-#endif
-{
-	char *nbuff,*free_addr;
-	off64_t current;
-	long retval;
-
-	free_addr=nbuff=(char *)malloc((size_t)page_size+page_size);
-	nbuff=(char *)(((long)nbuff+(long)page_size) & (long)~(page_size-1));
-
-	/* Save current position */
-	current=SetFilePointer(hand,(LONG)0,0,FILE_CURRENT);
-
-	/* Move to beginning of file */
-	SetFilePointer(hand,(LONG)0,0,FILE_BEGIN);
-
-	/* Read a little of the file */
-	ReadFile(hand, nbuff, reclen,(LPDWORD)&retval,0);
-
-	/* Skip into the file */
-	SetFilePointer(hand,(LONG)page_size,0,FILE_BEGIN);
-
-	/* Read a little of the file */
-	ReadFile(hand, nbuff, reclen,(LPDWORD)&retval,0);
-
-	/* Restore current position in file, before disruption */
-	SetFilePointer(hand,(LONG)current,0,FILE_BEGIN);
-	free(free_addr);
-	
-}
-#endif
-
-/************************************************************************/
-/* Read a telemetry file and return the the offset			*/
-/* for the next operaton. Also, set the size				*/
-/* in the variable given in the param list.				*/
-/* which == 0 ... reader calling					*/
-/* which == 1 ... writer calling					*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-long long
-get_traj(FILE *traj_fd, long long *traj_size, float *delay, long which)
-#else
-long long
-get_traj(traj_fd, traj_size, delay, which)
-FILE *traj_fd;
-long long *traj_size;
-float *delay;
-long which;
-#endif
-{
-	long long traj_offset = 0;
-	long long tmp2 = 0;
-	int tmp = 0;
-	int tokens;
-	int ret=0;
-	char *ret1,*where;
-	char buf[200];
-	char sbuf[200];
-	int got_line;
-	
-	got_line=0;
-
-	while(got_line==0)
-	{
-		tokens=0;
-		ret1=fgets(buf,200,traj_fd);
-		if(ret1==(char *)0)
-		{
-			printf("\n\n\tEarly end of telemetry file. Results not accurate.\n");
-			signal_handler();
-		}
-		where=(char *)&buf[0];
-		strcpy(sbuf,buf);
-		if((*where=='#') || (*where=='\n'))
-			continue;
-		tokens++;
-		strtok(where," ");
-		while( (char *)(strtok( (char *)0," ")) != (char *)0)
-		{
-			tokens++;
-		}
-		got_line=1;
-	}
-	if(tokens == 3)
-	{
-#ifdef NO_PRINT_LLD
-		ret=sscanf(sbuf,"%ld %ld %d\n",&traj_offset,&tmp2,&tmp);
-#else
-		ret=sscanf(sbuf,"%lld %lld %d\n",&traj_offset,&tmp2,&tmp);
-#endif
-	/*printf("\nReading %s trajectory with %d items\n",which?"write":"read",tokens);*/
-		*traj_size=tmp2;
-		*delay= ((float)tmp/1000);
-	}
-	if(tokens == 2)
-	{ 
-#ifdef NO_PRINT_LLD
-		ret=sscanf(sbuf,"%ld %ld\n",&traj_offset,traj_size);
-#else
-		ret=sscanf(sbuf,"%lld %lld\n",&traj_offset,traj_size);
-#endif
-		*delay=compute_time;
-	/*printf("\nReading %s trajectory with %d items\n",which?"write":"read",tokens);*/
-	}
-	if((tokens != 2) && (tokens !=3))
-	{
-		printf("\n\tInvalid entry in telemetry file. > %s <\n",sbuf);
-		exit(178);
-	}
-	if(ret==EOF)
-	{
-		printf("\n\n\tEarly end of telemetry file. Results not accurate.\n");
-		signal_handler();
-	}
-#ifdef DEBUG
-#ifdef NO_PRINT_LLD
-	if(!silent) printf("\nOffset %lld  Size %ld Compute delay %f\n",traj_offset, *traj_size,*delay);
-#else
-	if(!silent) printf("\nOffset %lld  Size %lld Compute delay %f\n",traj_offset, *traj_size,*delay);
-#endif
-#endif
-	return(traj_offset);
-}
-
-/************************************************************************/
-/* Open the read telemetry file and return file pointer. 		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-FILE *
-open_r_traj(void)
-#else
-FILE *
-open_r_traj()
-#endif
-{
-	FILE *fd;
-	fd=fopen(read_traj_filename,"r");
-	if(fd == (FILE *)0)
-	{
-		printf("Unable to open read telemetry file \"%s\"\n",
-			read_traj_filename);
-		exit(174);
-	}
-	return(fd);
-}
-
-/************************************************************************/
-/* Open the write telemetry file and return file pointer.		*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-FILE *
-open_w_traj(void)
-#else
-FILE *
-open_w_traj()
-#endif
-{
-	FILE *fd;
-	fd=fopen(write_traj_filename,"r");
-	if(fd == (FILE *)0)
-	{
-		printf("Unable to open write telemetry file \"%s\"\n",
-			write_traj_filename);
-		exit(175);
-	}
-	return(fd);
-}
-
-/************************************************************************/
-/* r_traj_size(void)							*/
-/* This function scans the read telemetry file 				*/
-/* and establishes the number of entries				*/
-/* and the maximum file offset.						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-void 
-r_traj_size(void)
-#else
-void
-r_traj_size()
-#endif
-{
-	FILE *fd;
-	int ret;
-	long long traj_offset = 0;
-	long long traj_size = 0;
-	long long max_offset = 0;
-	int tokens;
-	int dummy;
-	int lines;
-	char buf[200];
-	char sbuf[200];
-	char *ret1,*where;
-
-	lines=0;
-	fd=fopen(read_traj_filename,"r");
-	if(fd == (FILE *)0)
-	{
-		printf("Unable to open read telemetry file \"%s\"\n",
-			read_traj_filename);
-		exit(174);
-	}
-	while(1)
-	{
-		tokens=0;
-		ret1=fgets(buf,200,fd);
-		if(ret1==(char *)0)
-			break;
-		where=(char *)&buf[0];
-		strcpy(sbuf,buf);
-		lines++;
-		if((*where=='#') || (*where=='\n'))
-			continue;
-		tokens++;
-		strtok(where," ");
-		while( (char *)(strtok( (char *)0," ")) != (char *)0)
-		{
-			tokens++;
-		}
-		if(tokens==1)
-		{
-			printf("\n\tInvalid read telemetry file entry. Line %d",
-				lines);
-			signal_handler();
-		}
-#ifdef DEBUG
-	printf("Tokens = %d\n",tokens);
-#endif
-		if(tokens==3)
-		{
-#ifdef NO_PRINT_LLD
-			ret=sscanf(sbuf,"%ld %ld %d\n",&traj_offset,&traj_size,&dummy);
-#else
-			ret=sscanf(sbuf,"%lld %lld %d\n",&traj_offset,&traj_size,&dummy);
-#endif
-		}
-		if(tokens==2)
-		{
-#ifdef NO_PRINT_LLD
-			ret=sscanf(sbuf,"%ld %ld\n",&traj_offset,&traj_size);
-#else
-			ret=sscanf(sbuf,"%lld %lld\n",&traj_offset,&traj_size);
-#endif
-		}
-		if((tokens != 2) && (tokens !=3))
-		{
-			printf("\n\tInvalid read telemetry file. Line %d\n",lines);
-			exit(178);
-		}
-		if(traj_offset + traj_size > max_offset)
-			max_offset=traj_offset + traj_size;
-		
-		r_traj_ops++;
-	}	
-	r_traj_fsize=max_offset;
-#ifdef DEBUG
-	printf("File size of read %lld Item count %lld\n",r_traj_fsize,r_traj_ops);
-#endif
-	fclose(fd);
-}
-
-/************************************************************************/
-/* w_traj_size(void)							*/
-/* This function scans the write telemetry file 			*/
-/* and establishes the number of entries				*/
-/* and the maximum file offset.						*/
-/************************************************************************/
-#ifdef HAVE_ANSIC_C
-long long
-w_traj_size(void)
-#else
-long long
-w_traj_size()
-#endif
-{
-	FILE *fd;
-	int ret;
-	long long traj_offset = 0;
-	long long traj_size = 0;
-	long long max_offset = 0;
-	int dummy;
-	int tokens,lines;
-	char *ret1;
-	char buf[200];
-	char sbuf[200];
-	char *where;
-
-	lines=0;
-
-	fd=fopen(write_traj_filename,"r");
-	if(fd == (FILE *)0)
-	{
-		printf("Unable to open write telemetry file \"%s\"\n",
-			write_traj_filename);
-		exit(174);
-	}
-	while(1)
-	{
-		tokens=0;
-		ret1=fgets(buf,200,fd);
-		if(ret1==(char *)0)
-			break;
-		lines++;
-		where=(char *)&buf[0];
-		strcpy(sbuf,buf);
-		if((*where=='#') || (*where=='\n'))
-			continue;
-		tokens++;
-		strtok(where," ");
-		while( (char *)(strtok( (char *)0," ")) != (char *)0)
-		{
-			tokens++;
-		}
-		if(tokens==1)
-		{
-			printf("\n\tInvalid write telemetry file entry. Line %d\n",
-				lines);
-			signal_handler();
-		}
-		if(tokens==3)
-		{
-#ifdef NO_PRINT_LLD
-			ret=sscanf(sbuf,"%ld %ld %d\n",&traj_offset,&traj_size,&dummy);
-#else
-			ret=sscanf(sbuf,"%lld %lld %d",&traj_offset,&traj_size,&dummy);
-#endif
-		}
-		if(tokens==2)
-		{
-#ifdef NO_PRINT_LLD
-			ret=sscanf(sbuf,"%ld %ld\n",&traj_offset,&traj_size);
-#else
-			ret=sscanf(sbuf,"%lld %lld\n",&traj_offset,&traj_size);
-#endif
-		}
-		if(tokens > 3)
-		{
-			printf("\n\tInvalid write telemetry file entry. Line %d\n",
-				lines);
-			exit(174);
-		}
-		if(traj_offset + traj_size > max_offset)
-			max_offset=traj_offset + traj_size;
-		
-		w_traj_ops++;
-	}	
-	w_traj_fsize=max_offset;
-#ifdef DEBUG
-	printf("File size of write %lld Item count %lld\n",w_traj_fsize,w_traj_ops);
-#endif
-	fclose(fd);
-	return(max_offset);
-}
-
-/************************************************************************/
-/* Find which version of the telemetry file format is in use.		*/
-/************************************************************************/
-
-#ifdef HAVE_ANSIC_C
-void
-traj_vers(void)
-#else
-void
-traj_vers()
-#endif
-{
-	FILE *fd;
-	char *where;
-	char buf[200];
-	int things;
-	char *ret1;
-	
-	if(r_traj_flag)
-	{
-		things=0;
-		fd=fopen(read_traj_filename,"r");
-		if(fd == (FILE *)0)
-		{	
-			printf("Unable to open read telemetry file \"%s\"\n", read_traj_filename);
-			exit(174);
-		}
-loop1:
-		ret1=fgets(buf,200,fd);
-		if(ret1==(char *)0)
-		{
-			fclose(fd);
-			return;
-		}
-		where=(char *)&buf[0];
-		if((*where=='#') || (*where=='\n'))
-			goto loop1;
-		things++;
-		strtok(where," ");
-		while( (char *)(strtok( (char *)0," ")) != (char *)0)
-		{
-			things++;
-		}
-		r_traj_items=things;
-#ifdef DEBUG
-		printf("Found %d items in the read telemetry file\n",things);
-#endif
-	}
-	if(w_traj_flag)
-	{
-		things=0;
-		fd=fopen(write_traj_filename,"r");
-		if(fd == (FILE *)0)
-		{	
-			printf("Unable to open write telemetry file \"%s\"\n", write_traj_filename);
-			exit(174);
-		}
-loop2:
-		ret1=fgets(buf,200,fd);
-		if(ret1==(char *)0)
-		{
-			fclose(fd);
-			return;
-		}
-		where=(char *)&buf[0];
-		if((*where=='#') || (*where=='\n'))
-			goto loop2;
-		things++;
-		strtok(where," ");
-		while( (char *)(strtok( (char *)0," ")) != (char *)0)
-		{
-			things++;
-		}
-		fclose(fd);
-		w_traj_items=things;
-#ifdef DEBUG
-		printf("Found %d items in the write telemetry file\n",things);
-#endif
-	}
-}
-
-/********************************************************************/
-/*							            */
-/* Today this initializes the default set of file sizes for Iozone. */
-/* in the future it may take input from the command line or	    */
-/* from a file.							    */
-/*								    */
-/********************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-init_file_sizes( off64_t min_f_size,  off64_t max_f_size)
-#else
-void
-init_file_sizes(min_f_size, max_f_size)
-off64_t min_f_size;
-off64_t max_f_size;
-#endif
-{
-    	off64_t kilosi;
-	int x;
-	if(s_count > 1)
-	{
-	        for(x=0; x < s_count; x++)
-		{
-			kilosi=s_range[x];
-			add_file_size((off64_t)kilosi);
-		}
-	}
-	else
-	{
-	        for(kilosi=min_f_size;kilosi<=max_f_size;kilosi*=multiplier)
-		{
-			add_file_size((off64_t)kilosi);
-		}
-	}
-}
-
-/********************************************************************/
-/* Used to constuct the list of file sizes to test.		    */
-/********************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-add_file_size(off64_t size)
-#else
-void
-add_file_size(size)
-off64_t size;
-#endif
-{
-	struct size_entry *size_listp;
-	struct size_entry *nsize_list;
-	
-	size_listp=size_list;
-	
-	if(size_list)
-	{
-		if(size_listp->next)
-			while(size_listp->next!=0)
-				size_listp=size_listp->next;
-	}
-	nsize_list=(struct size_entry *)malloc(sizeof(struct size_entry));
-	if(nsize_list==0)
-	{
-		printf("Malloc failed in add_file_size\n");
-		exit(180);
-	}	
-	nsize_list->next=0;
-	nsize_list->size=size;
-	if(size_list == 0)
-		size_list=nsize_list;
-	else
-		size_listp->next=nsize_list;
-	size_listp=size_list;
-}
-
-/********************************************************************/
-/* Return the next file size to test.				    */
-/********************************************************************/
-#ifdef HAVE_ANSIC_C
-off64_t
-get_next_file_size(off64_t size)
-#else
-off64_t
-get_next_file_size(size)
-off64_t size;
-#endif
-{
-	struct size_entry *size_listp;
-	
-	size_listp=size_list;
-	
-	for( ; size_listp ; size_listp=size_listp->next )
-	{
-		if(size_listp->size > size)
-			return(size_listp->size);
-	}
-	return((off64_t)0);
-}
-
-
-/**********************************************************************/
-/*							              */
-/* Today this initializes the default set of record sizes for Iozone. */
-/* in the future it may take input from the command line or	      */
-/* from a file.							      */
-/*								      */
-/**********************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-init_record_sizes( off64_t min_r_size,  off64_t max_r_size)
-#else
-void
-init_record_sizes(min_r_size, max_r_size)
-off64_t min_r_size;
-off64_t max_r_size;
-#endif
-{
-	int x;
-    	off64_t size;
-	if(r_count > 1)
-	{
-	        for(x=0; x < r_count; x++)
-		{
-			size=r_range[x];
-			add_record_size((off64_t)size);
-		}
-	}
-	else
-	{
-	        for(size=min_r_size;size<=max_r_size;size*=multiplier)
-		{
-			add_record_size((off64_t)size);
-		}
-	}
-}
-
-#ifdef HAVE_ANSIC_C
-void
-del_record_sizes(void)
-#else
-void
-del_record_sizes()
-#endif
-{
-        struct size_entry *size_listp;
-        struct size_entry *save_item;
-
-        size_listp=rec_size_list;
-        if(rec_size_list)
-        {
-                while(size_listp!=0)
-                {
-                        save_item=size_listp->next;
-                        free(size_listp);
-                        size_listp=save_item;
-                }
-        }
-        rec_size_list=0;
-}
-
-/********************************************************************/
-/* Used to constuct the list of record sizes to test.		    */
-/********************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-add_record_size(off64_t size)
-#else
-void
-add_record_size(size)
-off64_t size;
-#endif
-{
-	struct size_entry *size_listp;
-	struct size_entry *nsize_list;
-	
-	size_listp=rec_size_list;
-	
-	if(rec_size_list)
-	{
-		if(size_listp->next)
-			while(size_listp->next!=0)
-				size_listp=size_listp->next;
-	}
-	nsize_list=(struct size_entry *)malloc(sizeof(struct size_entry));
-	if(nsize_list==0)
-	{
-		printf("Malloc failed in add_file_size\n");
-		exit(180);
-	}	
-	nsize_list->next=0;
-	nsize_list->size=size;
-	if(rec_size_list == 0)
-		rec_size_list=nsize_list;
-	else
-		size_listp->next=nsize_list;
-	size_listp=rec_size_list;
-}
-
-/********************************************************************/
-/* Return the next record size to test.				    */
-/********************************************************************/
-#ifdef HAVE_ANSIC_C
-off64_t
-get_next_record_size(off64_t size)
-#else
-off64_t
-get_next_record_size(size)
-off64_t size;
-#endif
-{
-	struct size_entry *size_listp;
-	
-	size_listp=rec_size_list;
-	
-	for( ; size_listp ; size_listp=size_listp->next )
-	{
-		if(size_listp->size > size)
-			return(size_listp->size);
-	}
-	return((off64_t)0);
-}
-
-
-/*
- * Socket based communication mechanism.
- * It's intended use is to be the communication mechanism
- * that will be used to get Iozone to run across
- * multiple clients. 1/11/2002  Don Capps
- * The communication model permits a master to send and receive
- * messages to and from clients, and for clients to be able to 
- * send and receive messages to and from the master.
- */
-/* 
- * Interfaces are:
-	Master:
-	  int start_master_listen(void)
-		Called to create masters listening port.
-
-	  void master_listen(int sock, int size_of_message)
-		Call when master wants to block and read
-		a message.
-
-	  int start_master_send(char *child_host_name, int port)
-		Call to start a send channel to a client.
-
-	  void master_send(int child_socket_val, char *host_name, 
-		    char *send_buffer, int send_size)
-		Call to send message to a client.
-
-	  void stop_master_listen(int master_socket_val)
-		Call to release the masters listening port.
-
-	  void stop_master_send(int child_socket_val)
-		Call to release the masters send port to a client.
-
-	Clients:
-	  int start_child_listen(int size_of_message)
-		Called to create clients listening port.
-
-	  void child_listen(int sock, int size_of_message)
-		Call when client wants to block and read
-		a message from the master.
-
-	  void child_send(int child_socket_val, char *controlling_host_name, 
-		   char *send_buffer, int send_size)
-		Call to send message to the master.
-
-	  void stop_child_listen(int child_socket_val)
-		Call to release the clients listening port.
-
-	  void stop_child_send(int child_socket_val)
-		Call to release the clients send port to the master.
-
-
-	Messages are sent in command blocks. The structure is
-	client_command for messages from the master to the 
-	client, and master_command for messages sent from
-	a client to the master.
-*/
-
-
-/*
- * Allocate the master listening port that 
- * all children will use to send messages to the master.
- */
-#ifdef HAVE_ANSIC_C
-int
-start_master_listen(void)
-#else
-int
-start_master_listen()
-#endif
-{
-	int s;
-	int rc;
-	int tmp_port;
-	int sockerr;
-	struct sockaddr_in addr;
-	int recv_buf_size=65536*4;
-	int optval=1;
-	struct linger dummy={1,0};
-
-        s = socket(AF_INET, SOCK_STREAM, 0);
-        if (s < 0)
-        {
-                perror("socket failed:");
-                exit(19);
-        }
-	sockerr = setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *)
-		&recv_buf_size, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 1\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (char *)
-		&optval, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 2\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_LINGER, (char *)
-		&dummy, sizeof(struct linger));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 2\n");
-	}
-	tmp_port=HOST_LIST_PORT;
-        bzero(&addr, sizeof(struct sockaddr_in));
-        addr.sin_port = htons(tmp_port);
-        addr.sin_family = AF_INET;
-        addr.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(s, (struct sockaddr *)&addr,
-                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	addr.sin_port=htons(tmp_port);
-			continue;
-		}
-		master_listen_port = ntohs(addr.sin_port);
-        }
-	if(rc < 0)
-	{
-		perror("bind failed\n");
-		exit(20);
-	}
-
-	if(mdebug)
-	   printf("Master listening on socket %d Port %d\n",s,tmp_port);
-	return(s);
-}
-
-/*
- * Master listens for messages and blocks until
- * something arrives.
- */
-struct sockaddr_in listener_sync_sock;
-
-#ifdef HAVE_ANSIC_C
-void
-master_listen(int sock, int size_of_message)
-#else
-void
-master_listen(sock, size_of_message)
-int sock, size_of_message;
-#endif
-{
-        int tsize;
-        int s;
-        struct sockaddr_in *addr;
-        unsigned int me;
-        int ns,ret;
-	struct master_neutral_command *mnc;
-
-	mnc=(struct master_neutral_command *)&master_rcv_buf[0];
-        tsize = size_of_message;
-	addr=&listener_sync_sock;
-        s = sock;
-	me=sizeof(struct sockaddr_in);
-
-        if(mdebug)
-          printf("Master in listening mode on socket %d\n",s);
-again:
-        ret=listen(s,MAXSTREAMS);
-        if(ret != 0)
-        {
-                perror("Master: listen returned error\n");
-        }
-        if(mdebug)
-          printf("Master in accepting connection\n");
-        ns=accept(s,(void *)addr,&me);
-        if(ns < 0)
-        {
-                printf("Master socket %d\n",s);
-                perror("Master: ***** accept returned error *****\n");
-		sleep(1);
-		goto again;
-        }
-        if(mdebug)
-          printf("Master in reading from connection\n");
-
-        ret=read(ns,mnc,tsize);
-	if(ret < tsize)
-	{
-            printf("Master read failed. Ret %d Errno %d\n",ret,errno);
-	}
-
-        close(ns);
-}
-
-/*
- * Child sends message to master.
- */
-
-#ifdef HAVE_ANSIC_C
-void
-child_send(char *controlling_host_name, struct master_command *send_buffer, int send_size)
-#else
-void
-child_send(controlling_host_name, send_buffer, send_size)
-char *controlling_host_name; 
-struct master_command *send_buffer; 
-int send_size;
-#endif
-{
-
-        int rc,child_socket_val;
-        struct hostent *he;
-        int tmp_port;
-        struct in_addr *ip;
-        struct sockaddr_in cs_addr,cs_raddr;
-	struct master_neutral_command outbuf;
-	struct timespec req,rem;
-
-	req.tv_sec = 0;
-	req.tv_nsec = 10000000;
-	rem.tv_sec = 0;
-	rem.tv_nsec = 10000000;
-
-        if(cdebug)
-	{
-           fprintf(newstdout,"Start_child_send: %s  Size %d\n",controlling_host_name,send_size);
-	   fflush(newstdout);
-	}
-        he = gethostbyname(controlling_host_name);
-        if (he == NULL)
-        {
-                exit(22);
-        }
-        ip = (struct in_addr *)he->h_addr_list[0];
-
-over:
-        cs_raddr.sin_family = AF_INET;
-        cs_raddr.sin_port = htons(controlling_host_port);
-        cs_raddr.sin_addr.s_addr = ip->s_addr;
-        child_socket_val = socket(AF_INET, SOCK_STREAM, 0);
-        if (child_socket_val < 0)
-        {
-                perror("Child: socket failed:");
-                exit(23);
-        }
-        bzero(&cs_addr, sizeof(struct sockaddr_in));
-        tmp_port= CHILD_ESEND_PORT;
-        cs_addr.sin_port = htons(tmp_port);
-        cs_addr.sin_family = AF_INET;
-        cs_addr.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(child_socket_val, (struct sockaddr *)&cs_addr,
-                                                sizeof(struct sockaddr_in));
-                if(rc < 0)
-                {
-                        tmp_port++;
-                        cs_addr.sin_port=htons(tmp_port);
-                        continue;
-                }
-        }
-        if (rc < 0)
-        {
-                perror("Child: bind failed\n");
-                exit(24);
-        }
-        if(cdebug)
-	{
-          fprintf(newstdout,"Child sender bound to port %d Master port %d \n",tmp_port,HOST_LIST_PORT);
-	  fflush(newstdout);
-	}
-again:
-	nanosleep(&req,&rem);
-        rc = connect(child_socket_val, (struct sockaddr *)&cs_raddr,
-                        sizeof(struct sockaddr_in));
-        if (rc < 0)
-        {
-                if((ecount++ < 200) && (errno != EISCONN))
-                {
-			nanosleep(&req,&rem);
-                        /*sleep(1);*/
-                        goto again;
-                }
-                if(cdebug)
-                {
-          	   fprintf(newstdout,"Child: connect failed. Errno %d \n",errno);
-		   fflush(newstdout);
-                }
-                close(child_socket_val);
-		nanosleep(&req,&rem);
-                /*sleep(1);*/
-                ecount=0;
-                goto over;
-        }
-        ecount=0;
-        if(cdebug)
-	{
-          fprintf(newstdout,"Child connected\n");
-	  fflush(newstdout);
-	}
-
-	/* NOW send */
-
-	bzero(&outbuf, sizeof(struct master_neutral_command));
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %d sending message to %s \n",(int)chid, controlling_host_name);
-		fflush(newstdout);
-	}
-	/* 
-	 * Convert internal commands to string format to neutral format for portability
-	 */
-	strcpy(outbuf.m_host_name,send_buffer->m_host_name);
-	strcpy(outbuf.m_client_name,send_buffer->m_client_name);
-	sprintf(outbuf.m_client_number,"%d",send_buffer->m_client_number);
-	sprintf(outbuf.m_client_error,"%d",send_buffer->m_client_error);
-	sprintf(outbuf.m_child_port,"%d",send_buffer->m_child_port);
-	sprintf(outbuf.m_child_async_port,"%d",send_buffer->m_child_async_port);
-	sprintf(outbuf.m_command,"%d",send_buffer->m_command);
-	sprintf(outbuf.m_testnum,"%d",send_buffer->m_testnum);
-	sprintf(outbuf.m_version,"%d",send_buffer->m_version);
-	sprintf(outbuf.m_mygen,"%d",send_buffer->m_mygen);
-	sprintf(outbuf.m_throughput,"%f",send_buffer->m_throughput);
-	sprintf(outbuf.m_cputime,"%f", send_buffer->m_cputime);
-	sprintf(outbuf.m_walltime,"%f",send_buffer->m_walltime);
-	sprintf(outbuf.m_stop_flag,"%d",send_buffer->m_stop_flag);
-	sprintf(outbuf.m_actual,"%f",send_buffer->m_actual);
-#ifdef NO_PRINT_LLD
-	sprintf(outbuf.m_child_flag,"%ld",send_buffer->m_child_flag);
-#else
-	sprintf(outbuf.m_child_flag,"%lld",send_buffer->m_child_flag);
-#endif
-	rc=write(child_socket_val,&outbuf,sizeof(struct master_neutral_command));
-        if (rc < 0) {
-                perror("write failed\n");
-                exit(26);
-        }
-	close(child_socket_val);
-}
-
-
-/*
- * Master sending message to a child
- * There should be a unique child_socket_val for each
- * child.
- */
-#ifdef HAVE_ANSIC_C
-void
-master_send(int child_socket_val, char *host_name, struct client_command *send_buffer, int send_size)
-#else
-void
-master_send(child_socket_val, host_name, send_buffer, send_size)
-int child_socket_val;
-char *host_name; 
-struct client_command *send_buffer; 
-int send_size;
-#endif
-{
-	int rc;
-	struct client_neutral_command outbuf;
-
-	bzero(&outbuf,sizeof(struct client_neutral_command));
-	if(mdebug)
-	{
-		printf("Master_neutral_command size = %lu\n",(unsigned long)sizeof(struct master_neutral_command));
-		printf("Client_neutral_command size = %lu\n",(unsigned long)sizeof(struct client_neutral_command));
-	}
-	/* 
-	 * Convert internal commands to string format for neutral format/portability
-	 */
-	strcpy(outbuf.c_host_name,send_buffer->c_host_name);
-	strcpy(outbuf.c_pit_hostname,send_buffer->c_pit_hostname);
-	strcpy(outbuf.c_pit_service,send_buffer->c_pit_service);
-	strcpy(outbuf.c_client_name,send_buffer->c_client_name);
-	strcpy(outbuf.c_working_dir,send_buffer->c_working_dir);
-	strcpy(outbuf.c_file_name,send_buffer->c_file_name);
-	strcpy(outbuf.c_path_dir,send_buffer->c_path_dir);
-	strcpy(outbuf.c_execute_name,send_buffer->c_execute_name);
-	strcpy(outbuf.c_write_traj_filename,send_buffer->c_write_traj_filename);
-	strcpy(outbuf.c_read_traj_filename,send_buffer->c_read_traj_filename);
-	sprintf(outbuf.c_oflag,"%d",send_buffer->c_oflag);
-	sprintf(outbuf.c_mfflag,"%d",send_buffer->c_mfflag);
-	sprintf(outbuf.c_unbuffered,"%d",send_buffer->c_unbuffered);
-	sprintf(outbuf.c_noretest,"%d",send_buffer->c_noretest);
-	sprintf(outbuf.c_notruncate,"%d",send_buffer->c_notruncate);
-	sprintf(outbuf.c_read_sync,"%d",send_buffer->c_read_sync);
-	sprintf(outbuf.c_jflag,"%d",send_buffer->c_jflag);
-	sprintf(outbuf.c_async_flag,"%d",send_buffer->c_async_flag);
-	sprintf(outbuf.c_mmapflag,"%d",send_buffer->c_mmapflag);
-	sprintf(outbuf.c_k_flag,"%d",send_buffer->c_k_flag);
-	sprintf(outbuf.c_h_flag,"%d",send_buffer->c_h_flag);
-	sprintf(outbuf.c_mflag,"%d",send_buffer->c_mflag);
-	sprintf(outbuf.c_pflag,"%d",send_buffer->c_pflag);
-	sprintf(outbuf.c_stride_flag,"%d",send_buffer->c_stride_flag);
-	sprintf(outbuf.c_verify,"%d",send_buffer->c_verify);
-	sprintf(outbuf.c_sverify,"%d",send_buffer->c_sverify);
-	sprintf(outbuf.c_odsync,"%d",send_buffer->c_odsync);
-	sprintf(outbuf.c_diag_v,"%d",send_buffer->c_diag_v);
-	sprintf(outbuf.c_dedup,"%d",send_buffer->c_dedup);
-	sprintf(outbuf.c_dedup_interior,"%d",send_buffer->c_dedup_interior);
-	sprintf(outbuf.c_dedup_compress,"%d",send_buffer->c_dedup_compress);
-	sprintf(outbuf.c_dedup_mseed,"%d",send_buffer->c_dedup_mseed);
-	sprintf(outbuf.c_hist_summary,"%d",send_buffer->c_hist_summary);
-	sprintf(outbuf.c_op_rate,"%d",send_buffer->c_op_rate);
-	sprintf(outbuf.c_op_rate_flag,"%d",send_buffer->c_op_rate_flag);
-	sprintf(outbuf.c_Q_flag,"%d",send_buffer->c_Q_flag);
-	sprintf(outbuf.c_L_flag,"%d",send_buffer->c_L_flag);
-	sprintf(outbuf.c_include_flush,"%d",send_buffer->c_include_flush);
-	sprintf(outbuf.c_OPS_flag,"%d",send_buffer->c_OPS_flag);
-	sprintf(outbuf.c_mmapnsflag,"%d",send_buffer->c_mmapnsflag);
-	sprintf(outbuf.c_mmapssflag,"%d",send_buffer->c_mmapssflag);
-	sprintf(outbuf.c_mmapasflag,"%d",send_buffer->c_mmapasflag);
-	sprintf(outbuf.c_no_copy_flag,"%d",send_buffer->c_no_copy_flag);
-	sprintf(outbuf.c_include_close,"%d",send_buffer->c_include_close);
-	sprintf(outbuf.c_disrupt_flag,"%d",send_buffer->c_disrupt_flag);
-	sprintf(outbuf.c_compute_flag,"%d",send_buffer->c_compute_flag);
-	sprintf(outbuf.c_xflag,"%d",send_buffer->c_xflag);
-	sprintf(outbuf.c_MS_flag,"%d",send_buffer->c_MS_flag);
-	sprintf(outbuf.c_mmap_mix,"%d",send_buffer->c_mmap_mix);
-	sprintf(outbuf.c_Kplus_flag,"%d",send_buffer->c_Kplus_flag);
-	sprintf(outbuf.c_w_traj_flag,"%d",send_buffer->c_w_traj_flag);
-	sprintf(outbuf.c_r_traj_flag,"%d",send_buffer->c_r_traj_flag);
-	sprintf(outbuf.c_direct_flag,"%d",send_buffer->c_direct_flag);
-	sprintf(outbuf.c_cpuutilflag,"%d",send_buffer->c_cpuutilflag);
-	sprintf(outbuf.c_seq_mix,"%d",send_buffer->c_seq_mix);
-	sprintf(outbuf.c_client_number,"%d",send_buffer->c_client_number);
-	sprintf(outbuf.c_command,"%d",send_buffer->c_command);
-	sprintf(outbuf.c_testnum,"%d",send_buffer->c_testnum);
-	sprintf(outbuf.c_no_unlink,"%d",send_buffer->c_no_unlink);
-	sprintf(outbuf.c_no_write,"%d",send_buffer->c_no_write);
-	sprintf(outbuf.c_file_lock,"%d",send_buffer->c_file_lock);
-	sprintf(outbuf.c_rec_lock,"%d",send_buffer->c_rec_lock);
-	sprintf(outbuf.c_Kplus_readers,"%d",send_buffer->c_Kplus_readers);
-	sprintf(outbuf.c_multiplier,"%d",send_buffer->c_multiplier);
-	sprintf(outbuf.c_share_file,"%d",send_buffer->c_share_file);
-	sprintf(outbuf.c_pattern,"%d",send_buffer->c_pattern);
-	sprintf(outbuf.c_version,"%d",send_buffer->c_version);
-	sprintf(outbuf.c_base_time,"%d",send_buffer->c_base_time);
-	sprintf(outbuf.c_num_child,"%d",send_buffer->c_num_child);
-	sprintf(outbuf.c_pct_read,"%d",send_buffer->c_pct_read);
-	sprintf(outbuf.c_advise_op,"%d",send_buffer->c_advise_op);
-	sprintf(outbuf.c_advise_flag,"%d",send_buffer->c_advise_flag);
-	sprintf(outbuf.c_restf,"%d",send_buffer->c_restf);
-	sprintf(outbuf.c_mygen,"%d",send_buffer->c_mygen);
-#ifdef NO_PRINT_LLD
-	sprintf(outbuf.c_stride,"%ld",send_buffer->c_stride);
-	sprintf(outbuf.c_rest_val,"%ld",send_buffer->c_rest_val);
-	sprintf(outbuf.c_delay,"%ld",send_buffer->c_delay);
-	sprintf(outbuf.c_purge,"%ld",send_buffer->c_purge);
-	sprintf(outbuf.c_fetchon,"%ld",send_buffer->c_fetchon);
-	sprintf(outbuf.c_numrecs64,"%ld",send_buffer->c_numrecs64);
-	sprintf(outbuf.c_reclen,"%ld",send_buffer->c_reclen);
-	sprintf(outbuf.c_child_flag,"%ld",send_buffer->c_child_flag);
-	sprintf(outbuf.c_delay_start,"%ld",send_buffer->c_delay_start);
-	sprintf(outbuf.c_depth,"%ld",send_buffer->c_depth);
-#else
-	sprintf(outbuf.c_delay,"%lld",send_buffer->c_delay);
-	sprintf(outbuf.c_stride,"%lld",send_buffer->c_stride);
-	sprintf(outbuf.c_rest_val,"%lld",send_buffer->c_rest_val);
-	sprintf(outbuf.c_purge,"%lld",send_buffer->c_purge);
-	sprintf(outbuf.c_fetchon,"%lld",send_buffer->c_fetchon);
-	sprintf(outbuf.c_numrecs64,"%lld",send_buffer->c_numrecs64);
-	sprintf(outbuf.c_reclen,"%lld",send_buffer->c_reclen);
-	sprintf(outbuf.c_child_flag,"%lld",send_buffer->c_child_flag);
-	sprintf(outbuf.c_delay_start,"%lld",send_buffer->c_delay_start);
-	sprintf(outbuf.c_depth,"%lld",send_buffer->c_depth);
-#endif
-	sprintf(outbuf.c_stop_flag,"%d",send_buffer->c_stop_flag);
-	sprintf(outbuf.c_compute_time,"%f",send_buffer->c_compute_time);
-
-	if(mdebug >= 1)
-		printf("Master sending message to %s \n",host_name);
-        /*rc = send(child_socket_val, (char *)&outbuf, sizeof(struct client_neutral_command), 0);*/
-        rc = write(child_socket_val, (char *)&outbuf, sizeof(struct client_neutral_command));
-        if (rc < 0)
-        {
-                perror("write failed\n");
-                exit(26);
-        }
-}
-
-/*
- * Close the childs listening port for messages from the master.
- */
-#ifdef HAVE_ANSIC_C
-void
-stop_child_listen(int child_socket_val)
-#else
-void
-stop_child_listen(child_socket_val)
-int child_socket_val;
-#endif
-{
-	close(child_socket_val);
-}
-
-/*
- * Close the childs channel for sending messages to the master.
- */
-#ifdef HAVE_ANSIC_C
-void
-O_stop_child_send(int child_socket_val)
-#else
-void
-O_stop_child_send(child_socket_val)
-int child_socket_val;
-#endif
-{
-	close(child_socket_val);
-}
-
-/*
- * Close the masters listening channel for all clients messages.
- */
-#ifdef HAVE_ANSIC_C
-void
-stop_master_listen(int master_socket_val)
-#else
-void
-stop_master_listen(master_socket_val)
-int master_socket_val;
-#endif
-{
-	if(mdebug)
-	   printf("Stop master listen\n");
-/*
-	shutdown(master_socket_val,SHUT_RDWR);
-*/
-	close(master_socket_val);
-	master_socket_val = 0;
-}
-
-/*
- * Close the masters send channel a particular child.
- */
-#ifdef HAVE_ANSIC_C
-void
-stop_master_send(int child_socket_val)
-#else
-void
-stop_master_send(child_socket_val)
-int child_socket_val;
-#endif
-{
-	close(child_socket_val);
-}
-
-/*
- * Start the childs listening service for messages from the master.
- */
-#ifdef HAVE_ANSIC_C
-int
-start_child_listen(int size_of_message)
-#else
-int
-start_child_listen(size_of_message)
-int size_of_message;
-#endif
-{
-	int tsize;
-	int s;
-	int rc;
-	int xx;
-	int tmp_port;
-	int sockerr;
-	int recv_buf_size=65536;
-	int optval=1;
-	struct linger dummy={1,0};
-	xx = 0;
-	tsize=size_of_message; /* Number of messages to receive */
-        s = socket(AF_INET, SOCK_STREAM, 0);
-        if (s < 0)
-        {
-                perror("socket failed:");
-                exit(19);
-        }
-	sockerr = setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *)
-		&recv_buf_size, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 3\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (char *)
-		&optval, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 4\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_LINGER, (char *)
-		&dummy, sizeof(struct linger));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 4\n");
-	}
-        bzero(&child_sync_sock, sizeof(struct sockaddr_in));
-	tmp_port=CHILD_LIST_PORT+chid;
-        child_sync_sock.sin_port = htons(tmp_port);
-        child_sync_sock.sin_family = AF_INET;
-        child_sync_sock.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(s, (struct sockaddr *)&child_sync_sock,
-                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	child_sync_sock.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	child_port = ntohs(child_sync_sock.sin_port);
-	if(cdebug ==1)
-	{
-		fprintf(newstdout,"Child %d: Listen: Bound at port %d\n",(int)chid, tmp_port);
-		fflush(newstdout);
-	}
-	if(rc < 0)
-	{
-		fprintf(newstdout,"Child bind failed. Errno %d\n",errno);
-		fflush(newstdout);
-		exit(20);
-	}
-	return(s);
-}
-#ifdef HAVE_ANSIC_C
-int
-child_attach(int s, int flag)
-#else
-int
-child_attach(s, flag)
-int s,flag;
-#endif
-{
-	unsigned int me;
-	int ns;
-	struct sockaddr_in *addr;
-	if(flag)
-	{
-		addr=&child_async_sock;
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d attach async\n",(int)chid);
-			fflush(newstdout);
-		}
-	}
-	else
-	{
-		addr=&child_sync_sock;
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d attach sync\n",(int)chid);
-			fflush(newstdout);
-		}
-	}
-	me=sizeof(struct sockaddr_in);
-	if(cdebug)
-	{
-		printf("Child %d enters listen\n",(int)chid);
-		fflush(stdout);
-	}
-	listen(s,10);
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d enters accept\n",(int)chid);
-		fflush(newstdout);
-	}
-	ns=accept(s,(void *)addr,&me);
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d attached for receive. Sock %d  %d\n",
-		    (int)chid, ns,errno);
-		fflush(newstdout);
-	}
-	return(ns);
-}
-	
-
-/*
- * The clients use this to block waiting for a message from
- * the master.
- */
-#ifdef HAVE_ANSIC_C
-void
-child_listen(int sock, int size_of_message)
-#else
-void
-child_listen(sock, size_of_message)
-int sock, size_of_message;
-#endif
-{
-	int tsize;
-	int rcvd;
-	int s;
-	int rc;
-	char *cnc;
-
-	cnc = (char *)&child_rcv_buf[0];
-	bzero(cnc, sizeof(child_rcv_buf));
-	s = sock;
-	tsize=size_of_message; /* Number of messages to receive */
-	rcvd = 0;
-	while(rcvd < tsize)
-	{
-		if(cdebug ==1)
-		{
-			fprintf(newstdout,"Child %d In recieve \n",(int)chid);
-			fflush(newstdout);
-		}
-		rc=read(s,cnc,size_of_message);
-		if(rc < 0)
-		{
-			fprintf(newstdout,"Read failed. Errno %d \n",errno);
-			fflush(newstdout);
-			exit(21);
-		}
-		if(cdebug >= 1)
-		{
-			fprintf(newstdout,"Child %d: Got %d bytes\n",(int)chid, rc);
-			fflush(newstdout);
-		}
-		rcvd+=rc;
-		cnc+=rc;
-	}
-	if(cdebug >= 1)
-	{
-		fprintf(newstdout,"Child %d: return from listen\n",(int)chid);
-		fflush(newstdout);
-	}
-}
-/*
- * Start the childs async listening service for messages from the master.
- */
-#ifdef HAVE_ANSIC_C
-int
-start_child_listen_async(int size_of_message)
-#else
-int
-start_child_listen_async(size_of_message)
-int size_of_message;
-#endif
-{
-	int tsize;
-	int s;
-	int rc;
-	int xx;
-	int tmp_port;
-	int sockerr;
-	int recv_buf_size=65536;
-	int optval=1;
-	xx = 0;
-	tsize=size_of_message; /* Number of messages to receive */
-        s = socket(AF_INET, SOCK_STREAM, 0);
-        if (s < 0)
-        {
-                perror("socket failed:");
-                exit(19);
-        }
-	sockerr = setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *)
-		&recv_buf_size, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 5\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (char *)
-		&optval, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 6\n");
-	}
-        bzero(&child_async_sock, sizeof(struct sockaddr_in));
-	tmp_port=CHILD_ALIST_PORT;
-        child_async_sock.sin_port = htons(tmp_port);
-        child_async_sock.sin_family = AF_INET;
-        child_async_sock.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(s, (struct sockaddr *)&child_async_sock,
-                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	child_async_sock.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	child_async_port = ntohs(child_async_sock.sin_port);
-	if(cdebug ==1)
-	{
-		fprintf(newstdout,"Child %d: Async Listen: Bound at port %d\n",
-			(int)chid,tmp_port);
-		fflush(newstdout);
-	}
-	if(rc < 0)
-	{
-		fprintf(newstdout,"bind failed. Errno %d \n",errno);
-		fflush(newstdout);
-		exit(20);
-	}
-	return(s);
-}
-/*
- * The clients use this to block waiting for an async message from
- * the master.
- */
-#ifdef HAVE_ANSIC_C
-void
-child_listen_async(int sock, int size_of_message)
-#else
-void
-child_listen_async(sock, size_of_message)
-int sock, size_of_message;
-#endif
-{
-	int tsize;
-	int rcvd;
-	int s;
-	int rc;
-	char *cnc;
-
-	cnc = &child_async_rcv_buf[0];
-	s = sock;
-	tsize=size_of_message; /* Number of messages to receive */
-	rcvd = 0;
-	while(rcvd < tsize)
-	{
-		if(cdebug ==1)
-		{
-			fprintf(newstdout,"Child %d In async recieve \n",(int)chid);
-			fflush(newstdout);
-		}
-		rc=read(s,cnc,size_of_message);
-		if(rc < 0)
-		{
-			fprintf(newstdout,"Read failed. Errno %d \n",errno);
-			fflush(newstdout);
-			exit(21);
-		}
-		/* Special case. If master gets final results, it can 
-                   exit, and close the connection to the async child
-                   too quickly. When this happens the child gets a 
-		   read() that returns 0. It just needs to exit here.
-		*/
-		if(rc==0)
-			exit(0);
-		if(cdebug >= 1)
-		{
-			fprintf(newstdout,"Child %d: Got %d bytes (async) \n",(int)chid,rc);
-			fflush(newstdout);
-		}
-		rcvd+=rc;
-		cnc+=rc;
-	}
-	if(cdebug >= 1)
-	{
-		fprintf(newstdout,"Child %d: return from async listen\n",(int)chid);
-		fflush(newstdout);
-	}
-}
-
-/*
- * Start the channel for the master to send a message to 
- * a particular child on a particular port that the child
- * has created for the parent to use to communicate.
- */
-#ifdef HAVE_ANSIC_C
-int
-start_master_send(char *child_host_name, int child_port, struct in_addr *my_s_addr)
-#else
-int
-start_master_send(child_host_name, child_port, my_s_addr)
-char *child_host_name; 
-int child_port;
-struct in_addr *my_s_addr;
-#endif
-{
-	int rc,master_socket_val;
-	struct sockaddr_in addr,raddr;
-	struct hostent *he;
-	int port,tmp_port;
-	int ecount = 0;
-	struct in_addr *ip;
-	struct timespec req,rem;
-
-	req.tv_sec = 0;
-	req.tv_nsec = 10000000;
-	rem.tv_sec = 0;
-	rem.tv_nsec = 10000000;
-
-        he = gethostbyname(child_host_name);
-        if (he == NULL)
-        {
-                printf("Master: Bad hostname >%s<\n",child_host_name);
-		fflush(stdout);
-                exit(22);
-        }
-	if(mdebug ==1)
-	{
-	        printf("Master: start master send: %s\n", he->h_name);
-		fflush(stdout);
-	}
-        ip = (struct in_addr *)he->h_addr_list[0];
-#ifndef UWIN
-	if(mdebug ==1)
-	{
-        	printf("Master: child name: %s\n", (char *)inet_ntoa(*ip));
-        	printf("Master: child Port: %d\n", child_port);
-		fflush(stdout);
-	}
-#endif
-
-	port=child_port;
-	my_s_addr->s_addr = ip->s_addr;
-	/*port=CHILD_LIST_PORT;*/
-
-        raddr.sin_family = AF_INET;
-        raddr.sin_port = htons(port);
-        raddr.sin_addr.s_addr = ip->s_addr;
-        master_socket_val = socket(AF_INET, SOCK_STREAM, 0);
-        if (master_socket_val < 0)
-        {
-                perror("Master: socket failed:");
-                exit(23);
-        }
-        bzero(&addr, sizeof(struct sockaddr_in));
-	tmp_port=HOST_ESEND_PORT;
-        addr.sin_port = htons(tmp_port);
-        addr.sin_family = AF_INET;
-        addr.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(master_socket_val, (struct sockaddr *)&addr,
-                                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	addr.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	if(mdebug ==1)
-	{
-		printf("Master: Bound port\n");
-		fflush(stdout);
-	}
-        if (rc < 0)
-        {
-                perror("Master: bind failed for sync channel to child.\n");
-                exit(24);
-        }
-	nanosleep(&req,&rem);
-again:
-        rc = connect(master_socket_val, (struct sockaddr *)&raddr, 
-			sizeof(struct sockaddr_in));
-	if (rc < 0)
-        {
-		if(ecount++ < 300)
-		{
-			nanosleep(&req,&rem);
-			/*sleep(1);*/
-			goto again;
-		}
-                perror("Master: connect failed\n");
-		printf("Error %d\n",errno);
-                exit(25);
-        }
-	if(mdebug ==1)
-	{
-		printf("Master Connected\n");
-		fflush(stdout);
-	}
-	return (master_socket_val);
-}
-/*
- * Start the channel for the master to send a message to 
- * a particular child on a particular port that the child
- * has created for the parent to use to communicate.
- */
-#ifdef HAVE_ANSIC_C
-int
-start_master_send_async(char *child_host_name, int child_port, struct in_addr my_s_addr)
-#else
-int
-start_master_send_async(child_host_name, child_port, my_s_addr)
-char *child_host_name; 
-int child_port;
-struct in_addr my_s_addr;
-#endif
-{
-	int rc,master_socket_val;
-	struct sockaddr_in addr,raddr;
-	int port,tmp_port;
-	int ecount = 0;
-	struct timespec req,rem;
-
-	req.tv_sec = 0;
-	req.tv_nsec = 10000000;
-	rem.tv_sec = 0;
-	rem.tv_nsec = 10000000;
-
-
-	port=child_port;
-	nanosleep(&req,&rem);
-
-over:
-        raddr.sin_family = AF_INET;
-        raddr.sin_port = htons(port);
-        raddr.sin_addr.s_addr = my_s_addr.s_addr;
-        master_socket_val = socket(AF_INET, SOCK_STREAM, 0);
-        if (master_socket_val < 0)
-        {
-                perror("Master: async socket failed:");
-                exit(23);
-        }
-        bzero(&addr, sizeof(struct sockaddr_in));
-	tmp_port=HOST_ASEND_PORT;
-        addr.sin_port = htons(tmp_port);
-        addr.sin_family = AF_INET;
-        addr.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(master_socket_val, (struct sockaddr *)&addr,
-                                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	addr.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	if(mdebug ==1)
-	{
-		printf("Master: Bound async port\n");
-		fflush(stdout);
-	}
-        if (rc < 0)
-        {
-                perror("Master: bind async failed\n");
-                exit(24);
-        }
-again:
-
-        rc = connect(master_socket_val, (struct sockaddr *)&raddr, 
-			sizeof(struct sockaddr_in));
-	if (rc < 0)
-        {
-		if(ecount++ < 300)
-		{
-		/* Really need this sleep for Windows */
-#if defined (Windows)
-			sleep(1);
-#else
-			nanosleep(&req,&rem);
-#endif
-			goto again;
-		}
-                perror("Master: async connect failed\n");
-                close(master_socket_val);
-#if defined (Windows)
-		sleep(1);
-#else
-		nanosleep(&req,&rem);
-#endif
-                /*sleep(1);*/
-                ecount=0;
-                goto over;
-        }
-	if(mdebug ==1)
-	{
-		printf("Master async Connected\n");
-		fflush(stdout);
-	}
-	return (master_socket_val);
-}
-
-/*
- * If not "distributed" then call fork. The "distributed"
- * will start iozone on a remote node.
- */
-#ifdef HAVE_ANSIC_C
-long long
-start_child_proc(int testnum,long long numrecs64, long long reclen)
-#else
-long long
-start_child_proc(testnum, numrecs64, reclen)
-int testnum;
-long long numrecs64, reclen;
-#endif
-{
-	long long x;
-	if(distributed && master_iozone)
-	{
-		x=(long long)pick_client(testnum,numrecs64, reclen);
-	}
-	else
-	{
-		x=(long long)fork();
-	}
-	if(mdebug)
-		printf("Starting proc %d\n",(int)x);	
-	return(x);
-}	
-
-/*
- * This function picks a client from the list of clients and
- * starts it running on the remote machine. It also waits for
- * the remote process to join and then sends the client
- * the state information it needs to begin to run the 
- * test. The client will initialize its state space, 
- * begin the test and block as the barrier waiting
- * for the master to say go.
- */
-#ifdef HAVE_ANSIC_C
-int
-pick_client(int testnum,long long numrecs64, long long reclen)
-#else
-int
-pick_client(testnum, numrecs64, reclen)
-int testnum;
-long long numrecs64, reclen;
-#endif
-{
-	int x;
-	int c_command,child_index;
-	struct client_command cc;
-	struct master_command mc;
-	struct master_neutral_command *mnc;
-	char command[512];
-	struct in_addr my_s_addr;
-	char my_port_num[10];
-
-
-	bzero(&cc,sizeof(struct client_command));
-	for(x=0;x<512;x++)
-		command[x]=0;
-
-	current_client_number++; /* Need to start with 1 */
-	x=current_client_number;
-
-	child_idents[x-1].state = C_STATE_ZERO;
-	/* Step 1. Now start client going on remote node.	*/
-
-	find_remote_shell(remote_shell);
-	sprintf(command,"%s ",remote_shell);
-	strcat(command,child_idents[x-1].child_name);
-	strcat(command," -n '");
-	strcat(command,child_idents[x-1].execute_path);
-	strcat(command," -+s -t 1 -r 4 -s 4 -+c ");
-	strcat(command,controlling_host_name);
-        if (master_listen_port != HOST_LIST_PORT)
-        {
-          sprintf(my_port_num," -+i %d",master_listen_port);
-          strcat(command,my_port_num);
-        }
-	strcat(command," '");
-	junk=system(command);
-/*
-	system("remsh rsnperf '/home/capps/niozone/iozone -+s -t 1 -r 4 -s 8 -+c rsnperf'");
-
-*/
-	if(mdebug)
-		printf("%s",command);
-	/* Format example: 					*/
-	/*							*/
-	/* system("remsh rsnperf '/home/capps/niozone/iozone 	*/
-	/*       -+s -t 1 -r 4 -s 8 -+c rsnperf'");		*/
-	/*							*/
-
-	/* Step 2. Wait for join from new client.		*/
-
-	child_idents[x-1].state = C_STATE_WAIT_WHO;
-
-	if(mdebug>=1)
-		printf("\nMaster listening for child to send join message.\n");
-	master_listen(master_listen_socket,sizeof(struct master_neutral_command));
-	mnc = (struct master_neutral_command *)&master_rcv_buf[0];
-
-	/* 
-	 * Convert from string format back to internal representation
-	 */
-	sscanf(mnc->m_child_port,"%d",&mc.m_child_port);	
-	sscanf(mnc->m_child_async_port,"%d",&mc.m_child_async_port);	
-	sscanf(mnc->m_command,"%d",&mc.m_command);	
-	sscanf(mnc->m_version,"%d",&mc.m_version);	
-	if(mc.m_version != proto_version)
-	{
-		printf("Client > %s < is not running the same version of Iozone !! C%d M%d\n", child_idents[x-1].child_name, mc.m_version, proto_version);
-	}
-
-	c_port = mc.m_child_port; 
-	a_port = mc.m_child_async_port; 
-	c_command = mc.m_command;
-	if(mdebug>=1)
-	{
-		printf("Master back from listen child Joined.\n");
-		printf("Master: Command %d\n",c_command);
-	}
-	/* Step 3. Then start_master_send() for this client.	*/
-	
-	if(mdebug>=1)
-		printf("Starting master send channel\n");
-        master_send_sockets[x-1]= start_master_send(child_idents[x-1].child_name,c_port,
-		&my_s_addr); 
-	if(mdebug>=1)
-		printf("Starting master send async channel\n");
-        master_send_async_sockets[x-1]= start_master_send_async(child_idents[x-1].child_name,a_port,
-		my_s_addr); 
-
-	child_idents[x-1].master_socket_num = master_send_sockets[x-1];
-	child_idents[x-1].master_async_socket_num = master_send_async_sockets[x-1];
-	child_idents[x-1].child_number = x-1;
-	child_idents[x-1].child_port = c_port;
-	child_idents[x-1].child_async_port = a_port;
-
-	/* 								*/
-	/* Step 4. Send message to client telling him his name, number, */
-	/*             rsize, fsize, and test to run.			*/
-	strcpy(cc.c_host_name ,controlling_host_name);
-	strcpy(cc.c_pit_hostname ,pit_hostname);
-	strcpy(cc.c_pit_service ,pit_service);
-	strcpy(cc.c_client_name ,child_idents[x-1].child_name);
-	strcpy(cc.c_working_dir ,child_idents[x-1].workdir);
-	strcpy(cc.c_file_name ,child_idents[x-1].file_name);
-	strcpy(cc.c_write_traj_filename ,write_traj_filename);
-	strcpy(cc.c_read_traj_filename ,read_traj_filename);
-	cc.c_command = R_JOIN_ACK;
-	cc.c_client_number = x-1;
-	cc.c_testnum = testnum;
-	cc.c_numrecs64 = numrecs64;
-	cc.c_reclen = reclen;
-	cc.c_oflag = oflag;
-	cc.c_mfflag = mfflag;
-	cc.c_unbuffered = unbuffered;
-	cc.c_noretest = noretest;
-	cc.c_notruncate = notruncate;
-	cc.c_read_sync = read_sync;
-	cc.c_jflag = jflag;
-	cc.c_direct_flag = direct_flag;
-	cc.c_cpuutilflag = cpuutilflag;
-	cc.c_seq_mix = seq_mix;
-	cc.c_async_flag = async_flag;
-	cc.c_k_flag = k_flag;
-	cc.c_h_flag = h_flag;
-	cc.c_mflag = mflag;
-	cc.c_pflag = pflag;
-	cc.c_stride_flag = stride_flag;
-	cc.c_fetchon = fetchon;
-	cc.c_verify = verify;
-	cc.c_sverify = sverify;
-	cc.c_odsync = odsync;
-	cc.c_diag_v = diag_v;
-	cc.c_dedup = dedup;
-	cc.c_dedup_interior = dedup_interior;
-	cc.c_dedup_compress = dedup_compress;
-	cc.c_dedup_mseed = dedup_mseed;
-	cc.c_hist_summary = hist_summary;
-	cc.c_op_rate = op_rate;
-	cc.c_op_rate_flag = op_rate_flag;
-	cc.c_file_lock = file_lock;
-	cc.c_rec_lock = rlocking;
-	cc.c_Kplus_readers = Kplus_readers;
-	cc.c_multiplier = multiplier;
-	cc.c_share_file = share_file;
-	cc.c_pattern = pattern;
-	cc.c_version = proto_version;
-	cc.c_base_time = base_time;
-	cc.c_num_child = (int)num_child;
-	cc.c_pct_read = pct_read;
-	cc.c_advise_op = advise_op;
-	cc.c_advise_flag = advise_flag;
-	cc.c_restf = restf;
-	cc.c_mygen = mygen;
-	cc.c_Q_flag = Q_flag;
-	cc.c_L_flag = L_flag;
-	cc.c_xflag = xflag;
-	cc.c_w_traj_flag = w_traj_flag;
-	cc.c_r_traj_flag = r_traj_flag;
-	cc.c_include_flush = include_flush;
-	cc.c_OPS_flag = OPS_flag;
-	cc.c_purge = purge;
-	cc.c_mmapflag = mmapflag;
-	cc.c_mmapasflag = mmapasflag;
-	cc.c_mmapnsflag = mmapnsflag;
-	cc.c_mmapssflag = mmapssflag;
-	cc.c_no_copy_flag = no_copy_flag;
-	cc.c_no_unlink = no_unlink;
-	cc.c_no_write = no_write;
-	cc.c_include_close = include_close;
-	cc.c_disrupt_flag = disrupt_flag;
-	cc.c_compute_flag = compute_flag;
-	cc.c_delay = delay;
-	cc.c_stride = stride;
-	cc.c_rest_val = rest_val;
-	cc.c_delay_start = delay_start;
-	cc.c_compute_time = compute_time;
-	cc.c_depth = depth;
-	cc.c_MS_flag = MS_flag;
-	cc.c_mmap_mix = mmap_mix;
-	cc.c_Kplus_flag = Kplus_flag;
-
-
-	if(mdebug)
-		printf("Master sending client who he is\n");
-	master_send(master_send_sockets[x-1],cc.c_client_name, &cc,sizeof(struct client_command));
-
-	child_idents[x-1].state = C_STATE_WAIT_BARRIER;
-	
-	/* 								*/
-	/* Step 5. Wait until you receive message that the chile is at  */
-	/*             the barrier.  					*/
-	if(mdebug>=1)
-	   printf("Master listening for child to send at barrier message.\n");
-	master_listen(master_listen_socket,sizeof(struct master_neutral_command));
-	mnc = (struct master_neutral_command *)&master_rcv_buf[0];
-	/*
-	 * Convert from string back to arch specific 
-	 */
-	sscanf(mnc->m_client_number,"%d",&mc.m_client_number);	
-#ifdef NO_PRINT_LLD
-	sscanf(mnc->m_child_flag,"%ld",&mc.m_child_flag);	
-#else
-	sscanf(mnc->m_child_flag,"%lld",&mc.m_child_flag);	
-#endif
-
-	child_index = mc.m_client_number;
-	child_stat = (struct child_stats *)&shmaddr[child_index];	
-	child_stat->flag = (long long)(mc.m_child_flag);
-	if(mdebug>=1)
-	   printf("Master sees child %d at barrier message.\n",child_index);
-
-	return(x); /* Tell code above that it is the parent returning */
-}
-
-/****************************************************************************************/
-/* This is the code that the client will use when it 					*/
-/* gets started via remote shell. It is activated by the -+c controller_name option.	*/
-/*											*/
-/* The steps to this process are:							*/
-/* 1. Start client receive channel 							*/
-/* 2. Start client send channel 							*/
-/* 3. Send message to controller saying I'm joining. 					*/
-/* 4. Go into a loop and get all instructions from 					*/
-/* 5. Get state information from the master 						*/
-/* 6. Change to the working directory 							*/
-/* 7. Run the test 									*/
-/* 8. Release the listen and send sockets to the master 				*/
-/* 											*/
-/****************************************************************************************/
-#ifdef HAVE_ANSIC_C
-void
-become_client(void)
-#else
-void
-become_client()
-#endif
-{
-	int x,testnum;
-	struct master_command mc;
-	struct client_command cc;
-	struct client_neutral_command *cnc;
-	char client_name[100];
-	char *workdir;
-
-	bzero(&mc,sizeof(struct master_command));
-	x=fork(); /* Become a daemon so that remote shell will return. */
-	if(x != 0)
-		exit(0);
-	/*
- 	 * I am the child 
-	 */
-	(void)gethostname(client_name,100);
-
-	fflush(stdout);
-	fflush(stderr);
-	if(cdebug)
-	{
-		newstdin=freopen("/tmp/don_in","r+",stdin);
-		newstdout=freopen("/tmp/don_out","a+",stdout);
-		newstderr=freopen("/tmp/don_err","a+",stderr);
-	}
-	else
-	{
-		fclose(stdin);
-		fclose(stdout);
-		fclose(stderr);
-	}
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"My name = %s, Controller's name = %s\n",client_name, controlling_host_name);
-		fflush(newstdout);
-	}
-
-	/* 1. Start client receive channel 				*/
-
-	l_sock = start_child_listen(sizeof(struct client_neutral_command));
-	l_async_sock = start_child_listen_async(sizeof(struct client_neutral_command));
-
-	/* 2. Send message to controller saying I'm joining. 		*/
-
-	strcpy(mc.m_host_name,controlling_host_name);
-	strcpy(mc.m_client_name,client_name);
-	mc.m_child_port = child_port;
-	mc.m_child_async_port = child_async_port;
-	mc.m_command = R_CHILD_JOIN;
-	mc.m_version = proto_version;
-	
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %s sends JOIN to master %s Host Port %d\n",
-			client_name,controlling_host_name,controlling_host_port);
-		fflush(newstdout);
-	}
-	child_send(controlling_host_name,(struct master_command *)&mc, sizeof(struct master_command));
-
-	l_sock=child_attach(l_sock,0);
-	l_async_sock=child_attach(l_async_sock,1);
-	
-	/* 4. Go into a loop and get all instructions from 		*/
-        /*    the controlling process. 					*/
-
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %s waiting for who am I\n",client_name);
-		fflush(newstdout);
-	}
-	child_listen(l_sock,sizeof(struct client_neutral_command));
-	cnc = (struct client_neutral_command *)&child_rcv_buf;
-	bzero(&cc, sizeof(struct client_command));
-	
-	/* Convert from string format to arch format */
-	sscanf(cnc->c_command,"%d",&cc.c_command);
-	sscanf(cnc->c_client_name,"%s",cc.c_client_name);
-	sscanf(cnc->c_client_number,"%d",&cc.c_client_number);
-	sscanf(cnc->c_host_name,"%s",cc.c_host_name);
-	sscanf(cnc->c_pit_hostname,"%s",cc.c_pit_hostname);
-
-	if(cc.c_command == R_TERMINATE || cc.c_command==R_DEATH)
-	{
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d received terminate on sync channel !!\n",(int)chid);
-			fflush(newstdout);
-		}
-		exit(1);
-	}
-	
-	if(cdebug)
-	{
-         fprintf(newstdout,"Child sees: \n Client name %s \n Client_num # %d \n Host_name %s\n"
-			,cc.c_client_name,cc.c_client_number,cc.c_host_name);
-	 fflush(newstdout);
-	}
-
-	/*
-	 * Now import all of the values of the flags that the child on this 
-	 * machine needs to be able to run the test requested.
-	 */
-
-	/* 5. Get state information from the master */
-
-#ifdef NO_PRINT_LLD
-	sscanf(cnc->c_numrecs64,"%ld",&cc.c_numrecs64);
-	sscanf(cnc->c_reclen,"%ld",&cc.c_reclen);
-	sscanf(cnc->c_fetchon,"%ld",&cc.c_fetchon);
-	sscanf(cnc->c_purge,"%ld",&cc.c_purge);
-	sscanf(cnc->c_delay,"%ld",&cc.c_delay);
-	sscanf(cnc->c_stride,"%ld",&cc.c_stride);
-	sscanf(cnc->c_rest_val,"%ld",&cc.c_rest_val);
-	sscanf(cnc->c_delay_start,"%ld",&cc.c_delay_start);
-	sscanf(cnc->c_depth,"%ld",&cc.c_depth);
-#else
-	sscanf(cnc->c_numrecs64,"%lld",&cc.c_numrecs64);
-	sscanf(cnc->c_reclen,"%lld",&cc.c_reclen);
-	sscanf(cnc->c_fetchon,"%lld",&cc.c_fetchon);
-	sscanf(cnc->c_purge,"%lld",&cc.c_purge);
-	sscanf(cnc->c_delay,"%lld",&cc.c_delay);
-	sscanf(cnc->c_stride,"%lld",&cc.c_stride);
-	sscanf(cnc->c_rest_val,"%lld",&cc.c_rest_val);
-	sscanf(cnc->c_delay_start,"%lld",&cc.c_delay_start);
-	sscanf(cnc->c_depth,"%lld",&cc.c_depth);
-#endif
-	sscanf(cnc->c_pit_hostname,"%s",cc.c_pit_hostname);
-	sscanf(cnc->c_pit_service,"%s",cc.c_pit_service);
-	sscanf(cnc->c_testnum,"%d",&cc.c_testnum);
-	sscanf(cnc->c_client_number,"%d",&cc.c_client_number);
-	sscanf(cnc->c_working_dir,"%s",cc.c_working_dir);
-	sscanf(cnc->c_file_name,"%s",cc.c_file_name);
-	sscanf(cnc->c_write_traj_filename,"%s",cc.c_write_traj_filename);
-	sscanf(cnc->c_read_traj_filename,"%s",cc.c_read_traj_filename);
-	sscanf(cnc->c_noretest,"%d",&cc.c_noretest);
-	sscanf(cnc->c_notruncate,"%d",&cc.c_notruncate);
-	sscanf(cnc->c_read_sync,"%d",&cc.c_read_sync);
-	sscanf(cnc->c_jflag,"%d",&cc.c_jflag);
-	sscanf(cnc->c_direct_flag,"%d",&cc.c_direct_flag);
-	sscanf(cnc->c_cpuutilflag,"%d",&cc.c_cpuutilflag);
-	sscanf(cnc->c_seq_mix,"%d",&cc.c_seq_mix);
-	sscanf(cnc->c_async_flag,"%d",&cc.c_async_flag);
-	sscanf(cnc->c_k_flag,"%d",&cc.c_k_flag);
-	sscanf(cnc->c_h_flag,"%d",&cc.c_h_flag);
-	sscanf(cnc->c_mflag,"%d",&cc.c_mflag);
-	sscanf(cnc->c_pflag,"%d",&cc.c_pflag);
-	sscanf(cnc->c_stride_flag,"%d",&cc.c_stride_flag);
-	sscanf(cnc->c_verify,"%d",&cc.c_verify);
-	sscanf(cnc->c_sverify,"%d",&cc.c_sverify);
-	sscanf(cnc->c_odsync,"%d",&cc.c_odsync);
-	sscanf(cnc->c_diag_v,"%d",&cc.c_diag_v);
-	sscanf(cnc->c_dedup,"%d",&cc.c_dedup);
-	sscanf(cnc->c_dedup_interior,"%d",&cc.c_dedup_interior);
-	sscanf(cnc->c_dedup_compress,"%d",&cc.c_dedup_compress);
-	sscanf(cnc->c_dedup_mseed,"%d",&cc.c_dedup_mseed);
-	sscanf(cnc->c_hist_summary,"%d",&cc.c_hist_summary);
-	sscanf(cnc->c_op_rate,"%d",&cc.c_op_rate);
-	sscanf(cnc->c_op_rate_flag,"%d",&cc.c_op_rate_flag);
-	sscanf(cnc->c_file_lock,"%d",&cc.c_file_lock);
-	sscanf(cnc->c_rec_lock,"%d",&cc.c_rec_lock);
-	sscanf(cnc->c_Kplus_readers,"%d",&cc.c_Kplus_readers);
-	sscanf(cnc->c_multiplier,"%d",&cc.c_multiplier);
-	sscanf(cnc->c_share_file,"%d",&cc.c_share_file);
-	sscanf(cnc->c_pattern,"%d",&cc.c_pattern);
-	sscanf(cnc->c_version,"%d",&cc.c_version);
-	sscanf(cnc->c_base_time,"%d",&cc.c_base_time);
-	sscanf(cnc->c_num_child,"%d",&cc.c_num_child);
-	sscanf(cnc->c_pct_read,"%d",&cc.c_pct_read);
-	sscanf(cnc->c_advise_op,"%d",&cc.c_advise_op);
-	sscanf(cnc->c_advise_flag,"%d",&cc.c_advise_flag);
-	sscanf(cnc->c_restf,"%d",&cc.c_restf);
-	sscanf(cnc->c_mygen,"%d",&cc.c_mygen);
-	sscanf(cnc->c_oflag,"%d",&cc.c_oflag);
-	sscanf(cnc->c_mfflag,"%d",&cc.c_mfflag);
-	sscanf(cnc->c_unbuffered,"%d",&cc.c_unbuffered);
-	sscanf(cnc->c_Q_flag,"%d",&cc.c_Q_flag);
-	sscanf(cnc->c_L_flag,"%d",&cc.c_L_flag);
-	sscanf(cnc->c_xflag,"%d",&cc.c_xflag);
-	sscanf(cnc->c_include_flush,"%d",&cc.c_include_flush);
-	sscanf(cnc->c_OPS_flag,"%d",&cc.c_OPS_flag);
-	sscanf(cnc->c_mmapflag,"%d",&cc.c_mmapflag);
-	sscanf(cnc->c_mmapasflag,"%d",&cc.c_mmapasflag);
-	sscanf(cnc->c_mmapnsflag,"%d",&cc.c_mmapnsflag);
-	sscanf(cnc->c_mmapssflag,"%d",&cc.c_mmapssflag);
-	sscanf(cnc->c_no_copy_flag,"%d",&cc.c_no_copy_flag);
-	sscanf(cnc->c_w_traj_flag,"%d",&cc.c_w_traj_flag);
-	sscanf(cnc->c_r_traj_flag,"%d",&cc.c_r_traj_flag);
-	sscanf(cnc->c_no_unlink,"%d",&cc.c_no_unlink);
-	sscanf(cnc->c_no_write,"%d",&cc.c_no_write);
-	sscanf(cnc->c_include_close,"%d",&cc.c_include_close);
-	sscanf(cnc->c_disrupt_flag,"%d",&cc.c_disrupt_flag);
-	sscanf(cnc->c_compute_flag,"%d",&cc.c_compute_flag);
-	sscanf(cnc->c_MS_flag,"%d",&cc.c_MS_flag);
-	sscanf(cnc->c_mmap_mix,"%d",&cc.c_mmap_mix);
-	sscanf(cnc->c_Kplus_flag,"%d",&cc.c_Kplus_flag);
-	sscanf(cnc->c_compute_time,"%f",&cc.c_compute_time);
-
-	strcpy(write_traj_filename,cc.c_write_traj_filename);
-	strcpy(read_traj_filename,cc.c_read_traj_filename);
-	numrecs64 = cc.c_numrecs64;
-	strcpy(pit_hostname,cc.c_pit_hostname);
-	strcpy(pit_service,cc.c_pit_service);
-	reclen = cc.c_reclen;
-	testnum = cc.c_testnum;
-	chid = cc.c_client_number;
-	workdir=cc.c_working_dir;
-	oflag = cc.c_oflag;
-	/* Child's absolute filename to use is provided */
-	mfflag = cc.c_mfflag;
-	if(mfflag)
-		strcpy(filearray[chid],cc.c_file_name);
-	if(cdebug)
-	{
-		fprintf(newstdout,"File name given %s\n",cc.c_file_name);
-		fflush(newstdout);
-	}
-	unbuffered = cc.c_unbuffered;
-	noretest = cc.c_noretest;
-	notruncate = cc.c_notruncate;
-	read_sync = cc.c_read_sync;
-	jflag = cc.c_jflag;
-	direct_flag = cc.c_direct_flag;
-	cpuutilflag = cc.c_cpuutilflag;
-	seq_mix = cc.c_seq_mix;
-	async_flag = cc.c_async_flag;
-	k_flag = cc.c_k_flag;
-	h_flag = cc.c_h_flag;
-	mflag = cc.c_mflag;
-	pflag = cc.c_pflag;
-	stride_flag = cc.c_stride_flag;
-	fetchon = cc.c_fetchon;
-	verify = cc.c_verify;
-	diag_v = cc.c_diag_v;
-	dedup = cc.c_dedup;
-	dedup_interior = cc.c_dedup_interior;
-	dedup_compress = cc.c_dedup_compress;
-	dedup_mseed = cc.c_dedup_mseed;
-	hist_summary = cc.c_hist_summary;
-	op_rate = cc.c_op_rate;
-	op_rate_flag = cc.c_op_rate_flag;
-	if(diag_v)
-		sverify = 0;
-	else
-		sverify = cc.c_sverify;
-	file_lock = cc.c_file_lock;
-	rlocking = cc.c_rec_lock;
-	Kplus_readers = cc.c_Kplus_readers;
-	multiplier = cc.c_multiplier;
-	share_file = cc.c_share_file;
-	pattern = cc.c_pattern;
-	/* proto_version = cc.c_version; Don't copy it back. */
-	base_time=cc.c_base_time;
-	num_child=(long long)cc.c_num_child;
-	pct_read=cc.c_pct_read;
-	advise_op=cc.c_advise_op;
-	advise_flag=cc.c_advise_flag;
-	restf=cc.c_restf;
-	mygen=cc.c_mygen;
-	Q_flag = cc.c_Q_flag;
-	L_flag = cc.c_L_flag;
-	xflag = cc.c_xflag;
-	w_traj_flag = cc.c_w_traj_flag;
-	r_traj_flag = cc.c_r_traj_flag;
-	include_flush = cc.c_include_flush;
-	OPS_flag = cc.c_OPS_flag;
-	purge = cc.c_purge;
-	mmapflag = cc.c_mmapflag;
-	mmapasflag = cc.c_mmapasflag;
-	mmapnsflag = cc.c_mmapnsflag;
-	mmapssflag = cc.c_mmapssflag; 
-	no_copy_flag = cc.c_no_copy_flag;
-	no_unlink = cc.c_no_unlink;
-	no_write = cc.c_no_write;
-	include_close = cc.c_include_close;
-	disrupt_flag = cc.c_disrupt_flag;
-	compute_flag = cc.c_compute_flag;
-	MS_flag = cc.c_MS_flag;
-	mmap_mix = cc.c_mmap_mix;
-	Kplus_flag = cc.c_Kplus_flag;
-	delay = cc.c_delay;
-	stride = cc.c_stride;
-	rest_val = cc.c_rest_val;
-	depth = cc.c_depth;
-	delay_start = cc.c_delay_start;
-	compute_time = cc.c_compute_time;
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d change directory to %s\n",(int)chid,workdir);
-		fflush(newstdout);
-	}
-	if(purge)
-		alloc_pbuf();
-
-	/* 6. Change to the working directory */
-
-	if(chdir(workdir)<0)
-		client_error=errno;
-	start_child_listen_loop(); /* The async channel listener */
-
-	/* Need to start this after getting into the correct directory */
-	if(w_traj_flag)
-		w_traj_size();
-	if(r_traj_flag)
-		r_traj_size();
-
-	get_resolution(); 		/* Get my clock resolution */
-	if(hist_summary)
-	{
-		printf("Child got HISTORY flag\n");
-	}
-
-	/* 7. Run the test */
-	switch(testnum) {
-
-	case THREAD_WRITE_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_write_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_write_test((long)0);
-		break;
-#ifdef HAVE_PREAD
-	case THREAD_PWRITE_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_pwrite_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_pwrite_test((long)0);
-		break;
-#endif
-	case THREAD_REWRITE_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_rewrite_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_rwrite_test((long)0);
-		break;
-	case THREAD_READ_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_read_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_read_test((long)0);
-		break;
-#ifdef HAVE_PREAD
-	case THREAD_PREAD_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_read_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_pread_test((long)0);
-		break;
-#endif
-	case THREAD_REREAD_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_reread_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_rread_test((long)0);
-		break;
-	case THREAD_STRIDE_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_stride_read_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_stride_read_test((long)0);
-		break;
-	case THREAD_RANDOM_READ_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running random read test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_ranread_test((long)0);
-		break;
-	case THREAD_RANDOM_WRITE_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running random write test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_ranwrite_test((long)0);
-		break;
-	case THREAD_REVERSE_READ_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running reverse read test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_reverse_read_test((long)0);
-		break;
-	case THREAD_RANDOM_MIX_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running mixed workload test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_mix_test((long)0);
-		break;
-	case THREAD_FWRITE_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_fwrite_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_fwrite_test((long)0);
-		break;
-	case THREAD_FREAD_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running thread_fread_test\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_fread_test((long)0);
-		break;
-	case THREAD_CLEANUP_TEST : 
-		if(cdebug>=1)
-		{
-			fprintf(newstdout,"Child %d running cleanup\n",(int)chid);
-			fflush(newstdout);
-		}
-		thread_cleanup_test((long)0);
-		break;
-	};
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %d finished running test.\n",(int)chid);
-		fflush(newstdout);
-	}
-	
-	/* 8. Release the listen and send sockets to the master */
-	stop_child_listen(l_sock);
-
-	exit(0);
-}
-
-/*
- * Clients tell the master their statistics, set the stopped flag, and set shared memory
- * child_flag to tell the master they are finished. Also each client report all statistics.
- */
-#ifdef HAVE_ANSIC_C
-void
-tell_master_stats(testnum , chid, throughput, actual, 
-		 cpu_time, wall_time, stop_flag, child_flag)
-int testnum; 
-long long chid; 
-double throughput, actual, wall_time;
-float cpu_time;
-char stop_flag;
-long long child_flag;
-/*
-void
-tell_master_stats(int testnum , long long chid, double tthroughput, 
-		double actual, float cpu_time, float wall_time, 
-		char stop_flag, long long child_flag)
-*/
-#else
-void
-tell_master_stats(testnum , chid, throughput, actual, cpu_time, 
-	wall_time, stop_flag, child_flag)
-int testnum; 
-long long chid; 
-double throughput, actual, wall_time;
-char stop_flag;
-float cpu_time;
-long long child_flag;
-#endif
-{
-	struct master_command mc;
-	bzero(&mc,sizeof(struct master_command));
-	mc.m_client_number = (int) chid;
-	mc.m_client_error = (int) client_error;
-	mc.m_throughput= throughput;
-	mc.m_testnum = testnum;
-	mc.m_actual = actual;
-	mc.m_cputime = cpu_time;
-	mc.m_walltime = wall_time;
-	mc.m_stop_flag = stop_flag;
-	mc.m_child_flag = child_flag;
-	mc.m_command = R_STAT_DATA;
-	mc.m_mygen = mygen;
-	mc.m_version = proto_version;
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %d: Tell master stats and terminate\n",(int)chid);
-		fflush(newstdout);
-	}
-	child_send(controlling_host_name,(struct master_command *)&mc, sizeof(struct master_command));
-}
-	
-/*
- * Stop the master listener loop service.
- * Currently this is not used. The master_join_count
- * variable is used to terminate the loop service.
- */
-#ifdef HAVE_ANSIC_C
-void
-stop_master_listen_loop(void)
-#else
-void
-stop_master_listen_loop()
-#endif
-{
-	if(mdebug>=1)
-		printf("Stopping Master listen loop");
-	kill(master_listen_pid,SIGKILL);
-}
-
-
-/*
- * Clients tell the master that I am at the barrier and ready
- * for the message to start work.
- */
-#ifdef HAVE_ANSIC_C
-void
-tell_master_ready(long long chid)
-#else
-void
-tell_master_ready(chid)
-long long chid;
-#endif
-{
-	struct master_command mc;
-	bzero(&mc,sizeof(struct master_command));
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %d: Tell master to go\n",(int)chid);
-		fflush(newstdout);
-	}
-	mc.m_command = R_FLAG_DATA;
-	mc.m_mygen = mygen;
-	mc.m_version = proto_version;
-	mc.m_child_flag = CHILD_STATE_READY; 
-	mc.m_client_number = (int)chid; 
-	mc.m_client_error = client_error;
-	child_send(controlling_host_name,(struct master_command *)&mc, sizeof(struct master_command));
-}
-
-/*
- * Clients wait at a barrier for the master to tell them
- * to begin work. This is the function where they wait.
- */
-#ifdef HAVE_ANSIC_C
-void
-wait_for_master_go(long long chid)
-#else
-void
-wait_for_master_go(chid)
-long long chid;
-#endif
-{
-	struct client_neutral_command *cnc;
-	struct client_command cc;
-	bzero(&cc,sizeof(struct client_command));
-	child_listen(l_sock,sizeof(struct client_neutral_command));
-	cnc = (struct client_neutral_command *)child_rcv_buf;
-	sscanf(cnc->c_command,"%d",&cc.c_command);
-	if(cc.c_command == R_TERMINATE || cc.c_command==R_DEATH)
-	{
-		if(cdebug)
-		{
-			fprintf(newstdout,"Child %d received terminate on sync channel at barrier !!\n",(int)chid);
-			fflush(newstdout);
-		}
-		exit(1);
-	}
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %d return from wait_for_master_go\n",(int)chid);
-		fflush(newstdout);
-	}
-}
-
-/*
- * Create a master listener for receiving data from the
- * many children. As the children finish they will send
- * their statistics and terminate. When the master_join_count 
- * goes to zero then it is time to stop this service.
- * When this service exits then the parent will know
- * that all of the children are done.
- */
-#ifdef HAVE_ANSIC_C
-void
-start_master_listen_loop(int num)
-#else
-void
-start_master_listen_loop(num)
-int num;
-#endif
-{
-	int i;
-	struct child_stats *child_stat;
-	struct master_neutral_command *mnc;
-	struct master_command mc;
-	int temp;
-	struct timespec req,rem;
-
-	req.tv_sec = 0;
-	req.tv_nsec = 10000000;
-	rem.tv_sec = 0;
-	rem.tv_nsec = 10000000;
-
-
-	master_join_count=num;
-	master_listen_pid=fork();
-	if(master_listen_pid!=0)
-		return;
-	if(mdebug>=1)
-		printf("Starting Master listen loop m %d c %d count %d\n",master_iozone, 
-			client_iozone,num);
-
-	while(master_join_count)
-	{
-		master_listen(master_listen_socket,sizeof(struct master_neutral_command));
-		mnc=(struct master_neutral_command *)&master_rcv_buf[0];
-		
-		/*
-		 * Convert from string format to arch format
-		 */
-		sscanf(mnc->m_command,"%d",&mc.m_command);
-		sscanf(mnc->m_client_number,"%d",&mc.m_client_number);
-		sscanf(mnc->m_client_error,"%d",&mc.m_client_error);
-		sscanf(mnc->m_mygen,"%d",&mc.m_mygen);
-		sscanf(mnc->m_version,"%d",&mc.m_version);
-		if(mc.m_version != proto_version)
-		{
-			printf("Client # %d is not running the same version of Iozone !\n",
-				mc.m_client_number);
-		}		
-		if(mc.m_client_error != 0)
-		{
-			printf("\nClient # %d reporting an error %s !\n",
-				mc.m_client_number,strerror(mc.m_client_error));
-		}		
-#ifdef NO_PRINT_LLD
-		sscanf(mnc->m_child_flag,"%ld",&mc.m_child_flag);
-#else
-		sscanf(mnc->m_child_flag,"%lld",&mc.m_child_flag);
-#endif
-		sscanf(mnc->m_actual,"%f",&mc.m_actual);
-		sscanf(mnc->m_throughput,"%f",&mc.m_throughput);
-		sscanf(mnc->m_cputime,"%f",&mc.m_cputime);
-		sscanf(mnc->m_walltime,"%f",&mc.m_walltime);
-		sscanf(mnc->m_stop_flag,"%d",&temp);
-		mc.m_stop_flag = temp;
-
-		switch(mc.m_command) {
-		case R_STAT_DATA:
-			if(mc.m_mygen != mygen)
-			{
-				/* 
-				 * >>> You are NOT one of my children !!!  <<<
-				 * Probably children left behind from another run !!!
-				 * Ignore their messages, and go on without them.
-				 */
-				printf("*** Unknown Iozone children responding !!! ***\n");
-				continue;
-			}
-			i = mc.m_client_number;
-			if(mdebug)
-				printf("loop: R_STAT_DATA for client %d\n",i);
-			child_stat = (struct child_stats *)&shmaddr[i];	
-			child_stat->flag = mc.m_child_flag;
-			child_stat->actual = mc.m_actual;
-			child_stat->throughput = mc.m_throughput;
-			child_stat->cputime = mc.m_cputime;
-			child_stat->walltime = mc.m_walltime;
-			*stop_flag = mc.m_stop_flag;
-			master_join_count--;
-			break;
-		case R_FLAG_DATA:
-			if(mc.m_mygen != mygen)
-			{
-				/* You are NOT one of my children !!! */
-				printf("*** Unknown Iozone children responding !!! ***\n");
-				continue;
-			}
-			if(mdebug)
-				printf("loop: R_FLAG_DATA: Client %d flag %d \n",
-				  (int)mc.m_client_number,
-				  (int)mc.m_child_flag);
-			i = mc.m_client_number;
-			child_stat = (struct child_stats *)&shmaddr[i];	
-			child_stat->flag = (long long)(mc.m_child_flag);
-			break;
-		case R_STOP_FLAG:
-			if(mc.m_mygen != mygen)
-			{
-				/* You are NOT one of my children !!! */
-				printf("*** Unknown Iozone children responding !!! ***\n");
-				continue;
-			}
-			if(mdebug)
-			  printf("Master loop: R_STOP_FLAG: Client %d STOP_FLAG \n",
-				  (int)mc.m_client_number);
-			*stop_flag=1;
-			distribute_stop();
-			break;
-		}
-			
-	}
-	/* Let the clients report results before exiting.
-           Also, exiting too quickly can close the async
-           socket to the child, and cause it to become ill.
-           On Solaris, it gets stuck in a 0=read() loop. */
-
-#if defined(Windows)
-	sleep(1);
-#else
-	nanosleep(&req,&rem);
-#endif
-
-	exit(0);
-}
-/*
- * Create a client listener for receiving async data from the
- * the master. 
- */
-#ifdef HAVE_ANSIC_C
-void
-start_child_listen_loop(void)
-#else
-void
-start_child_listen_loop()
-#endif
-{
-	int i;
-	struct child_stats *child_stat;
-	struct client_command cc;
-	struct client_neutral_command *cnc;
-
-	client_listen_pid=fork();
-	if(client_listen_pid!=0)
-		return;
-	if(cdebug>=1)
-	{
-		fprintf(newstdout,"Child %d starting client listen loop\n",(int)chid);
-		fflush(newstdout);
-	}
-	while(1)
-	{
-		bzero(&cc,sizeof(struct client_command));
-		child_listen_async(l_async_sock,sizeof(struct client_neutral_command));
-		cnc=(struct client_neutral_command *)&child_async_rcv_buf;
-		/*
-		 * Convert from string format to arch format
-	 	 */
-		sscanf(cnc->c_command,"%d",&cc.c_command);
-		sscanf(cnc->c_client_number,"%d",&cc.c_client_number);
-		sscanf(cnc->c_stop_flag,"%d",&cc.c_stop_flag);
-
-		switch(cc.c_command) {
-		case R_STOP_FLAG:
-			i = cc.c_client_number;
-			if(cdebug)
-			{
-				fprintf(newstdout,"child loop: R_STOP_FLAG for client %d\n",i);
-				fflush(newstdout);
-			}
-			child_stat = (struct child_stats *)&shmaddr[i];	
-			*stop_flag = cc.c_stop_flag; /* In shared memory with other copy */
-			sent_stop=1;
-			break;
-		case R_TERMINATE:
-			if(cdebug)
-			{
-				fprintf(newstdout,"Child loop: R_TERMINATE: Client %d \n",
-				  (int)cc.c_client_number);
-				fflush(newstdout);
-			}
-			sleep(2);
-			/* Aync listener goes away */
-			stop_child_listen(l_async_sock);
-			exit(0);
-		case R_DEATH:
-			if(cdebug)
-			{
-				fprintf(newstdout,"Child loop: R_DEATH: Client %d \n",
-				  (int)cc.c_client_number);
-				fflush(newstdout);
-			}
-			i = cc.c_client_number;
-			child_remove_files(i);
-			sleep(2);
-			/* Aync listener goes away */
-			stop_child_listen(l_async_sock);
-			exit(0);
-		}
-			
-	}
-}
-
-/*
- * The controlling process "master" tells the children to begin.
- */
-
-#ifdef HAVE_ANSIC_C
-void
-tell_children_begin(long long childnum)
-#else
-void
-tell_children_begin(childnum)
-long long childnum;
-#endif
-{
-	struct client_command cc;
-	int x;
-	bzero(&cc,sizeof(struct client_command));
-	x = (int) childnum;
-	if(mdebug>=1)
-		printf("Master: Tell child %d to begin\n",x);
-	cc.c_command = R_FLAG_DATA;
-	cc.c_child_flag = CHILD_STATE_BEGIN; 
-	cc.c_client_number = (int)childnum; 
-	master_send(master_send_sockets[x],child_idents[x].child_name, &cc,sizeof(struct client_command));
-}
-
-/*
- * The master waits here for all of the the children to terminate.
- * When the children are done the the master_join_count will be at zero
- * and the master_listen_loop will exit. This function waits for this to happen.
- */
-#ifdef HAVE_ANSIC_C
-void
-wait_dist_join(void)
-#else
-void
-wait_dist_join()
-#endif
-{
-	wait(0);
-	if(mdebug)
-		printf("Master: All children have finished. Sending terminate\n");
-	terminate_child_async(); /* All children are done, so terminate their async channel */
-	current_client_number=0; /* start again */
-}
-
-
-/* 
- * This function reads a file that contains client information. 
- * The information is:
- * 	client name (DNS usable name)
- *	client working directory (where to run the test)
- * 	client directory that contains the Iozone executable.
- *
- * If the first character in a line is a # then it is a comment.
- * The maximum number of clients is MAXSTREAMS.
- */
-#ifdef HAVE_ANSIC_C
-int
-get_client_info(void)
-#else
-int
-get_client_info()
-#endif
-{
-	FILE *fd;
-	char *ret1;
-	int count;
-	char buffer[200];
-	count=0;
-	fd=fopen(client_filename,"r");
-	if(fd == (FILE *)NULL)
-	{
-		printf("Unable to open client file \"%s\"\n",
-			client_filename);
-		exit(176);
-	}
-	while(1)
-	{
-          	if (count > MAXSTREAMS) {                                                                           
-            	  printf("Too many lines in client file - max of %d supported\n",
-			MAXSTREAMS);
-            	  exit(7);
-          	}
-		ret1=fgets(buffer,200,fd);
-		if(ret1== (char *)NULL)
-			break;
-		count+=parse_client_line(buffer,count);
-	}
-	fclose(fd);
-	return(count);
-}
-
-
-/*
- * This function parses a line from the client file. It is
- * looking for:
- *	Client name  (DNS usable)
- *	Client working directory (where to run the test )
- *	Client path to Iozone executable.
- *
- * Lines that start with # are comments.
- */
-
-#ifdef HAVE_ANSIC_C
-int 
-parse_client_line(char *buffer,int line_num)
-#else
-int
-parse_client_line(buffer, line_num)
-char *buffer;
-int line_num;
-#endif
-{
-	int num;
-	/* Format is clientname, workdir, execute_path */
-	/* If column #1 contains a # symbol then skip this line */
-
-	if(buffer[0]=='#')
-		return(0);
-	num=sscanf(buffer,"%s %s %s %s\n",
-		child_idents[line_num].child_name,
-		child_idents[line_num].workdir,
-		child_idents[line_num].execute_path,
-		child_idents[line_num].file_name);
-	if((num > 0) && (num !=3) && (num !=4))
-	{
-		printf("Bad Client Identity at entry %d\n",line_num);
-		printf("Client: -> %s  Workdir: -> %s  Execute_path: -> %s \n",
-		child_idents[line_num].child_name,
-		child_idents[line_num].workdir,
-		child_idents[line_num].execute_path);
-		exit(203);
-	}
-	if(num == 4)
-		mfflag++;
-
-	return(1);
-}
-
-/* 
- * This is a mechanism that the child uses to remove all
- * of its temporary files. Only used at terminate time.
- */
-#ifdef HAVE_ANSIC_C
-void
-child_remove_files(int i)
-#else
-void
-child_remove_files(i)
-int i;
-#endif
-{
-
-	char *dummyfile[MAXSTREAMS];           /* name of dummy file     */
-	dummyfile[i]=(char *)malloc((size_t)MAXNAMESIZE);
-	if(mfflag)
-	{
-		sprintf(dummyfile[i],"%s",filearray[i]);
-	}
-	else
-	{
-		sprintf(dummyfile[i],"%s.DUMMY.%d",filearray[i],i);
-	}
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d remove: %s \n",(int)chid, dummyfile[i]);
-		fflush(newstdout);
-	}
-	if(check_filename(dummyfile[i]))
-		unlink(dummyfile[i]);
-}
-
-	
-/*
- * The master tells the child async listener that it is time
- * to terminate its services.
- */
-#ifdef HAVE_ANSIC_C
-void
-terminate_child_async(void)
-#else
-void
-terminate_child_async()
-#endif
-{
-	int i;
-	struct client_command cc;
-	bzero(&cc,sizeof(struct client_command));
-	cc.c_command = R_TERMINATE;
-	for(i=0;i<num_child;i++)
-	{
-		child_idents[i].state = C_STATE_ZERO;
-		cc.c_client_number = (int)i; 
-		if(mdebug)
-			printf("Master terminating async channels to children.\n");
-		master_send(master_send_async_sockets[i],child_idents[i].child_name, &cc,sizeof(struct client_command));
-	}
-}
-
-/*
- * The master has received an update to the stop flag and is
- * now distributing this to all of the clients.
- */
-#ifdef HAVE_ANSIC_C
-void
-distribute_stop(void)
-#else
-void
-distribute_stop()
-#endif
-{
-	int i;
-	struct client_command cc;
-
-	/*
-	 * Only send one stop to the clients. Each client will
-	 * send stop to the master, but the master only needs
-	 * to distribute the first stop. Without this, the 
-	 * master may distribute too many stops and overflow
-	 * the socket buffer on the client.
-	 */
-	if(sent_stop)
-	{
-		if(mdebug)
-		{
-		  s_count++;
-		  printf("Master not send stop %d\n",s_count);
-		}
-		return;
-	}
-	bzero(&cc,sizeof(struct client_command));
-	cc.c_command = R_STOP_FLAG;
-	cc.c_stop_flag = 1;
-	for(i=0;i<num_child;i++)
-	{
-		cc.c_client_number = (int)i; 
-		if(mdebug)
-			printf("Master distributing stop flag to child %d\n",i);
-		master_send(master_send_async_sockets[i],child_idents[i].child_name, &cc,sizeof(struct client_command));
-	}
-	sent_stop=1;
-}
-
-/*
- * Child is sending its stop flag to the master.
- */
-#ifdef HAVE_ANSIC_C
-void
-send_stop(void)
-#else
-void
-send_stop()
-#endif
-{
-	struct master_command mc;
-
-	bzero(&mc, sizeof(struct master_command));
-	mc.m_command = R_STOP_FLAG;
-	mc.m_mygen = mygen;
-	mc.m_version = proto_version;
-	mc.m_client_number = chid;
-	mc.m_client_error = client_error;
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child %d sending stop flag to master\n",(int)chid);
-		fflush(newstdout);
-	}
-        child_send(controlling_host_name,(struct master_command *)&mc, sizeof(struct master_command));
-	client_error=0;  /* clear error, it has been delivered */
-}
-
-/*
- * This is very tricky stuff. There are points in time when 
- * someone can hit control-c and cause the master to want to die.
- * Ok..now how does the master contact all the clients and tell
- * them to stop ?  The clients may be in 3 different states.
- * Not started yet, Joined and waiting for the WHO information, 
- * or at the barrier.  If the client is not started... cool.
- * ignore it. If the client has joined and is waiting at WHO
- * then the client does not have an async listener yet. So 
- * the master only needs to tell the client (sync) channel
- * to terminate. If the client is at the barrier then the 
- * client has two processes. One at the barrier and another
- * that is providing the async services. So... the master
- * needs to terminate both of these processes.
- */
-#ifdef HAVE_ANSIC_C
-void
-cleanup_children(void)
-#else
-void
-cleanup_children()
-#endif
-{
-	int i;
-	struct client_command cc;
-	bzero(&cc,sizeof(struct client_command));
-	cc.c_command = R_DEATH;
-	for(i=0;i<num_child;i++)
-	{
-		cc.c_client_number = (int)i; 
-		/* Child not started yet */
-		if(child_idents[i].state == C_STATE_ZERO)
-			;
-		/* Child is waiting for who info */
-		if(child_idents[i].state == C_STATE_WAIT_WHO)
-		{
-			if(mdebug)
-				printf("Master sending signaled death to child !!\n");
-			master_send(master_send_sockets[i],child_idents[i].child_name, &cc,sizeof(struct client_command));
-		}
-		/* Child is waiting at the barrier */
-		if(child_idents[i].state == C_STATE_WAIT_BARRIER)
-		{
-			if(mdebug)
-				printf("Master sending signaled death to child !!\n");
-			master_send(master_send_sockets[i],child_idents[i].child_name, &cc,sizeof(struct client_command));
-			if(mdebug)
-				printf("Master sending signaled death to child async !!\n");
-			master_send(master_send_async_sockets[i],child_idents[i].child_name, &cc,sizeof(struct client_command));
-		}
-			
-	}
-}
-
-/*
- * This closes the file descriptors that were created for the master send and async send
- * at the end of each phase of the throughput testing.
- */
-#ifdef HAVE_ANSIC_C
-void
-cleanup_comm(void)
-#else
-void
-cleanup_comm()
-#endif
-{
-	int i;
-	for(i=0;i<num_child;i++)
-	{
-        	close(master_send_sockets[i]);
-        	close(master_send_async_sockets[i]);
-	}
-}
-
-#ifdef HAVE_ANSIC_C
-void
-find_remote_shell(char *shell)
-#else
-void
-find_remote_shell(shell)
-char *shell;
-#endif
-{
-	char *value;
-	value=(char *)getenv("RSH");
-	if(value)
-	{
-		strcpy(shell,value);
-		return;
-	}
-#ifdef _HPUX_SOURCE
-	strcpy(shell,"remsh");
-#else
-	strcpy(shell,"rsh");
-#endif
-	return;
-}	
-#ifdef HAVE_ANSIC_C
-void
-find_external_mon(char * imon_start, char * imon_stop)
-#else
-void
-find_external_mon(imon_start,imon_stop)
-char *imon_start,*imon_stop;
-#endif
-{
-	char *start,*stop,*sync;
-	imon_start[0]=(char)0;
-	imon_stop[0]=(char)0;
-	start=(char *)getenv("IMON_START");
-	if(start)
-	{
-		strcpy(imon_start,start);
-	}
-	stop=(char *)getenv("IMON_STOP");
-	if(stop)
-	{
-		strcpy(imon_stop,stop);
-	}
-	sync=(char *)getenv("IMON_SYNC");
-	if(sync)
-	{
-		imon_sync=1;
-	}
-
-	return;
-}	
-
-/*
- * This test is only valid in throughput mode.
- */
-
-#ifdef HAVE_ANSIC_C
-void 
-mix_perf_test(off64_t kilo64,long long reclen,long long *data1,long long *data2)
-#else
-void 
-mix_perf_test(kilo64,reclen,data1,data2)
-off64_t kilo64;
-long long reclen;
-long long *data1,*data2;
-#endif
-{
-	return;
-/*
-	printf("\nMix mode test only valid in throughput mode.\n");
-	signal_handler();
-	exit(180);
-*/
-}
-
-/*
- * Speed check code 
- */
-char *sp_dest; /* Name of destination for messages */
-
-int sp_child_listen_port = SP_CHILD_LISTEN_PORT;
-int sp_child_esend_port  = SP_CHILD_ESEND_PORT;
-
-int sp_master_listen_port = SP_MASTER_LISTEN_PORT;
-int sp_master_esend_port  = SP_MASTER_ESEND_PORT;
-
-int sp_master_results_port = SP_MASTER_RESULTS_PORT;
-
-struct in_addr sp_my_cs_addr;
-struct in_addr sp_my_ms_addr;
-struct sockaddr_in sp_child_sync_sock, sp_child_async_sock;
-struct sockaddr_in sp_master_sync_sock, sp_master_async_sock;
-char *sp_buf;
-char sp_command[1024];
-char sp_remote_shell[100];
-int sp_child_mode;
-int sp_count,sp_msize,sp_once;
-int sp_tcount;
-double sp_start_time,sp_finish_time;
-void sp_send_result(int, int, float );
-void sp_get_result(int , int );
-void sp_do_child_t(void);
-void sp_do_master_t(void);
-void speed_main(char *, char *, long long ,long long , int);
-int sp_cret;
-char sp_remote_host[256];
-char sp_master_host[256];
-char sp_location[256];
-
-
-/*
- * This is the front end for the speed check code
- */
-#ifdef HAVE_ANSIC_C
-void
-speed_main(char *client_name, char *e_path, long long reclen,
-	long long kilos, int client_flag)
-#else
-void
-speed_main(client_name, e_path, reclen, kilos, client_flag)
-char *client_name;
-char *e_path;
-long long reclen;
-long long kilos;
-int client_flag;
-#endif
-{
-	int x;
-
-
-	strcpy(sp_master_host,controlling_host_name);
-	sp_msize=(int)reclen;
-	sp_count=((int)kilos*1024)/(int)reclen;
-	if(!client_flag)
-	{
-		printf("\n");
-		strcpy(sp_remote_host,client_name);
-		strcpy(sp_location,e_path);
-	}
-
-	if(client_flag)
-		sp_child_mode=1;
-	sp_buf=(char *)malloc(sp_msize);
-	bzero(sp_buf,sp_msize); /* get page faults out of the way */
-
-	if(sp_child_mode)
-	{
-		close(0);
-		close(1);
-		close(2);
-		if(cdebug)
-		{
-			newstdin=freopen("/tmp/don_in","r+",stdin);
-			newstdout=freopen("/tmp/don_out","a+",stdout);
-			newstderr=freopen("/tmp/don_err","a+",stderr);
-		}
-		sp_dest=sp_master_host;
-		sp_do_child_t();
-		free(sp_buf);
-		exit(0);
-	}
-	x=fork();
-	if(x==0)
-	{
-		find_remote_shell(sp_remote_shell);
-	 sprintf(sp_command,"%s %s %s -+s -t 1 -r %d -s %d -+c %s -+t ",
-			sp_remote_shell, sp_remote_host, 
-			sp_location, (int)reclen/1024, 
-			(int)kilos,sp_master_host);
-		/*printf("%s\n",sp_command);*/
-		junk=system(sp_command);
-		exit(0);
-	}
-	else
-	{
-		if(!sp_once)
-		{
-		printf("***************************************************\n");
-		printf("* >>>>>     Client Network Speed check      <<<<< *\n");
-		printf("***************************************************\n\n");
-			printf("Master: %s\n",sp_master_host);
-			printf("Transfer size %d bytes  \n",sp_msize);
-			printf("Count %d\n",sp_count);
-			printf("Total size %d kbytes  \n\n",
-				(sp_msize*sp_count)/1024);
-			sp_once=1;
-		}
-		sp_dest=sp_remote_host;
-		sleep(1);
-		sp_do_master_t();
-		free(sp_buf);
-	}
-}
-
-/*
- * Get results back from the client.
- */
-#ifdef HAVE_ANSIC_C
-void
-sp_get_result(int port,int flag)
-#else
-void
-sp_get_result(port,flag)
-int port,flag;
-#endif
-{
-	int tcfd;
-	float throughput;
-	int count;
-	char mybuf[1024];
-	int sp_offset,xx;
-
-	tcfd=sp_start_master_listen(port, 1024);
-	sp_offset=0;
-	while(sp_offset < 1024)
-	{
-		xx=read(tcfd,&mybuf[sp_offset],1024);
-		sp_offset+=xx;
-	}
-	sscanf(mybuf,"%d %f",&count,&throughput);
-	if(!flag)
-		printf("%-20s received  %10d Kbytes @ %10.2f Kbytes/sec \n",
-			sp_remote_host,count,throughput);
-	else
-		printf("%-20s  sent     %10d Kbytes @ %10.2f Kbytes/sec \n",
-			sp_remote_host,count,throughput);
-	close(tcfd);
-}
-
-/*
- * Send results to the master.
- */
-#ifdef HAVE_ANSIC_C
-void
-sp_send_result(int port, int count, float throughput)
-#else
-void
-sp_send_result(port, count, throughput)
-int port,count; 
-float throughput;
-#endif
-{
-	int msfd;
-	char mybuf[1024];
-	sprintf(mybuf,"%d %f",count, throughput);
-	msfd=sp_start_child_send(sp_dest, port, &sp_my_cs_addr);
-	junk=write(msfd,mybuf,1024);
-	if(cdebug)
-	{
-		fprintf(newstdout,"Sending result\n");
-		fflush(newstdout);
-	}
-	close(msfd);
-}
-
-/*
- * Start the channel for the master to send a message to 
- * a child on a port that the child
- * has created for the parent to use to communicate.
- */
-#ifdef HAVE_ANSIC_C
-int
-sp_start_master_send(char *sp_child_host_name, int sp_child_listen_port, struct in_addr *sp_my_ms_addr)
-#else
-int
-sp_start_master_send(sp_child_host_name, sp_child_listen_port, sp_my_ms_addr)
-char *sp_child_host_name; 
-int sp_child_listen_port;
-struct in_addr *sp_my_ms_addr;
-#endif
-{
-	int rc,master_socket_val;
-	struct sockaddr_in addr,raddr;
-	struct hostent *he;
-	int port,tmp_port;
-	int ecount=0;
-	struct in_addr *ip;
-	struct timespec req,rem;
-
-	req.tv_sec = 0;
-	req.tv_nsec = 10000000;
-	rem.tv_sec = 0;
-	rem.tv_nsec = 10000000;
-
-        he = gethostbyname(sp_child_host_name);
-        if (he == NULL)
-        {
-                printf("Master: Bad hostname >%s<\n",sp_child_host_name);
-		fflush(stdout);
-                exit(22);
-        }
-	if(mdebug ==1)
-	{
-	        printf("Master: start master send: %s\n", he->h_name);
-		fflush(stdout);
-	}
-        ip = (struct in_addr *)he->h_addr_list[0];
-#ifndef UWIN
-	if(mdebug ==1)
-	{
-        	printf("Master: child name: %s\n", (char *)inet_ntoa(*ip));
-        	printf("Master: child Port: %d\n", sp_child_listen_port);
-		fflush(stdout);
-	}
-#endif
-
-	port=sp_child_listen_port;
-	sp_my_ms_addr->s_addr = ip->s_addr;
-	/*port=CHILD_LIST_PORT;*/
-
-        raddr.sin_family = AF_INET;
-        raddr.sin_port = htons(port);
-        raddr.sin_addr.s_addr = ip->s_addr;
-        master_socket_val = socket(AF_INET, SOCK_STREAM, 0);
-        if (master_socket_val < 0)
-        {
-                perror("Master: socket failed:");
-                exit(23);
-        }
-        bzero(&addr, sizeof(struct sockaddr_in));
-	tmp_port=sp_master_esend_port;
-        addr.sin_port = htons(tmp_port);
-        addr.sin_family = AF_INET;
-        addr.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(master_socket_val, (struct sockaddr *)&addr,
-                                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	addr.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	if(mdebug ==1)
-	{
-		printf("Master: Bound port\n");
-		fflush(stdout);
-	}
-        if (rc < 0)
-        {
-                perror("Master: bind failed for sync channel to child.\n");
-                exit(24);
-        }
-#if defined(Windows)
-	sleep(1);
-#else
-	nanosleep(&req,&rem);
-#endif
-
-again:
-        rc = connect(master_socket_val, (struct sockaddr *)&raddr, 
-			sizeof(struct sockaddr_in));
-	if (rc < 0)
-        {
-		if(ecount++ < 300)
-		{
-#if defined(Windows)
-			sleep(1);
-#else
-			nanosleep(&req,&rem);
-#endif
-			/*sleep(1);*/
-			goto again;
-		}
-                perror("Master: connect failed\n");
-		printf("Error %d\n",errno);
-                exit(25);
-        }
-	if(mdebug ==1)
-	{
-		printf("Master Connected\n");
-		fflush(stdout);
-	}
-	return (master_socket_val);
-}
-
-/*
- * Start the childs listening service for messages from the master.
- */
-#ifdef HAVE_ANSIC_C
-int
-sp_start_child_listen(int listen_port, int size_of_message)
-#else
-int
-sp_start_child_listen(listen_port, size_of_message)
-int listen_port;
-int size_of_message;
-#endif
-{
-	int tsize;
-	int s,ns;
-	unsigned int me;
-	int rc;
-	int xx;
-	int tmp_port;
-	struct sockaddr_in *addr;
-	int sockerr;
-	int recv_buf_size=65536;
-	int optval=1;
-	xx = 0;
-	me=sizeof(struct sockaddr_in);
-	tsize=size_of_message; /* Number of messages to receive */
-        s = socket(AF_INET, SOCK_STREAM, 0);
-        if (s < 0)
-        {
-                perror("socket failed:");
-                exit(19);
-        }
-	sockerr = setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *)
-		&recv_buf_size, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 7\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (char *)
-		&optval, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 8\n");
-	}
-        bzero(&sp_child_sync_sock, sizeof(struct sockaddr_in));
-	tmp_port=sp_child_listen_port;
-        sp_child_sync_sock.sin_port = htons(tmp_port);
-        sp_child_sync_sock.sin_family = AF_INET;
-        sp_child_sync_sock.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(s, (struct sockaddr *)&sp_child_sync_sock,
-                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	sp_child_sync_sock.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	sp_child_listen_port = ntohs(sp_child_sync_sock.sin_port);
-	if(cdebug ==1)
-	{
-		fprintf(newstdout,"Child: Listen: Bound at port %d\n", tmp_port);
-		fflush(newstdout);
-	}
-	if(rc < 0)
-	{
-		if(cdebug ==1)
-		{
-		   fprintf(newstdout,"bind failed. Errno %d\n", errno);
-		   fflush(newstdout);
-		}
-		exit(20);
-	}
-
-	addr=&sp_child_async_sock;
-	listen(s,10);
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child enters accept\n");
-		fflush(newstdout);
-	}
-	ns=accept(s,(void *)addr,&me);
-	if(cdebug)
-	{
-		fprintf(newstdout,"Child attached for receive. Sock %d  %d\n", ns,errno);
-		fflush(newstdout);
-	}
-	close(s);
-	return(ns);
-}
-
-
-/*
- * The client runs this code
- */
-#ifdef HAVE_ANSIC_C
-void
-sp_do_child_t(void)
-#else
-void
-sp_do_child_t()
-#endif
-{
-	int i,y;
-	int offset;
-	int sp_tcount=0;
-	/* child */
-	/*
-	 * Child reads from master 
-	 */
-	sp_crfd=sp_start_child_listen(sp_child_listen_port, sp_msize);
-	sp_start_time=time_so_far();
-	for(i=0;i<sp_count;i++)
-	{
-		offset=0;
-		while(offset<sp_msize)
-		{
-			y=read(sp_crfd,&sp_buf[offset],sp_msize-offset);
-			if(y < 0)
-			{
-			      	if(cdebug)
-				{
-					fprintf(newstdout,"Child error %d offset %d\n",
-						errno,offset);
-					fflush(newstdout);
-				}
-				exit(1);
-			}
-			offset+=y;
-			if(cdebug)
-			{
-				fprintf(newstdout,"Child offset %d read %d\n",offset,y);
-				fflush(newstdout);
-			}
-		}
-		sp_tcount+=offset;
-	}
-	sp_finish_time=time_so_far();
-
-	close(sp_crfd);
-	sleep(1); /* Wait for master to get into sp_get_result */
-	sp_send_result(sp_master_results_port, sp_tcount/1024, 
-		(float)(sp_tcount/1024)/(sp_finish_time-sp_start_time));
-
-	sleep(1);
-	/*
-	 * Child writes to master 
-	 */
-	sp_csfd=sp_start_child_send(sp_dest, sp_master_listen_port,
-		&sp_my_cs_addr);
-	sp_tcount=0;
-	offset=0;
-	sp_start_time=time_so_far();
-	for(i=0;i<sp_count;i++)
-	{
-		y=write(sp_csfd,sp_buf,sp_msize);
-		sp_tcount+=y;
-	}
-	sp_finish_time=time_so_far();
-	close(sp_csfd);
-	sleep(1);
-	sp_send_result(sp_master_results_port, sp_tcount/1024, 
-		(float)(sp_tcount/1024)/(sp_finish_time-sp_start_time));
-	if(cdebug)
-	{
-		fprintf(newstdout,"child exits\n");
-		fflush(newstdout);
-	}
-}
-
-/*
- * The master runs this code.
- */
-#ifdef HAVE_ANSIC_C
-void
-sp_do_master_t(void)
-#else
-void
-sp_do_master_t()
-#endif
-{
-	int i,y,sp_offset;
-	int sp_tcount = 0;
-
-
-	/*
-	 * Master writes to child 
-	 */
-	sp_msfd=sp_start_master_send(sp_dest, sp_child_listen_port,
-		&sp_my_ms_addr);
-	sp_start_time=time_so_far();
-	for(i=0;i<sp_count;i++)
-	{
-		y=write(sp_msfd,sp_buf,sp_msize);
-		sp_tcount+=y;
-	}
-	sp_finish_time=time_so_far();
-	close(sp_msfd);
-	sp_msfd=0;
-	sp_get_result(sp_master_results_port,0);
-	printf("%-20s  sent     %10d kbytes @ %10.2f Kbytes/sec \n",
-		sp_master_host,sp_tcount/1024, 
-		(float)(sp_tcount/1024)/(sp_finish_time-sp_start_time));
-
-	/* printf("\n"); */
-	/*
-	 * Master reads from child 
-	 */
-	sp_mrfd=sp_start_master_listen(sp_master_listen_port, sp_msize);
-	sp_offset=0;
-	sp_start_time=time_so_far();
-	sp_tcount=0;
-	for(i=0;i<sp_count;i++)
-	{
-		sp_offset=0;
-		while(sp_offset<sp_msize)
-		{
-			y=read(sp_mrfd,&sp_buf[sp_offset],sp_msize-sp_offset);
-			if(y < 0)
-			{
-			      	printf("Master error %d offset %d\n",errno,
-					sp_offset);
-				exit(1);
-			}
-			sp_offset+=y;
-			/* printf("Master offset %d read %d\n",offset,y);*/
-		}
-		sp_tcount+=sp_offset;
-	}
-	sp_finish_time=time_so_far();
-	sp_get_result(sp_master_results_port,1);
-	printf("%-20s received  %10d kbytes @ %10.2f Kbytes/sec \n",
-		sp_master_host,sp_tcount/1024,
-		(float)(sp_tcount/1024)/(sp_finish_time-sp_start_time));
-	printf("\n");
-	wait(NULL);
-	close(sp_mrfd);
-	sp_mrfd=0;
-}
-
-/*
- * Start the master listening service for messages from the child.
- */
-#ifdef HAVE_ANSIC_C
-int
-sp_start_master_listen(int sp_master_listen_port, int sp_size_of_message)
-#else
-int
-sp_start_master_listen(sp_master_listen_port, sp_size_of_message)
-int sp_size_of_message;
-int sp_master_listen_port;
-#endif
-{
-	int tsize;
-	int s,ns;
-	unsigned int me;
-	int rc;
-	int xx;
-	int tmp_port;
-	struct sockaddr_in *addr;
-	int sockerr;
-	int recv_buf_size=65536;
-	int optval=1;
-	xx = 0;
-	me=sizeof(struct sockaddr_in);
-	tsize=sp_size_of_message; /* Number of messages to receive */
-        s = socket(AF_INET, SOCK_STREAM, 0);
-        if (s < 0)
-        {
-                perror("socket failed:");
-                exit(19);
-        }
-	sockerr = setsockopt (s, SOL_SOCKET, SO_RCVBUF, (char *)
-		&recv_buf_size, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 9\n");
-	}
-	sockerr = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (char *)
-		&optval, sizeof(int));
-	if ( sockerr == -1 ) {
-		perror("Error in setsockopt 10\n");
-	}
-        bzero(&sp_master_sync_sock, sizeof(struct sockaddr_in));
-	tmp_port=sp_master_listen_port;
-        sp_master_sync_sock.sin_port = htons(tmp_port);
-        sp_master_sync_sock.sin_family = AF_INET;
-        sp_master_sync_sock.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(s, (struct sockaddr *)&sp_master_sync_sock,
-                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	sp_master_sync_sock.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	sp_master_listen_port = ntohs(sp_master_sync_sock.sin_port);
-	if(mdebug ==1)
-	{
-		printf("Master: Listen: Bound at port %d\n", tmp_port);
-		fflush(stdout);
-	}
-	if(rc < 0)
-	{
-		perror("bind failed\n");
-		exit(20);
-	}
-
-	addr=&sp_master_async_sock;
-	listen(s,10);
-	if(mdebug)
-	{
-		printf("Master enters accept\n");
-		fflush(stdout);
-	}
-	ns=accept(s,(void *)addr,&me);
-	if(mdebug)
-	{
-		printf("Master attached for receive. Sock %d  %d\n", ns,errno);
-		fflush(stdout);
-	}
-	close(s);
-	return(ns);
-}
-
-/*
- * Start the channel for the child to send a message to 
- * the master.
- */
-#ifdef HAVE_ANSIC_C
-int
-sp_start_child_send(char *sp_master_host_name, int sp_master_listen_port, struct in_addr *sp_my_cs_addr)
-#else
-int
-sp_start_child_send(sp_master_host_name, sp_master_listen_port, sp_my_cs_addr)
-char *sp_master_host_name; 
-int sp_master_listen_port;
-struct in_addr *sp_my_cs_addr;
-#endif
-{
-	int rc,sp_child_socket_val;
-	struct sockaddr_in addr,raddr;
-	struct hostent *he;
-	int port,tmp_port;
-	struct in_addr *ip;
-	int ecount=0;
-	struct timespec req,rem;
-
-	req.tv_sec = 0;
-	req.tv_nsec = 10000000;
-	rem.tv_sec = 0;
-	rem.tv_nsec = 10000000;
-
-        he = gethostbyname(sp_master_host_name);
-        if (he == NULL)
-        {
-                printf("Child: Bad hostname >%s<\n",sp_master_host_name);
-		fflush(stdout);
-                exit(22);
-        }
-	if(cdebug ==1)
-	{
-	        fprintf(newstdout,"Child: start child send: %s\n", he->h_name);
-	        fprintf(newstdout,"To: %s at port %d\n",sp_master_host_name,
-			sp_master_listen_port);
-		fflush(newstdout);
-	}
-        ip = (struct in_addr *)he->h_addr_list[0];
-
-	port=sp_master_listen_port;
-	sp_my_cs_addr->s_addr = ip->s_addr;
-
-        raddr.sin_family = AF_INET;
-        raddr.sin_port = htons(port);
-        raddr.sin_addr.s_addr = ip->s_addr;
-        sp_child_socket_val = socket(AF_INET, SOCK_STREAM, 0);
-        if (sp_child_socket_val < 0)
-        {
-                perror("child: socket failed:");
-                exit(23);
-        }
-        bzero(&addr, sizeof(struct sockaddr_in));
-	tmp_port=sp_child_esend_port;
-        addr.sin_port = htons(tmp_port);
-        addr.sin_family = AF_INET;
-        addr.sin_addr.s_addr = INADDR_ANY;
-        rc = -1;
-        while (rc < 0)
-        {
-                rc = bind(sp_child_socket_val, (struct sockaddr *)&addr,
-                                                sizeof(struct sockaddr_in));
-		if(rc < 0)
-		{
-			tmp_port++;
-                	addr.sin_port=htons(tmp_port);
-			continue;
-		}
-        }
-	if(cdebug ==1)
-	{
-		fprintf(newstdout,"Child: Bound port %d\n",tmp_port);
-		fflush(newstdout);
-	}
-        if (rc < 0)
-        {
-                perror("Child: bind failed for sync channel to child.\n");
-                exit(24);
-        }
-#if defined(Windows)
-	sleep(1);
-#else
-	nanosleep(&req,&rem);
-#endif
-again:
-        rc = connect(sp_child_socket_val, (struct sockaddr *)&raddr, 
-			sizeof(struct sockaddr_in));
-	if (rc < 0)
-        {
-		if(ecount++<300)
-		{
-#if defined(Windows)
-			sleep(1);
-#else
-			nanosleep(&req,&rem);
-#endif
-			goto again;
-		}
-
-		fprintf(newstdout,"child: connect failed. Errno %d \n",errno);
-		fflush(newstdout);
-		exit(25);
-        }
-	if(cdebug ==1)
-	{
-		fprintf(newstdout,"child Connected\n");
-		fflush(newstdout);
-	}
-	return (sp_child_socket_val);
-}
-
-#ifdef HAVE_ANSIC_C
-void
-do_speed_check(int client_flag)
-#else
-void
-do_speed_check(client_flag)
-int client_flag;
-#endif
-{
-	int i;
-	if(client_flag)
-	{
-		speed_main(" "," ",reclen,kilobytes64,client_flag);
-	}
-	else
-	{
-		printf("Checking %d clients\n",clients_found);
-		for(i=0;i<clients_found;i++)
-		{
-			speed_main(child_idents[i].child_name,
-				child_idents[i].execute_path,
-				reclen, kilobytes64,client_flag);
-		}
-	}
-}
-
-#ifdef HAVE_ANSIC_C
-void
-get_date(char *where)
-#else
-get_date(where)
-char *where;
-#endif
-{
-	time_t t;
-	char *value;
-	t=time(0);
-	value=(char *)ctime(&t);
-	strcpy(where,value);
-}
-
-/* Richard Sharpe decided to hack up Samba and
- * have it detect Iozone running, and then
- * produce the data without doing any actual
- * I/O. This was a HIGHLY questionable thing to
- * be doing (my opinion). It may have been a lab
- * experiment that was accidentally released into 
- * the wild, but now that it is, no choice but
- * to prevent its use. So... the pattern
- * that he was locking on to, is now random,
- * and will change with every release of Iozone.
- * See: http://lists.samba.org/archive/samba-technical/2005-April/040541.html
- */
-
-#ifdef HAVE_ANSIC_C
-int
-get_pattern(void)
-#else
-get_pattern(void)
-#endif
-{
-        int i,x,y;
-        char cp[100],*ptr;
-        int pat;
-	unsigned char inp_pat;
-	unsigned int temp;
-
-        y=0;
-        ptr=&cp[0];
-        strcpy(cp,THISVERSION);
-        x=strlen(THISVERSION);
-        for(i=0;i<x;i++)
-                y+=*ptr++;
-        srand(y);
-        pat=(rand()& 0xff);
-	/* For compatibility with old 0xa5 data sets. */
-	if(Z_flag)
-		pat=0xa5;
-	/* Lock pattern to 0xBB, for filesystem short circuit debug */
-	if(X_flag)
-		pat=PATTERN1;
-	/* Set global pattern */
-	inp_pat = pat;
-	temp =((inp_pat << 24) | (inp_pat << 16) | (inp_pat << 8) | inp_pat);
-        return(pat);
-}
-
-/* 
- * Allocate the buffer for purge. 
-*/
-#ifdef HAVE_ANSIC_C
-void
-alloc_pbuf(void)
-#else
-alloc_pbuf(void)
-#endif
-{
-	pbuffer = (char *) alloc_mem((long long)(3 * cache_size),(int)0);
-	if(pbuffer == 0) {
-              	perror("Memory allocation failed:");
-               	exit(9);
-	}
-#ifdef _64BIT_ARCH_
-	pbuffer = (char *) 
-		(((unsigned long long)pbuffer + cache_size ) 
-		& ~(cache_size-1));
-#else
-	pbuffer = (char *) 
-		(((long)pbuffer + (long)cache_size ) 
-		& ~((long)cache_size-1));
-#endif
-}
-
-/* 
- * Check to see if the file descriptor points at a file
- * or a device.
- */
-#ifdef HAVE_ANSIC_C
-int
-check_filename(char *name)
-#else
-check_filename(name)
-char *name;
-#endif
-{
-#ifdef _LARGEFILE64_SOURCE
-	struct stat64 mystat;
-#else
-	struct stat mystat;
-#endif
-	int x;
-	if(strlen(name)==0)
-		return(0);
-	/* Lets try stat first.. may get an error if file is too big */
-	x=I_STAT(name,&mystat);
-	if(x<0)
-	{
-		return(0);
-		/* printf("Stat failed %d\n",x); */
-	}
-	if(mystat.st_mode & S_IFREG)
-	{
-		/*printf("Is a regular file\n");*/
-		return(1);
-	}
-	return(0);
-}
-
-#ifdef HAVE_ANSIC_C
-void
-start_monitor(char *test)
-#else
-start_monitor(test)
-char *test;
-#endif
-{
-	char command_line[256];
-	if(strlen(imon_start)!=0)
-	{
-		if(imon_sync)
-		   sprintf(command_line,"%s %s",imon_start,test);
-		else
-		   sprintf(command_line,"%s %s&",imon_start,test);
-		junk=system(command_line);
-	}
-}
-#ifdef HAVE_ANSIC_C
-void
-stop_monitor(char *test)
-#else
-stop_monitor(test)
-char *test;
-#endif
-{
-	char command_line[256];
-	if(strlen(imon_stop)!=0)
-	{
-		if(imon_sync)
-		   sprintf(command_line,"%s %s",imon_stop,test);
-		else
-		   sprintf(command_line,"%s %s &",imon_stop,test);
-		junk=system(command_line);
-	}
-}
-
-/* 
- * As quickly as possible, generate a new buffer that
- * can not be easily compressed, or de-duped. Also
- * permit specified percentage of buffer to be updated.
- *
- * ibuf ... input buffer
- * obuf ... output buffer
- * seed ... Seed to use for srand, rand -> xor ops
- *          Seed composed from: blocknumber
-		(do not include childnum as you want duplicates)
- * size ... size of buffers. (in bytes)
- * percent. Percent of buffer to modify.
- * percent_interior. Percent of buffer that is dedupable within 
- *                   and across files 
- * percent_compress. Percent of buffer that is dedupable within 
- *                   but not across files 
- *
- * Returns 0 (zero) for success, and -1 (minus one) for failure.
- */
-int
-gen_new_buf(char *ibuf, char *obuf, long seed, int size, int percent,
-	int percent_interior, int percent_compress, int all)
-{
-	register long *ip, *op; /* Register for speed 	*/
-	register long iseed; 	/* Register for speed 	*/
-	register long isize; 	/* Register for speed 	*/
-	register long cseed;	/* seed for dedupable for within & ! across */
-	register int x,w; 	/* Register for speed 	*/
-	register int value; 	/* Register for speed 	*/
-	register int interior_size; 	/* size of interior dedup region */
-	register int compress_size; 	/* size of compression dedup region */
-	if(ibuf == NULL)	/* no input buf 	*/
-		return(-1);
-	if(obuf == NULL)	/* no output buf 	*/
-		return(-1);
-	if((percent > 100) || (percent < 0)) /* percent check */
-		return(-1);
-	if(size == 0)		/* size check 		*/
-		return(-1);
-	srand(seed+1+(((int)numrecs64)*dedup_mseed)); /* set random seed */
-	iseed = rand();		/* generate random value */
-	isize = (size * percent)/100; /* percent that is dedupable */
-	interior_size = ((isize * percent_interior)/100);/* /sizeof(long) */
-	compress_size =((interior_size * percent_compress)/100);
-	ip = (long *)ibuf;	/* pointer to input buf */
-	op = (long *)obuf;	/* pointer to output buf */
-	if(all == 0)		/* Special case for verify only */
-		isize = sizeof(long);
-	/* interior_size = dedup_within + dedup_across */
-	for(w=0;w<interior_size;w+=sizeof(long))	
-	{
-		*op=0xdeadbeef+dedup_mseed;
-		*ip=0xdeadbeef+dedup_mseed;
-		op++;
-		ip++;
-	}	
-	/* Prepare for dedup within but not across */
-	w=interior_size - compress_size;
-	op=(long *)&obuf[w];
-	ip=(long *)&ibuf[w];
-	srand(chid+1+dedup_mseed);            /* set randdom seed 	*/
-	cseed = rand();		/* generate random value */
-	for(w=(interior_size-compress_size);w<interior_size;w+=sizeof(long))	
-	{
-		*op=*ip ^ cseed; /* do the xor op */
-		op++;
-		ip++;
-	}	
- 	/* isize = dedup across only */
-	for(x=interior_size;x<isize;x+=sizeof(long))	/* tight loop for transformation */
-	{
-		*op=*ip ^ iseed; /* do the xor op */
-		op++;
-		ip++;
-	}	
-	if(all == 0)		/* Special case for verify only */
-		return(0);
-	/* make the rest of the buffer non-dedupable */
-	if(100-percent > 0)
-	{
-		srand(1+seed+((chid+1)*(int)numrecs64)*dedup_mseed);
-		value=rand();
-/* printf("Non-dedup value %x seed %x\n",value,seed);*/
-		for( ; x<size;x+=sizeof(long))
-			*op++=(*ip++)^value; /* randomize the remainder */
-	}
-	return(0);
-}
-/* 
- * Used to touch all of the buffers so that the CPU data
- * cache is hot, and not part of the measurement.
- */
-void
-touch_dedup(char *i, int size)
-{
-	register int x;
-	register long *ip;
-	ip = (long *)i;
-	srand(DEDUPSEED);
-	for(x=0;x<size/sizeof(long);x++)
-	{
-		*ip=rand(); /* fill initial buffer */
-		ip++;
-	}
-}
-
-/* 
-   A C-program for MT19937-64 (2004/9/29 version).
-   Coded by Takuji Nishimura and Makoto Matsumoto.
-
-   This is a 64-bit version of Mersenne Twister pseudorandom number
-   generator.
-
-   Before using, initialize the state by using init_genrand64(seed)  
-   or init_by_array64(init_key, key_length).
-
-   Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura,
-   All rights reserved.                          
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-
-     1. Redistributions of source code must retain the above copyright
-        notice, this list of conditions and the following disclaimer.
-
-     2. Redistributions in binary form must reproduce the above copyright
-        notice, this list of conditions and the following disclaimer in the
-        documentation and/or other materials provided with the distribution.
-
-     3. The names of its contributors may not be used to endorse or promote 
-        products derived from this software without specific prior written 
-        permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-   References:
-   T. Nishimura, ``Tables of 64-bit Mersenne Twisters''
-     ACM Transactions on Modeling and 
-     Computer Simulation 10. (2000) 348--357.
-   M. Matsumoto and T. Nishimura,
-     ``Mersenne Twister: a 623-dimensionally equidistributed
-       uniform pseudorandom number generator''
-     ACM Transactions on Modeling and 
-     Computer Simulation 8. (Jan. 1998) 3--30.
-
-   Any feedback is very welcome.
-   http://www.math.hiroshima-u.ac.jp/~m-mat/MT/emt.html
-   email: m-mat @ math.sci.hiroshima-u.ac.jp (remove spaces)
-*/
-
-
-
-#define NN 312
-#define MM 156
-#define MATRIX_A 0xB5026F5AA96619E9ULL
-#define UM 0xFFFFFFFF80000000ULL /* Most significant 33 bits */
-#define LM 0x7FFFFFFFULL /* Least significant 31 bits */
-
-
-/* The array for the state vector */
-static unsigned long long mt[NN]; 
-/* mti==NN+1 means mt[NN] is not initialized */
-static int mti=NN+1; 
-
-/* initializes mt[NN] with a seed */
-void init_genrand64(unsigned long long seed)
-{
-    mt[0] = seed;
-    for (mti=1; mti<NN; mti++) 
-        mt[mti] =  (6364136223846793005ULL * (mt[mti-1] ^ (mt[mti-1] >> 62)) + mti);
-}
-
-/* initialize by an array with array-length */
-/* init_key is the array for initializing keys */
-/* key_length is its length */
-void init_by_array64(unsigned long long init_key[],
-		     unsigned long long key_length)
-{
-    unsigned long long i, j, k;
-    init_genrand64(19650218ULL);
-    i=1; j=0;
-    k = (NN>key_length ? NN : key_length);
-    for (; k; k--) {
-        mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 62)) * 3935559000370003845ULL))
-          + init_key[j] + j; /* non linear */
-        i++; j++;
-        if (i>=NN) { mt[0] = mt[NN-1]; i=1; }
-        if (j>=key_length) j=0;
-    }
-    for (k=NN-1; k; k--) {
-        mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 62)) * 2862933555777941757ULL))
-          - i; /* non linear */
-        i++;
-        if (i>=NN) { mt[0] = mt[NN-1]; i=1; }
-    }
-
-    mt[0] = 1ULL << 63; /* MSB is 1; assuring non-zero initial array */ 
-}
-
-/* generates a random number on [0, 2^64-1]-interval */
-unsigned long long genrand64_int64(void)
-{
-    int i;
-    unsigned long long x;
-    static unsigned long long mag01[2]={0ULL, MATRIX_A};
-
-    if (mti >= NN) { /* generate NN words at one time */
-
-        /* if init_genrand64() has not been called, */
-        /* a default initial seed is used     */
-        if (mti == NN+1) 
-            init_genrand64(5489ULL); 
-
-        for (i=0;i<NN-MM;i++) {
-            x = (mt[i]&UM)|(mt[i+1]&LM);
-            mt[i] = mt[i+MM] ^ (x>>1) ^ mag01[(int)(x&1ULL)];
-        }
-        for (;i<NN-1;i++) {
-            x = (mt[i]&UM)|(mt[i+1]&LM);
-            mt[i] = mt[i+(MM-NN)] ^ (x>>1) ^ mag01[(int)(x&1ULL)];
-        }
-        x = (mt[NN-1]&UM)|(mt[0]&LM);
-        mt[NN-1] = mt[MM-1] ^ (x>>1) ^ mag01[(int)(x&1ULL)];
-
-        mti = 0;
-    }
-  
-    x = mt[mti++];
-
-    x ^= (x >> 29) & 0x5555555555555555ULL;
-    x ^= (x << 17) & 0x71D67FFFEDA60000ULL;
-    x ^= (x << 37) & 0xFFF7EEE000000000ULL;
-    x ^= (x >> 43);
-
-    return x;
-}
-
-/* generates a random number on [0, 2^63-1]-interval */
-long long genrand64_int63(void)
-{
-    return (long long)(genrand64_int64() >> 1);
-}
-
-/* generates a random number on [0,1]-real-interval */
-double genrand64_real1(void)
-{
-    return (genrand64_int64() >> 11) * (1.0/9007199254740991.0);
-}
-
-/* generates a random number on [0,1)-real-interval */
-double genrand64_real2(void)
-{
-    return (genrand64_int64() >> 11) * (1.0/9007199254740992.0);
-}
-
-/* generates a random number on (0,1)-real-interval */
-double genrand64_real3(void)
-{
-    return ((genrand64_int64() >> 12) + 0.5) * (1.0/4503599627370496.0);
-}
-
-#ifdef MT_TEST
-
-int main(void)
-{
-    int i;
-    unsigned long long init[4]={0x12345ULL, 0x23456ULL, 0x34567ULL, 0x45678ULL}, length=4;
-    init_by_array64(init, length);
-    printf("1000 outputs of genrand64_int64()\n");
-    for (i=0; i<1000; i++) {
-      printf("%20llu ", genrand64_int64());
-      if (i%5==4) printf("\n");
-    }
-    printf("\n1000 outputs of genrand64_real2()\n");
-    for (i=0; i<1000; i++) {
-      printf("%10.8f ", genrand64_real2());
-      if (i%5==4) printf("\n");
-    }
-    return 0;
-}
-#endif
-
-/*----------------------------------------------------------------------*/
-/* 									*/
-/* The PIT Programmable Interdimensional Timer 				*/
-/* 									*/
-/* This is used to measure time, when you know something odd is going   */
-/* to be happening with your wrist watch. For example, you have entered	*/
-/* a temporal distortion field where time its-self is not moving        */
-/* as it does in your normal universe. ( thing either intense 		*/
-/* gravitational fields bending space-time, or virtual machines playing */
-/* with time )  							*/
-/* So.. you need to measure time, but with respect to a normal 		*/
-/* space-time.  So.. we deal with this by calling for time from another */
-/* machine, but do so with a very similar interface to that of 		*/
-/* gettimeofday().							*/
-/* To activate this, one only needs to set an environmental variable.   */
-/*      Example:   setenv IOZ_PIT hostname_of_PIT_server		*/
-/* The environmental variable tells this client where to go to get 	*/
-/* correct timeofday time stamps, with the usual gettimeofday() 	*/
-/* resolution. (microsecond resolution)					*/
-/*----------------------------------------------------------------------*/
-
-/*----------------------------------------------------------------------*/
-/* The PIT client: Adapted from source found on the web for someone's   */
-/* daytime client code. (Used in many examples for network programming  */
-/* Reads PIT info over a socket from a PIT server. 			*/
-/* The PIT server sends its raw microsecond version of gettimeofday 	*/
-/* The PIT client converts this back into timeval structure format.     */
-/* Written by: Don Capps. [ capps@iozone.org ] 				*/
-/*----------------------------------------------------------------------*/
-
-/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<      */
-/* >>>> DON'T forget, you must put a definition for PIT <<<<<<<<<<      */
-/* >>>> in /etc/services  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<      */
-/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<      */
-#define DFLT_SERVICE   "PIT"     /* Default service name.            	*/
-#define INVALID_DESC   -1        /* Invalid file (socket) descriptor.	*/
-#define MAXBFRSIZE     256       /* Max bfr sz to read remote TOD.   	*/
-
-/*
-** Type definitions (for convenience).
-*/
-#if defined(Windows)
-int false = 0;
-int true = 1;
-#else
-typedef enum { false = 0, true } boolean;
-#endif
-typedef struct sockaddr_in       sockaddr_in_t;
-typedef struct sockaddr_in6      sockaddr_in6_t;
-
-/*
- * Routine to mimic gettimeofday() using a remote PIT server 
- */
-#if defined(_SUA_)
-struct timezone {
-	int 				tz_minuteswest;				
-	int 				tz_dsttime;							
-};
-#endif
-
-int 
-pit_gettimeofday( struct timeval *tp, struct timezone *foo,
-	char *pit_hostname, char *pit_service)
-{
-	int            	sckt;          /* socket descriptor */
-	unsigned scopeId = 0;
-
-	/* See if the interdimensional rift is active */
-	
-	if(pit_hostname[0] == 0)
-	{
-		return gettimeofday(tp,foo);
-	}
-
- 	if ( ( sckt = openSckt( pit_hostname,
-                           pit_service,
-                           scopeId ) ) == INVALID_DESC )
-   	{
-      		fprintf( stderr,
-                  "Sorry... a connectionless socket could "
-                  "not be set up.\n");
-                return -1;
-   	}
-	/*
-   	** Get the remote PIT.
-   	*/
-   	pit( sckt ,tp );
-	close(sckt);
-    	return 0;
-}
-
-/*
- * Opens a socket for the PIT to use to get the time
- * from a remote time server ( A PIT server ) 
- */
-static int openSckt( const char   *host,
-                     const char   *service,
-                     unsigned int  scopeId )
-{
-   struct addrinfo *ai;
-   int              aiErr;
-   struct addrinfo *aiHead;
-   struct addrinfo  hints;
-   sockaddr_in6_t  *pSadrIn6;
-   int              sckt;
-   /*
-    * Initialize the 'hints' structure for getaddrinfo(3).
-   */
-   memset( &hints, 0, sizeof( hints ) );
-   hints.ai_family   = PF_UNSPEC;     /* IPv4 or IPv6 records */
-   hints.ai_socktype = SOCK_STREAM;    /* Connection oriented communication.*/
-   hints.ai_protocol = IPPROTO_TCP;   /* TCP transport layer protocol only. */
-   /*
-   ** Look up the host/service information.
-   */
-   if ( ( aiErr = getaddrinfo( host,
-                               service,
-                               &hints,
-                               &aiHead ) ) != 0 )
-   {
-      fprintf( stderr, "(line %d): ERROR - %s.\n", __LINE__, 
-	 gai_strerror( aiErr ) );
-      return INVALID_DESC;
-   }
-   /*
-   ** Go through the list and try to open a connection.  Continue until either
-   ** a connection is established or the entire list is exhausted.
-   */
-   for ( ai = aiHead,   sckt = INVALID_DESC;
-         ( ai != NULL ) && ( sckt == INVALID_DESC );
-         ai = ai->ai_next )
-   {
-      /*
-      ** IPv6 kluge.  Make sure the scope ID is set.
-      */
-      if ( ai->ai_family == PF_INET6 )
-      {
-         pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr;
-         if ( pSadrIn6->sin6_scope_id == 0 )
-         {
-            pSadrIn6->sin6_scope_id = scopeId;
-         }  /* End IF the scope ID wasn't set. */
-      }  /* End IPv6 kluge. */
-      /*
-      ** Create a socket.
-      */
-      sckt = socket( ai->ai_family, ai->ai_socktype, ai->ai_protocol );
-      if(sckt == -1)
-      {
-         sckt = INVALID_DESC;
-         continue;   /* Try the next address record in the list. */
-      }
-      /*
-      ** Set the target destination for the remote host on this socket.  That
-      ** is, this socket only communicates with the specified host.
-      */
-      if (connect( sckt, ai->ai_addr, ai->ai_addrlen ) )
-      {
-         (void) close( sckt );   /* Could use system call again here, 
-					but why? */
-         sckt = INVALID_DESC;
-         continue;   /* Try the next address record in the list. */
-      }
-   }  /* End FOR each address record returned by getaddrinfo(3). */
-   /*
-   ** Clean up & return.
-   */
-   freeaddrinfo( aiHead );
-   return sckt;
-}  /* End openSckt() */
-
-/*
- * Read the PIT, and convert this back into timeval 
- * info, and store it in the timeval structure that was
- * passed in.
- */
-static void pit( int sckt, struct timeval *tp)
-{
-   char bfr[ MAXBFRSIZE+1 ];
-   int  inBytes;
-   long long value;
-   /*
-   ** Send a datagram to the server to wake it up.  The content isn't
-   ** important, but something must be sent to let it know we want the TOD.
-   */
-   junk=write( sckt, "Are you there?", 14 );
-   /*
-   ** Read the PIT from the remote host.
-   */
-   inBytes = read( sckt, bfr, MAXBFRSIZE );
-   bfr[ inBytes ] = '\0';   /* Null-terminate the received string. */
-   /* 
-    * Convert result to timeval structure format 
-    */
-   sscanf(bfr,"%llu\n",&value);
-   tp->tv_sec = (long)(value / 1000000);
-   tp->tv_usec = (long)(value % 1000000);
-}  
-
-/* sync does not exist in SUA */
-#if defined(_SUA_)
-sync()
-{
-}
-#endif
-
-
-#define BUCKETS 40
-long long buckets[BUCKETS];
-long long bucket_val[BUCKETS] =
-	{ 20,40,60,80,100,
-	200,400,600,800,1000,
-	2000,4000,6000,8000,10000,
-	12000,14000,16000,18000,20000,
-	40000,60000,80000,100000,
-	200000,400000,600000,800000,1000000,
-	2000000,4000000,6000000,8000000,10000000,
-	20000000,30000000,60000000,90000000,120000000,120000001};
-/*
- * Buckets: (Based on a Netapp internal consensus)
- *     0       1       2       3      4 
- *  <=20us  <=40us  <=60us  <=80us  <=100us
- * 
- *    5        6       7       8       9
- * <=200us  <=400us <=600us <=88us  <=1ms
- * 
- *   10       11      12      13      14
- * <=2ms    <=4ms   <=6ms   <=8ms   <=10ms
- * 
- *   15       16      17      18      19
- * <=12ms   <=14ms  <=16ms  <=18ms  <=20ms
- *
- *   20       21      22      23      24
- * <=20ms   <=40ms  <=60ms  <=80ms  <=100ms
- * 
- *   25       26      27      28      29
- * <=200ms  <=400ms <=600ms <=800ms <=1s
- * 
- *   30       31      32      33      34
- * <=2s     <=4s    <=6s    <=8s    <=10s
- *
- *   35       36      37      38      39
- * <=20s    <=30s   <=60    <=90s    >90
- */
-	
-/*
-	fp=fopen("/tmp/iozone_latency_summary.txt","a");
-	dump_hist(fp);
-*/
-
-void
-hist_insert(double my_value)
-{
-	int k;
-	long long value;
-	
-	/* Convert to micro-seconds */
-	value = (long long)(my_value * 1000000);
-	for(k=0;k<BUCKETS;k++)
-	{
-	   if(k < (BUCKETS-1)) 
-	   {
-	     if(value <= bucket_val[k])
-	     {
-		buckets[k]++;
-		break;
-	     }
-	   }
-	   else
-	   {
-	     if(value > bucket_val[k])
-	     {
-		buckets[k]++;
-		break;
-	     }
-	   }
-	}
-}
-
-void
-dump_hist(char *what,int id)
-{
-   FILE *fp;
-
-   char name[256];
- 
-   sprintf(name,"%s_child_%d.txt","Iozone_histogram",id);
-
-   fp = fopen(name,"a");
-
-#ifndef NO_PRINT_LLD
-   fprintf(fp,"Child: %d Op: %s\n",id,what);
-   fprintf(fp,"Band 1:   ");
-   fprintf(fp," 20us:%-7.1lld ",buckets[0]);
-   fprintf(fp," 40us:%-7.1lld ",buckets[1]);
-   fprintf(fp," 60us:%-7.1lld ",buckets[2]);
-   fprintf(fp," 80us:%-7.1lld ",buckets[3]);
-   fprintf(fp,"100us:%-7.1lld \n",buckets[4]);
-
-   fprintf(fp,"Band 2:   ");
-   fprintf(fp,"200us:%-7.1lld ",buckets[5]);
-   fprintf(fp,"400us:%-7.1lld ",buckets[6]);
-   fprintf(fp,"600us:%-7.1lld ",buckets[7]);
-   fprintf(fp,"800us:%-7.1lld ",buckets[8]);
-   fprintf(fp,"  1ms:%-7.1lld \n",buckets[9]);
-
-   fprintf(fp,"Band 3:   ");
-   fprintf(fp,"  2ms:%-7.1lld ",buckets[10]);
-   fprintf(fp,"  4ms:%-7.1lld ",buckets[11]);
-   fprintf(fp,"  6ms:%-7.1lld ",buckets[12]);
-   fprintf(fp,"  8ms:%-7.1lld ",buckets[13]);
-   fprintf(fp," 10ms:%-7.1lld \n",buckets[14]);
-
-   fprintf(fp,"Band 4:   ");
-   fprintf(fp," 12ms:%-7.1lld ",buckets[15]);
-   fprintf(fp," 14ms:%-7.1lld ",buckets[16]);
-   fprintf(fp," 16ms:%-7.1lld ",buckets[17]);
-   fprintf(fp," 18ms:%-7.1lld ",buckets[18]);
-   fprintf(fp," 20ms:%-7.1lld \n",buckets[19]);
-
-   fprintf(fp,"Band 5:   ");
-   fprintf(fp," 40ms:%-7.1lld ",buckets[20]);
-   fprintf(fp," 60ms:%-7.1lld ",buckets[21]);
-   fprintf(fp," 80ms:%-7.1lld ",buckets[22]);
-   fprintf(fp,"100ms:%-7.1lld \n",buckets[23]);
-
-   fprintf(fp,"Band 6:   ");
-   fprintf(fp,"200ms:%-7.1lld ",buckets[24]);
-   fprintf(fp,"400ms:%-7.1lld ",buckets[25]);
-   fprintf(fp,"600ms:%-7.1lld ",buckets[26]);
-   fprintf(fp,"800ms:%-7.1lld ",buckets[27]);
-   fprintf(fp,"   1s:%-7.1lld \n",buckets[28]);
-
-   fprintf(fp,"Band 7:   ");
-   fprintf(fp,"   2s:%-7.1lld ",buckets[29]);
-   fprintf(fp,"   4s:%-7.1lld ",buckets[30]);
-   fprintf(fp,"   6s:%-7.1lld ",buckets[31]);
-   fprintf(fp,"   8s:%-7.1lld ",buckets[32]);
-   fprintf(fp,"  10s:%-7.1lld \n",buckets[33]);
-
-   fprintf(fp,"Band 8:   ");
-   fprintf(fp,"  20s:%-7.1lld ",buckets[34]);
-   fprintf(fp,"  40s:%-7.1lld ",buckets[35]);
-   fprintf(fp,"  60s:%-7.1lld ",buckets[36]);
-   fprintf(fp,"  80s:%-7.1lld ",buckets[37]);
-   fprintf(fp," 120s:%-7.1lld \n",buckets[38]);
-
-   fprintf(fp,"Band 9:   ");
-   fprintf(fp,"120+s:%-7.1lld \n\n",buckets[39]);
-#else
-   fprintf(fp,"Child: %d Op: %s\n",id,what);
-   fprintf(fp,"Band 1:   ");
-   fprintf(fp," 20us:%-7.1ld ",buckets[0]);
-   fprintf(fp," 40us:%-7.1ld ",buckets[1]);
-   fprintf(fp," 60us:%-7.1ld ",buckets[2]);
-   fprintf(fp," 80us:%-7.1ld ",buckets[3]);
-   fprintf(fp,"100us:%-7.1ld \n",buckets[4]);
-
-   fprintf(fp,"Band 2:   ");
-   fprintf(fp,"200us:%-7.1ld ",buckets[5]);
-   fprintf(fp,"400us:%-7.1ld ",buckets[6]);
-   fprintf(fp,"600us:%-7.1ld ",buckets[7]);
-   fprintf(fp,"800us:%-7.1ld ",buckets[8]);
-   fprintf(fp,"  1ms:%-7.1ld \n",buckets[9]);
-
-   fprintf(fp,"Band 3:   ");
-   fprintf(fp,"  2ms:%-7.1ld ",buckets[10]);
-   fprintf(fp,"  4ms:%-7.1ld ",buckets[11]);
-   fprintf(fp,"  6ms:%-7.1ld ",buckets[12]);
-   fprintf(fp,"  8ms:%-7.1ld ",buckets[13]);
-   fprintf(fp," 10ms:%-7.1ld \n",buckets[14]);
-
-   fprintf(fp,"Band 4:   ");
-   fprintf(fp," 12ms:%-7.1ld ",buckets[15]);
-   fprintf(fp," 14ms:%-7.1ld ",buckets[16]);
-   fprintf(fp," 16ms:%-7.1ld ",buckets[17]);
-   fprintf(fp," 18ms:%-7.1ld ",buckets[18]);
-   fprintf(fp," 20ms:%-7.1ld \n",buckets[19]);
-
-   fprintf(fp,"Band 5:   ");
-   fprintf(fp," 40ms:%-7.1ld ",buckets[20]);
-   fprintf(fp," 60ms:%-7.1ld ",buckets[21]);
-   fprintf(fp," 80ms:%-7.1ld ",buckets[22]);
-   fprintf(fp,"100ms:%-7.1ld \n",buckets[23]);
-
-   fprintf(fp,"Band 6:   ");
-   fprintf(fp,"200ms:%-7.1ld ",buckets[24]);
-   fprintf(fp,"400ms:%-7.1ld ",buckets[25]);
-   fprintf(fp,"600ms:%-7.1ld ",buckets[26]);
-   fprintf(fp,"800ms:%-7.1ld ",buckets[27]);
-   fprintf(fp,"   1s:%-7.1ld \n",buckets[28]);
-
-   fprintf(fp,"Band 7:   ");
-   fprintf(fp,"   2s:%-7.1ld ",buckets[29]);
-   fprintf(fp,"   4s:%-7.1ld ",buckets[30]);
-   fprintf(fp,"   6s:%-7.1ld ",buckets[31]);
-   fprintf(fp,"   8s:%-7.1ld ",buckets[32]);
-   fprintf(fp,"  10s:%-7.1ld \n",buckets[33]);
-
-   fprintf(fp,"Band 8:   ");
-   fprintf(fp,"  20s:%-7.1ld ",buckets[34]);
-   fprintf(fp,"  40s:%-7.1ld ",buckets[35]);
-   fprintf(fp,"  60s:%-7.1ld ",buckets[36]);
-   fprintf(fp,"  80s:%-7.1ld ",buckets[37]);
-   fprintf(fp," 120s:%-7.1ld \n",buckets[38]);
-
-   fprintf(fp,"Band 9:   ");
-   fprintf(fp,"120+s:%-7.1ld \n\n",buckets[39]);
-#endif
-   fclose(fp);
-}
-
-#ifdef HAVE_ANSIC_C
-void * thread_fwrite_test(void *x)
-#else
-void * thread_fwrite_test( x)
-#endif
-{
-
-        struct child_stats *child_stat;
-        double starttime1 = 0;
-        double temp_time;
-        double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-        double walltime, cputime;
-        double compute_val = (double)0;
-        float delay = (float)0;
-        double thread_qtime_stop,thread_qtime_start;
-        off64_t traj_offset;
-        long long w_traj_bytes_completed;
-        long long w_traj_ops_completed;
-        FILE *w_traj_fd;
-        int fd;
-        long long recs_per_buffer;
-        long long stopped,i;
-        off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-        long long xx,xx2;
-        char *dummyfile [MAXSTREAMS];           /* name of dummy file     */
-        char *nbuff;
-        char *maddr;
-        char *wmaddr,*free_addr;
-        char now_string[30];
-        int anwser,bind_cpu,wval;
-#if defined(VXFS) || defined(solaris)
-        int test_foo = 0;
-#endif
-        off64_t filebytes64;
-        char tmpname[256];
-        FILE *thread_wqfd;
-        FILE *thread_Lwqfd;
-        char *filename;
-
-        char *stdio_buf;
-        char *how;
-        long long Index = 0;
-        FILE *stream = NULL;
-        static int First_Run = 1;
-
-        if(compute_flag)
-                delay=compute_time;
-        nbuff=maddr=wmaddr=free_addr=0;
-        thread_qtime_stop=thread_qtime_start=0;
-        thread_wqfd=w_traj_fd=thread_Lwqfd=(FILE *)0;
-        traj_offset=walltime=cputime=0;
-        anwser=bind_cpu=0;
-
-        if(w_traj_flag)
-        {
-                filebytes64 = w_traj_fsize;
-                numrecs64=w_traj_ops;
-        }
-        else
-        {
-                filebytes64 = numrecs64*reclen;
-        }
-        written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-        w_traj_bytes_completed=w_traj_ops_completed=0;
-        recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-        xx=chid;
-#else
-        if(use_thread)
-        {
-                xx = (long long)((long)x);
-        }
-        else
-        {
-                xx=chid;
-        }
-#endif
-#ifndef NO_THREADS
-#ifdef _HPUX_SOURCE
-        if(ioz_processor_bind)
-        {
-                 bind_cpu=(begin_proc+(int)xx)%num_processors;
-                 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-                my_nap(40);     /* Switch to new cpu */
-        }
-#endif
-#endif
-        if(use_thread)
-                nbuff=barray[xx];
-        else
-                nbuff=buffer;
-        if(debug1 )
-        {
-           if(use_thread)
-#ifdef NO_PRINT_LLD
-                printf("\nStarting child %ld\n",xx);
-#else
-                printf("\nStarting child %lld\n",xx);
-#endif
-           else
-#ifdef NO_PRINT_LLD
-                printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-                printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-
-        }
-        dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-        xx2=xx;
-        if(share_file)
-                xx2=(long long)0;
-        if(mfflag)
-        {
-#ifdef NO_PRINT_LLD
-           sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-           sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-        }
-        else
-        {
-#ifdef NO_PRINT_LLD
-           sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-           sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-        }
-        filename=dummyfile[xx];
-
-        if(mmapflag || async_flag)
-                return(0);
-
-        stdio_buf=(char *)malloc((size_t)reclen);
-
-        if(Uflag) /* Unmount and re-mount the mountpoint */
-        {
-                purge_buffer_cache();
-        }
-
-        if(First_Run==1)
-        {
-		First_Run=0;
-                if(check_filename(filename))
-                        how="r+"; /* file exists, don't create and zero a new one. */
-                else
-                        how="w+"; /* file doesn't exist. create it. */
-        }
-        else
-                how="r+"; /* re-tests should error out if file does not exist. */
-
-#ifdef IRIX64
-        if((stream=(FILE *)fopen(filename,how)) == 0)
-        {
-                printf("\nCan not fdopen temp file: %s %lld\n",
-                        filename,errno);
-                perror("fdopen");
-                exit(48);
-        }
-#else
-       if((stream=(FILE *)I_FOPEN(filename,how)) == 0)
-        {
-#ifdef NO_PRINT_LLD
-                printf("\nCan not fdopen temp file: %s %d\n",
-                        filename,errno);
-#else
-                printf("\nCan not fdopen temp file: %s %d\n",
-                        filename,errno);
-#endif
-                perror("fdopen");
-                exit(49);
-        }
-#endif
-        fd=fileno(stream);
-        fsync(fd);
-        if(direct_flag)
-          setvbuf(stream,stdio_buf,_IONBF,reclen);
-        else
-          setvbuf(stream,stdio_buf,_IOFBF,reclen);
-
-        buffer=mainbuffer;
-        if(fetchon)
-                fetchit(buffer,reclen);
-        if(verify || dedup || dedup_interior)
-                fill_buffer(buffer,reclen,(long long)pattern,sverify,(long long)0);
-
-        compute_val=(double)0;
-
-       /*******************************************************************/
-
-        child_stat = (struct child_stats *)&shmaddr[xx];
-        child_stat->throughput = 0;
-        child_stat->actual = 0;
-        child_stat->flag=CHILD_STATE_READY; /* Tell parent child is ready to go */
-
-        if(distributed && client_iozone)
-                tell_master_ready(chid);
-        if(distributed && client_iozone)
-        {
-                if(cdebug)
-                {
-                        printf("Child %d waiting for go from master\n",(int)xx);
-                        fflush(stdout);
-                }
-                wait_for_master_go(chid);
-                if(cdebug)
-                {
-                        printf("Child %d received go from master\n",(int)xx);
-                        fflush(stdout);
-                }
-        }
-        else
-        {
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-                        Poll((long long)1);
-        }
-
-        written_so_far=0;
-        child_stat = (struct child_stats *)&shmaddr[xx];
-        child_stat->actual = 0;
-        child_stat->throughput = 0;
-        stopped=0;
-        if(Q_flag)
-        {
-                sprintf(tmpname,"Child_%d_fwol.dat",(int)xx);
-                thread_wqfd=fopen(tmpname,"a");
-                if(thread_wqfd==0)
-                {
-                        client_error=errno;
-                        if(distributed && client_iozone)
-                                send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-                fprintf(thread_wqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-        }
-        if(L_flag)
-        {
-                sprintf(tmpname,"Child_%d.log",(int)xx);
-                thread_Lwqfd=fopen(tmpname,"a");
-                if(thread_Lwqfd==0)
-                {
-                        client_error=errno;
-                        if(distributed && client_iozone)
-                                send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-                get_date(now_string);
-                fprintf(thread_Lwqfd,"%-25s %s","fwrite test start: ",now_string);
-        }
-        starttime1 = time_so_far();
-        if(cpuutilflag)
-        {
-                walltime = starttime1;
-                cputime = cputime_so_far();
-        }
-       /*******************************************************************/
-        for(i=0; i<numrecs64; i++){
-                if(compute_flag)
-                        compute_val+=do_compute(compute_time);
-                if(multi_buffer)
-                {
-                        Index +=reclen;
-                        if(Index > (MAXBUFFERSIZE-reclen))
-                                Index=0;
-                        buffer = mbuffer + Index;
-                }
-                if((verify & diag_v) || dedup || dedup_interior)
-                        fill_buffer(buffer,reclen,(long long)pattern,sverify,i);
-                if(purge)
-                        purgeit(buffer,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			thread_qtime_start=time_so_far();
-		}
-                if(fwrite(buffer, (size_t) reclen, 1, stream) != 1)
-                {
-#ifdef NO_PRINT_LLD
-                        printf("\nError fwriting block %ld, fd= %d\n", i,
-                                 fd);
-#else
-                        printf("\nError fwriting block %lld, fd= %d\n", i,
-                                 fd);
-#endif
-                        perror("fwrite");
-                        signal_handler();
-                }
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-			if( actual_rate < desired_op_rate_time)
-			      my_unap((unsigned long long)((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-		if(Q_flag)
-		{
-			thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-			fprintf(thread_wqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-			fprintf(thread_wqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-		}
-                w_traj_ops_completed++;
-                w_traj_bytes_completed+=reclen;
-                written_so_far+=reclen/1024;
-        }
-        if(include_flush)
-        {
-                fflush(stream);
-                wval=fsync(fd);
-                if(wval==-1){
-                        perror("fsync");
-                        signal_handler();
-                }
-        }
-        if(include_close)
-        {
-                wval=fclose(stream);
-                if(wval==-1){
-                        perror("fclose");
-                        signal_handler();
-                }
-        }
-        /*******************************************************************/
-        if(!stopped){
-                temp_time = time_so_far();
-                child_stat->throughput = ((temp_time - starttime1)-time_res)
-                        -compute_val;
-                if(child_stat->throughput < (double).000001)
-                {
-                        child_stat->throughput= time_res;
-                        if(rec_prob < reclen)
-                                rec_prob = reclen;
-                        res_prob=1;
-                }
-
-                if(OPS_flag){
-                   /*written_so_far=(written_so_far*1024)/reclen;*/
-                   written_so_far=w_traj_ops_completed;
-                }
-                child_stat->throughput =
-                        (double)written_so_far/child_stat->throughput;
-                child_stat->actual = (double)written_so_far;
-        }
-        if(cdebug)
-        {
-                printf("Child %d: throughput %f actual %f \n",(int)chid, child_stat->throughput,
-                        child_stat->actual);
-                fflush(stdout);
-        }
-        if(cpuutilflag)
-        {
-                cputime = cputime_so_far() - cputime;
-                if (cputime < cputime_res)
-                        cputime = 0.0;
-                child_stat->cputime = cputime;
-                walltime = time_so_far() - walltime;
-                child_stat->walltime = walltime;
-        }
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_FWRITE_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-                        child_stat->cputime, child_stat->walltime,
-                        (char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-
-        if (debug1) {
-                printf(" child/slot: %lld, wall-cpu: %8.3f %8.3fC" " -> %6.2f%%\n",
-                        xx, walltime, cputime,
-                        cpu_util(cputime, walltime));
-        }
-        child_stat->flag = CHILD_STATE_HOLD; /* Tell parent I'm done */
-        stopped=0;
-
-        /*******************************************************************/
-        /* End fwrite performance test. *************************************/
-        /*******************************************************************/
-
-        if(debug1)
-#ifdef NO_PRINT_LLD
-                printf("\nChild finished %ld\n",xx);
-#else
-                printf("\nChild finished %lld\n",xx);
-#endif
-        if(Q_flag && (thread_wqfd !=0) )
-                fclose(thread_wqfd);
-        free(dummyfile[xx]);
-        if(w_traj_flag)
-                fclose(w_traj_fd);
-
-        if(L_flag)
-        {
-                get_date(now_string);
-                fprintf(thread_Lwqfd,"%-25s %s","Fwrite test finished: ",now_string);
-                fclose(thread_Lwqfd);
-        }
-        /*******************************************************************/
-        if(!include_close)
-        {
-                wval=fflush(stream);
-                if(wval==-1){
-                        perror("fflush");
-                        signal_handler();
-                }
-                wval=fsync(fd);
-                if(wval==-1){
-                        perror("fsync");
-                        signal_handler();
-                }
-                wval=fclose(stream);
-                if(wval==-1){
-                        perror("fclose");
-                        signal_handler();
-                }
-        }
-
-        if(restf)
-                sleep((int)(int)rest_val);
-
-        free(stdio_buf);
-        if(OPS_flag || MS_flag){
-           filebytes64=filebytes64/reclen;
-        }
-        /*******************************************************************/
-	if(hist_summary)
-	   dump_hist("Fwrite",(int)xx);
-        if(distributed && client_iozone)
-                return(0);
-#ifdef NO_THREADS
-        exit(0);
-#else
-        if(use_thread)
-                thread_exit();
-        else
-                exit(0);
-#endif
-
-return(0);
-}
-
-
-#ifdef HAVE_ANSIC_C
-void * thread_fread_test(void *x)
-#else
-void * thread_fread_test( x)
-#endif
-{
-        struct child_stats *child_stat;
-        double starttime1 = 0;
-        double temp_time;
-        double hist_time;
-	double desired_op_rate_time;
-	double actual_rate;
-        double walltime, cputime;
-        double compute_val = (double)0;
-        float delay = (float)0;
-        double thread_qtime_stop,thread_qtime_start;
-        off64_t traj_offset;
-        long long w_traj_bytes_completed;
-        long long w_traj_ops_completed;
-        FILE *w_traj_fd;
-        int fd;
-        long long recs_per_buffer;
-        long long stopped,i;
-        off64_t written_so_far, read_so_far, re_written_so_far,re_read_so_far;
-        long long xx,xx2;
-        char *dummyfile [MAXSTREAMS];           /* name of dummy file     */
-        char *nbuff;
-        char *maddr;
-        char *wmaddr,*free_addr;
-        char now_string[30];
-        int anwser,bind_cpu;
-#if defined(VXFS) || defined(solaris)
-        int test_foo = 0;
-#endif
-        off64_t filebytes64;
-        char tmpname[256];
-        FILE *thread_wqfd;
-        FILE *thread_Lwqfd;
-
-        if(compute_flag)
-                delay=compute_time;
-        nbuff=maddr=wmaddr=free_addr=0;
-        thread_qtime_stop=thread_qtime_start=0;
-        thread_wqfd=w_traj_fd=thread_Lwqfd=(FILE *)0;
-        traj_offset=walltime=cputime=0;
-        anwser=bind_cpu=0;
-        char *stdio_buf;
-        long long Index = 0;
-        FILE *stream = NULL;
-        char *filename;
-
-        if(w_traj_flag)
-        {
-                filebytes64 = w_traj_fsize;
-                numrecs64=w_traj_ops;
-        }
-        else
-        {
-                filebytes64 = numrecs64*reclen;
-        }
-        written_so_far=read_so_far=re_written_so_far=re_read_so_far=0;
-        w_traj_bytes_completed=w_traj_ops_completed=0;
-        recs_per_buffer = cache_size/reclen ;
-#ifdef NO_THREADS
-        xx=chid;
-#else
-        if(use_thread)
-        {
-                xx = (long long)((long)x);
-        }
-        else
-        {
-                xx=chid;
-        }
-#endif
-#ifndef NO_THREADS
-#ifdef _HPUX_SOURCE
-        if(ioz_processor_bind)
-        {
-                 bind_cpu=(begin_proc+(int)xx)%num_processors;
-                 pthread_processor_bind_np(PTHREAD_BIND_FORCED_NP,
-                         (pthread_spu_t *)&anwser, (pthread_spu_t)bind_cpu, pthread_self());
-                my_nap(40);     /* Switch to new cpu */
-        }
-#endif
-#endif
-        if(use_thread)
-                nbuff=barray[xx];
-        else
-                nbuff=buffer;
-        if(debug1 )
-        {
-           if(use_thread)
-#ifdef NO_PRINT_LLD
-                printf("\nStarting child %ld\n",xx);
-#else
-                printf("\nStarting child %lld\n",xx);
-#endif
-           else
-#ifdef NO_PRINT_LLD
-                printf("\nStarting process %d slot %ld\n",getpid(),xx);
-#else
-                printf("\nStarting process %d slot %lld\n",getpid(),xx);
-#endif
-
-        }
-        dummyfile[xx]=(char *)malloc((size_t)MAXNAMESIZE);
-        xx2=xx;
-        if(share_file)
-                xx2=(long long)0;
-        if(mfflag)
-        {
-#ifdef NO_PRINT_LLD
-           sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#else
-           sprintf(dummyfile[xx],"%s",filearray[xx2]);
-#endif
-        }
-        else
-        {
-#ifdef NO_PRINT_LLD
-           sprintf(dummyfile[xx],"%s.DUMMY.%ld",filearray[xx2],xx2);
-#else
-           sprintf(dummyfile[xx],"%s.DUMMY.%lld",filearray[xx2],xx2);
-#endif
-        }
-
-        filename=dummyfile[xx];
-
-        if(mmapflag || async_flag)
-                return(0);
-
-        stdio_buf=(char *)malloc((size_t)reclen);
-
-	if(Uflag) /* Unmount and re-mount the mountpoint */
-	{
-		purge_buffer_cache();
-	}
-#ifdef IRIX64
-	if((stream=(FILE *)fopen(filename,"r")) == 0)
-	{
-		printf("\nCan not fdopen temp file: %s\n",
-			filename);
-		perror("fdopen");
-		exit(51);
-	}
-#else
-	if((stream=(FILE *)I_FOPEN(filename,"r")) == 0)
-	{
-		printf("\nCan not fdopen temp file: %s\n",
-			filename);
-		perror("fdopen");
-		exit(52);
-	}
-#endif
-	fd=I_OPEN(filename,O_RDONLY,0);
-	fsync(fd);
-	close(fd);
-        if(direct_flag)
-          setvbuf(stream,stdio_buf,_IONBF,reclen);
-        else
-          setvbuf(stream,stdio_buf,_IOFBF,reclen);
-
-	buffer=mainbuffer;
-	if(fetchon)
-		fetchit(buffer,reclen);
-	compute_val=(double)0;
-
-       /*******************************************************************/
-       /*******************************************************************/
-
-        child_stat = (struct child_stats *)&shmaddr[xx];
-        child_stat->throughput = 0;
-        child_stat->actual = 0;
-        child_stat->flag=CHILD_STATE_READY; /* Tell parent child is ready to go */
-
-        if(distributed && client_iozone)
-                tell_master_ready(chid);
-        if(distributed && client_iozone)
-        {
-                if(cdebug)
-                {
-                        printf("Child %d waiting for go from master\n",(int)xx);
-                        fflush(stdout);
-                }
-                wait_for_master_go(chid);
-                if(cdebug)
-                {
-                        printf("Child %d received go from master\n",(int)xx);
-                        fflush(stdout);
-                }
-        }
-        else
-        {
-                while(child_stat->flag!=CHILD_STATE_BEGIN)   /* Wait for signal from parent */
-                        Poll((long long)1);
-        }
-
-        written_so_far=0;
-        child_stat = (struct child_stats *)&shmaddr[xx];
-        child_stat->actual = 0;
-        child_stat->throughput = 0;
-        stopped=0;
-        if(Q_flag)
-        {
-                sprintf(tmpname,"Child_%d_frol.dat",(int)xx);
-                thread_wqfd=fopen(tmpname,"a");
-                if(thread_wqfd==0)
-                {
-                        client_error=errno;
-                        if(distributed && client_iozone)
-                                send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-                fprintf(thread_wqfd,"Offset in Kbytes   Latency in microseconds  Transfer size in bytes\n");
-        }
-        if(L_flag)
-        {
-                sprintf(tmpname,"Child_%d.log",(int)xx);
-                thread_Lwqfd=fopen(tmpname,"a");
-                if(thread_Lwqfd==0)
-                {
-                        client_error=errno;
-                        if(distributed && client_iozone)
-                                send_stop();
-                        printf("Unable to open %s\n",tmpname);
-                        exit(40);
-                }
-                get_date(now_string);
-                fprintf(thread_Lwqfd,"%-25s %s","fread test start: ",now_string);
-        }
-        starttime1 = time_so_far();
-        if(cpuutilflag)
-        {
-                walltime = starttime1;
-                cputime = cputime_so_far();
-        }
-
-
-
-       /*******************************************************************/
-
-	for(i=0; i<numrecs64; i++)
-	{
-		if(compute_flag)
-			compute_val+=do_compute(compute_time);
-		if(multi_buffer)
-		{
-			Index +=reclen;
-			if(Index > (MAXBUFFERSIZE-reclen))
-				Index=0;
-			buffer = mbuffer + Index;
-		}
-		if(purge)
-			purgeit(buffer,reclen);
-		if(Q_flag || hist_summary || op_rate_flag)
-		{
-			thread_qtime_start=time_so_far();
-		}
-		if(fread(buffer, (size_t) reclen,1, stream) != 1)
-		{
-#ifdef _64BIT_ARCH_
-#ifdef NO_PRINT_LLD
-			printf("\nError freading block %ld %x\n", i,
-				(unsigned long)buffer);
-#else
-			printf("\nError freading block %lld %llx\n", i,
-				(unsigned long long)buffer);
-#endif
-#else
-#ifdef NO_PRINT_LLD
-			printf("\nError freading block %ld %lx\n", i,
-				(long)buffer);
-#else
-			printf("\nError freading block %lld %lx\n", i,
-				(long)buffer);
-#endif
-#endif
-			perror("read");
-			exit(54);
-		}
-		if(verify){
-			if(verify_buffer(buffer,reclen,(off64_t)i,reclen,(long long)pattern,sverify)){
-				exit(55);
-			}
-		}
-		if(hist_summary)
-		{
-			thread_qtime_stop=time_so_far();
-			hist_time =(thread_qtime_stop-thread_qtime_start);
-			hist_insert(hist_time);
-		}
-		if(op_rate_flag)
-		{
-			thread_qtime_stop=time_so_far();
-			desired_op_rate_time = ((double)1.0/(double)op_rate);
-			actual_rate = (double)(thread_qtime_stop-thread_qtime_start);
-			if( actual_rate < desired_op_rate_time)
-			      my_unap((unsigned long long)((desired_op_rate_time-actual_rate)*1000000.0 ));
-		}
-		if(Q_flag)
-		{
-			thread_qtime_stop=time_so_far();
-#ifdef NO_PRINT_LLD
-			fprintf(thread_wqfd,"%10.1ld %10.0f %10.1ld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#else
-			fprintf(thread_wqfd,"%10.1lld %10.0f %10.1lld\n",(traj_offset)/1024,((thread_qtime_stop-thread_qtime_start-time_res))*1000000,reclen);
-#endif
-		}
-                w_traj_ops_completed++;
-                w_traj_bytes_completed+=reclen;
-                written_so_far+=reclen/1024;
-
-	}
-	if(include_flush)
-		fflush(stream);
-	if(include_close)
-	{
-		fclose(stream);
-	}
-
-        /*******************************************************************/
-
-        if(!stopped){
-                temp_time = time_so_far();
-                child_stat->throughput = ((temp_time - starttime1)-time_res)
-                        -compute_val;
-                if(child_stat->throughput < (double).000001)
-                {
-                        child_stat->throughput= time_res;
-                        if(rec_prob < reclen)
-                                rec_prob = reclen;
-                        res_prob=1;
-                }
-
-                if(OPS_flag){
-                   /*written_so_far=(written_so_far*1024)/reclen;*/
-                   written_so_far=w_traj_ops_completed;
-                }
-                child_stat->throughput =
-                        (double)written_so_far/child_stat->throughput;
-                child_stat->actual = (double)written_so_far;
-        }
-        if(cdebug)
-        {
-                printf("Child %d: throughput %f actual %f \n",(int)chid, child_stat->throughput,
-                        child_stat->actual);
-                fflush(stdout);
-        }
-        if(cpuutilflag)
-        {
-                cputime = cputime_so_far() - cputime;
-                if (cputime < cputime_res)
-                        cputime = 0.0;
-                child_stat->cputime = cputime;
-                walltime = time_so_far() - walltime;
-                child_stat->walltime = walltime;
-        }
-        if(distributed && client_iozone)
-                tell_master_stats(THREAD_FREAD_TEST, chid, child_stat->throughput,
-                        child_stat->actual,
-                        child_stat->cputime, child_stat->walltime,
-                        (char)*stop_flag,
-                        (long long)CHILD_STATE_HOLD);
-
-        if (debug1) {
-                printf(" child/slot: %lld, wall-cpu: %8.3f %8.3fC" " -> %6.2f%%\n",
-                        xx, walltime, cputime,
-                        cpu_util(cputime, walltime));
-        }
-        child_stat->flag = CHILD_STATE_HOLD; /* Tell parent I'm done */
-        stopped=0;
-
-        /*******************************************************************/
-        /* End fead performance test.  *************************************/
-        /*******************************************************************/
-
-        if(debug1)
-#ifdef NO_PRINT_LLD
-                printf("\nChild finished %ld\n",xx);
-#else
-                printf("\nChild finished %lld\n",xx);
-#endif
-        if(Q_flag && (thread_wqfd !=0) )
-                fclose(thread_wqfd);
-        free(dummyfile[xx]);
-        if(w_traj_flag)
-                fclose(w_traj_fd);
-
-        if(L_flag)
-        {
-                get_date(now_string);
-                fprintf(thread_Lwqfd,"%-25s %s","Fread test finished: ",now_string);
-                fclose(thread_Lwqfd);
-        }
-
-        /*******************************************************************/
-
-        if(!include_close)
-	{
-		fflush(stream);
-		fclose(stream);
-	}
-        stream = NULL;
-
-        if(restf)
-                sleep((int)(int)rest_val);
-
-        free(stdio_buf);
-        if(OPS_flag || MS_flag){
-           filebytes64=filebytes64/reclen;
-        }
-
-        /*******************************************************************/
-	if(hist_summary)
-	   dump_hist("Fread",(int)xx);
-        if(distributed && client_iozone)
-                return(0);
-#ifdef NO_THREADS
-        exit(0);
-#else
-        if(use_thread)
-                thread_exit();
-        else
-                exit(0);
-#endif
-
-return(0);
-}
diff --git a/src/components/appio/tests/iozone/iozone_visualizer.pl b/src/components/appio/tests/iozone/iozone_visualizer.pl
deleted file mode 100755
index a7c6b1360..000000000
--- a/src/components/appio/tests/iozone/iozone_visualizer.pl
+++ /dev/null
@@ -1,262 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-# arguments: one of more report files
-#
-# Christian Mautner <christian * mautner . ca>, 2005-10-31
-# Marc Schoechlin <ms * 256bit.org>, 2007-12-02
-#
-# This script is just a hack :-)
-#
-# This script is based loosely on the Generate_Graph set
-# of scripts that come with iozone, but is a complete re-write
-#
-# The main reason to write this was the need to compare the behaviour of
-# two or more different setups, for tuning filesystems or
-# comparing different pieces of hardware.
-#
-# This script is in the public domain, too short and too trivial
-# to deserve a copyright.
-#
-# Simply run iozone like, for example, ./iozone -a -g 4G > config1.out (if your machine has 4GB)
-#
-# and then run perl report.pl config1.out
-# or get another report from another box into config2.out and run
-# perl report.pl config1.out config2.out
-# the look in the report_* directory for .png
-#
-# If you don't like png or the graphic size, search for "set terminal" in this file and put whatever gnuplot
-# terminal you want. Note I've also noticed that gnuplot switched the set terminal png syntax
-# a while back, you might need "set terminal png small size 900,700"
-#
-use Getopt::Long;
-
-my $column;
-my %columns;
-my $datafile;
-my @datafiles;
-my $outdir;
-my $report;
-my $nooffset=0;
-my @Reports;
-my @split;
-my $size3d; my $size2d;
-
-# evaluate options
-GetOptions(
-    '3d=s'     => \$size3d,
-    '2d=s'     => \$size2d,
-    'nooffset' => \$nooffset
-);
-
-$size3d = "900,700" unless defined $size3d;
-$size2d = "800,500" unless defined $size2d;
-
-
-my $xoffset = "offset -7";
-my $yoffset = "offset -3";
-
-if ($nooffset == 1){
-   $xoffset = ""; $yoffset = "";
-}
-
-print "\niozone_visualizer.pl : this script is distributed as public domain\n";
-print "Christian Mautner <christian * mautner . ca>, 2005-10-31\n";
-print "Marc Schoechlin <ms * 256bit.org>, 2007-12-02\n";
-
-
-@Reports=@ARGV;
-
-die "usage: $0 --3d=x,y -2d=x,y <iozone.out> [<iozone2.out>...]\n" if not @Reports or grep (m|^-|, @Reports);
-
-die "report files must be in current directory" if grep (m|/|, @Reports);
-
-print "Configured xtics-offset '$xoffset', configured ytics-offfset '$yoffset' (disable with --nooffset)\n";
-print "Size 3d graphs : ".$size3d." (modify with '--3d=x,y')\n";
-print "Size 2d graphs : ".$size2d." (modify with '--2d=x,y')\n";
-
-#KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
-%columns=(
-         'KB'        =>1,
-         'reclen'    =>2,
-         'write'     =>3,
-         'rewrite'   =>4,
-         'read'      =>5,
-         'reread'    =>6,
-         'randread'  =>7,
-         'randwrite' =>8,
-         'bkwdread'  =>9,
-         'recrewrite'=>10,
-         'strideread'=>11,
-         'fwrite'    =>12,
-         'frewrite'  =>13,
-         'fread'     =>14,
-         'freread'   =>15,
-         );
-
-#
-# create output directory. the name is the concatenation
-# of all report file names (minus the file extension, plus
-# prefix report_)
-#
-$outdir="report_".join("_",map{/([^\.]+)(\..*)?/ && $1}(@Reports));
-
-print STDERR "Output directory: $outdir ";
-
-if ( -d $outdir )
-{
-    print STDERR "(removing old directory) ";
-    system "rm -rf $outdir";
-}
-
-mkdir $outdir or die "cannot make directory $outdir";
-
-print STDERR "done.\nPreparing data files...";
-
-foreach $report (@Reports)
-{
-    open(I, $report) or die "cannot open $report for reading";
-    $report=~/^([^\.]+)/;
-    $datafile="$1.dat";
-    push @datafiles, $datafile;
-    open(O, ">$outdir/$datafile") or die "cannot open $outdir/$datafile for writing";
-    open(O2, ">$outdir/2d-$datafile") or die "cannot open $outdir/$datafile for writing";
-
-    my @sorted = sort { $columns{$a} <=> $columns{$b} } keys %columns;
-    print O "# ".join(" ",@sorted)."\n";
-    print O2 "# ".join(" ",@sorted)."\n";
-
-    while(<I>)
-    {
-        next unless ( /^[\s\d]+$/ );
-        @split = split();
-        next unless ( @split == 15 );
-        print O;
-        print O2 if $split[1] == 16384 or $split[0] == $split[1];
-    }
-    close(I);
-    close(O);
-    close(O2);
-}
-
-print STDERR "done.\nGenerating graphs:";
-
-
-open(HTML, ">$outdir/index.html") or die "cannot open $outdir/index.html for writing";
-
-print HTML qq{<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-<title>IOZone Statistics</title>
- <STYLE type="text/css">
-.headline \{ font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: 003300 ; font-weight: bold; text-decoration: none\}
- </STYLE>
-</head>
-<body>
-<a name="top"></a>
-<h1>IOZone Statistics</h1>
-<table width="100%" summary="iozone stats">
-<tr>
-<td>
-};
-
-# Generate Menu
-print HTML "<u><b>## Overview</b></u>\n<ul>\n";
-foreach $column (keys %columns){
-    print HTML '<li><b>'.uc($column).'</b> : '.
-                   '<a href="#'.$column."\">3d</a>\n".
-                   '<a href="#s2d-'.$column."\">2d</a></li>\n";
-}
-print HTML "</ul></td></tr>\n";
-# Genereate 3d plots
-foreach $column (keys %columns)
-{
-    print STDERR " $column";
-
-    open(G, ">$outdir/$column.do") or die "cannot open $outdir/$column.do for writing";
-
-
-
-    print G qq{
-set title "Iozone performance: $column"
-set grid lt 2 lw 1
-set surface
-set parametric
-set xtics $xoffset
-set ytics $yoffset
-set logscale x 2
-set logscale y 2
-set autoscale z
-#set xrange [2.**5:2.**24]
-set xlabel "File size in KBytes" -2
-set ylabel "Record size in Kbytes" 2
-set zlabel "Kbytes/sec" 4,8
-set style data lines
-set dgrid3d 80,80,3
-#set terminal png small picsize 900 700
-set terminal png small size $size3d nocrop
-set output "$column.png"
-};
-
-    print HTML qq{
-      <tr>
-       <td align="center">
-         <h2><a name="$column"></a>3d-$column</h2><a href="#top">[top]</a><BR/>
-         <img src="$column.png" alt="3d-$column"/><BR/>
-       </td>
-      </tr>
-    };
-
-    print G "splot ". join(", ", map{qq{"$_" using 1:2:$columns{$column} title "$_"}}(@datafiles));
-
-    print G "\n";
-
-    close G;
-
-    open(G, ">$outdir/2d-$column.do") or die "cannot open $outdir/$column.do for writing";
-    print G qq{
-set title "Iozone performance: $column"
-#set terminal png small picsize 450 350
-set terminal png medium size $size2d nocrop
-set logscale x
-set xlabel "File size in KBytes"
-set ylabel "Kbytes/sec"
-set output "2d-$column.png"
-};
-
-    print HTML qq{
-      <tr>
-       <td align="center">
-         <h2><a name="s2d-$column"></a>2d-$column</h2><a href="#top">[top]</a><BR/>
-         <img src="2d-$column.png" alt="2d-$column"/><BR/>
-       </td>
-      </tr>
-    };
-
-
-
-    print G "plot ". join(", ", map{qq{"2d-$_" using 1:$columns{$column} title "$_" with lines}}(@datafiles));
-
-    print G "\n";
-
-    close G;
-
-    if ( system("cd $outdir && gnuplot $column.do && gnuplot 2d-$column.do") )
-    {
-        print STDERR "(failed) ";
-    }
-    else
-    {
-        print STDERR "(ok) ";
-    }
-}
-
-print HTML qq{
-</table>
-</body>
-</html>
-};
-print STDERR "done.\n";
diff --git a/src/components/appio/tests/iozone/libasync.c b/src/components/appio/tests/iozone/libasync.c
deleted file mode 100644
index 4548a2cbe..000000000
--- a/src/components/appio/tests/iozone/libasync.c
+++ /dev/null
@@ -1,1604 +0,0 @@
-
-
-/* 
- * Library for Posix async read operations with hints.
- * Author: Don Capps
- * Company: Iozone
- * Date: 4/24/1998
- *
- * Two models are supported.  First model is a replacement for read() where the async
- * operations are performed and the requested data is bcopy()-ed back into the users 
- * buffer. The second model is a new version of read() where the caller does not 
- * supply the address of the buffer but instead is returned an address to the
- * location of the data. The second model eliminates a bcopy from the path.
- *
- * To use model #1:
- * 1. Call async_init(&pointer_on_stack,fd,direct_flag);
- *	The fd is the file descriptor for the async operations.
- *	The direct_flag sets VX_DIRECT 
- *
- * 2. Call async_read(gc, fd, ubuffer, offset, size, stride, max, depth)
- *    	Where:
- *	gc ............	is the pointer on the stack
- *	fd ............	is the file descriptor
- *	ubuffer .......	is the address of the user buffer.
- *	offset ........	is the offset in the file to begin reading
- *	size ..........	is the size of the transfer.
- *	stride ........	is the distance, in size units, to space the async reads.
- *	max ...........	is the max size of the file to be read.
- *	depth .........	is the number of async operations to perform.
- *
- * 3. Call end_async(gc) when finished.
- *	Where:
- *	gc ............ is the pointer on the stack.
- *
- * To use model #2:
- * 1. Call async_init(&pointer_on_stack,fd,direct_flag);
- *	The fd is the file descriptor for the async operations.
- *	The direct_flag sets VX_DIRECT 
- * 2. Call async_read(gc, fd, &ubuffer, offset, size, stride, max, depth)
- *    	Where:
- *	gc ............	is the pointer on the stack
- *	fd ............	is the file descriptor
- *	ubuffer .......	is the address of a pointer that will be filled in 
- *                      by the async library.
- *	offset ........	is the offset in the file to begin reading
- *	size ..........	is the size of the transfer.
- *	stride ........	is the distance, in size units, to space the async reads.
- *	max ...........	is the max size of the file to be read.
- *	depth .........	is the number of async operations to perform.
- *
- * 3. Call async_release(gc) when finished with the data that was returned.
- *    This allows the async library to reuse the memory that was filled in
- *    and returned to the user.
- *
- * 4. Call end_async(gc) when finished.
- *	Where:
- *	gc ............ is the pointer on the stack.
- *
- * To use model #1: (WRITES)
- * 1. Call async_init(&pointer_on_stack,fd,direct_flag);
- *	The fd is the file descriptor for the async operations.
- *
- * 2. Call async_write(gc, fd, ubuffer, size, offset, depth)
- *    	Where:
- *	gc ............	is the pointer on the stack
- *	fd ............	is the file descriptor
- *	ubuffer .......	is the address of the user buffer.
- *	size ..........	is the size of the transfer.
- *	offset ........	is the offset in the file to begin reading
- *	depth .........	is the number of async operations to perform.
- *
- * 4. Call end_async(gc) when finished.
- *	Where:
- *	gc ............ is the pointer on the stack.
- *
- * Notes:
- *	The intended use is to replace calls to read() with calls to
- *	async_read() and allow the user to make suggestions on 
- *	what kind of async read-ahead would be nice to have.
- *	The first transfer requested is guarenteed to be complete
- *	before returning to the caller. The async operations will
- *	be started and will also be guarenteed to have completed
- *	if the next call specifies its first request to be one
- *	that was previously performed with an async operation.
- *	
- *	The async_read_no_copy() function allows the async operations
- *	to return the data to the user and not have to perform 
- *	a bcopy of the data back into the user specified buffer 
- *	location. This model is faster but assumes that the user
- *	application has been modified to work with this model.
- *
- * 	The async_write() is intended to enhance the performance of 
- *	initial writes to a file. This is the slowest case in the write
- *	path as it must perform meta-data allocations and wait.
- */
-
-#include <sys/types.h>
-#include <aio.h>
-#if defined(solaris) || defined(linux) || defined(SCO_Unixware_gcc)
-#else
-#include <sys/timers.h>
-#endif
-#include <sys/errno.h>
-#include <unistd.h>
-#ifndef bsd4_4
-#include <malloc.h>
-#endif
-#ifdef VXFS
-#include <sys/fs/vx_ioctl.h>
-#endif
-
-#if defined(OSFV5) || defined(linux)
-#include <string.h>
-#endif
-
-#if defined(linux)
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#endif
-
-#if (defined(solaris) && defined(__LP64__)) || defined(__s390x__) || defined(FreeBSD)
-/* If we are building for 64-bit Solaris, all functions that return pointers
- * must be declared before they are used; otherwise the compiler will assume
- * that they return ints and the top 32 bits of the pointer will be lost,
- * causing segmentation faults.  The following includes take care of this.
- * It should be safe to add these for all other OSs too, but we're only
- * doing it for Solaris now in case another OS turns out to be a special case.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <strings.h> /* For the BSD string functions */
-#endif
-
-void mbcopy(char *source, char *dest, size_t len);
-
-
-#if !defined(solaris) && !defined(off64_t) && !defined(_OFF64_T) && !defined(__off64_t_defined) && !defined(SCO_Unixware_gcc)
-typedef long long off64_t;
-#endif
-#if defined(OSFV5)
-#include <string.h>
-#endif
-
-
-extern long long page_size;
-extern int one;
-/*
- * Internal cache entrys. Each entry on the global
- * cache, pointed to by async_init(gc) will be of
- * this structure type.
- */
-char version[] = "Libasync Version $Revision$";
-struct cache_ent {
-	struct aiocb myaiocb;			/* For use in small file mode */
-#ifdef _LARGEFILE64_SOURCE 
-#if defined(__CrayX1__)
-	aiocb64_t myaiocb64;		/* For use in large file mode */
-#else
-	struct aiocb64 myaiocb64;		/* For use in large file mode */
-#endif 
-#endif 
-	long long fd;				/* File descriptor */
-	long long size;				/* Size of the transfer */
-	struct cache_ent *forward;		/* link to next element on cache list */
-	struct cache_ent *back;			/* link to previous element on the cache list */
-	long long direct;			/* flag to indicate if the buffer should be */
-						/* de-allocated by library */
-	char *real_address;			/* Real address to free */
-	
-	volatile void *oldbuf;			/* Used for firewall to prevent in flight */
-						/* accidents */
-	int oldfd;				/* Used for firewall to prevent in flight */
-						/* accidents */
-	size_t oldsize;				/* Used for firewall to prevent in flight */
-						/* accidents */
-};
-
-/*
- * Head of the cache list
- */
-struct cache {
-	struct cache_ent *head;		/* Head of cache list */
-	struct cache_ent *tail;		/* tail of cache list */
-	struct cache_ent *inuse_head;	/* head of in-use list */
-	long long count;		/* How many elements on the cache list */
-	struct cache_ent *w_head;		/* Head of cache list */
-	struct cache_ent *w_tail;		/* tail of cache list */
-	long long w_count;		/* How many elements on the write list */
-	};
-
-long long max_depth;
-extern int errno;
-struct cache_ent *alloc_cache();
-struct cache_ent *incache();
-void async_init();
-void end_async();
-int async_suspend();
-int async_read();
-void takeoff_cache();
-void del_cache();
-void async_release();
-void putoninuse();
-void takeoffinuse();
-struct cache_ent *allocate_write_buffer();
-size_t async_write();
-void async_wait_for_write();
-void async_put_on_write_queue();
-void async_write_finish();
-
-/* On Solaris _LP64 will be defined by <sys/types.h> if we're compiling
- * as a 64-bit binary.  Make sure that __LP64__ gets defined in this case,
- * too -- it should be defined on the compiler command line, but let's
- * not rely on this.
- */
-#if defined(_LP64)
-#if !defined(__LP64__)
-#define __LP64__
-#endif
-#endif
-
-
-/***********************************************/
-/* Initialization routine to setup the library */
-/***********************************************/
-void
-async_init(gc,fd,flag)
-struct cache **gc;
-int fd;
-int flag;
-{
-#ifdef VXFS
-	if(flag)
-		ioctl(fd,VX_SETCACHE,VX_DIRECT);
-#endif
-	if(*gc)
-	{
-		printf("Warning calling async_init two times ?\n");
-		return;
-	}
-	*gc=(struct cache *)malloc((size_t)sizeof(struct cache));
-	if(*gc == 0)
-	{
-		printf("Malloc failed\n");
-		exit(174);
-	}
-	bzero(*gc,sizeof(struct cache));
-#if defined(__AIX__) || defined(SCO_Unixware_gcc)
-	max_depth=500;
-#else
-	max_depth=sysconf(_SC_AIO_MAX);
-#endif
-}
-
-/***********************************************/
-/* Tear down routine to shutdown the library   */
-/***********************************************/
-void
-end_async(gc)
-struct cache *gc;
-{
-	del_cache(gc);
-	async_write_finish(gc);
-	free((void *)gc);
-}
-
-/***********************************************/
-/* Wait for a request to finish                */
-/***********************************************/
-int
-async_suspend(struct cache_ent *ce)
-{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	const struct aiocb * const cblist[1] = {&ce->myaiocb};
-#else
-	const struct aiocb64 * const cblist[1] = {&ce->myaiocb64};
-#endif
-#else
-	const struct aiocb * const cblist[1] = {&ce->myaiocb};
-#endif
-
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	return aio_suspend(cblist, 1, NULL);
-#else
-	return aio_suspend64(cblist, 1, NULL);
-#endif
-#else
-	return aio_suspend(cblist, 1, NULL);
-#endif
-}
-
-/*************************************************************************
- * This routine is a generic async reader assist function. It takes
- * the same calling parameters as read() but also extends the
- * interface to include:
- * stride ..... For the async reads, what is the distance, in size units, 
- * 		to space the reads. Note: Stride of 0 indicates that
- *		you do not want any read-ahead.
- * max    ..... What is the maximum file offset for this operation.
- * depth  ..... How much read-ahead do you want.
- * 
- * The calls to this will guarentee to complete the read() operation
- * before returning to the caller. The completion may occur in two
- * ways. First the operation may be completed by calling aio_read()
- * and then waiting for it to complete. Second  the operation may be 
- * completed by copying the data from a cache of previously completed 
- * async operations. 
- * In the event the read to be satisfied is not in the cache then a 
- * series of async operations will be scheduled and then the first 
- * async read will be completed. In the event that the read() can be 
- * satisfied from the cache then the data is copied back to the 
- * user buffer and a series of async reads will be initiated.  If a 
- * read is issued and the cache contains data and the read can not 
- * be satisfied from the cache, then the cache is discarded, and 
- * a new cache is constructed.
- * Note: All operations are aio_read(). The series will be issued
- * as asyncs in the order requested. After all are in flight
- * then the code will wait for the manditory first read.
- *************************************************************************/
-
-int 
-async_read(gc, fd, ubuffer, offset, size, stride, max, depth)
-struct cache *gc;
-long long fd;
-char *ubuffer;
-off64_t offset;
-long long size;
-long long stride;
-off64_t max;
-long long depth;
-{
-	off64_t a_offset,r_offset;
-	long long a_size;
-	struct cache_ent *ce,*first_ce=0;
-	long long i;
-	ssize_t retval=0;
-	ssize_t ret;
-	long long start = 0;
-	long long del_read=0;
-
-	a_offset=offset;
-	a_size = size;
-	/*
-	 * Check to see if it can be completed from the cache
-	 */
-	if((ce=(struct cache_ent *)incache(gc,fd,offset,size)))
-	{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		while((ret=aio_error(&ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(ce);
-		}
-#else
-		while((ret=aio_error64(&ce->myaiocb64))== EINPROGRESS)
-		{
-			async_suspend(ce);
-		}
-#endif
-#else
-		while((ret=aio_error(&ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(ce);
-		}
-#endif
-		if(ret)
-		{
-			printf("aio_error 1: ret %d %d\n",ret,errno);
-		}
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		retval=aio_return(&ce->myaiocb);
-#else
-#if defined(__CrayX1__)
-		retval=aio_return64((aiocb64_t *)&ce->myaiocb64);
-#else
-		retval=aio_return64((struct aiocb64 *)&ce->myaiocb64);
-#endif
-
-#endif
-#else
-		retval=aio_return(&ce->myaiocb);
-#endif
-		if(retval > 0)
-		{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			mbcopy((char *)ce->myaiocb.aio_buf,(char *)ubuffer,(size_t)retval);
-#else
-			mbcopy((char *)ce->myaiocb64.aio_buf,(char *)ubuffer,(size_t)retval);
-#endif
-#else
-			mbcopy((char *)ce->myaiocb.aio_buf,(char *)ubuffer,(size_t)retval);
-#endif
-		}
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		if(retval < ce->myaiocb.aio_nbytes)
-#else
-		if(retval < ce->myaiocb64.aio_nbytes)
-#endif
-#else
-		if(retval < ce->myaiocb.aio_nbytes)
-#endif
-		{
-			printf("aio_return error1: ret %d %d\n",retval,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			printf("aio_return error1: fd %d offset %ld buffer %lx size %d Opcode %d\n",
-				ce->myaiocb.aio_fildes,
-				ce->myaiocb.aio_offset,
-				(long)(ce->myaiocb.aio_buf),
-				ce->myaiocb.aio_nbytes,
-				ce->myaiocb.aio_lio_opcode
-#else
-			printf("aio_return error1: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				ce->myaiocb64.aio_fildes,
-				ce->myaiocb64.aio_offset,
-				(long)(ce->myaiocb64.aio_buf),
-				ce->myaiocb64.aio_nbytes,
-				ce->myaiocb64.aio_lio_opcode
-#endif
-#else
-			printf("aio_return error1: fd %d offset %d buffer %lx size %d Opcode %d\n",
-				ce->myaiocb.aio_fildes,
-				ce->myaiocb.aio_offset,
-				(long)(ce->myaiocb.aio_buf),
-				ce->myaiocb.aio_nbytes,
-				ce->myaiocb.aio_lio_opcode
-#endif
-				);
-		}
-		ce->direct=0;
-		takeoff_cache(gc,ce);
-	}else
-	{
-		/*
-		 * Clear the cache and issue the first request async()
-		 */
-		del_cache(gc);
-		del_read++;
-		first_ce=alloc_cache(gc,fd,offset,size,(long long)LIO_READ);
-again:
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		ret=aio_read(&first_ce->myaiocb);
-#else
-		ret=aio_read64(&first_ce->myaiocb64);
-#endif
-#else
-		ret=aio_read(&first_ce->myaiocb);
-#endif
-		if(ret!=0)
-		{
-			if(errno==EAGAIN)
-				goto again;
-			else
-				printf("error returned from aio_read(). Ret %d errno %d\n",ret,errno);
-		}
-	}
-	if(stride==0)	 /* User does not want read-ahead */
-		goto out;
-	if(a_offset<0)	/* Before beginning of file */
-		goto out;
-	if(a_offset+size>max)	/* After end of file */
-		goto out;
-	if(depth >=(max_depth-1))
-		depth=max_depth-1;
-	if(depth==0)
-		goto out;
-	if(gc->count > 1)
-		start=depth-1;
-	for(i=start;i<depth;i++)	/* Issue read-aheads for the depth specified */
-	{
-		r_offset=a_offset+((i+1)*(stride*a_size));
-		if(r_offset<0)
-			continue;
-		if(r_offset+size > max)
-			continue;
-		if((ce=incache(gc,fd,r_offset,a_size)))
-			continue;
-		ce=alloc_cache(gc,fd,r_offset,a_size,(long long)LIO_READ);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		ret=aio_read(&ce->myaiocb);
-#else
-		ret=aio_read64(&ce->myaiocb64);
-#endif
-#else
-		ret=aio_read(&ce->myaiocb);
-#endif
-		if(ret!=0)
-		{
-			takeoff_cache(gc,ce);
-			break;
-		}
-	}			
-out:
-	if(del_read)	/* Wait for the first read to complete */
-	{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		while((ret=aio_error(&first_ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(first_ce);
-		}
-#else
-		while((ret=aio_error64(&first_ce->myaiocb64))== EINPROGRESS)
-		{
-			async_suspend(first_ce);
-		}
-#endif
-#else
-		while((ret=aio_error(&first_ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(first_ce);
-		}
-#endif
-		if(ret)
-			printf("aio_error 2: ret %d %d\n",ret,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		retval=aio_return(&first_ce->myaiocb);
-#else
-		retval=aio_return64(&first_ce->myaiocb64);
-#endif
-#else
-		retval=aio_return(&first_ce->myaiocb);
-#endif
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		if(retval < first_ce->myaiocb.aio_nbytes)
-#else
-		if(retval < first_ce->myaiocb64.aio_nbytes)
-#endif
-#else
-		if(retval < first_ce->myaiocb.aio_nbytes)
-#endif
-		{
-			printf("aio_return error2: ret %d %d\n",retval,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			printf("aio_return error2: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				first_ce->myaiocb.aio_fildes,
-				first_ce->myaiocb.aio_offset,
-				(long)(first_ce->myaiocb.aio_buf),
-				first_ce->myaiocb.aio_nbytes,
-				first_ce->myaiocb.aio_lio_opcode
-#else
-			printf("aio_return error2: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				first_ce->myaiocb64.aio_fildes,
-				first_ce->myaiocb64.aio_offset,
-				(long)(first_ce->myaiocb64.aio_buf),
-				first_ce->myaiocb64.aio_nbytes,
-				first_ce->myaiocb64.aio_lio_opcode
-#endif
-#else
-			printf("aio_return error2: fd %d offset %d buffer %lx size %d Opcode %d\n",
-				first_ce->myaiocb.aio_fildes,
-				first_ce->myaiocb.aio_offset,
-				(long)(first_ce->myaiocb.aio_buf),
-				first_ce->myaiocb.aio_nbytes,
-				first_ce->myaiocb.aio_lio_opcode
-#endif
-				);
-		}
-		if(retval > 0)
-		{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			mbcopy((char *)first_ce->myaiocb.aio_buf,(char *)ubuffer,(size_t)retval);
-#else
-			mbcopy((char *)first_ce->myaiocb64.aio_buf,(char *)ubuffer,(size_t)retval);
-#endif
-#else
-			mbcopy((char *)first_ce->myaiocb.aio_buf,(char *)ubuffer,(size_t)retval);
-#endif
-		}
-		first_ce->direct=0;
-		takeoff_cache(gc,first_ce);
-	}
-	return((int)retval);	
-}
-
-/************************************************************************
- * This routine allocates a cache_entry. It contains the 
- * aiocb block as well as linkage for use in the cache mechanism.
- * The space allocated here will be released after the cache entry
- * has been consumed. The routine takeoff_cache() will be called
- * after the data has been copied to user buffer or when the
- * cache is purged. The routine takeoff_cache() will also release
- * all memory associated with this cache entry.
- ************************************************************************/
-
-struct cache_ent *
-alloc_cache(gc,fd,offset,size,op)
-struct cache *gc;
-long long fd,size,op;
-off64_t offset;
-{
-	struct cache_ent *ce;
-	long temp;
-	ce=(struct cache_ent *)malloc((size_t)sizeof(struct cache_ent));
-	if(ce == (struct cache_ent *)0)
-	{
-		printf("Malloc failed\n");
-		exit(175);
-	}
-	bzero(ce,sizeof(struct cache_ent));
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	ce->myaiocb.aio_fildes=(int)fd;
-	ce->myaiocb.aio_offset=(off64_t)offset;
-	ce->real_address = (char *)malloc((size_t)(size+page_size));
-	temp=(long)ce->real_address;
-	temp = (temp+page_size) & ~(page_size-1);
-	ce->myaiocb.aio_buf=(volatile void *)temp;
-	if(ce->myaiocb.aio_buf == 0)
-#else
-	ce->myaiocb64.aio_fildes=(int)fd;
-	ce->myaiocb64.aio_offset=(off64_t)offset;
-	ce->real_address = (char *)malloc((size_t)(size+page_size));
-	temp=(long)ce->real_address;
-	temp = (temp+page_size) & ~(page_size-1);
-	ce->myaiocb64.aio_buf=(volatile void *)temp;
-	if(ce->myaiocb64.aio_buf == 0)
-#endif
-#else
-	ce->myaiocb.aio_fildes=(int)fd;
-	ce->myaiocb.aio_offset=(off_t)offset;
-	ce->real_address = (char *)malloc((size_t)(size+page_size));
-	temp=(long)ce->real_address;
-	temp = (temp+page_size) & ~(page_size-1);
-	ce->myaiocb.aio_buf=(volatile void *)temp;
-	if(ce->myaiocb.aio_buf == 0)
-#endif
-	{
-		printf("Malloc failed\n");
-		exit(176);
-	}
-	/*bzero(ce->myaiocb.aio_buf,(size_t)size);*/
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	ce->myaiocb.aio_reqprio=0;
-	ce->myaiocb.aio_nbytes=(size_t)size;
-	ce->myaiocb.aio_sigevent.sigev_notify=SIGEV_NONE;
-	ce->myaiocb.aio_lio_opcode=(int)op;
-#else
-	ce->myaiocb64.aio_reqprio=0;
-	ce->myaiocb64.aio_nbytes=(size_t)size;
-	ce->myaiocb64.aio_sigevent.sigev_notify=SIGEV_NONE;
-	ce->myaiocb64.aio_lio_opcode=(int)op;
-#endif
-#else
-	ce->myaiocb.aio_reqprio=0;
-	ce->myaiocb.aio_nbytes=(size_t)size;
-	ce->myaiocb.aio_sigevent.sigev_notify=SIGEV_NONE;
-	ce->myaiocb.aio_lio_opcode=(int)op;
-#endif
-	ce->fd=(int)fd;
-	ce->forward=0;
-	ce->back=gc->tail;
-	if(gc->tail)
-		gc->tail->forward = ce;
-	gc->tail= ce;
-	if(!gc->head)
-		gc->head=ce;
-	gc->count++;
-	return(ce);
-}
-
-/************************************************************************
- * This routine checks to see if the requested data is in the
- * cache. 
-*************************************************************************/
-struct cache_ent *
-incache(gc,fd,offset,size)
-struct cache *gc;
-long long fd,size;
-off64_t offset;
-{
-	struct cache_ent *move;
-	if(gc->head==0)
-	{
-		return(0);
-	}
-	move=gc->head;
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	while(move)
-	{
-		if((move->fd == fd) && (move->myaiocb.aio_offset==(off64_t)offset) &&
-			((size_t)size==move->myaiocb.aio_nbytes))
-			{
-				return(move);
-			}
-		move=move->forward;
-	}
-#else
-	while(move)
-	{
-		if((move->fd == fd) && (move->myaiocb64.aio_offset==(off64_t)offset) &&
-			((size_t)size==move->myaiocb64.aio_nbytes))
-			{
-				return(move);
-			}
-		move=move->forward;
-	}
-#endif
-#else
-	while(move)
-	{
-		if((move->fd == fd) && (move->myaiocb.aio_offset==(off_t)offset) &&
-			((size_t)size==move->myaiocb.aio_nbytes))
-			{
-				return(move);
-			}
-		move=move->forward;
-	}
-#endif
-	return(0);
-}
-
-/************************************************************************
- * This routine removes a specific cache entry from the cache, and
- * releases all memory associated witht the cache entry (if not direct).
-*************************************************************************/
-
-void
-takeoff_cache(gc,ce)
-struct cache *gc;
-struct cache_ent *ce;
-{
-	struct cache_ent *move;
-	long long found;
-	move=gc->head;
-	if(move==ce) /* Head of list */
-	{
-
-		gc->head=ce->forward;
-		if(gc->head)
-			gc->head->back=0;
-		else
-			gc->tail = 0;
-		if(!ce->direct)
-		{
-			free((void *)(ce->real_address));
-			free((void *)ce);
-		}
-		gc->count--;
-		return;
-	}
-	found=0;
-	while(move)
-	{
-		if(move==ce)
-		{
-			if(move->forward)
-			{
-				move->forward->back=move->back;
-			}
-			if(move->back)
-			{
-				move->back->forward=move->forward;
-			}
-			found=1;
-			break;
-		}
-		else
-		{
-			move=move->forward;
-		}
-	}
-	if(gc->head == ce)
-		gc->tail = ce;
-	if(!found)
-		printf("Internal Error in takeoff cache\n");
-	move=gc->head;
-	if(!ce->direct)
-	{
-		free((void *)(ce->real_address));
-		free((void *)ce);
-	}
-	gc->count--;
-}
-
-/************************************************************************
- * This routine is used to purge the entire cache. This is called when
- * the cache contains data but the incomming read was not able to 
- * be satisfied from the cache. This indicates that the previous
- * async read-ahead was not correct and a new pattern is emerging. 
- ************************************************************************/
-void
-del_cache(gc)
-struct cache *gc;
-{
-	struct cache_ent *ce;
-	ssize_t ret;
-	ce=gc->head;
-	while(1)
-	{
-		ce=gc->head;
-		if(ce==0)
-			return;
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		while((ret = aio_cancel(0,&ce->myaiocb))==AIO_NOTCANCELED)
-#else
-		while((ret = aio_cancel64(0,&ce->myaiocb64))==AIO_NOTCANCELED)
-#endif
-#else
-		while((ret = aio_cancel(0,&ce->myaiocb))==AIO_NOTCANCELED)
-#endif
-			; 
-
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		ret = aio_return(&ce->myaiocb);
-#else
-		ret = aio_return64(&ce->myaiocb64);
-#endif
-#else
-		ret = aio_return(&ce->myaiocb);
-#endif
-		ce->direct=0;
-		takeoff_cache(gc,ce);	  /* remove from cache */
-	}
-}
-
-/************************************************************************
- * Like its sister async_read() this function performs async I/O for 
- * all buffers but it differs in that it expects the caller to 
- * request a pointer to the data to be returned instead of handing
- * the function a location to put the data. This will allow the
- * async I/O to be performed and does not require any bcopy to be
- * done to put the data back into the location specified by the caller.
- ************************************************************************/
-int
-async_read_no_copy(gc, fd, ubuffer, offset, size, stride, max, depth)
-struct cache *gc;
-long long fd;
-char **ubuffer;
-off64_t offset;
-long long size;
-long long stride;
-off64_t max;
-long long depth;
-{
-	off64_t a_offset,r_offset;
-	long long a_size;
-	struct cache_ent *ce,*first_ce=0;
-	long long i;
-	ssize_t retval=0;
-	ssize_t ret;
-	long long del_read=0;
-	long long start=0;
-
-	a_offset=offset;
-	a_size = size;
-	/*
-	 * Check to see if it can be completed from the cache
-	 */
-	if((ce=(struct cache_ent *)incache(gc,fd,offset,size)))
-	{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		while((ret=aio_error(&ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(ce);
-		}
-#else
-		while((ret=aio_error64(&ce->myaiocb64))== EINPROGRESS)
-		{
-			async_suspend(ce);
-		}
-#endif
-#else
-		while((ret=aio_error(&ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(ce);
-		}
-#endif
-		if(ret)
-			printf("aio_error 3: ret %d %d\n",ret,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		if(ce->oldbuf != ce->myaiocb.aio_buf ||
-			ce->oldfd != ce->myaiocb.aio_fildes ||
-			ce->oldsize != ce->myaiocb.aio_nbytes) 
-#else
-		if(ce->oldbuf != ce->myaiocb64.aio_buf ||
-			ce->oldfd != ce->myaiocb64.aio_fildes ||
-			ce->oldsize != ce->myaiocb64.aio_nbytes) 
-#endif
-#else
-		if(ce->oldbuf != ce->myaiocb.aio_buf ||
-			ce->oldfd != ce->myaiocb.aio_fildes ||
-			ce->oldsize != ce->myaiocb.aio_nbytes) 
-#endif
-			printf("It changed in flight\n");
-			
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		retval=aio_return(&ce->myaiocb);
-#else
-		retval=aio_return64(&ce->myaiocb64);
-#endif
-#else
-		retval=aio_return(&ce->myaiocb);
-#endif
-		if(retval > 0)
-		{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			*ubuffer=(char *)ce->myaiocb.aio_buf;
-#else
-			*ubuffer=(char *)ce->myaiocb64.aio_buf;
-#endif
-#else
-			*ubuffer=(char *)ce->myaiocb.aio_buf;
-#endif
-		}else
-			*ubuffer=0;
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		if(retval < ce->myaiocb.aio_nbytes)
-#else
-		if(retval < ce->myaiocb64.aio_nbytes)
-#endif
-#else
-		if(retval < ce->myaiocb.aio_nbytes)
-#endif
-		{
-			printf("aio_return error4: ret %d %d\n",retval,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			printf("aio_return error4: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				ce->myaiocb.aio_fildes,
-				ce->myaiocb.aio_offset,
-				(long)(ce->myaiocb.aio_buf),
-				ce->myaiocb.aio_nbytes,
-				ce->myaiocb.aio_lio_opcode
-#else
-			printf("aio_return error4: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				ce->myaiocb64.aio_fildes,
-				ce->myaiocb64.aio_offset,
-				(long)(ce->myaiocb64.aio_buf),
-				ce->myaiocb64.aio_nbytes,
-				ce->myaiocb64.aio_lio_opcode
-#endif
-#else
-			printf("aio_return error4: fd %d offset %d buffer %lx size %d Opcode %d\n",
-				ce->myaiocb.aio_fildes,
-				ce->myaiocb.aio_offset,
-				(long)(ce->myaiocb.aio_buf),
-				ce->myaiocb.aio_nbytes,
-				ce->myaiocb.aio_lio_opcode
-#endif
-				);
-		}
-		ce->direct=1;
-		takeoff_cache(gc,ce); /* do not delete buffer*/
-		putoninuse(gc,ce);
-	}else
-	{
-		/*
-		 * Clear the cache and issue the first request async()
-		 */
-		del_cache(gc);
-		del_read++;
-		first_ce=alloc_cache(gc,fd,offset,size,(long long)LIO_READ); /* allocate buffer */
-		/*printf("allocated buffer/read %x offset %d\n",first_ce->myaiocb.aio_buf,offset);*/
-again:
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		first_ce->oldbuf=first_ce->myaiocb.aio_buf;
-		first_ce->oldfd=first_ce->myaiocb.aio_fildes;
-		first_ce->oldsize=first_ce->myaiocb.aio_nbytes;
-		ret=aio_read(&first_ce->myaiocb);
-#else
-		first_ce->oldbuf=first_ce->myaiocb64.aio_buf;
-		first_ce->oldfd=first_ce->myaiocb64.aio_fildes;
-		first_ce->oldsize=first_ce->myaiocb64.aio_nbytes;
-		ret=aio_read64(&first_ce->myaiocb64);
-#endif
-#else
-		first_ce->oldbuf=first_ce->myaiocb.aio_buf;
-		first_ce->oldfd=first_ce->myaiocb.aio_fildes;
-		first_ce->oldsize=first_ce->myaiocb.aio_nbytes;
-		ret=aio_read(&first_ce->myaiocb);
-#endif
-		if(ret!=0)
-		{
-			if(errno==EAGAIN)
-				goto again;
-			else
-				printf("error returned from aio_read(). Ret %d errno %d\n",ret,errno);
-		}
-	}
-	if(stride==0)	 /* User does not want read-ahead */
-		goto out;
-	if(a_offset<0)	/* Before beginning of file */
-		goto out;
-	if(a_offset+size>max)	/* After end of file */
-		goto out;
-	if(depth >=(max_depth-1))
-		depth=max_depth-1;
-	if(depth==0)
-		goto out;
-	if(gc->count > 1)
-		start=depth-1;
-	for(i=start;i<depth;i++)	/* Issue read-aheads for the depth specified */
-	{
-		r_offset=a_offset+((i+1)*(stride*a_size));
-		if(r_offset<0)
-			continue;
-		if(r_offset+size > max)
-			continue;
-		if((ce=incache(gc,fd,r_offset,a_size)))
-			continue;
-		ce=alloc_cache(gc,fd,r_offset,a_size,(long long)LIO_READ);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		ce->oldbuf=ce->myaiocb.aio_buf;
-		ce->oldfd=ce->myaiocb.aio_fildes;
-		ce->oldsize=ce->myaiocb.aio_nbytes;
-		ret=aio_read(&ce->myaiocb);
-#else
-		ce->oldbuf=ce->myaiocb64.aio_buf;
-		ce->oldfd=ce->myaiocb64.aio_fildes;
-		ce->oldsize=ce->myaiocb64.aio_nbytes;
-		ret=aio_read64(&ce->myaiocb64);
-#endif
-#else
-		ce->oldbuf=ce->myaiocb.aio_buf;
-		ce->oldfd=ce->myaiocb.aio_fildes;
-		ce->oldsize=ce->myaiocb.aio_nbytes;
-		ret=aio_read(&ce->myaiocb);
-#endif
-		if(ret!=0)
-		{
-			takeoff_cache(gc,ce);
-			break;
-		}
-	}			
-out:
-	if(del_read)	/* Wait for the first read to complete */
-	{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		while((ret=aio_error(&first_ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(first_ce);
-		}
-#else
-		while((ret=aio_error64(&first_ce->myaiocb64))== EINPROGRESS)
-		{
-			async_suspend(first_ce);
-		}
-#endif
-#else
-		while((ret=aio_error(&first_ce->myaiocb))== EINPROGRESS)
-		{
-			async_suspend(first_ce);
-		}
-#endif
-		if(ret)
-			printf("aio_error 4: ret %d %d\n",ret,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		if(first_ce->oldbuf != first_ce->myaiocb.aio_buf ||
-			first_ce->oldfd != first_ce->myaiocb.aio_fildes ||
-			first_ce->oldsize != first_ce->myaiocb.aio_nbytes) 
-			printf("It changed in flight2\n");
-		retval=aio_return(&first_ce->myaiocb);
-#else
-		if(first_ce->oldbuf != first_ce->myaiocb64.aio_buf ||
-			first_ce->oldfd != first_ce->myaiocb64.aio_fildes ||
-			first_ce->oldsize != first_ce->myaiocb64.aio_nbytes) 
-			printf("It changed in flight2\n");
-		retval=aio_return64(&first_ce->myaiocb64);
-#endif
-#else
-		if(first_ce->oldbuf != first_ce->myaiocb.aio_buf ||
-			first_ce->oldfd != first_ce->myaiocb.aio_fildes ||
-			first_ce->oldsize != first_ce->myaiocb.aio_nbytes) 
-			printf("It changed in flight2\n");
-		retval=aio_return(&first_ce->myaiocb);
-#endif
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		if(retval < first_ce->myaiocb.aio_nbytes)
-#else
-		if(retval < first_ce->myaiocb64.aio_nbytes)
-#endif
-#else
-		if(retval < first_ce->myaiocb.aio_nbytes)
-#endif
-		{
-			printf("aio_return error5: ret %d %d\n",retval,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			printf("aio_return error5: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				first_ce->myaiocb.aio_fildes,
-				first_ce->myaiocb.aio_offset,
-				(long)(first_ce->myaiocb.aio_buf),
-				first_ce->myaiocb.aio_nbytes,
-				first_ce->myaiocb.aio_lio_opcode
-#else
-			printf("aio_return error5: fd %d offset %lld buffer %lx size %d Opcode %d\n",
-				first_ce->myaiocb64.aio_fildes,
-				first_ce->myaiocb64.aio_offset,
-				(long)(first_ce->myaiocb64.aio_buf),
-				first_ce->myaiocb64.aio_nbytes,
-				first_ce->myaiocb64.aio_lio_opcode
-#endif
-#else
-			printf("aio_return error5: fd %d offset %ld buffer %lx size %d Opcode %d\n",
-				first_ce->myaiocb.aio_fildes,
-				first_ce->myaiocb.aio_offset,
-				(long)(first_ce->myaiocb.aio_buf),
-				first_ce->myaiocb.aio_nbytes,
-				first_ce->myaiocb.aio_lio_opcode
-#endif
-				);
-		}
-		if(retval > 0)
-		{
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			*ubuffer=(char *)first_ce->myaiocb.aio_buf;
-#else
-			*ubuffer=(char *)first_ce->myaiocb64.aio_buf;
-#endif
-#else
-			*ubuffer=(char *)first_ce->myaiocb.aio_buf;
-#endif
-		}else
-			*ubuffer=(char *)0;
-		first_ce->direct=1;	 /* do not delete the buffer */
-		takeoff_cache(gc,first_ce);
-		putoninuse(gc,first_ce);
-	}
-	return((int)retval);	
-}
-
-/************************************************************************
- * The caller is now finished with the data that was provided so
- * the library is now free to return the memory to the pool for later
- * reuse.
- ************************************************************************/
-void
-async_release(gc)
-struct cache *gc;
-{
-	takeoffinuse(gc);
-}
-
-
-/************************************************************************
- * Put the buffer on the inuse list. When the user is finished with 
- * the buffer it will call back into async_release and the items on the 
- * inuse list will be deallocated.
- ************************************************************************/
-void
-putoninuse(gc,entry)
-struct cache *gc;
-struct cache_ent *entry;
-{
-	if(gc->inuse_head)
-		entry->forward=gc->inuse_head;
-	else
-		entry->forward=0;
-	gc->inuse_head=entry;
-}
-
-/************************************************************************
- * This is called when the application is finished with the data that
- * was provided. The memory may now be returned to the pool.
- ************************************************************************/
-void
-takeoffinuse(gc)
-struct cache *gc;
-{
-	struct cache_ent *ce;
-	if(gc->inuse_head==0)
-		printf("Takeoffinuse error\n");
-	ce=gc->inuse_head;
-	gc->inuse_head=gc->inuse_head->forward;
-	
-	if(gc->inuse_head !=0)
-		printf("Error in take off inuse\n");
-	free((void*)(ce->real_address));
-	free(ce);
-}
-
-/*************************************************************************
- * This routine is a generic async writer assist function. It takes
- * the same calling parameters as write() but also extends the
- * interface to include:
- * 
- * offset ..... offset in the file.
- * depth  ..... How much read-ahead do you want.
- * 
- *************************************************************************/
-size_t
-async_write(gc,fd,buffer,size,offset,depth)
-struct cache *gc;
-long long fd,size;
-char *buffer;
-off64_t offset;
-long long depth;
-{
-	struct cache_ent *ce;
-	size_t ret;
-	ce=allocate_write_buffer(gc,fd,offset,size,(long long)LIO_WRITE,depth,0LL,(char *)0,(char *)0);
-	ce->direct=0;	 /* not direct. Lib supplies buffer and must free it */
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	mbcopy(buffer,(char *)(ce->myaiocb.aio_buf),(size_t)size);
-#else
-	mbcopy(buffer,(char *)(ce->myaiocb64.aio_buf),(size_t)size);
-#endif
-#else
-	mbcopy(buffer,(char *)(ce->myaiocb.aio_buf),(size_t)size);
-#endif
-	async_put_on_write_queue(gc,ce);
-	/*
-	printf("asw: fd %d offset %lld, size %d\n",ce->myaiocb64.aio_fildes,
-		ce->myaiocb64.aio_offset,
-		ce->myaiocb64.aio_nbytes);
-	*/	
-
-again:
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	ret=aio_write(&ce->myaiocb);
-#else
-	ret=aio_write64(&ce->myaiocb64);
-#endif
-#else
-	ret=aio_write(&ce->myaiocb);
-#endif
-	if(ret==-1)
-	{
-		if(errno==EAGAIN)
-		{
-			async_wait_for_write(gc);
-			goto again;
-		}
-		if(errno==0)
-		{
-			/* Compensate for bug in async library */
-			async_wait_for_write(gc);
-			goto again;
-		}
-		else
-		{
-			printf("Error in aio_write: ret %d errno %d count %lld\n",ret,errno,gc->w_count);
-			/*
-			printf("aio_write_no_copy: fd %d buffer %x offset %lld size %d\n",
-				ce->myaiocb64.aio_fildes,
-				ce->myaiocb64.aio_buf,
-				ce->myaiocb64.aio_offset,
-				ce->myaiocb64.aio_nbytes);
-			*/
-			exit(177);
-		}
-	} 
-	return((ssize_t)size);
-}
-
-/*************************************************************************
- * Allocate a write aiocb and write buffer of the size specified. Also 
- * put some extra buffer padding so that VX_DIRECT can do its job when
- * needed.
- *************************************************************************/
-
-struct cache_ent *
-allocate_write_buffer(gc,fd,offset,size,op,w_depth,direct,buffer,free_addr)
-struct cache *gc;
-long long fd,size,op;
-off64_t offset;
-long long w_depth;
-long long direct;
-char *buffer,*free_addr;
-{
-	struct cache_ent *ce;
-	long temp;
-	if(fd==0LL)
-	{
-		printf("Setting up write buffer insane\n");
-		exit(178);
-	}
-	if(gc->w_count > w_depth)
-		async_wait_for_write(gc);
-	ce=(struct cache_ent *)malloc((size_t)sizeof(struct cache_ent));
-	if(ce == (struct cache_ent *)0)
-	{
-		printf("Malloc failed 1\n");
-		exit(179);
-	}
-	bzero(ce,sizeof(struct cache_ent));
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	ce->myaiocb.aio_fildes=(int)fd;
-	ce->myaiocb.aio_offset=(off64_t)offset;
-	if(!direct)
-	{
-		ce->real_address = (char *)malloc((size_t)(size+page_size));
-		temp=(long)ce->real_address;
-		temp = (temp+page_size) & ~(page_size-1);
-		ce->myaiocb.aio_buf=(volatile void *)temp;
-	}else
-	{
-		ce->myaiocb.aio_buf=(volatile void *)buffer;
-		ce->real_address=(char *)free_addr;
-	}
-	if(ce->myaiocb.aio_buf == 0)
-#else
-	ce->myaiocb64.aio_fildes=(int)fd;
-	ce->myaiocb64.aio_offset=(off64_t)offset;
-	if(!direct)
-	{
-		ce->real_address = (char *)malloc((size_t)(size+page_size));
-		temp=(long)ce->real_address;
-		temp = (temp+page_size) & ~(page_size-1);
-		ce->myaiocb64.aio_buf=(volatile void *)temp;
-	}
-	else
-	{
-		ce->myaiocb64.aio_buf=(volatile void *)buffer;
-		ce->real_address=(char *)free_addr;
-	}
-	if(ce->myaiocb64.aio_buf == 0)
-#endif
-#else
-	ce->myaiocb.aio_fildes=(int)fd;
-	ce->myaiocb.aio_offset=(off_t)offset;
-	if(!direct)
-	{
-		ce->real_address = (char *)malloc((size_t)(size+page_size));
-		temp=(long)ce->real_address;
-		temp = (temp+page_size) & ~(page_size-1);
-		ce->myaiocb.aio_buf=(volatile void *)temp;
-	}
-	else
-	{
-		ce->myaiocb.aio_buf=(volatile void *)buffer;
-		ce->real_address=(char *)free_addr;
-	}
-	if(ce->myaiocb.aio_buf == 0)
-#endif
-	{
-		printf("Malloc failed 2\n");
-		exit(180);
-	}
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	ce->myaiocb.aio_reqprio=0;
-	ce->myaiocb.aio_nbytes=(size_t)size;
-	ce->myaiocb.aio_sigevent.sigev_notify=SIGEV_NONE;
-	ce->myaiocb.aio_lio_opcode=(int)op;
-#else
-	ce->myaiocb64.aio_reqprio=0;
-	ce->myaiocb64.aio_nbytes=(size_t)size;
-	ce->myaiocb64.aio_sigevent.sigev_notify=SIGEV_NONE;
-	ce->myaiocb64.aio_lio_opcode=(int)op;
-#endif
-#else
-	ce->myaiocb.aio_reqprio=0;
-	ce->myaiocb.aio_nbytes=(size_t)size;
-	ce->myaiocb.aio_sigevent.sigev_notify=SIGEV_NONE;
-	ce->myaiocb.aio_lio_opcode=(int)op;
-#endif
-	ce->fd=(int)fd;
-	return(ce);
-}
-
-/*************************************************************************
- * Put it on the outbound queue.
- *************************************************************************/
-
-void
-async_put_on_write_queue(gc,ce)
-struct cache *gc;
-struct cache_ent *ce;
-{
-	ce->forward=0;
-	ce->back=gc->w_tail;
-	if(gc->w_tail)
-		gc->w_tail->forward = ce;
-	gc->w_tail= ce;
-	if(!gc->w_head)
-		gc->w_head=ce;
-	gc->w_count++;
-	return;
-}
-
-/*************************************************************************
- * Cleanup all outstanding writes
- *************************************************************************/
-void
-async_write_finish(gc)
-struct cache *gc;
-{
-	while(gc->w_head)
-	{
-		/*printf("async_write_finish: Waiting for buffer %x to finish\n",gc->w_head->myaiocb64.aio_buf);*/
-		async_wait_for_write(gc);
-	}
-}
-
-/*************************************************************************
- * Wait for an I/O to finish
- *************************************************************************/
-
-void
-async_wait_for_write(gc)
-struct cache *gc;
-{
-	struct cache_ent *ce;
-	size_t ret,retval;
-	if(gc->w_head==0)
-		return;
-	ce=gc->w_head;
-	gc->w_head=ce->forward;
-	gc->w_count--;
-	ce->forward=0;
-	if(ce==gc->w_tail)
-		gc->w_tail=0;
-	/*printf("Wait for buffer %x  offset %lld  size %d to finish\n",
-		ce->myaiocb64.aio_buf,
-		ce->myaiocb64.aio_offset,
-		ce->myaiocb64.aio_nbytes);
-	printf("write count %lld \n",gc->w_count);
-	*/
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	while((ret=aio_error(&ce->myaiocb))== EINPROGRESS)
-	{
-		async_suspend(ce);
-	}
-#else
-	while((ret=aio_error64(&ce->myaiocb64))== EINPROGRESS)
-	{
-		async_suspend(ce);
-	}
-#endif
-#else
-	while((ret=aio_error(&ce->myaiocb))== EINPROGRESS)
-	{
-		async_suspend(ce);
-	}
-#endif
-	if(ret)
-	{
-		printf("aio_error 5: ret %d %d\n",ret,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-		printf("fd %d offset %lld size %d\n",
-			ce->myaiocb.aio_fildes,
-			ce->myaiocb.aio_offset,
-			ce->myaiocb.aio_nbytes);
-#else
-		printf("fd %d offset %lld size %d\n",
-			ce->myaiocb64.aio_fildes,
-			ce->myaiocb64.aio_offset,
-			ce->myaiocb64.aio_nbytes);
-#endif
-#else
-		printf("fd %d offset %lld size %d\n",
-			ce->myaiocb.aio_fildes,
-			ce->myaiocb.aio_offset,
-			ce->myaiocb.aio_nbytes);
-#endif
-		exit(181);
-	}
-
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	retval=aio_return(&ce->myaiocb);
-#else
-#if defined(__CrayX1__)
-	retval=aio_return64((aiocb64_t *)&ce->myaiocb64);
-#else
-	retval=aio_return64((struct aiocb64 *)&ce->myaiocb64);
-#endif
-
-#endif
-#else
-	retval=aio_return(&ce->myaiocb);
-#endif
-	if((int)retval < 0)
-	{
-		printf("aio_return error: %d\n",errno);
-	}
-
-	if(!ce->direct)
-	{
-		/* printf("Freeing buffer %x\n",ce->real_address);*/
-		free((void *)(ce->real_address));
-		free((void *)ce);
-	}
-
-}
-
-/*************************************************************************
- * This routine is a generic async writer assist function. It takes
- * the same calling parameters as write() but also extends the
- * interface to include:
- * 
- * offset ..... offset in the file.
- * depth  ..... How much read-ahead do you want.
- * free_addr .. address of memory to free after write is completed.
- * 
- *************************************************************************/
-size_t
-async_write_no_copy(gc,fd,buffer,size,offset,depth,free_addr)
-struct cache *gc;
-long long fd,size;
-char *buffer;
-off64_t offset;
-long long depth;
-char *free_addr;
-{
-	struct cache_ent *ce;
-	size_t ret;
-	long long direct = 1;
-	ce=allocate_write_buffer(gc,fd,offset,size,(long long)LIO_WRITE,depth,direct,buffer,free_addr);
-	ce->direct=0;	/* have library de-allocate the buffer */
-	async_put_on_write_queue(gc,ce);
-	/*
-	printf("awnc: fd %d offset %lld, size %d\n",ce->myaiocb64.aio_fildes,
-		ce->myaiocb64.aio_offset,
-		ce->myaiocb64.aio_nbytes);
-	*/
-
-again:
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-	ret=aio_write(&ce->myaiocb);
-#else
-	ret=aio_write64(&ce->myaiocb64);
-#endif
-#else
-	ret=aio_write(&ce->myaiocb);
-#endif
-	if(ret==-1)
-	{
-		if(errno==EAGAIN)
-		{
-			async_wait_for_write(gc);
-			goto again;
-		}
-		if(errno==0)
-		{
-			/* Compensate for bug in async library */
-			async_wait_for_write(gc);
-			goto again;
-		}
-		else
-		{
-			printf("Error in aio_write: ret %d errno %d\n",ret,errno);
-#ifdef _LARGEFILE64_SOURCE 
-#ifdef __LP64__
-			printf("aio_write_no_copy: fd %d buffer %lx offset %lld size %d\n",
-				ce->myaiocb.aio_fildes,
-				(long)(ce->myaiocb.aio_buf),
-				ce->myaiocb.aio_offset,
-				ce->myaiocb.aio_nbytes);
-#else
-			printf("aio_write_no_copy: fd %d buffer %lx offset %lld size %d\n",
-				ce->myaiocb64.aio_fildes,
-				(long)(ce->myaiocb64.aio_buf),
-				ce->myaiocb64.aio_offset,
-				ce->myaiocb64.aio_nbytes);
-#endif
-#else
-			printf("aio_write_no_copy: fd %d buffer %lx offset %ld size %d\n",
-				ce->myaiocb.aio_fildes,
-				(long)(ce->myaiocb.aio_buf),
-				ce->myaiocb.aio_offset,
-				ce->myaiocb.aio_nbytes);
-#endif
-			exit(182);
-		}
-	} 
-	else	
-	{
-		return((ssize_t)size);
-	}
-}
-
-void mbcopy(source, dest, len)
-char *source,*dest;
-size_t len;
-{
-	int i;
-	for(i=0;i<len;i++)
-		*dest++=*source++;
-}
diff --git a/src/components/appio/tests/iozone/libbif.c b/src/components/appio/tests/iozone/libbif.c
deleted file mode 100644
index a69475d31..000000000
--- a/src/components/appio/tests/iozone/libbif.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/* 
- * Here is a very simple set of routines to write an Excel worksheet 
- * Microsoft BIFF format. The Excel version is set to 2.0 so that it 
- * will work with all versions of Excel.
- *
- * Author: Don Capps 
- */
-
-/* 
- * Note: rows and colums should not exceed 255 or this code will 
- * act poorly
- */
-
-#ifdef Windows
-#include <Windows.h>
-#endif
-#include <sys/types.h>
-#include <stdio.h>
-#include <sys/file.h>
-#if defined(__AIX__) || defined(__FreeBSD__) || defined(__DragonFly__)
-#include <fcntl.h>
-#else
-#include <sys/fcntl.h>
-#endif
-
-#if defined(OSV5) || defined(linux) || defined (__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__APPLE__) || defined(__DragonFly__)
-#include <string.h>
-#endif
-
-#if defined(linux) || defined(__DragonFly__) || defined(macosx)
-#include <unistd.h>
-#include <stdlib.h>
-#endif
-
-#if (defined(solaris) && defined( __LP64__ )) || defined(__s390x__) || defined(FreeBSD)
-/* If we are building for 64-bit Solaris, all functions that return pointers
- * must be declared before they are used; otherwise the compiler will assume
- * that they return ints and the top 32 bits of the pointer will be lost,
- * causing segmentation faults.  The following includes take care of this.
- * It should be safe to add these for all other OSs too, but we're only
- * doing it for Solaris now in case another OS turns out to be a special case.
- */
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-/* Little Endian */
-#define ENDIAN_1  1
-/* Big Endian    */
-#define ENDIAN_2  2
-/* Middle Endian */
-#define ENDIAN_3  3
-/* Middle Endian */
-#define ENDIAN_4  4
-
-int junk, *junkp;
-
-
-#ifdef HAVE_ANSIC_C
-/************************************************************************/
-/* Here is the API... Enjoy 						*/
-/************************************************************************/
-/* Create worksheet 							*/
-int create_xls(char *);			
-/*    Args: Filename							*/
-/*    									*/
-/* Close worksheet 							*/
-void close_xls(int);			
-/*   Args: file descriptor						*/
-/*    									*/
-/* Put a 16 bit integer in worksheet 					*/
-void do_int(int,int,int,int);		
-/*    Args: file descriptor,						*/
-/*    	  value,							*/
-/*	  row,								*/
-/*	  column							*/
-
-/* Put a double in 8 byte float 					*/
-void do_float(int,double,int,int); 	
-/*    Args: file descriptor,						*/
-/*    	  value,							*/
-/*	  row,								*/
-/*	  column							*/
-/* Put a string in worksheet 						*/
-void do_label(int,char *,int,int);	
-/*    Args: file descriptor,						*/
-/*   	  string,							*/
-/*	  row,								*/
-/*	  column							*/
-/************************************************************************/
-
-char libbif_version[] = "Libbif Version $Revision$";
-void do_eof(int );		/* Used internally */
-void do_header(int );		/* Used internally */
-int endian(void);
-#endif
-
-#define BOF 0x9
-#define INTEGER 0x2
-#define FLOAT 0x3
-#define LABEL 0x4
-#define EXCEL_VERS 0x2
-#define WORKSHEET 0x10
-
-struct bof_record{ 		/* Beginning of file */
-	char hi_opcode;
-	char lo_opcode;
-	char hi_length;
-	char lo_length;
-	char hi_version;	/* Excel version */
-	char lo_version;
-	char hi_filetype;
-	char lo_filetype;
-	};
-struct int_record {
-	char hi_opcode;		/* Type 2 of record */
-	char lo_opcode;
-	char hi_length;
-	char lo_length;
-	char hi_row;
-	char lo_row;
-	char hi_column;
-	char lo_column;
-	char rgbhi;
-	char rgbmed;
-	char rgblo;
-	char hi_data;
-	char lo_data;
-	};
-struct label_record {
-	char hi_opcode;		/* Type 4 of record */
-	char lo_opcode;
-	char hi_length;
-	char lo_length;
-	char hi_row;
-	char lo_row;
-	char hi_column;
-	char lo_column;
-	char rgbhi;
-	char rgbmed;
-	char rgblo;
-	char string_length;
-	char str_array[256];
-	};
-struct float_record {		/* Type 3 record */
-	char hi_opcode;
-	char lo_opcode;
-	char hi_length;
-	char lo_length;
-	char hi_row;
-	char lo_row;
-	char hi_column;
-	char lo_column;
-	char rgbhi;
-	char rgbmed;
-	char rgblo;
-	double data;
-	};
-/*
- * Write the EOF and close the file 
- */
-#ifdef HAVE_ANSIC_C
-void
-close_xls(int fd)
-{
-#else
-close_xls(fd)
-int fd;
-{
-#endif
-	do_eof(fd);
-	close(fd);
-}
-
-/*
- * Create xls worksheet. Create file and put the BOF record in it.
- */
-#ifdef HAVE_ANSIC_C
-int
-create_xls(char *name)
-{
-#else
-create_xls(name)
-char *name;
-{
-#endif
-	int fd;
-	unlink(name);
-#ifdef Windows
-	fd=open(name,O_BINARY|O_CREAT|O_RDWR,0666);
-#else
-	fd=open(name,O_CREAT|O_RDWR,0666);
-#endif
-	if(fd<0)
-	{
-		printf("Error opening file %s\n",name);
-		exit(-1);
-	}
-	do_header(fd);
-	return(fd);
-}
-	
-#ifdef HAVE_ANSIC_C
-void
-do_header(int fd) /* Stick the BOF at the beginning of the file */
-{
-#else
-do_header(fd) 
-int fd;
-{
-#endif
-	struct bof_record bof;
-	bof.hi_opcode=BOF;
-	bof.lo_opcode = 0x0;
-	bof.hi_length=0x4;
-	bof.lo_length=0x0;
-	bof.hi_version=EXCEL_VERS;
-	bof.lo_version=0x0;
-	bof.hi_filetype=WORKSHEET;
-	bof.lo_filetype=0x0;
-	junk=write(fd,&bof,sizeof(struct bof_record));
-}
-
-/*
- * Put an integer (16 bit) in the worksheet 
- */
-#ifdef HAVE_ANSIC_C
-void
-do_int(int fd,int val, int row, int column)
-{
-#else
-do_int(fd,val,row,column)
-int fd,val,row,column;
-{
-#endif
-	struct int_record intrec;
-	short s_row,s_column;
-	s_row=(short)row;
-	s_column=(short)column;
-        intrec.hi_opcode=INTEGER;
-        intrec.lo_opcode=0x00;
-        intrec.hi_length=0x09;
-        intrec.lo_length=0x00;
-        intrec.rgbhi=0x0;
-        intrec.rgbmed=0x0;
-        intrec.rgblo=0x0;
-        intrec.hi_row=(char)s_row&0xff;
-        intrec.lo_row=(char)(s_row>>8)&0xff;
-        intrec.hi_column=(char)(s_column&0xff);
-        intrec.lo_column=(char)(s_column>>8)&0xff;
-        intrec.hi_data=(val & 0xff);
-        intrec.lo_data=(val & 0xff00)>>8;
-	junk=write(fd,&intrec,13);
-}
-
-/* Note: This routine converts Big Endian to Little Endian 
- * and writes the record out.
- */
-
-/* 
- * Put a double in the worksheet as 8 byte float in IEEE format.
- */
-#ifdef HAVE_ANSIC_C
-void
-do_float(int fd, double value, int row, int column)
-{
-#else
-do_float(fd, value, row, column)
-int fd;
-double value;
-int row,column;
-{
-#endif
-	struct float_record floatrec;
-	short s_row,s_column;
-	unsigned char *sptr,*dptr;
-	s_row=(short)row;
-	s_column=(short)column;
-        floatrec.hi_opcode=FLOAT;
-        floatrec.lo_opcode=0x00;
-        floatrec.hi_length=0xf;
-        floatrec.lo_length=0x00;
-        floatrec.rgbhi=0x0;
-        floatrec.rgbmed=0x0;
-        floatrec.rgblo=0x0;
-        floatrec.hi_row=(char)(s_row&0xff);
-        floatrec.lo_row=(char)((s_row>>8)&0xff);
-        floatrec.hi_column=(char)(s_column&0xff);
-        floatrec.lo_column=(char)((s_column>>8)&0xff);
-	sptr =(unsigned char *) &value;
-	dptr =(unsigned char *) &floatrec.data;
-
-	if(endian()==ENDIAN_2) /* Big Endian */
-	{
-	   dptr[0]=sptr[7]; /* Convert to Little Endian */
-	   dptr[1]=sptr[6];
-	   dptr[2]=sptr[5];
-	   dptr[3]=sptr[4];
-	   dptr[4]=sptr[3];
-	   dptr[5]=sptr[2];
-	   dptr[6]=sptr[1];
-	   dptr[7]=sptr[0];
-	}
-	if(endian()==ENDIAN_3)  /* Middle Endian */
-	{
-	   dptr[0]=sptr[4]; /* 16 bit swapped ARM */
-	   dptr[1]=sptr[5];
-	   dptr[2]=sptr[6];
-	   dptr[3]=sptr[7];
-	   dptr[4]=sptr[0];
-	   dptr[5]=sptr[1];
-	   dptr[6]=sptr[2];
-	   dptr[7]=sptr[3];
-	}
-
-	if(endian()==ENDIAN_1) /* Little Endian */
-	{
-	   dptr[0]=sptr[0]; /* Do not convert to Little Endian */
-	   dptr[1]=sptr[1];
-	   dptr[2]=sptr[2];
-	   dptr[3]=sptr[3];
-	   dptr[4]=sptr[4];
-	   dptr[5]=sptr[5];
-	   dptr[6]=sptr[6];
-	   dptr[7]=sptr[7];
-	}
-	if(endian()==-1) /* Unsupported architecture */
-	{
-	   dptr[0]=0;
-	   dptr[1]=0;
-	   dptr[2]=0;
-	   dptr[3]=0;
-	   dptr[4]=0;
-	   dptr[5]=0;
-	   dptr[6]=0;
-	   dptr[7]=0;
-	   printf("Excel output not supported on this architecture.\n");
-	}
-	junk=write(fd,&floatrec,11); /* Don't write floatrec. Padding problems */
-	junk=write(fd,&floatrec.data,8); /* Write value seperately */
-}
-
-/*
- * Put a string as a label in the worksheet.
- */
-#ifdef HAVE_ANSIC_C
-void
-do_label(int fd, char *string, int row, int column)
-{
-#else
-do_label(fd, string, row, column)
-int fd;
-char *string;
-int row,column;
-{
-#endif
-	struct label_record labelrec;
-	short s_row,s_column;
-	int i;
-	for(i=0;i<255;i++)
-		labelrec.str_array[i]=0;
-	s_row=(short)row;
-	s_column=(short)column;
-	i=strlen(string);
-        labelrec.hi_opcode=LABEL;
-        labelrec.lo_opcode=0x00;
-        labelrec.hi_length=0x08; /* 264 total bytes */
-        labelrec.lo_length=0x01;
-        labelrec.rgblo=0x0;
-        labelrec.rgbmed=0x0;
-        labelrec.rgbhi=0x0;
-        labelrec.hi_row=(char)(s_row&0xff);
-        labelrec.lo_row=(char)((s_row>>8)&0xff);
-        labelrec.hi_column=(char)(s_column&0xff);
-        labelrec.lo_column=(char)((s_column>>8)&0xff);
-	labelrec.string_length=i;
-	if(i > 255) /* If too long then terminate it early */
-		string[254]=0;
-	i=strlen(string);
-	strcpy(labelrec.str_array,string);
-
-	junk=write(fd,&labelrec,sizeof(struct label_record));
-
-}
-
-/* 
- * Write the EOF in the file 
- */
-#ifdef HAVE_ANSIC_C
-void
-do_eof(int fd) 
-{
-#else
-do_eof(fd) 
-int fd;
-{
-#endif
-	char buf[]={0x0a,0x00,0x00,0x00};
-	junk=write(fd,buf,4);
-}
-	
-/* 
- * Routine to determine the Endian-ness of the system. This
- * is needed for Iozone to convert doubles (floats) into
- * Little-endian format. This is needed for Excel to be 
- * able to interpret the file 
- */
-int
-endian(void)
-{
-	long long foo = 0x0102030405060708LL;
-	long foo1 = 0x012345678;
-	unsigned char *c,c1,c2,c3,c4,c5,c6,c7,c8;
-	c=(unsigned char *)&foo;
-	c1=*c++;
-	c2=*c++;
-	c3=*c++;
-	c4=*c++;
-	c5=*c++;
-	c6=*c++;
-	c7=*c++;
-	c8=*c;
-
-	/*--------------------------------------------------------------*/
-	/* printf("%x %x %x %x %x %x %x %x\n",c1,c2,c3,c4,c5,c6,c7,c8); */
-	/*--------------------------------------------------------------*/
-
-	/* Little Endian format ? ( Intel ) */
-	if( (c1==0x08) && (c2==0x07) && (c3==0x06) && (c4==0x05) &&
-		(c5==0x04) && (c6==0x03) && (c7==0x02) && (c8==0x01) )
-		return(ENDIAN_1);
-	/* Big Endian format ?    ( Sparc, Risc... */
-	if( (c1==0x01) && (c2==0x02) && (c3==0x03) && (c4==0x04) &&
-		(c5==0x05) && (c6==0x06) && (c7==0x07) && (c8==0x08) )
-		return(ENDIAN_2);
-	/* Middle Endian format ? ( ARM ... ) */
-	if( (c1==0x04) && (c2==0x03) && (c3==0x02) && (c4==0x01) &&
-		(c5==0x08) && (c6==0x07) && (c7==0x06) && (c8==0x05) )
-		return(ENDIAN_3);
-	c=(unsigned char *)&foo1;
-	c1=*c++;
-	c2=*c++;
-	c3=*c++;
-	c4=*c++;
-	/* Another middle endian format ? ( PDP-11 ... ) */
-	if( (c1==0x34) && (c2==0x12) && (c3==0x78) && (c4==0x56))
-		return(ENDIAN_4);
-
-	return(-1);
-}
diff --git a/src/components/appio/tests/iozone/makefile b/src/components/appio/tests/iozone/makefile
deleted file mode 100644
index f7db172a6..000000000
--- a/src/components/appio/tests/iozone/makefile
+++ /dev/null
@@ -1,1461 +0,0 @@
-#
-# Version $Revision$
-#
-# The makefile for building all versions of iozone for all supported
-# platforms
-#
-# Supports:	hpux, hpux_no_ansi, hpux-10.1, hpux_no_ansi-10.1,
-#		sppux, sppux-10.1, ghpux, sppux, 
-#		convex, FreeBSD, OpenBSD, OSFV3, OSFV4, OSFV5, SCO
-#		SCO_Unixware_gcc,NetBSD,TRU64, Mac OS X
-
-CC	= cc
-C89	= c89
-GCC	= gcc
-CCS	= /usr/ccs/bin/cc
-NACC	= /opt/ansic/bin/cc
-CFLAGS	=
-S10GCCFLAGS    = -m64
-S10CCFLAGS     = -m64
-FLAG64BIT      = -m64
-
-# If your Linux kernel supports preadv and pwritev system calls 
-# and you want iozone to use them, add -DHAVE_PREADV -DHAVE_PWRITEV
-# to CFLAGS
-
-all:  
-	@echo ""
-	@echo "You must specify the target.        "
-	@echo "        ->   AIX                  (32bit)   <-"
-	@echo "        ->   AIX-LF               (32bit)   <-"
-	@echo "        ->   AIX64                (32bit)   <-"
-	@echo "        ->   AIX64-LF             (32bit)   <-"
-	@echo "        ->   bsdi                 (32bit)   <-" 
-	@echo "        ->   convex               (32bit)   <-" 
-	@echo "        ->   CrayX1               (32bit)   <-"
-	@echo "        ->   dragonfly            (32bit)   <-"
-	@echo "        ->   freebsd              (32bit)   <-"
-	@echo "        ->   generic              (32bit)   <-"
-	@echo "        ->   ghpux                (32bit)   <-"
-	@echo "        ->   hpuxs-11.0 (simple)  (32bit)   <-"
-	@echo "        ->   hpux-11.0w           (64bit)   <-"
-	@echo "        ->   hpuxs-11.0w          (64bit)   <-"
-	@echo "        ->   hpux-11.0            (32bit)   <-"
-	@echo "        ->   hpux-10.1            (32bit)   <-"
-	@echo "        ->   hpux-10.20           (32bit)   <-"
-	@echo "        ->   hpux                 (32bit)   <-" 
-	@echo "        ->   hpux_no_ansi         (32bit)   <-"
-	@echo "        ->   hpux_no_ansi-10.1    (32bit)   <-"
-	@echo "        ->   IRIX                 (32bit)   <-"
-	@echo "        ->   IRIX64               (64bit)   <-"
-	@echo "        ->   linux                (32bit)   <-"
-	@echo "        ->   linux-arm            (32bit)   <-"
-	@echo "        ->   linux-AMD64          (64bit)   <-"
-	@echo "        ->   linux-ia64           (64bit)   <-"
-	@echo "        ->   linux-powerpc        (32bit)   <-"
-	@echo "        ->   linux-powerpc64      (64bit)   <-"
-	@echo "        ->   linux-sparc          (32bit)   <-"
-	@echo "        ->   macosx               (32bit)   <-"
-	@echo "        ->   netbsd               (32bit)   <-"
-	@echo "        ->   openbsd              (32bit)   <-"
-	@echo "        ->   openbsd-threads      (32bit)   <-"
-	@echo "        ->   OSFV3                (64bit)   <-"
-	@echo "        ->   OSFV4                (64bit)   <-"
-	@echo "        ->   OSFV5                (64bit)   <-"
-	@echo "        ->   linux-S390           (32bit)   <-"
-	@echo "        ->   linux-S390X          (64bit)   <-"
-	@echo "        ->   SCO                  (32bit)   <-"
-	@echo "        ->   SCO_Unixware_gcc     (32bit)   <-"
-	@echo "        ->   Solaris              (32bit)   <-"
-	@echo "        ->   Solaris-2.6          (32bit)   <-"
-	@echo "        ->   Solaris7gcc          (32bit)   <-"
-	@echo "        ->   Solaris8-64          (64bit)   <-"
-	@echo "        ->   Solaris8-64-VXFS     (64bit)   <-"
-	@echo "        ->   Solaris10            (32bit)   <-"
-	@echo "        ->   Solaris10cc          (64bit)   <-"
-	@echo "        ->   Solaris10gcc         (32bit)   <-"
-	@echo "        ->   Solaris10gcc-64      (64bit)   <-"
-	@echo "        ->   sppux                (32bit)   <-"
-	@echo "        ->   sppux-10.1           (32bit)   <-"
-	@echo "        ->   sppux_no_ansi-10.1   (32bit)   <-"
-	@echo "        ->   SUA                  (32bit)   <-"
-	@echo "        ->   TRU64                (64bit)   <-"
-	@echo "        ->   UWIN                 (32bit)   <-"
-	@echo "        ->   Windows (95/98/NT)   (32bit)   <-"
-	@echo ""
-
-clean:
-	rm -f *.o iozone fileop pit_server
-
-rpm:
-	cp ../../iozone*.tar /usr/src/red*/SO*
-	rpmbuild -ba spec.in
-
-
-#
-# Turn on the optimizer, largefiles, Posix async I/O and threads.
-#
-hpux-11.0:	iozone_hpux-11.0.o libasync.o libbif.o
-	$(CC) +O3 +Oparallel $(LDFLAGS) iozone_hpux-11.0.o libasync.o \
-		libbif.o -lpthread -lrt -o iozone
-
-#
-# Turn on wide-mode, the optimizer, largefiles, Posix async I/O and threads.
-#
-hpux-11.0w:	iozone_hpux-11.0w.o libasyncw.o libbif.o
-	$(CC) +DD64 +O3 $(LDFLAGS) iozone_hpux-11.0w.o libasyncw.o \
-		libbif.o -lpthread -lrt -o iozone
-
-
-#
-# Simple build with largefiles, Posix threads and Posix async I/O
-#
-hpuxs-11.0:	iozone_hpuxs-11.0.o libasync.o libbif.o fileop_hpuxs-11.0.o pit_server.o
-	$(CC) -O $(LDFLAGS)  iozone_hpuxs-11.0.o \
-		libasync.o libbif.o -lpthread -lrt -o iozone
-	$(CC) -O $(LDFLAGS) fileop_hpuxs-11.0.o -o fileop
-	$(CC) -O $(LDFLAGS) pit_server.o -o pit_server
-
-#
-# Simple build with wide-mode, largefiles, Posix threads and Posix async I/O
-#
-hpuxs-11.0w:	iozone_hpuxs-11.0w.o libasyncw.o libbif.o
-	$(CC) -O +DD64 $(LDFLAGS) iozone_hpuxs-11.0w.o \
-		libasyncw.o libbif.o -lpthread -lrt -o iozone
-
-#
-# Simple 10.1 build with no threads, no largefiles, no async I/O 
-#
-hpux-10.1:	iozone_hpux-10.1.o  libbif.o
-	$(C89) +e -O $(LDFLAGS) iozone_hpux-10.1.o libbif.o -o iozone
-
-hpux-10.20:	iozone_hpux-10.20.o  libbif.o
-	$(C89) +e -O $(LDFLAGS) iozone_hpux-10.20.o libbif.o -o iozone
-
-#
-# Simple generic HP build with no threads, no largefiles, no async I/O 
-#
-hpux:	iozone_hpux.o 
-	$(C89) +e -O $(LDFLAGS) iozone_hpux.o libbif.o -o iozone
-
-#
-# GNU HP build with no threads, no largefiles, no async I/O 
-#
-ghpux:	iozone_ghpux.o  libbif.o
-	$(GCC) -O $(LDFLAGS) iozone_ghpux.o libbif.o -static -o iozone
-
-#
-# GNU Generic build with no threads, no largefiles, no async I/O 
-#
-generic:	iozone_generic.o  libbif.o
-	$(CC)  -O $(LDFLAGS) iozone_generic.o libbif.o -o iozone
-
-#
-# No ansii 'C' compiler HP build with no threads, no largefiles, no async I/O 
-#
-hpux_no_ansi-10.1:	iozone_hpux_no-10.1.o  libbif.o 
-	$(NACC)  -O $(LDFLAGS) iozone_hpux_no-10.1.o libbif.o -o iozone
-
-#
-# No ansii 'C' compiler HP build with no threads, no largefiles, no async I/O 
-#
-hpux_no_ansi:	iozone_hpux_no.o  libbif.o
-	$(C89)  -O $(LDFLAGS) iozone_hpux_no.o libbif.o -o iozone
-
-#
-# GNU 'C' compiler Linux build with threads, largefiles, async I/O 
-#
-linux:	iozone_linux.o libasync.o libbif.o fileop_linux.o pit_server.o
-	$(CC)  -O3 $(LDFLAGS) iozone_linux.o libasync.o libbif.o -lpthread \
-		-lrt -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux.o -o fileop
-	$(CC)  -O3 -Dlinux pit_server.o -o pit_server
-
-#
-# GNU 'C' compiler Linux build for powerpc chip with threads, largefiles, async I/O 
-#
-linux-powerpc: iozone_linux-powerpc.o  libbif.o libasync.o fileop_linux-ppc.o pit_server.o
-	$(CC) -O3 $(LDFLAGS) iozone_linux-powerpc.o libasync.o \
-		libbif.o -lpthread  -lrt -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux-ppc.o -o fileop
-	$(CC)  -O3 -Dlinux pit_server.o -o pit_server
-#
-# GNU 'C' compiler Linux build for sparc chip with threads, largefiles, async I/O 
-#
-linux-sparc: iozone_linux-sparc.o  libbif.o libasync.o fileop_linux.o pit_server.o
-	$(CC) -O3 $(LDFLAGS) iozone_linux-sparc.o libasync.o libbif.o \
-		-lpthread -lrt -o iozone
-	$(CC) -O3 -Dlinux fileop_linux.o -o fileop
-	$(CC) -O3 -Dlinux pit_server.o -o pit_server
-
-#
-# GNU 'C' compiler Linux build with threads, largefiles, async I/O 
-#
-linux-ia64:	iozone_linux-ia64.o  libbif.o libasync.o fileop_linux-ia64.o pit_server.o
-	$(CC) -O3 $(LDFLAGS) iozone_linux-ia64.o libbif.o libasync.o \
-		-lrt -lpthread -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux-ia64.o -o fileop
-	$(CC)  -O3 -Dlinux pit_server.o -o pit_server
-
-#
-# GNU 'C' compiler Linux build for powerpc chip with threads, largefiles, async I/O 
-#
-linux-powerpc64: iozone_linux-powerpc64.o  libbif.o libasync.o fileop_linux-ppc64.o pit_server-linux-powerpc64.o
-	$(CC) -O3 -Dunix -DHAVE_ANSIC_C -DSHARED_MEM -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE -Dlinux \
-		iozone_linux-powerpc64.o libasync.o libbif.o -lpthread \
-		-lrt $(FLAG64BIT) -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux-ppc64.o $(FLAG64BIT) -o fileop
-	$(CC)  -O3 -Dlinux pit_server-linux-powerpc64.o $(FLAG64BIT) -o pit_server
-		
-#
-# GNU 'C' compiler Linux build with threads, largefiles, async I/O
-#
-linux-arm:	iozone_linux-arm.o  libbif.o libasync.o fileop_linux-arm.o pit_server.o
-	$(CC) -O3 $(LDFLAGS) iozone_linux-arm.o libbif.o libasync.o \
-		-lrt -lpthread -o iozone
-	$(CC) -O3 -Dlinux fileop_linux-arm.o -o fileop
-	$(CC) -O3 -Dlinux pit_server.o -o pit_server
-
-#
-# GNU 'C' compiler Linux build with threads, largefiles, async I/O 
-#
-linux-AMD64:	iozone_linux-AMD64.o  libbif.o libasync.o fileop_linux-AMD64.o pit_server.o
-	$(CC)  -O3 $(LDFLAGS) iozone_linux-AMD64.o libbif.o libasync.o \
-		-lrt -lpthread -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux-AMD64.o -o fileop
-	$(CC)  -O3 -Dlinux pit_server.o -o pit_server
-
-#
-# GNU 'C' compiler Linux build with S/390, threads, largfiles, async I/O
-#
-linux-S390:	iozone_linux-s390.o libbif.o libasync.o fileop_linux-s390.o pit_server.o
-	$(CC)  -O2 $(LDFLAGS) -lpthread -lrt iozone_linux-s390.o \
-		libbif.o libasync.o -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux-s390.o -o fileop
-	$(CC)  -O3 -Dlinux pit_server.o -o pit_server
-
-#
-# GNU 'C' compiler Linux build with S/390, threads, largfiles, async I/O
-#
-linux-S390X:	iozone_linux-s390x.o libbif.o libasync.o fileop_linux-s390x.o pit_server.o
-	$(CC)  -O2 $(LDFLAGS) -lpthread -lrt iozone_linux-s390x.o \
-		libbif.o libasync.o -o iozone
-	$(CC)  -O3 -Dlinux fileop_linux-s390x.o -o fileop
-	$(CC)  -O3 -Dlinux pit_server.o -o pit_server
-
-
-# 
-# AIX
-# I would have built with ASYNC_IO but the AIX machine does not have 
-# POSIX 1003.1b compliant async I/O header files.  Has threads, no
-# largefile support.
-# 
-AIX:	iozone_AIX.o  libbif.o  fileop_AIX.o
-	$(CC)  -O $(LDFLAGS) iozone_AIX.o libbif.o \
-		-lpthreads -o iozone
-	$(CC)  -O -Dlinux fileop_AIX.o -o fileop
-
-# 
-# AIX-LF
-# I would have built with ASYNC_IO but the AIX machine does not have 
-# POSIX 1003.1b compliant async I/O header files.  Has threads, and
-# largefile support.
-# 
-AIX-LF:	iozone_AIX-LF.o  libbif.o   fileop_AIX-LF.o pit_server.o
-	$(CC)  -O $(LDFLAGS) iozone_AIX-LF.o libbif.o \
-		-lpthreads -o iozone
-	$(CC)  -O fileop_AIX-LF.o -o fileop
-	$(CC)  -O pit_server.o -o pit_server
-
-# AIX64
-# This version uses the 64 bit interfaces and is compiled as 64 bit code.
-# Has threads, async I/O but no largefile support.
-#
-AIX64:        iozone_AIX64.o libbif.o fileop_AIX64.o libasync.o pit_server.o
-	$(GCC) -maix64 -O3 $(LDFLAGS) iozone_AIX64.o libasync.o \
-              libbif.o -lpthreads -o iozone
-	$(GCC) -maix64 -O3 $(LDFLAGS) -Dlinux fileop_AIX64.o -o fileop
-	$(GCC) -maix32 -O3 $(LDFLAGS) pit_server.o -o pit_server
-
-#
-# AIX64-LF
-# This version uses the 64 bit interfaces and is compiled as 64 bit code.
-# Has threads, async I/O and largefile support.
-#
-AIX64-LF:     iozone_AIX64-LF.o libbif.o fileop_AIX64-LF.o libasync.o pit_server.o
-	$(GCC) -maix64 -O3 $(LDFLAGS) iozone_AIX64-LF.o libasync.o \
-              libbif.o -lpthreads -o iozone
-	$(GCC) -maix64 -O3 $(LDFLAGS) -Dlinux fileop_AIX64-LF.o -o fileop
-	$(GCC) -maix32 -O3 $(LDFLAGS) pit_server.o -o pit_server
-
-#
-# IRIX 32 bit build with threads, largefiles, async I/O 
-# This would like to be in 64 bit mode but it hangs whenever in 64 bit mode.
-# This version uses the 64 bit interfaces but is compiled as 32 bit code
-#
-IRIX64:	iozone_IRIX64.o libasyncw.o libbif.o 
-	$(CC)   -32 -O $(LDFLAGS) iozone_IRIX64.o libbif.o \
-		-lpthread libasyncw.o -o iozone
-
-#
-# IRIX 32 bit build with threads, No largefiles, and async I/O 
-# This version uses the 32 bit interfaces and is compiled as 32 bit code
-#
-IRIX:	iozone_IRIX.o libasync.o libbif.o
-	$(CC)  -O  -32 $(LDFLAGS) iozone_IRIX.o libbif.o -lpthread \
-		libasync.o -o iozone
-
-#
-# CrayX1: 32 bit build with threads, No largefiles, and async I/O 
-# This version uses the 32 bit interfaces and is compiled as 32 bit code
-#
-CrayX1:	iozone_CrayX1.o libasync.o libbif.o
-	$(CC)  -O  $(LDFLAGS) iozone_CrayX1.o libbif.o \
-		-lpthread libasyncw.o -o iozone
-
-#
-# SPP-UX 32 bit build with threads, No largefiles, and No async I/O, 
-# pread extensions
-# For older SPP-UX machines with 9.05 compatibility
-#
-sppux:	iozone_sppux.o  libbif.o
-	$(NACC)  -O $(LDFLAGS) iozone_sppux.o  libbif.o \
-	-Wl,+parallel -lcnx_syscall -lpthread -lail -o iozone
-
-#
-# SPP-UX 32 bit build with threads, No largefiles, and No async I/O, pread 
-# extensions
-# For Newer SPP-UX machines with 10.01 compatibility
-#
-sppux-10.1:	iozone_sppux-10.1.o libbif.o
-	$(NACC) -O $(LDFLAGS) iozone_sppux-10.1.o libbif.o \
-	 -lcnx_syscall  -Wl,+parallel -lpthread -lail -o iozone
-
-#
-# SPP-UX 32 bit build with threads, No largefiles, and No async I/O, pread 
-# extensions
-# For Newer SPP-UX machines with 10.01 compatibility, and no ansi 'C' compiler.
-#
-sppux_no_ansi-10.1:	iozone_sppux_no-10.1.o libbif.o
-	$(CCS)  -O $(LDFLAGS) iozone_sppux_no-10.1.o libbif.o \
-		-Wl,+parallel -lcnx_syscall  \
-		-lpthread -lail -o iozone
-
-#
-# Convex 'C' series 32 bit build with No threads, No largefiles, and No async I/O
-#
-convex:	iozone_convex.o libbif.o
-	$(CC) -O $(LDFLAGS)iozone_convex.o libbif.o -o iozone
-
-#
-# Solaris 32 bit build with threads, largefiles, and async I/O
-#
-Solaris:	iozone_solaris.o libasync.o libbif.o fileop_Solaris.o pit_server.o
-	$(CC)  -O $(LDFLAGS) iozone_solaris.o libasync.o libbif.o \
-		-lthread -lpthread -lposix4 -lnsl -laio -lsocket \
-		-o iozone
-	$(CC)  -O fileop_Solaris.o -o fileop
-	$(CC)  -O pit_server.o -lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o pit_server
-
-#
-# Solaris 32 bit build with threads, largefiles, and async I/O
-#
-Solaris7gcc:	iozone_solaris7gcc.o libasync7.o libbif7.o 
-	$(GCC)  -O $(LDFLAGS) iozone_solaris7gcc.o libasync7.o libbif7.o \
-		-lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-#
-# Solaris 32 bit build with threads, largefiles, and async I/O
-#
-Solaris10:	iozone_solaris10.o libasync10.o libbif10.o fileop_Solaris10.o pit_server.o
-	$(CC)  -O $(LDFLAGS) iozone_solaris10.o libasync10.o libbif10.o \
-		-lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-	$(CC)  -O fileop_Solaris10.o -o fileop
-	$(CC)  -O pit_server.o -lthread -lpthread -lposix4 -lnsl -laio \
-                -lsocket -o pit_server
-
-#
-# Solaris 32 bit build with threads, largefiles, and async I/O
-#
-Solaris10cc:	iozone_solaris10cc.o libasync10cc.o libbif10cc.o fileop_Solaris10cc.o pit_server.o
-	$(CC)  -O $(LDFLAGS) iozone_solaris10cc.o libasync10cc.o libbif10cc.o \
-		-lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-	$(CC)  -O fileop_Solaris10cc.o -o fileop
-	$(CC)  -O pit_server.o -lthread -lpthread -lposix4 -lnsl -laio \
-                -lsocket -o pit_server
-
-#
-# Solaris 32 bit build with threads, largefiles, and async I/O
-#
-Solaris10gcc:	iozone_solaris10gcc.o libasync10.o libbif10.o fileop_Solaris10gcc.o pit_server_solaris10gcc.o
-	$(GCC)  -O $(LDFLAGS) iozone_solaris10gcc.o libasync10.o libbif10.o \
-		-lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-	$(GCC)  -O fileop_Solaris10gcc.o -o fileop
-	$(GCC)  -O pit_server_solaris10gcc.o -lthread -lpthread -lposix4 -lnsl -laio \
-                -lsocket -o pit_server
-
-#
-# Solaris 64 bit build with threads, largefiles, and async I/O
-#
-Solaris10gcc-64:	iozone_solaris10gcc-64.o libasync10-64.o libbif10-64.o fileop_Solaris10gcc-64.o pit_server_solaris10gcc-64.o
-	$(GCC)  -O $(LDFLAGS) $(S10GCCFLAGS) iozone_solaris10gcc-64.o libasync10-64.o libbif10-64.o \
-		-lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-	$(GCC)  -O $(S10GCCFLAGS) fileop_Solaris10gcc-64.o -o fileop
-	$(GCC)  -O $(S10GCCFLAGS) pit_server_solaris10gcc-64.o -lthread -lpthread -lposix4 \
-		-lnsl -laio -lsocket -o pit_server
-
-
-#
-# Solaris 64 bit build with threads, largefiles, and async I/O
-#
-Solaris10cc-64:	iozone_solaris10cc-64.o libasync10-64.o libbif10-64.o fileop_Solaris10cc-64.o pit_server.o
-	$(CC)  -O $(LDFLAGS) $(S10CCFLAGS) iozone_solaris10cc-64.o libasync10-64.o libbif10-64.o \
-              -lthread -lpthread -lposix4 -lnsl -laio \
-              -lsocket -o iozone
-	$(CC)  -O $(S10CCFLAGS) fileop_Solaris10cc-64.o -o fileop
-	$(CC)  -O $(S10CCFLAGS) pit_server.o -lthread -lpthread -lposix4 \
-		-lnsl -laio -lsocket -o pit_server
-
-
-
-#
-# Solaris 2.6 (32 bit) build with no threads, no largefiles, and no async I/O
-#
-Solaris-2.6:	iozone_solaris-2.6.o libbif.o 
-	$(CC)  -O $(LDFLAGS) iozone_solaris-2.6.o libbif.o \
-		-lnsl -laio -lsocket -o iozone
-
-#
-# Solaris 64 bit build with threads, largefiles, and async I/O
-#
-Solaris8-64: iozone_solaris8-64.o libasync.o libbif.o
-	$(CC) $(LDFLAGS) -fast -xtarget=generic64 -v iozone_solaris8-64.o \
-		libasync.o libbif.o -lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-
-#
-# Solaris 64 bit build with threads, largefiles, async I/O, and Vxfs
-#
-Solaris8-64-VXFS: iozone_solaris8-64-VXFS.o libasync.o libbif.o
-	$(CC) $(LDFLAGS) -fast -xtarget=generic64 -v -I/opt/VRTSvxfs/include/ 
-		iozone_solaris8-64-VXFS.o libasync.o libbif.o \
-		-lthread -lpthread -lposix4 -lnsl -laio \
-		-lsocket -o iozone
-
-#
-# Windows build requires Cygwin development environment. You
-# can get this from www.cygwin.com
-# No largefiles, No async I/O
-#
-Windows:	iozone_windows.o libbif.o fileop_windows.o pit_server_win.o
-	$(GCC) -O $(LDFLAGS) iozone_windows.o libbif.o -o iozone
-	$(GCC) -O $(LDFLAGS) fileop_windows.o -o fileop
-	$(GCC) -O $(LDFLAGS) pit_server_win.o -o pit_server
-
-#
-# Windows build requires SUA development environment. You
-# can get this from Microsoft
-# No largefiles, No async I/O
-#
-SUA:	iozone_sua.o libbif.o fileop_sua.o pit_server_sua.o
-	$(GCC) -O $(LDFLAGS) iozone_sua.o libbif.o -o iozone
-	$(GCC) -O $(LDFLAGS) fileop_sua.o -o fileop
-	$(GCC) -O $(LDFLAGS) pit_server_sua.o -o pit_server
-
-#
-# Uwin build requires UWIN development environment. 
-# No threads, No largefiles, No async I/O
-#
-UWIN:	iozone_uwin.o libbif.o
-	$(GCC) -O $(LDFLAGS) iozone_uwin.o libbif.o -o iozone
-
-#
-# GNU C compiler BSD/OS build with threads, largefiles, no async I/O
-#
-
-bsdi:	iozone_bsdi.o libbif.o fileop_bsdi.o pit_server.o
-	$(CC) -O $(LDFLAGS) iozone_bsdi.o libbif.o -o iozone
-	$(CC) -O fileop_bsdi.o -o fileop
-	$(CC) -O pit_server.o -o pit_server
-
-#
-# GNU C compiler FreeBSD build with no threads, no largefiles, no async I/O
-#
-
-freebsd:	iozone_freebsd.o libbif.o fileop_freebsd.o libasync.o pit_server.o
-	$(CC) $(LDFLAGS) iozone_freebsd.o libbif.o -lpthread libasync.o \
-		-o iozone
-	$(CC)  -O fileop_freebsd.o -o fileop
-	$(CC)  -O pit_server.o -o pit_server
-
-#
-# GNU C compiler DragonFly build with no threads, no largefiles
-#
-dragonfly:	iozone_dragonfly.o libbif.o fileop_dragonfly.o pit_server.o
-	$(CC) $(LDFLAGS) iozone_dragonfly.o libbif.o -o iozone
-	$(CC)  -O fileop_dragonfly.o -o fileop
-	$(CC)  -O pit_server.o -o pit_server
-
-#
-# GNU C compiler MacosX build with no threads, no largefiles, no async I/O
-#
-
-macosx:	iozone_macosx.o fileop_macosx.o pit_server.o
-	$(CC) -O $(LDFLAGS) iozone_macosx.o libbif.o -o iozone
-	$(CC) -O $(LDFLAGS) fileop_macosx.o -o fileop
-	$(CC) -O $(LDFLAGS) pit_server.o -o pit_server
-#
-#
-# GNU C compiler OpenBSD build with no threads, no largefiles, no async I/O
-#
-
-openbsd:	iozone_openbsd.o libbif.o fileop_openbsd.o pit_server.o
-	$(CC) -O $(LDFLAGS) iozone_openbsd.o libbif.o -o iozone
-	$(CC)  -O fileop_openbsd.o -o fileop
-	$(CC)  -O pit_server.o -o pit_server
-
-#
-# GNU C compiler OpenBSD build with threads, no largefiles, no async I/O
-#
-
-openbsd-threads:	iozone_openbsd-threads.o libbif.o
-	$(CC) -O $(LDFLAGS) -pthread iozone_openbsd-threads.o \
-		libbif.o -o iozone
-
-#
-# GNU C compiler OSFV3 build 
-# Has threads and async I/O but no largefiles.
-#
-
-OSFV3:	iozone_OSFV3.o libbif.o libasync.o
-	$(CC) -O $(LDFLAGS) iozone_OSFV3.o libbif.o \
-		-lpthreads libasync.o -laio -o iozone
-
-#
-# GNU C compiler OSFV4 build 
-# Has threads and async I/O but no largefiles.
-#
-
-OSFV4:	iozone_OSFV4.o libbif.o libasync.o
-	$(CC) -O $(LDFLAGS) iozone_OSFV4.o libbif.o -lpthread \
-		libasync.o -laio -o iozone
-
-#
-# GNU C compiler OSFV5 build 
-# Has threads and async I/O but no largefiles.
-#
-
-OSFV5:	iozone_OSFV5.o libbif.o libasync.o
-	$(CC) -O $(LDFLAGS) iozone_OSFV5.o libbif.o -lpthread \
-		libasync.o -laio -o iozone
-
-#
-# GNU C compiler TRU64 build 
-# Has threads and async I/O but no largefiles.
-#
-
-TRU64:	iozone_TRU64.o libbif.o libasync.o
-	$(CC) -O $(LDFLAGS) iozone_TRU64.o libbif.o -lpthread \
-		libasync.o -laio -o iozone
-
-#
-# GNU Generic build with no threads, no largefiles, no async I/O
-# for SCO
-# Note:	Be sure you have the latest patches for SCO's Openserver
-# or you will get warnings about timer problems.
-#
-
-SCO:	iozone_SCO.o  libbif.o
-	$(GCC) -O $(LDFLAGS) iozone_SCO.o -lsocket -s libbif.o -o iozone
-
-
-#
-# GNU build with threads, largefiles, async I/O
-# for SCO Unixware 5 7.1.1 i386 x86at SCO UNIX SVR5
-# Note: Be sure you have the latest patches for SCO's Openserver
-# or you will get warnings about timer problems.
-#
-
-SCO_Unixware_gcc:	iozone_SCO_Unixware_gcc.o  libbif.o libasync.o
-	$(GCC) -O $(LDFLAGS) iozone_SCO_Unixware_gcc.o libbif.o libasync.o \
-		-lsocket -lthread -o iozone
-
-#
-# GNU C compiler NetBSD build with no threads, no largefiles, no async I/O
-#
-
-netbsd:	iozone_netbsd.o  libbif.o fileop_netbsd.o pit_server.o
-	$(CC) -O $(LDFLAGS) iozone_netbsd.o libbif.o -o iozone
-	$(CC) -O fileop_netbsd.o -o fileop
-	$(CC) -O pit_server.o -o pit_server
-
-#
-#
-# Now for the machine specific stuff
-#
-
-iozone_hpux.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for HP-UX (9.05)"
-	@echo ""
-	$(C89) +e -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"hpux"' $(CFLAGS) iozone.c  -o iozone_hpux.o
-	$(C89) +e -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_hpux-11.0.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for HP-UX (11.0)"
-	@echo ""
-	$(CC) -c +O3 +Oparallel -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DNAME='"hpux-11.0"' -DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) \
-		iozone.c  -o iozone_hpux-11.0.o
-	$(CC) -c  +O3 +Oparallel -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) libasync.c  -o libasync.o
-	$(CC) -c  +O3 +Oparallel -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) libbif.c  -o libbif.o
-
-iozone_hpux-11.0w.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for HP-UX (11.0w)"
-	@echo ""
-	$(CC) -c +DD64 +O3 -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-	    -DNAME='"hpux-11.0w"' -DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) iozone.c \
-	     -o iozone_hpux-11.0w.o
-	$(CC) -c +DD64 +O3 -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) libasync.c  -o libasyncw.o
-	$(CC) -c +DD64 +O3 -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) libbif.c  -o libbif.o
-
-iozone_hpuxs-11.0.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building simple iozone for HP-UX (11.0)"
-	@echo ""
-	$(CC) -c  -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE -DHAVE_ANSIC_C \
-		-DNAME='"hpuxs-11.0"' -DASYNC_IO -DVXFS -DHAVE_PREAD $(CFLAGS) iozone.c  \
-		-o iozone_hpuxs-11.0.o
-	$(CC) -c  -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE -DHAVE_ANSIC_C \
-		-DASYNC_IO  -DVXFS $(CFLAGS) libasync.c  -o libasync.o 
-	$(CC) -c  -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE -DHAVE_ANSIC_C \
-		-DASYNC_IO -DVXFS $(CFLAGS) libbif.c  -o libbif.o 
-
-fileop_hpuxs-11.0.o:	fileop.c
-	@echo ""
-	@echo "Building simple fileop for HP-UX (11.0)"
-	@echo ""
-	$(CC) -c  $(CFLAGS) fileop.c  -o fileop_hpuxs-11.0.o 
-
-pit_server_solaris10gcc-64.o:	pit_server.c
-	@echo ""
-	@echo "Building the pit_server"
-	@echo ""
-	$(CC) -c  $(CFLAGS) $(S10GCCFLAGS) pit_server.c  -o pit_server_solaris10gcc-64.o 
-
-pit_server.o:	pit_server.c
-	@echo ""
-	@echo "Building the pit_server"
-	@echo ""
-	$(CC) -c  $(CFLAGS) pit_server.c  -o pit_server.o 
-
-pit_server-linux-powerpc64.o:	pit_server.c
-	@echo ""
-	@echo "Building the pit_server"
-	@echo ""
-	$(CC) -c  $(CFLAGS) $(FLAG64BIT) pit_server.c -o pit_server-linux-powerpc64.o 
-
-pit_server_solaris10gcc.o:	pit_server.c
-	@echo ""
-	@echo "Building the pit_server"
-	@echo ""
-	$(GCC) -c  $(CFLAGS) pit_server.c -o pit_server_solaris10gcc.o 
-
-
-pit_server_win.o:	pit_server.c
-	@echo ""
-	@echo "Building the pit_server for Windows"
-	@echo ""
-	$(GCC) -c  $(CFLAGS) -DWindows pit_server.c  -o pit_server_win.o 
-
-pit_server_sua.o:	pit_server.c
-	@echo ""
-	@echo "Building the pit_server for Windows SUA"
-	@echo ""
-	$(GCC) -c  $(CFLAGS) -D_SUA_ pit_server.c  -o pit_server_sua.o 
-
-iozone_hpuxs-11.0w.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building simple iozone for HP-UX (11.0w)"
-	@echo ""
-	$(CC) -c +DD64 -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DNAME='"hpuxs-11.0w"' -DHAVE_ANSIC_C -DASYNC_IO -DVXFS \
-		-DHAVE_PREAD $(CFLAGS) iozone.c  -o iozone_hpuxs-11.0w.o
-	$(CC) -c +DD64 -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) libasync.c  -o libasyncw.o 
-	$(CC) -c +DD64 -Dunix -D_LARGEFILE64_SOURCE  -D_HPUX_SOURCE \
-		-DHAVE_ANSIC_C -DASYNC_IO -DVXFS $(CFLAGS) libbif.c  -o libbif.o 
-
-iozone_hpux-10.1.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for HP-UX (10.1)"
-	@echo ""
-	$(C89) +e -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"hpux-10.1"' $(CFLAGS) iozone.c  -o iozone_hpux-10.1.o
-	$(C89) +e -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		$(CFLAGS) libbif.c  -o libbif.o
-
-iozone_hpux-10.20.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for HP-UX (10.20)"
-	@echo ""
-	$(C89) +e -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"hpux-10.20"' $(CFLAGS) iozone.c  -o iozone_hpux-10.20.o
-	$(C89) +e -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		$(CFLAGS) libbif.c  -o libbif.o
-
-iozone_ghpux.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for GCC HP-UX (9.05) "
-	@echo ""
-	$(GCC) -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS $(CFLAGS) iozone.c \
-		-DNAME='"h=ghpux"' -o iozone_ghpux.o
-	$(GCC) -c -O -Dunix -D_HPUX_SOURCE -DHAVE_ANSIC_C -DNO_THREADS \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_generic.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone Generic "
-	@echo ""
-	$(CC) -c -O -Dgeneric -Dunix -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"Generic"' $(CFLAGS) iozone.c -o iozone_generic.o
-	$(CC) -c -O -Dgeneric -Dunix -DHAVE_ANSIC_C -DNO_THREADS \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_hpux_no.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for HP-UX (9.05) without ansi compiler"
-	@echo ""
-	$(NACC) -c -O -Dunix -D_HPUX_SOURCE -DNO_THREADS iozone.c \
-		-DNAME='"hpux_no_ansi"' -o iozone_hpux_no.o
-	$(NACC) -c -O -Dunix -D_HPUX_SOURCE -DNO_THREADS \
-		libbif.c -o libbif.o
-
-iozone_hpux_no-10.1.o:	iozone.c
-	@echo ""
-	@echo "Building iozone for HP-UX (10.1) without ansi compiler"
-	@echo ""
-	$(NACC) -c -O -Dunix -D_HPUX_SOURCE -DNO_THREADS iozone.c \
-		-DNAME='"hpux_no_ansi_10.1"' -o iozone_hpux_no-10.1.o
-	$(NACC) -c -O -Dunix -D_HPUX_SOURCE -DNO_THREADS \
-		libbif.c -o libbif.o
-
-iozone_linux-powerpc.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux PowerPC"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DDONT_HAVE_O_DIRECT \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-DNAME='"linux-powerpc"' -o iozone_linux-powerpc.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o 
-
-iozone_linux-powerpc64.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux PowerPC64"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DNAME='"linux-powerpc64"' \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		$(FLAG64BIT) -o iozone_linux-powerpc64.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c $(FLAG64BIT) -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c $(FLAG64BIT) -o libasync.o 
-		
-
-iozone_linux-sparc.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux Sparc"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DDONT_HAVE_O_DIRECT \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-DNAME='"linux-sparc"' -o iozone_linux-sparc.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o 
-
-iozone_linux.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux"
-	@echo ""
-	$(CC) -Wall -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-DNAME='"linux"' -o iozone_linux.o
-	$(CC) -Wall -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -Wall -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o 
-
-fileop_AIX.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for AIX"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_AIX.o
-
-fileop_AIX-LF.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for AIX-LF"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_AIX-LF.o
-
-fileop_AIX64.o:       fileop.c
-	@echo ""
-	@echo "Building fileop for AIX64"
-	@echo ""
-	$(GCC) -maix64 -c -O3 $(CFLAGS) fileop.c -o fileop_AIX64.o
-
-fileop_AIX64-LF.o:    fileop.c
-	@echo ""
-	@echo "Building fileop for AIX64-LF"
-	@echo ""
-	$(GCC) -maix64 -c -O3 $(CFLAGS) fileop.c -o fileop_AIX64-LF.o
-
-fileop_bsdi.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for BSDi"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_bsdi.o
-
-fileop_freebsd.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for FreeBSD"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_freebsd.o
-
-fileop_netbsd.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for NetBSD"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_netbsd.o
-
-fileop_Solaris.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Solaris"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_Solaris.o
-
-fileop_Solaris10.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Solaris10"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_Solaris10.o
-
-fileop_Solaris10cc.o: fileop.c
-	@echo ""
-	@echo "Building fileop for Solaris10cc"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) fileop.c -o fileop_Solaris10cc.o
-
-
-fileop_Solaris10gcc.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Solaris10gcc"
-	@echo ""
-	$(GCC) -c -O $(CFLAGS) fileop.c -o fileop_Solaris10gcc.o
-
-fileop_Solaris10gcc-64.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Solaris10gcc-64"
-	@echo ""
-	$(GCC) -c -O $(CFLAGS) $(S10GCCFLAGS) fileop.c -o fileop_Solaris10gcc-64.o
-
-fileop_Solaris10cc-64.o:      fileop.c
-	@echo ""
-	@echo "Building fileop for Solaris10cc-64"
-	@echo ""
-	$(CC) -c -O $(CFLAGS) $(S10CCFLAGS) fileop.c -o fileop_Solaris10cc-64.o
-
-
-fileop_linux.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Linux"
-	@echo ""
-	$(CC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux.o
-
-fileop_openbsd.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for OpenBSD"
-	@echo ""
-	$(CC) -Wall -c -O $(CFLAGS) fileop.c -o fileop_openbsd.o
-
-fileop_macosx.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for MAC OS X"
-	@echo ""
-	$(CC) -Wall -c -O -Dmacosx $(CFLAGS) fileop.c -o fileop_macosx.o
-
-fileop_linux-ia64.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-ia64"
-	@echo ""
-	$(CC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux-ia64.o
-
-fileop_linux-ppc.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-powerpc"
-	@echo ""
-	$(CC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux-ppc.o
-
-fileop_linux-ppc64.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-powerpc64"
-	@echo ""
-	$(CC) -Wall -c -O3 $(CFLAGS) $(FLAG64BIT) fileop.c -o fileop_linux-ppc64.o
-
-fileop_linux-AMD64.o:	fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-AMD64"
-	@echo ""
-	$(CC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux-AMD64.o
-
-fileop_linux-arm.o:  fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-arm"
-	@echo ""
-	$(GCC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux-arm.o
-
-fileop_linux-s390.o:  fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-S390"
-	@echo ""
-	$(GCC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux-s390.o
-
-fileop_linux-s390x.o:  fileop.c
-	@echo ""
-	@echo "Building fileop for Linux-s390x"
-	@echo ""
-	$(GCC) -Wall -c -O3 $(CFLAGS) fileop.c -o fileop_linux-s390x.o
-
-fileop_windows.o: fileop.c
-	@echo ""
-	@echo "Building fileop for Windows"
-	@echo ""
-	$(GCC) -Wall -c -O3 $(CFLAGS) -DWindows fileop.c -o fileop_windows.o
-
-fileop_sua.o: fileop.c
-	@echo ""
-	@echo "Building fileop for Windows SUA"
-	@echo ""
-	$(GCC) -Wall -c -O3 $(CFLAGS) -D_SUA_ fileop.c -o fileop_sua.o
-
-iozone_linux-ia64.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux-ia64"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DNAME='"linux-ia64"' \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-o iozone_linux-ia64.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o 
-
-iozone_linux-arm.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux-arm"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \
-		-DNAME='"linux-arm"' -DLINUX_ARM -DSHARED_MEM \
-		-Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-o iozone_linux-arm.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o
-
-iozone_linux-AMD64.o:	iozone.c libbif.c libasync.c 
-	@echo ""
-	@echo "Building iozone for Linux-AMD64"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DNAME='"linux-AMD64"' \
-		-D__AMD64__ -DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE \
-		-DHAVE_PREAD $(CFLAGS) iozone.c -o iozone_linux-AMD64.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DSHARED_MEM -Dlinux $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o 
-
-iozone_linux-s390.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux-s390"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-DNAME='"linux-s390"' -o iozone_linux-s390.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DSHARED_MEM -Dlinux \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c -o libasync.o
-
-iozone_linux-s390x.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for Linux-s390x"
-	@echo ""
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \
-		-DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c \
-		-DNAME='"linux-s390x"' -o iozone_linux-s390x.o
-	$(CC) -c -O3 -Dunix -DHAVE_ANSIC_C -DSHARED_MEM -Dlinux \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c -o libasync.o
-
-
-iozone_AIX.o:	iozone.c libbif.c 
-	@echo ""
-	@echo "Building iozone for AIX"
-	@echo ""
-	$(CC) -c -O -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C  \
-		-DNAME='"AIX"' -DSHARED_MEM  $(CFLAGS) iozone.c -o iozone_AIX.o
-	$(CC) -c -O -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C  \
-		-DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
-
-iozone_AIX-LF.o:	iozone.c libbif.c 
-	@echo ""
-	@echo "Building iozone for AIX with Large files"
-	@echo ""
-	$(CC) -c -O -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C  \
-		-DSHARED_MEM  -D_LARGEFILE64_SOURCE -D_LARGE_FILES \
-		-DNAME='"AIX-LF"' $(CFLAGS) iozone.c -o iozone_AIX-LF.o
-	$(CC) -c -O -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C  \
-		-DSHARED_MEM -D_LARGEFILE64_SOURCE -D_LARGE_FILES \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_AIX64.o:       iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for AIX64"
-	@echo ""
-	$(GCC) -maix64 -c -O3 -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C \
-              -DASYNC_IO -DNAME='"AIX64"' -DSHARED_MEM \
-              $(CFLAGS) iozone.c -o iozone_AIX64.o
-	$(GCC) -maix64 -c -O3 -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C \
-              -DASYNC_IO -DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
-	$(GCC) -maix64 -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-              $(CFLAGS) libasync.c -o libasync.o
-
-iozone_AIX64-LF.o:    iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone for AIX64 with Large files"
-	@echo ""
-	$(GCC) -maix64 -c -O3 -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C \
-              -DASYNC_IO -DNAME='"AIX64-LF"' -DSHARED_MEM \
-              -D_LARGEFILE64_SOURCE -D_LARGE_FILES \
-              $(CFLAGS) iozone.c -o iozone_AIX64-LF.o
-	$(GCC) -maix64 -c -O3 -D__AIX__ -D_NO_PROTO -Dunix -DHAVE_ANSIC_C \
-              -DASYNC_IO -DSHARED_MEM -D_LARGEFILE64_SOURCE -D_LARGE_FILES \
-              $(CFLAGS) libbif.c -o libbif.o
-	$(GCC) -maix64 -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-              -D_LARGEFILE64_SOURCE -D_LARGE_FILES \
-              $(CFLAGS) libasync.c -o libasync.o
-
-iozone_solaris.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris"
-	@echo ""
-	$(CC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		-DNAME='"Solaris"' $(CFLAGS) iozone.c -o iozone_solaris.o
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		$(CFLAGS) libasync.c -o libasync.o
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_solaris7gcc.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris7gcc"
-	@echo ""
-	$(GCC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		-DNAME='"Solaris7gcc"' $(CFLAGS) libasync.c -o libasync7.o
-	$(GCC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		$(CFLAGS) libbif.c -o libbif7.o
-	$(GCC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		-DNAME='"Solaris7gcc"' $(CFLAGS) iozone.c -o iozone_solaris7gcc.o
-
-iozone_solaris10.o:  iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris10"
-	@echo ""
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-	        -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-	        $(CFLAGS) libbif.c -o libbif10.o
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-	        -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-	        -DNAME='"Solaris10"' $(CFLAGS) libasync.c -o libasync10.o
-	$(CC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO -Dstudio11 \
-	        -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-	        -DNAME='"Solaris10"' $(CFLAGS) iozone.c -o iozone_solaris10.o
-
-iozone_solaris10cc.o:  iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris10cc"
-	@echo ""
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-	        -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-	        $(CFLAGS) libbif.c -o libbif10cc.o
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-	        -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-	        -DNAME='"Solaris10"' $(CFLAGS) libasync.c -o libasync10cc.o
-	$(CC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO -Dstudio11 \
-	        -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-	        -DNAME='"Solaris10"' $(CFLAGS) iozone.c -o iozone_solaris10cc.o
-
-iozone_solaris10gcc.o:  iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris10gcc"
-	@echo ""
-	$(GCC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-                -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-                $(CFLAGS) libbif.c -o libbif10.o
-	$(GCC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-                -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-                -DNAME='"Solaris10gcc"' $(CFLAGS) libasync.c -o libasync10.o
-	$(GCC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-                -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-                -DNAME='"Solaris10gcc"' $(CFLAGS) iozone.c -o iozone_solaris10gcc.o
-
-iozone_solaris10gcc-64.o:  iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris10gcc-64"
-	@echo ""
-	$(GCC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-                -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-                $(CFLAGS) $(S10GCCFLAGS) libbif.c -o libbif10-64.o
-	$(GCC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-                -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-                -DNAME='"Solaris10gcc-64"' $(CFLAGS) $(S10GCCFLAGS) libasync.c -o libasync10-64.o
-	$(GCC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-                -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-                -DNAME='"Solaris10gcc-64"' $(CFLAGS) $(S10GCCFLAGS) iozone.c -o iozone_solaris10gcc-64.o
-
-iozone_solaris10cc-64.o:  iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris10cc-64"
-	@echo ""
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		$(CFLAGS) $(S10CCFLAGS) libbif.c -o libbif10-64.o
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D__LP64__ \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		-DNAME='"Solaris10cc-64"' $(CFLAGS) $(S10CCFLAGS) libasync.c -o libasync10-64.o
-	$(CC) -c -O -Dunix -DHAVE_ANSIC_C -DASYNC_IO -Dstudio11 \
-		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dsolaris \
-		-DNAME='"Solaris10cc-64"' $(CFLAGS) $(S10CCFLAGS) iozone.c -o iozone_solaris10cc-64.o
-
-
-#
-#		-DSHARED_MEM -Dsolaris libasync.c -o libasync.o
-#		-DSHARED_MEM -Dsolaris iozone.c -o iozone_solaris.o
-#
-
-iozone_solaris-2.6.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris-2.6"
-	@echo ""
-	$(CC) -c -O -Dunix -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"Solaris-2.6"' -Dsolaris  $(CFLAGS) iozone.c -o iozone_solaris-2.6.o
-	$(CC) -O -c  -Dunix -DHAVE_ANSIC_C \
-		-Dsolaris $(CFLAGS) libbif.c -o libbif.o
-
-iozone_solaris8-64.o: iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris8-64"
-	@echo ""
-	$(CC) -fast -xtarget=generic64 -v -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-D__LP64__ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
-		-DNAME='"Solaris8-64"' -Dsolaris -DHAVE_PREAD \
-		$(CFLAGS) iozone.c -o iozone_solaris8-64.o
-	$(CC) -fast -xtarget=generic64 -v -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-D__LP64__ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
-		-Dsolaris -DHAVE_PREAD $(CFLAGS) libasync.c -o libasync.o
-	$(CC) -fast -xtarget=generic64 -v -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-D__LP64__ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
-		-Dsolaris -DHAVE_PREAD $(CFLAGS) libbif.c -o libbif.o
-
-iozone_solaris8-64-VXFS.o: iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for Solaris8-64-VXFS"
-	@echo ""
-	$(CC) -fast -xtarget=generic64 -v -c -I/opt/VRTSvxfs/include/ -Dunix \
-		-DVXFS -DHAVE_ANSIC_C -DASYNC_IO \
-		-D__LP64__ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
-		-DNAME='"Solaris8-64"' -Dsolaris -DHAVE_PREAD \
-		$(CFLAGS) iozone.c -o iozone_solaris8-64-VXFS.o
-	$(CC) -fast -xtarget=generic64 -v -c  -I/opt/VRTSvxfs/include/ -Dunix \
-		-DVXFS -DHAVE_ANSIC_C -DASYNC_IO \
-		-D__LP64__ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
-		-Dsolaris -DHAVE_PREAD $(CFLAGS) libasync.c -o libasync.o
-	$(CC) -fast -xtarget=generic64 -v -c -I/opt/VRTSvxfs/include/ -Dunix \
-		-DVXFS -DHAVE_ANSIC_C -DASYNC_IO \
-		-D__LP64__ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
-		-Dsolaris -DHAVE_PREAD $(CFLAGS) libbif.c -o libbif.o
-
-iozone_windows.o:	iozone.c libasync.c libbif.c fileop.c
-	@echo ""
-	@echo "Building iozone for Windows (No async I/O)"
-	@echo ""
-	$(GCC) -c -O -Dunix -DHAVE_ANSIC_C -DNO_MADVISE  \
-		-DWindows $(CFLAGS) -DDONT_HAVE_O_DIRECT iozone.c \
-		-o iozone_windows.o
-	$(GCC) -c -O -Dunix -DHAVE_ANSIC_C -DNO_MADVISE \
-		-DWindows $(CFLAGS) libbif.c -o libbif.o
-
-
-#		-D_SUA_ $(CFLAGS) -DDONT_HAVE_O_DIRECT iozone.c \
-
-iozone_sua.o:	iozone.c libasync.c libbif.c fileop.c
-	@echo ""
-	@echo "Building iozone for Windows SUA (No async I/O)"
-	@echo ""
-	$(GCC) -c -O -Dunix -DHAVE_ANSIC_C -D_XOPEN_SOURCE -DNO_MADVISE  \
-		-D_SUA_ $(CFLAGS) iozone.c \
-		-DNAME='"Windows SUA"' -o iozone_sua.o
-	$(GCC) -c -O -Dunix -D_SUA_ -D_XOPEN_SOURCE -DHAVE_ANSIC_C \
-		-DNO_MADVISE $(CFLAGS) libbif.c -o libbif.o
-
-iozone_uwin.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for UWIN (No threads, No async I/O)"
-	@echo ""
-	$(GCC) -c -O -DUWIN -Dunix -DHAVE_ANSIC_C -DNO_THREADS  -DNO_MADVISE \
-		-DNAME='"UWIN"' -DSHARED_MEM -DWindows $(CFLAGS) iozone.c -o iozone_uwin.o
-	$(GCC) -c -O -DUWIN -Dunix -DHAVE_ANSIC_C -DNO_THREADS  -DNO_MADVISE \
-		-DSHARED_MEM -DWindows $(CFLAGS) libbif.c -o libbif.o
-
-iozone_IRIX64.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for IRIX64"
-	@echo ""
-	$(CC) -32 -O -c  -Dunix -DHAVE_ANSIC_C -D_LARGEFILE64_SOURCE -DASYNC_IO \
-		-DNAME='"IRIX64"' -DIRIX64 -DSHARED_MEM $(CFLAGS) iozone.c -o iozone_IRIX64.o
-	$(CC) -32 -O -c  -Dunix -DHAVE_ANSIC_C -D_LARGEFILE64_SOURCE -DASYNC_IO \
-		-DIRIX64 -DSHARED_MEM $(CFLAGS) libasync.c -o libasyncw.o
-	$(CC) -32 -O -c  -Dunix -DHAVE_ANSIC_C -D_LARGEFILE64_SOURCE -DASYNC_IO \
-		-DIRIX64 -DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
-
-iozone_IRIX.o:	iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for IRIX"
-	@echo ""
-	$(CC)  -O -32 -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-DNAME='"IRIX"' -DIRIX -DSHARED_MEM $(CFLAGS) iozone.c -o iozone_IRIX.o
-	$(CC)  -O -32 -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-DIRIX -DSHARED_MEM $(CFLAGS) libasync.c -o libasync.o
-	$(CC)  -O -32 -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO \
-		-DIRIX -DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
-
-iozone_CrayX1.o: iozone.c libasync.c libbif.c
-	@echo ""
-	@echo "Building iozone for CrayX1"
-	@echo ""
-	$(CC)  -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DNAME='"CrayX1"' -DIRIX64 -DSHARED_MEM -D__CrayX1__ \
-		$(CFLAGS) iozone.c -o iozone_CrayX1.o
-	$(CC)  -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DIRIX64 -DSHARED_MEM -D__CrayX1__ \
-		$(CFLAGS) libasync.c -o libasyncw.o
-	$(CC)  -O -c  -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-		-DIRIX64 -DSHARED_MEM -D__CrayX1__ $(CFLAGS) libbif.c \
-		-o libbif.o
-
-iozone_sppux.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for SPP-UX using Convex compiler"
-	@echo ""
-	$(NACC) -c  -O -Dunix -D_HPUX_SOURCE -D__convex_spp \
-		-DNAME='"sppux"' -Wl,+parallel -DHAVE_ANSIC_C -DHAVE_PREAD \
-		-DHAVE_PREADV $(CFLAGS) iozone.c -o iozone_sppux.o
-	$(NACC) -O -Dunix -D_HPUX_SOURCE -D__convex_spp \
-		-Wl,+parallel -DHAVE_ANSIC_C -DHAVE_PREAD -DHAVE_PREADV \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_sppux-10.1.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for SPP-UX using HP ansic compiler"
-	@echo ""
-	$(NACC) -c -O -Dunix -D_HPUX_SOURCE -D__convex_spp \
-		-DHAVE_ANSIC_C -DHAVE_PREAD -DHAVE_PREADV $(CFLAGS) iozone.c \
-		 -DNAME='"sppux-10.1"' -Wl,+parallel -o iozone_sppux-10.1.o
-	$(NACC) -c -O -Dunix -D_HPUX_SOURCE -D__convex_spp \
-		-DHAVE_ANSIC_C -DHAVE_PREAD -DHAVE_PREADV \
-		$(CFLAGS) libbif.c -Wl,+parallel -o libbif.o
-
-iozone_sppux_no-10.1.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for SPP-UX no ANSI c compiler"
-	@echo ""
-	$(CCS) -c -O -Dunix -D_HPUX_SOURCE -D__convex_spp \
-		-DNAME='"sppux_no_ansi_10.1"' -Wl,+parallel -DHAVE_PREAD \
-		-DHAVE_PREADV $(CFLAGS) iozone.c -o iozone_sppux_no-10.1.o
-	$(CCS) -c -O -Dunix -D_HPUX_SOURCE -D__convex_spp \
-		-Wl,+parallel -DHAVE_PREAD -DHAVE_PREADV $(CFLAGS) \
-		libbif.c -o libbif.o
-
-iozone_convex.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone for Convex 'C' series"
-	@echo ""
-		$(CC) -c -O -Dunix -DNO_THREADS -Dbsd4_2 $(CFLAGS) iozone.c \
-			-DNAME='"Convex"' -o iozone_convex.o 
-		$(CC) -c -O -Dunix -DNO_THREADS -Dbsd4_2 \
-			$(CFLAGS) libbif.c -o libbif.o 
-
-iozone_bsdi.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for BSD/OS"
-	@echo ""
-	$(CC) -c -O -Dunix -Dbsd4_4 -DHAVE_ANSIC_C \
-		-DNAME='"bsdi"' $(CFLAGS) iozone.c -o iozone_bsdi.o
-	$(CC) -c -O -Dunix -Dbsd4_4 -DHAVE_ANSIC_C \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_freebsd.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Build iozone for FreeBSD"
-	@echo ""
-	$(CC) -c ${CFLAGS}  -DFreeBSD -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
-		-DHAVE_PREAD -DNAME='"freebsd"' -DSHARED_MEM \
-		$(CFLAGS) iozone.c -o iozone_freebsd.o
-	$(CC) -c ${CFLAGS} -DFreeBSD -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
-		-DSHARED_MEM -DHAVE_PREAD $(CFLAGS) libbif.c \
-		-o libbif.o
-	$(CC) -c ${CFLAGS} -DFreeBSD -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DASYNC_IO \
-		-DSHARED_MEM -DHAVE_PREAD $(CFLAGS) libasync.c \
-		-o libasync.o
-
-iozone_dragonfly.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for DragonFly"
-	@echo ""
-	$(CC) -c ${CFLAGS}  -D__DragonFly__ -Dunix -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"dragonfly"' -DSHARED_MEM -DHAVE_PREAD -DHAVE_PREADV \
-		$(CFLAGS) iozone.c -o iozone_dragonfly.o
-	$(CC) -c ${CFLAGS} -D__DragonFly__ -Dunix -DHAVE_ANSIC_C -DNO_THREADS \
-		-DSHARED_MEM -DHAVE_PREAD -DHAVE_PREADV $(CFLAGS) libbif.c \
-		-o libbif.o
-
-iozone_macosx.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for MacOSX"
-	@echo ""
-	$(CC) -c -O -Dunix -Dbsd4_2 -Dmacosx -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"macosx"' -DSHARED_MEM $(CFLAGS) iozone.c -o iozone_macosx.o
-	$(CC) -c -O -Dunix -Dbsd4_2 -Dmacosx -DHAVE_ANSIC_C -DNO_THREADS \
-		-DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
-
-iozone_openbsd.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for OpenBSD"
-	@echo ""
-	$(CC) -c -O -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"openbsd"' -DSHARED_MEM $(CFLAGS) iozone.c -o iozone_openbsd.o
-	$(CC) -c -O -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DNO_THREADS \
-		-DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
-
-iozone_openbsd-threads.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for OpenBSD with threads"
-	@echo ""
-	$(CC) -c -O -pthread -Dunix -Dbsd4_4 -DHAVE_ANSIC_C \
-		-DNAME='"openbsd-threads"' $(CFLAGS) iozone.c \
-		-o iozone_openbsd-threads.o
-	$(CC) -c -O -pthread -Dunix -Dbsd4_4 -DHAVE_ANSIC_C \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_OSFV3.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for OSFV3"
-	@echo ""
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV3 \
-		-DNAME='"OSFV3"' -DNO_PRINT_LLD -DOSF_64 $(CFLAGS) iozone.c \
-		-o iozone_OSFV3.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV3 \
-		-DNO_PRINT_LLD  -DOSF_64 $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV3 \
-		-DNO_PRINT_LLD -DOSF_64 $(CFLAGS) libasync.c -o libasync.o
-
-iozone_OSFV4.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for OSFV4"
-	@echo ""
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV4 \
-		-DNAME='"OSFV4"' -DNO_PRINT_LLD -DOSF_64 $(CFLAGS) iozone.c \
-		-o iozone_OSFV4.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV4 \
-		-DNO_PRINT_LLD  -DOSF_64 $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV4 \
-		-DNO_PRINT_LLD -DOSF_64 $(CFLAGS) libasync.c -o libasync.o
-
-iozone_OSFV5.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for OSFV5"
-	@echo ""
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV5 \
-		-DNAME='"OSFV5"' -DNO_PRINT_LLD -DOSF_64 $(CFLAGS) iozone.c \
-		-o iozone_OSFV5.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV5 \
-		-DNO_PRINT_LLD  -DOSF_64 $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV5 \
-		-DNO_PRINT_LLD -DOSF_64 $(CFLAGS) libasync.c -o libasync.o
-
-iozone_TRU64.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Build iozone for TRU64"
-	@echo ""
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV5 -DTRU64 -DHAVE_PREAD \
-		-DNAME='"TRU64"' -DNO_PRINT_LLD -DOSF_64 -pthread $(CFLAGS) iozone.c \
-		-o iozone_TRU64.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV5 -DHAVE_PREAD \
-		-DNO_PRINT_LLD  -DOSF_64 $(CFLAGS) libbif.c -o libbif.o
-	$(CC) -O -c -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DOSFV5 -DHAVE_PREAD \
-		-DNO_PRINT_LLD -DOSF_64 $(CFLAGS) libasync.c -o libasync.o
-
-iozone_SCO.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone SCO "
-	@echo ""
-	$(GCC) -c -O -DSCO -Dunix -DHAVE_ANSIC_C -DNO_THREADS -DNO_MADVISE \
-		-DNAME='"SCO"' $(CFLAGS) iozone.c -o iozone_SCO.o
-	$(GCC) -c -O -DSCO -Dunix -DHAVE_ANSIC_C -DNO_THREADS -DNO_MADVISE \
-		$(CFLAGS) libbif.c -o libbif.o
-
-iozone_SCO_Unixware_gcc.o:	iozone.c libbif.c libasync.c
-	@echo ""
-	@echo "Building iozone SCO_Unixware_gcc "
-	@echo ""
-	$(GCC) -c -O -DSCO_Unixware_gcc -Dunix -DHAVE_ANSIC_C  \
-		-DASYNC_IO -D_LARGEFILE64_SOURCE $(CFLAGS) iozone.c  \
-		-DNAME='"SCO_Unixware_gcc"' -o iozone_SCO_Unixware_gcc.o
-	$(GCC) -c -O -DSCO_Unixware_gcc -Dunix -DHAVE_ANSIC_C  \
-		-DASYNC_IO -D_LARGEFILE64_SOURCE $(CFLAGS) libbif.c -o libbif.o
-	$(GCC) -c -O -DSCO_Unixware_gcc -Dunix -DHAVE_ANSIC_C  \
-		-DASYNC_IO -D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c -o libasync.o
-
-iozone_netbsd.o:	iozone.c libbif.c
-	@echo ""
-	@echo "Building iozone NetBSD "
-	@echo ""
-	$(CC) -c -O -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DNO_THREADS \
-		-DNAME='"netbsd"' -DSHARED_MEM $(CFLAGS) iozone.c -o iozone_netbsd.o
-	$(CC) -c -O -Dunix -Dbsd4_4 -DHAVE_ANSIC_C -DNO_THREADS \
-		-DSHARED_MEM $(CFLAGS) libbif.c -o libbif.o
diff --git a/src/components/appio/tests/iozone/pit_server.c b/src/components/appio/tests/iozone/pit_server.c
deleted file mode 100644
index 638e2f0d4..000000000
--- a/src/components/appio/tests/iozone/pit_server.c
+++ /dev/null
@@ -1,831 +0,0 @@
-/******************************************************************************
-* File: pit_server.c
-*
-* Description: Contains source code for an IPv6-capable 'PIT' server.
-* This is a derivative of the tod6 (time-of-day) server that was written 
-* by John Wenker.
-* .......
-* Author of tod6: John Wenker, Sr. Software Engineer,
-*                  Performance Technologies, San Diego, USA
-* .......
-* The program tod6 was a time of day server. It has beeen modified
-* to provide a microsecond timestamp on request.  Modified and adapted 
-* for PIT purposes by Don Capps.  [ capps@iozone.org ]
-* 
-* This server sends the current value of gettimeofday() in 
-* microseconds back to the client, as a numerical string.
-*
-* /etc/services should contain "PIT" with a specified port value.
-*
-******************************************************************************/
-/*
-** System header files.
-*/
-#include <errno.h>        /* errno declaration & error codes.            */
-#include <netdb.h>        /* getaddrinfo(3) et al.                       */
-#include <netinet/in.h>   /* sockaddr_in & sockaddr_in6 definition.      */
-#include <stdio.h>        /* printf(3) et al.                            */
-#include <stdlib.h>       /* exit(2).                                    */
-#include <string.h>       /* String manipulation & memory functions.     */
-#if defined(_SUA_)
-#include <poll.h>         /* poll(2) and related definitions.            */
-#else
-#include <sys/poll.h>     /* poll(2) and related definitions.            */
-#endif
-#include <sys/socket.h>   /* Socket functions (socket(2), bind(2), etc). */
-#include <time.h>         /* time(2) & ctime(3).                         */
-#include <sys/time.h>     /* gettimeofday 				 */
-#include <unistd.h>       /* getopt(3), read(2), etc.                    */
-/* Include for Cygnus development environment for Windows */
-#if defined (Windows)
-#include <Windows.h>
-int errno;
-#endif
-
-#if defined(_SUA_)
-extern char *optarg, *opterr;
-#endif
-
-/*
-** Constants.
-**
-** Please remember to add PIT service to the /etc/services file.
-*/
-#define DFLT_SERVICE "PIT"       /* Programmable Interdimensional Timer      */
-
-#define INVALID_DESC -1          /* Invalid file descriptor.                 */
-#define MAXCONNQLEN  3           /* Max nbr of connection requests to queue. */
-#define MAXTCPSCKTS  2           /* One TCP socket for IPv4 & one for IPv6.  */
-#define MAXUDPSCKTS  2           /* One UDP socket for IPv4 & one for IPv6.  */
-#define VALIDOPTS    "vh:p:"     /* Valid command options.                   */
-/*
-** Simple boolean type definition.
-*/
-int false = 0;
-int true = 1;
-/*
-** Prototypes for internal helper functions.
-*/
-static int  openSckt( const char *service,
-                      const char *protocol,
-                      int         desc[ ],
-                      size_t     *descSize );
-static void pit( int    tSckt[ ],
-                 size_t tScktSize,
-                 int    uSckt[ ],
-                 size_t uScktSize );
-/*
-** Global data objects.
-*/
-static char        hostBfr[ NI_MAXHOST ];   /* For use w/getnameinfo(3).    */
-static const char *pgmName;                 /* Program name w/o dir prefix. */
-static char        servBfr[ NI_MAXSERV ];   /* For use w/getnameinfo(3).    */
-static int     	   verbose = 0;             /* Verbose mode indication.     */
-struct timeval tm;  /* Timeval structure, used with gettimeofday() */
-char   timeStr[40]; /* String for time in microseconds */
-char service_name[20];
-int need;
-/*
-** Usage macro for command syntax violations.
-*/
-#define USAGE                                       \
-        {                                           \
-           fprintf( stderr,                         \
-                    "Usage: %s [-v] -p service \n",   \
-                    pgmName );                      \
-           exit( 127 );                             \
-        }  /* End USAGE macro. */
-/*
-** Macro to terminate the program if a system call error occurs.  The system
-** call must be one of the usual type that returns -1 on error.  
-*/
-#define CHK(expr)                                                   \
-        do                                                          \
-        {                                                           \
-           if ( (expr) == -1 )                                      \
-           {                                                        \
-              fprintf( stderr,                                      \
-                       "%s (line %d): System call ERROR - %s.\n",   \
-                       pgmName,                                     \
-                       __LINE__,                                    \
-                       strerror( errno ) );                         \
-              exit( 1 );                                            \
-           }   /* End IF system call failed. */                     \
-        } while ( false )
-/******************************************************************************
-* Function: main
-*
-* Description:
-*    Set up a PIT server and handle network requests.  This server
-*    handles both TCP and UDP requests.
-*
-* Parameters:
-*    The usual argc and argv parameters to a main() function.
-*
-* Return Value:
-*    This is a daemon program and never returns.  However, in the degenerate
-*    case where no sockets are created, the function returns zero.
-******************************************************************************/
-int main( int   argc,
-          char *argv[ ] )
-{
-   int         opt;
-   int         tSckt[ MAXTCPSCKTS ];     /* Array of TCP socket descriptors. */
-   size_t      tScktSize = MAXTCPSCKTS;  /* Size of uSckt (# of elements).   */
-   int         uSckt[ MAXUDPSCKTS ];     /* Array of UDP socket descriptors. */
-   size_t      uScktSize = MAXUDPSCKTS;  /* Size of uSckt (# of elements).   */
-
-   strcpy(service_name,DFLT_SERVICE);
-   /*
-   ** Set the program name (w/o directory prefix).
-   */
-   pgmName = strrchr( argv[ 0 ], '/' );
-   pgmName = pgmName == NULL  ?  argv[ 0 ]  :  pgmName + 1;
-   /*
-   ** Process command options.
-   */
-   opterr = 0;   /* Turns off "invalid option" error messages. */
-   while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) >= 0 )
-   {
-      switch ( opt )
-      {
-         case 'v':   /* Verbose mode. */
-         {
-            verbose = true;
-            break;
-         }
-         case 'p':   /* Get the port number */
-         {
-            strcpy(service_name,optarg);
-	    need++;
-            break;
-         }
-         default:
-         {
-            USAGE;
-         }
-      }  /* End SWITCH on command option. */
-   }  /* End WHILE processing options. */
-
-   if(need < 1)
-   {
-	USAGE;
-	exit;
-   }
-   /*
-   ** Open both a TCP and UDP socket, for both IPv4 & IPv6, on which to receive
-   ** service requests.
-   */
-   if ( ( openSckt( service_name, "tcp", tSckt, &tScktSize ) < 0 ) ||
-        ( openSckt( service_name, "udp", uSckt, &uScktSize ) < 0 ) )
-   {
-      exit( 1 );
-   }
-   /*
-   ** Run the Programmable Interdimensional Timer server.
-   */
-   if ( ( tScktSize > 0 ) || ( uScktSize > 0 ) )
-   {
-      pit( tSckt,         /* pit() never returns. */
-           tScktSize,
-           uSckt,
-           uScktSize );
-   }
-   /*
-   ** Since pit() never returns, execution only gets here if no sockets were
-   ** created.
-   */
-   if ( verbose )
-   {
-      fprintf( stderr,
-               "%s: No sockets opened... terminating.\n",
-               pgmName );
-   }
-   return 0;
-}  /* End main() */
-/******************************************************************************
-* Function: openSckt
-*
-* Description:
-*    Open passive (server) sockets for the indicated inet service & protocol.
-*    Notice in the last sentence that "sockets" is plural.  During the interim
-*    transition period while everyone is switching over to IPv6, the server
-*    application has to open two sockets on which to listen for connections...
-*    one for IPv4 traffic and one for IPv6 traffic.
-*
-* Parameters:
-*    service  - Pointer to a character string representing the well-known port
-*               on which to listen (can be a service name or a decimal number).
-*    protocol - Pointer to a character string representing the transport layer
-*               protocol (only "tcp" or "udp" are valid).
-*    desc     - Pointer to an array into which the socket descriptors are
-*               placed when opened.
-*    descSize - This is a value-result parameter.  On input, it contains the
-*               max number of descriptors that can be put into 'desc' (i.e. the
-*               number of elements in the array).  Upon return, it will contain
-*               the number of descriptors actually opened.  Any unused slots in
-*               'desc' are set to INVALID_DESC.
-*
-* Return Value:
-*    0 on success, -1 on error.
-******************************************************************************/
-static int openSckt( const char *service,
-                     const char *protocol,
-                     int         desc[ ],
-                     size_t     *descSize )
-{
-   struct addrinfo *ai;
-   int              aiErr;
-   struct addrinfo *aiHead;
-   struct addrinfo  hints    = { .ai_flags  = AI_PASSIVE,    /* Server mode.  */
-                                 .ai_family = PF_UNSPEC };   /* IPv4 or IPv6. */
-   size_t           maxDescs = *descSize;
-   /*
-   ** Initialize output parameters.  When the loop completes, *descSize is 0.
-   */
-   while ( *descSize > 0 )
-   {
-      desc[ --( *descSize ) ] = INVALID_DESC;
-   }
-   /*
-   ** Check which protocol is selected (only TCP and UDP are valid).
-   */
-   if ( strcmp( protocol, "tcp" ) == 0 )        /* TCP protocol.     */
-   {
-      hints.ai_socktype = SOCK_STREAM;
-      hints.ai_protocol = IPPROTO_TCP;
-   }
-   else if ( strcmp( protocol, "udp" ) == 0 )   /* UDP protocol.     */
-   {
-      hints.ai_socktype = SOCK_DGRAM;
-      hints.ai_protocol = IPPROTO_UDP;
-   }
-   else                                         /* Invalid protocol. */
-   {
-      fprintf( stderr,
-               "%s (line %d): ERROR - Unknown transport "
-               "layer protocol \"%s\".\n",
-               pgmName,
-               __LINE__,
-               protocol );
-      return -1;
-   }
-   /*
-   ** Look up the service's "well-known" port number.  Notice that NULL is being
-   ** passed for the 'node' parameter, and that the AI_PASSIVE flag is set in
-   ** 'hints'.  Thus, the program is requesting passive address information.
-   ** The network address is initialized to :: (all zeros) for IPv6 records, or
-   ** 0.0.0.0 for IPv4 records.
-   */
-   if ( ( aiErr = getaddrinfo( NULL,
-                               service,
-                               &hints,
-                               &aiHead ) ) != 0 )
-   {
-      fprintf( stderr,
-               "%s (line %d): ERROR - %s.\n",
-               pgmName,
-               __LINE__,
-               gai_strerror( aiErr ) );
-      return -1;
-   }
-   /*
-   ** For each of the address records returned, attempt to set up a passive
-   ** socket.
-   */
-   for ( ai = aiHead;
-         ( ai != NULL ) && ( *descSize < maxDescs );
-         ai = ai->ai_next )
-   {
-      if ( verbose )
-      {
-         /*
-         ** Display the current address info.   Start with the protocol-
-         ** independent fields first.
-         */
-         fprintf( stderr,
-                  "Setting up a passive socket based on the "
-                  "following address info:\n"
-                  "   ai_flags     = %#02X\n"
-                  "   ai_family    = %d (PF_INET = %d, PF_INET6 = %d)\n"
-                  "   ai_socktype  = %d (SOCK_STREAM = %d, SOCK_DGRAM = %d)\n"
-                  "   ai_protocol  = %d (IPPROTO_TCP = %d, IPPROTO_UDP = %d)\n"
-                  "   ai_addrlen   = %d (sockaddr_in = %lu, "
-                  "sockaddr_in6 = %lu)\n",
-                  ai->ai_flags,
-                  ai->ai_family,
-                  PF_INET,
-                  PF_INET6,
-                  ai->ai_socktype,
-                  SOCK_STREAM,
-                  SOCK_DGRAM,
-                  ai->ai_protocol,
-                  IPPROTO_TCP,
-                  IPPROTO_UDP,
-                  ai->ai_addrlen,
-                  sizeof( struct sockaddr_in ),
-                  sizeof( struct sockaddr_in6 ) );
-         /*
-         ** Now display the protocol-specific formatted socket address.  Note
-         ** that the program is requesting that getnameinfo(3) convert the
-         ** host & service into numeric strings.
-         */
-         getnameinfo( ai->ai_addr,
-                      ai->ai_addrlen,
-                      hostBfr,
-                      sizeof( hostBfr ),
-                      servBfr,
-                      sizeof( servBfr ),
-                      NI_NUMERICHOST | NI_NUMERICSERV );
-         switch ( ai->ai_family )
-         {
-            case PF_INET:   /* IPv4 address record. */
-            {
-               struct sockaddr_in *p = (struct sockaddr_in*) ai->ai_addr;
-               fprintf( stderr,
-                        "   ai_addr      = sin_family:   %d (AF_INET = %d, "
-                        "AF_INET6 = %d)\n"
-                        "                  sin_addr:     %s\n"
-                        "                  sin_port:     %s\n",
-                        p->sin_family,
-                        AF_INET,
-                        AF_INET6,
-                        hostBfr,
-                        servBfr );
-               break;
-            }  /* End CASE of IPv4. */
-            case PF_INET6:   /* IPv6 address record. */
-            {
-               struct sockaddr_in6 *p = (struct sockaddr_in6*) ai->ai_addr;
-               fprintf( stderr,
-                        "   ai_addr      = sin6_family:   %d (AF_INET = %d, "
-                        "AF_INET6 = %d)\n"
-                        "                  sin6_addr:     %s\n"
-                        "                  sin6_port:     %s\n"
-                        "                  sin6_flowinfo: %d\n"
-                        "                  sin6_scope_id: %d\n",
-                        p->sin6_family,
-                        AF_INET,
-                        AF_INET6,
-                        hostBfr,
-                        servBfr,
-                        p->sin6_flowinfo,
-                        p->sin6_scope_id );
-               break;
-            }  /* End CASE of IPv6. */
-            default:   /* Can never get here, but just for completeness. */
-            {
-               fprintf( stderr,
-                        "%s (line %d): ERROR - Unknown protocol family (%d).\n",
-                        pgmName,
-                        __LINE__,
-                        ai->ai_family );
-               freeaddrinfo( aiHead );
-               return -1;
-            }  /* End DEFAULT case (unknown protocol family). */
-         }  /* End SWITCH on protocol family. */
-      }  /* End IF verbose mode. */
-      /*
-      ** Create a socket using the info in the addrinfo structure.
-      */
-      CHK( desc[ *descSize ] = socket( ai->ai_family,
-                                       ai->ai_socktype,
-                                       ai->ai_protocol ) );
-      /*
-      ** Here is the code that prevents "IPv4 mapped addresses", as discussed
-      ** in Section 22.1.3.1.  If an IPv6 socket was just created, then set the
-      ** IPV6_V6ONLY socket option.
-      */
-      if ( ai->ai_family == PF_INET6 )
-      {
-#if defined( IPV6_V6ONLY )
-         /*
-         ** Disable IPv4 mapped addresses.
-         */
-         int v6Only = 1;
-         CHK( setsockopt( desc[ *descSize ],
-                          IPPROTO_IPV6,
-                          IPV6_V6ONLY,
-                          &v6Only,
-                          sizeof( v6Only ) ) );
-#else
-         /*
-         ** IPV6_V6ONLY is not defined, so the socket option can't be set and
-         ** thus IPv4 mapped addresses can't be disabled.  Print a warning
-         ** message and close the socket.  Design note: If the
-         ** #if...#else...#endif construct were removed, then this program
-         ** would not compile (because IPV6_V6ONLY isn't defined).  That's an
-         ** acceptable approach; IPv4 mapped addresses are certainly disabled
-         ** if the program can't build!  However, since this program is also
-         ** designed to work for IPv4 sockets as well as IPv6, I decided to
-         ** allow the program to compile when IPV6_V6ONLY is not defined, and
-         ** turn it into a run-time warning rather than a compile-time error.
-         ** IPv4 mapped addresses are still disabled because _all_ IPv6 traffic
-         ** is disabled (all IPv6 sockets are closed here), but at least this
-         ** way the server can still service IPv4 network traffic.
-         */
-         fprintf( stderr,
-                  "%s (line %d): WARNING - Cannot set IPV6_V6ONLY socket "
-                  "option.  Closing IPv6 %s socket.\n",
-                  pgmName,
-                  __LINE__,
-                  ai->ai_protocol == IPPROTO_TCP  ?  "TCP"  :  "UDP" );
-         CHK( close( desc[ *descSize ] ) );
-         continue;   /* Go to top of FOR loop w/o updating *descSize! */
-#endif /* IPV6_V6ONLY */
-      }  /* End IF this is an IPv6 socket. */
-      /*
-      ** Bind the socket.  Again, the info from the addrinfo structure is used.
-      */
-      CHK( bind( desc[ *descSize ],
-                 ai->ai_addr,
-                 ai->ai_addrlen ) );
-      /*
-      ** If this is a TCP socket, put the socket into passive listening mode
-      ** (listen is only valid on connection-oriented sockets).
-      */
-      if ( ai->ai_socktype == SOCK_STREAM )
-      {
-         CHK( listen( desc[ *descSize ],
-                      MAXCONNQLEN ) );
-      }
-      /*
-      ** Socket set up okay.  Bump index to next descriptor array element.
-      */
-      *descSize += 1;
-   }  /* End FOR each address info structure returned. */
-   /*
-   ** Dummy check for unused address records.
-   */
-   if ( verbose && ( ai != NULL ) )
-   {
-      fprintf( stderr,
-               "%s (line %d): WARNING - Some address records were "
-               "not processed due to insufficient array space.\n",
-               pgmName,
-               __LINE__ );
-   }  /* End IF verbose and some address records remain unprocessed. */
-   /*
-   ** Clean up.
-   */
-   freeaddrinfo( aiHead );
-   return 0;
-}  /* End openSckt() */
-/******************************************************************************
-* Function: pit
-*
-* Description:
-*    Listen on a set of sockets and send the current microsecond counter
-*    that was produced by gettimeofday(), to any clients.  This function 
-*    never returns.
-*
-* Parameters:
-*    tSckt     - Array of TCP socket descriptors on which to listen.
-*    tScktSize - Size of the tSckt array (nbr of elements).
-*    uSckt     - Array of UDP socket descriptors on which to listen.
-*    uScktSize - Size of the uSckt array (nbr of elements).
-*
-* Return Value: None.
-******************************************************************************/
-static void pit( int    tSckt[ ],
-                 size_t tScktSize,
-                 int    uSckt[ ],
-                 size_t uScktSize )
-{
-   char                     bfr[ 256 ];
-   ssize_t                  count;
-   struct pollfd           *desc;
-   size_t                   descSize = tScktSize + uScktSize;
-   int                      idx;
-   int                      newSckt;
-   struct sockaddr         *sadr;
-   socklen_t                sadrLen;
-   struct sockaddr_storage  sockStor;
-   int                      status;
-   size_t                   timeLen;
-   time_t                   timeVal;
-   ssize_t                  wBytes;
-   unsigned long long	    secs;
-   int 	    		    ret;
-   /*
-   ** Allocate memory for the poll(2) array.
-   */
-   desc = malloc( descSize * sizeof( struct pollfd ) );
-   if ( desc == NULL )
-   {
-      fprintf( stderr,
-               "%s (line %d): ERROR - %s.\n",
-               pgmName,
-               __LINE__,
-               strerror( ENOMEM ) );
-      exit( 1 );
-   }
-   /*
-   ** Initialize the poll(2) array.
-   */
-   for ( idx = 0;     idx < descSize;     idx++ )
-   {
-      desc[ idx ].fd      = idx < tScktSize  ?  tSckt[ idx ]
-                                             :  uSckt[ idx - tScktSize ];
-      desc[ idx ].events  = POLLIN;
-      desc[ idx ].revents = 0;
-   }
-   /*
-   ** Main PIT server loop.  Handles both TCP & UDP requests.  This is
-   ** an interative server, and all requests are handled directly within the
-   ** main loop.
-   */
-   while ( true )   /* Do forever. */
-   {
-      /*
-      ** Wait for activity on one of the sockets.  The DO..WHILE construct is
-      ** used to restart the system call in the event the process is
-      ** interrupted by a signal.
-      */
-      do
-      {
-         status = poll( desc,
-                        descSize,
-                        -1 /* Wait indefinitely for input. */ );
-      } while ( ( status < 0 ) && ( errno == EINTR ) );
-      CHK( status );   /* Check for a bona fide system call error. */
-      /*
-      ** Get the current time.
-      */
-#if defined(Windows)
-   LARGE_INTEGER freq,counter;
-   double wintime,bigcounter;
-   /* For Windows the time_of_day() is useless. It increments in 55 milli 
-    * second increments. By using the Win32api one can get access to the 
-    * high performance measurement interfaces. With this one can get back 
-    * into the 8 to 9 microsecond resolution.
-    */
-      QueryPerformanceFrequency(&freq);
-      QueryPerformanceCounter(&counter);
-      bigcounter=(double)counter.HighPart *(double)0xffffffff +
-              (double)counter.LowPart;
-      wintime = (double)(bigcounter/(double)freq.LowPart);
-      secs = (long long)(wintime * 1000000);
-#else
-      ret = gettimeofday( &tm,0 );
-      secs = ((unsigned long long)tm.tv_sec * 1000000) 
-		+ (unsigned long long)tm.tv_usec;
-#endif
-
-      ret = sprintf(timeStr,"%llu",secs);
-      timeLen = strlen( timeStr );
-      /*
-      ** Process sockets with input available.
-      */
-      for ( idx = 0;     idx < descSize;     idx++ )
-      {
-         switch ( desc[ idx ].revents )
-         {
-            case 0:        /* No activity on this socket; try the next. */
-               continue;
-            case POLLIN:   /* Network activity.  Go process it.         */
-               break;
-            default:       /* Invalid poll events.                      */
-            {
-               fprintf( stderr,
-                        "%s (line %d): ERROR - Invalid poll event (%#02X).\n",
-                        pgmName,
-                        __LINE__,
-                        desc[ idx ].revents );
-               exit( 1 );
-            }
-         }  /* End SWITCH on returned poll events. */
-         /*
-         ** Determine if this is a TCP request or UDP request.
-         */
-         if ( idx < tScktSize )
-         {
-            /*
-            ** TCP connection requested.  Accept it.  Notice the use of
-            ** the sockaddr_storage data type.
-            */
-            sadrLen = sizeof( sockStor );
-            sadr    = (struct sockaddr*) &sockStor;
-            CHK( newSckt = accept( desc[ idx ].fd,
-                                   sadr,
-                                   &sadrLen ) );
-            CHK( shutdown( newSckt,       /* Server never recv's anything. */
-                           SHUT_RD ) );
-            if ( verbose )
-            {
-               /*
-               ** Display the socket address of the remote client.  Begin with
-               ** the address-independent fields.
-               */
-               fprintf( stderr,
-                        "Sockaddr info for new TCP client:\n"
-                        "   sa_family = %d (AF_INET = %d, AF_INET6 = %d)\n"
-                        "   addr len  = %d (sockaddr_in = %lu, "
-                        "sockaddr_in6 = %lu)\n",
-                        sadr->sa_family,
-                        AF_INET,
-                        AF_INET6,
-                        sadrLen,
-                        sizeof( struct sockaddr_in ),
-                        sizeof( struct sockaddr_in6 ) );
-               /*
-               ** Display the address-specific fields.
-               */
-               getnameinfo( sadr,
-                            sadrLen,
-                            hostBfr,
-                            sizeof( hostBfr ),
-                            servBfr,
-                            sizeof( servBfr ),
-                            NI_NUMERICHOST | NI_NUMERICSERV );
-               /*
-               ** Notice that we're switching on an address family now, not a
-               ** protocol family.
-               */
-               switch ( sadr->sa_family )
-               {
-                  case AF_INET:   /* IPv4 address. */
-                  {
-                     struct sockaddr_in *p = (struct sockaddr_in*) sadr;
-                     fprintf( stderr,
-                              "   sin_addr  = sin_family: %d\n"
-                              "               sin_addr:   %s\n"
-                              "               sin_port:   %s\n",
-                              p->sin_family,
-                              hostBfr,
-                              servBfr );
-                     break;
-                  }  /* End CASE of IPv4. */
-                  case AF_INET6:   /* IPv6 address. */
-                  {
-                     struct sockaddr_in6 *p = (struct sockaddr_in6*) sadr;
-                     fprintf( stderr,
-                              "   sin6_addr = sin6_family:   %d\n"
-                              "               sin6_addr:     %s\n"
-                              "               sin6_port:     %s\n"
-                              "               sin6_flowinfo: %d\n"
-                              "               sin6_scope_id: %d\n",
-                              p->sin6_family,
-                              hostBfr,
-                              servBfr,
-                              p->sin6_flowinfo,
-                              p->sin6_scope_id );
-                     break;
-                  }  /* End CASE of IPv6. */
-                  default:   /* Can never get here, but for completeness. */
-                  {
-                     fprintf( stderr,
-                              "%s (line %d): ERROR - Unknown address "
-                              "family (%d).\n",
-                              pgmName,
-                              __LINE__,
-                              sadr->sa_family );
-                     break;
-                  }  /* End DEFAULT case (unknown address family). */
-               }  /* End SWITCH on address family. */
-            }  /* End IF verbose mode. */
-            /*
-            ** Send the PIT to the client.
-            */
-            wBytes = timeLen;
-            while ( wBytes > 0 )
-            {
-               do
-               {
-                  count = write( newSckt,
-                                 timeStr,
-                                 wBytes );
-               } while ( ( count < 0 ) && ( errno == EINTR ) );
-               CHK( count );   /* Check for an error. */
-               wBytes -= count;
-            }  /* End WHILE there is data to send. */
-            CHK( close( newSckt ) );
-         }  /* End IF this was a TCP connection request. */
-         else
-         {
-            /*
-            ** This is a UDP socket, and a datagram is available.  The funny
-            ** thing about UDP requests is that this server doesn't require any
-            ** client input; but it can't send the PIT unless it knows a client
-            ** wants the data, and the only way that can occur with UDP is if
-            ** the server receives a datagram from the client.  Thus, the
-            ** server must receive _something_, but the content of the datagram
-            ** is irrelevant.  Read in the datagram.  Again note the use of
-            ** sockaddr_storage to receive the address.
-            */
-            sadrLen = sizeof( sockStor );
-            sadr    = (struct sockaddr*) &sockStor;
-            CHK( count = recvfrom( desc[ idx ].fd,
-                                   bfr,
-                                   sizeof( bfr ),
-                                   0,
-                                   sadr,
-                                   &sadrLen ) );
-            /*
-            ** Display whatever was received on stdout.
-            */
-            if ( verbose )
-            {
-               ssize_t rBytes = count;
-               fprintf( stderr,
-                        "%s: UDP datagram received (%ld bytes).\n",
-                        pgmName,
-                        count );
-               while ( count > 0 )
-               {
-                  fputc( bfr[ rBytes - count-- ],
-                         stdout );
-               }
-               if ( bfr[ rBytes-1 ] != '\n' )
-                  fputc( '\n', stdout );   /* Newline also flushes stdout. */
-               /*
-               ** Display the socket address of the remote client.  Address-
-               ** independent fields first.
-               */
-               fprintf( stderr,
-                        "Remote client's sockaddr info:\n"
-                        "   sa_family = %d (AF_INET = %d, AF_INET6 = %d)\n"
-                        "   addr len  = %d (sockaddr_in = %lu, "
-                        "sockaddr_in6 = %lu)\n",
-                        sadr->sa_family,
-                        AF_INET,
-                        AF_INET6,
-                        sadrLen,
-                        sizeof( struct sockaddr_in ),
-                        sizeof( struct sockaddr_in6 ) );
-               /*
-               ** Display the address-specific information.
-               */
-               getnameinfo( sadr,
-                            sadrLen,
-                            hostBfr,
-                            sizeof( hostBfr ),
-                            servBfr,
-                            sizeof( servBfr ),
-                            NI_NUMERICHOST | NI_NUMERICSERV );
-               switch ( sadr->sa_family )
-               {
-                  case AF_INET:   /* IPv4 address. */
-                  {
-                     struct sockaddr_in *p = (struct sockaddr_in*) sadr;
-                     fprintf( stderr,
-                              "   sin_addr  = sin_family: %d\n"
-                              "               sin_addr:   %s\n"
-                              "               sin_port:   %s\n",
-                              p->sin_family,
-                              hostBfr,
-                              servBfr );
-                     break;
-                  }  /* End CASE of IPv4 address. */
-                  case AF_INET6:   /* IPv6 address. */
-                  {
-                     struct sockaddr_in6 *p = (struct sockaddr_in6*) sadr;
-                     fprintf( stderr,
-                              "   sin6_addr = sin6_family:   %d\n"
-                              "               sin6_addr:     %s\n"
-                              "               sin6_port:     %s\n"
-                              "               sin6_flowinfo: %d\n"
-                              "               sin6_scope_id: %d\n",
-                              p->sin6_family,
-                              hostBfr,
-                              servBfr,
-                              p->sin6_flowinfo,
-                              p->sin6_scope_id );
-                     break;
-                  }  /* End CASE of IPv6 address. */
-                  default:   /* Can never get here, but for completeness. */
-                  {
-                     fprintf( stderr,
-                              "%s (line %d): ERROR - Unknown address "
-                              "family (%d).\n",
-                              pgmName,
-                              __LINE__,
-                              sadr->sa_family );
-                     break;
-                  }  /* End DEFAULT case (unknown address family). */
-               }  /* End SWITCH on address family. */
-            }  /* End IF verbose mode. */
-            /*
-            ** Send the PIT to the client.
-            */
-            wBytes = timeLen;
-            while ( wBytes > 0 )
-            {
-               do
-               {
-                  count = sendto( desc[ idx ].fd,
-                                  timeStr,
-                                  wBytes,
-                                  0,
-                                  sadr,        /* Address & address length   */
-                                  sadrLen );   /*    received in recvfrom(). */
-               } while ( ( count < 0 ) && ( errno == EINTR ) );
-               CHK( count );   /* Check for a bona fide error. */
-               wBytes -= count;
-            }  /* End WHILE there is data to send. */
-         }  /* End ELSE a UDP datagram is available. */
-         desc[ idx ].revents = 0;   /* Clear the returned poll events. */
-      }  /* End FOR each socket descriptor. */
-   }  /* End WHILE forever. */
-}  /* End pit() */
-
diff --git a/src/components/appio/tests/iozone/read_telemetry b/src/components/appio/tests/iozone/read_telemetry
deleted file mode 100644
index 1cfd2523c..000000000
--- a/src/components/appio/tests/iozone/read_telemetry
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-#
-# The format is:
-#
-# 	All fields are space delimited.
-# 	A # symbol in column 1 indicates a comment.
-#	First field: Byte offset within the file.
-#	Second field: Size in bytes of the I/O operation.
-#	Third field: Number of milliseconds to delay before I/O operation.
-#
-# This is an example of sequential 64k reader with 2 milliseconds
-# before each read.
-#
-0 65536 2
-65536 65536 2
-131072 65536 2
-196608 65536 2
-262144 65536 2
-327680 65536 2
-393216 65536 2
-458752 65536 2
-524288 65536 2
-589824 65536 2
-655360 65536 2
-720896 65536 2
-786432 65536 2
-851968 65536 2
-917504 65536 2
-983040 65536 2
diff --git a/src/components/appio/tests/iozone/report.pl b/src/components/appio/tests/iozone/report.pl
deleted file mode 100755
index f9b9b30ba..000000000
--- a/src/components/appio/tests/iozone/report.pl
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/perl
-#
-# arguments: one of more report files
-#
-# Christian Mautner <christian * mautner . ca>, 2005-10-31
-#
-# This script is based loosely on the Generate_Graph set
-# of scripts that come with iozone, but is a complete re-write
-#
-# The main reason to write this was the need to compare the behaviour of
-# two or more different setups, for tuning filesystems or
-# comparing different pieces of hardware.
-#
-# This script is in the public domain, too short and too trivial
-# to deserve a copyright.
-#
-# Simply run iozone like, for example, ./iozone -a -g 4G > config1.out (if your machine has 4GB)
-# and then run perl report.pl config1.out
-# or get another report from another box into config2.out and run
-# perl report.pl config1.out config2.out
-# the look in the report_* directory for .png
-#
-# If you don't like png or the graphic size, search for "set terminal" in this file and put whatever gnuplot
-# terminal you want. Note I've also noticed that gnuplot switched the set terminal png syntax
-# a while back, you might need "set terminal png small size 900,700"
-#
-
-
-@Reports=@ARGV;
-
-die "usage: $0 <iozone.out> [<iozone2.out>...]\n" if not @Reports or grep (m|^-|, @Reports);
-
-die "report files must be in current directory" if grep (m|/|, @Reports);
-
-%columns=(
-         'write'     =>3,
-         'read'      =>5,
-         'rewrite'   =>4,
-         'reread'    =>6,
-         'randread'  =>7,
-         'randwrite' =>8,
-         'bkwdread'  =>9,
-         'recrewrite'=>10,
-         'strideread'=>11,
-         'fwrite'    =>12,
-         'frewrite'  =>13,
-         'fread'     =>14,
-         'freread'   =>15,
-         );
-
-#
-# create output directory. the name is the concatenation
-# of all report file names (minus the file extension, plus
-# prefix report_)
-#
-$outdir="report_".join("_",map{/([^\.]+)(\..*)?/ && $1}(@Reports));
-
-print STDERR "Output directory: $outdir ";
-
-if ( -d $outdir )
-{
-    print STDERR "(removing old directory) ";
-    system "rm -rf $outdir";
-}
-
-mkdir $outdir or die "cannot make directory $outdir";
-
-print STDERR "done.\nPreparing data files...";
-
-foreach $report (@Reports)
-{
-    open(I, $report) or die "cannot open $report for reading";
-    $report=~/^([^\.]+)/;
-    $datafile="$1.dat";
-    push @datafiles, $datafile;
-    open(O, ">$outdir/$datafile") or die "cannot open $outdir/$datafile for writing";
-    open(O2, ">$outdir/2d-$datafile") or die "cannot open $outdir/$datafile for writing";
-    while(<I>)
-    {
-        next unless ( /^[\s\d]+$/ );
-        @split = split();
-        next unless ( @split >= 8 );
-        print O;
-        print O2 if $split[1] == 16384 or $split[0] == $split[1];
-    }
-    close I, O, O2;
-}
-
-print STDERR "done.\nGenerating graphs:";
-
-foreach $column (keys %columns)
-{
-    print STDERR " $column";
-
-    open(G, ">$outdir/$column.do") or die "cannot open $outdir/$column.do for writing";
-    print G qq{
-set title "Iozone performance: $column"
-set grid lt 2 lw 1
-set surface
-set parametric
-set xtics
-set ytics
-set logscale x 2
-set logscale y 2
-set autoscale z
-#set xrange [2.**5:2.**24]
-set xlabel "File size in KBytes"
-set ylabel "Record size in Kbytes"
-set zlabel "Kbytes/sec"
-set style data lines
-set dgrid3d 80,80,3
-#set terminal png small picsize 900 700
-set terminal png small size 900 700
-set output "$column.png"
-};
-
-    print G "splot ". join(", ", map{qq{"$_" using 1:2:$columns{$column} title "$_"}}(@datafiles));
-
-    print G "\n";
-
-    close G;
-
-    open(G, ">$outdir/2d-$column.do") or die "cannot open $outdir/$column.do for writing";
-    print G qq{
-set title "Iozone performance: $column"
-#set terminal png small picsize 450 350
-set terminal png small size 450 350
-set logscale x
-set xlabel "File size in KBytes"
-set ylabel "Kbytes/sec"
-set output "2d-$column.png"
-};
-
-    print G "plot ". join(", ", map{qq{"2d-$_" using 1:$columns{$column} title "$_" with lines}}(@datafiles));
-
-    print G "\n";
-
-    close G;
-
-    if ( system("cd $outdir && gnuplot $column.do && gnuplot 2d-$column.do") )
-    {
-        print STDERR "(failed) ";
-    }
-    else
-    {
-        print STDERR "(ok) ";
-    }
-}
-
-print STDERR "done.\n";
diff --git a/src/components/appio/tests/iozone/spec.in b/src/components/appio/tests/iozone/spec.in
deleted file mode 100644
index b385b5866..000000000
--- a/src/components/appio/tests/iozone/spec.in
+++ /dev/null
@@ -1,107 +0,0 @@
-Summary: Iozone Filesystem Benchmark
-Name: iozone
-Version: 3
-Release: 398
-License: Freeware
-Group: Applications/Engineering
-Source: %{name}%{version}_%{release}.tar
-Buildroot: /var/tmp/%{name}-buildroot
-
-%description
-IOzone is a filesystem benchmark tool. The benchmark generates and 
-measures a variety of file operations. Iozone has been ported to many machines and runs under many operating systems.
-
-Iozone is useful for performing a broad filesystem analysis of a vendors
-computer platform. The benchmark tests file I/O performance for the following
-operations: Read, write, re-read, re-write, read backwards, read strided,
-fread, fwrite, random read, pread ,mmap, aio_read, aio_write.
-
-
-##
-## PREP
-##
-%prep
-
-##
-## SETUP and PATCH
-##
-%setup -n iozone3_398/src/current
-
-
-##
-## BUILD
-##
-##
-## BUILD
-##
-%build
-%ifarch %{ix86}
-    make linux
-%else
-    %ifarch x86_64
-        make linux-AMD64
-    %else
-        %ifarch ia64
-            make linux-ia64
-        %else
-            %ifarch ppc
-                make  linux-powerpc
-            %else
-                %ifarch ppc64
-                    make linux-powerpc64
-                %else
-                    %ifarch s390
-                        make linux-S390
-                    %else
-                        %ifarch s390x
-                            make linux-S390X
-                    	%else
-                           %ifarch %(arm)
-                               make linux-arm
-			   %else
-			      echo "No idea how to build for your arch..."
-			      exit 1
-			   %endif
-                        %endif
-                    %endif
-                %endif
-            %endif
-        %endif
-    %endif
-%endif
-
-##
-## INSTALL
-##
-%install
-mkdir -p $RPM_BUILD_ROOT/opt/iozone/bin
-cp $RPM_BUILD_DIR/iozone3_398/src/current/iozone $RPM_BUILD_ROOT/opt/iozone/bin/
-cp $RPM_BUILD_DIR/iozone3_398/src/current/fileop $RPM_BUILD_ROOT/opt/iozone/bin/
-cp $RPM_BUILD_DIR/iozone3_398/src/current/pit_server $RPM_BUILD_ROOT/opt/iozone/bin/
-cp $RPM_BUILD_DIR/iozone3_398/src/current/Generate_Graphs $RPM_BUILD_ROOT/opt/iozone/bin/
-cp $RPM_BUILD_DIR/iozone3_398/src/current/gengnuplot.sh $RPM_BUILD_ROOT/opt/iozone/bin/
-cp $RPM_BUILD_DIR/iozone3_398/src/current/gnu3d.dem $RPM_BUILD_ROOT/opt/iozone/bin/
-
-mkdir -p $RPM_BUILD_ROOT/opt/iozone/docs
-cp $RPM_BUILD_DIR/iozone3_398/docs/IOzone_msword_98.pdf $RPM_BUILD_ROOT/opt/iozone/docs/
-cp $RPM_BUILD_DIR/iozone3_398/docs/Run_rules.doc $RPM_BUILD_ROOT/opt/iozone/docs/
-cp $RPM_BUILD_DIR/iozone3_398/docs/IOzone_msword_98.doc $RPM_BUILD_ROOT/opt/iozone/docs/
-cp $RPM_BUILD_DIR/iozone3_398/docs/Iozone_ps.gz $RPM_BUILD_ROOT/opt/iozone/docs/
-cp $RPM_BUILD_DIR/iozone3_398/src/current/Gnuplot.txt $RPM_BUILD_ROOT/opt/iozone/docs/
-
-mkdir -p $RPM_BUILD_ROOT/opt/iozone/man/man1
-cp $RPM_BUILD_DIR/iozone3_398/docs/iozone.1 $RPM_BUILD_ROOT/opt/iozone/man/man1/
-
-
-##
-## FILES
-##
-%files
-%attr(755,root,root) /opt/
-
-
-##
-## CLEAN
-##
-%clean
-rm -rf $RPM_BUILD_ROOT
diff --git a/src/components/appio/tests/iozone/write_telemetry b/src/components/appio/tests/iozone/write_telemetry
deleted file mode 100644
index 8b789d168..000000000
--- a/src/components/appio/tests/iozone/write_telemetry
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-#
-# The format is:
-#
-# 	All fields are space delimited.
-# 	A # symbol in column 1 indicates a comment.
-#	First field: Byte offset within the file.
-#	Second field: Size in bytes of the I/O operation.
-#	Third field: Number of milliseconds to delay before I/O operation.
-#
-# This is an example of sequential 64k writer with 2 milliseconds
-# before each write.
-#
-0 65536 2
-65536 65536 2
-131072 65536 2
-196608 65536 2
-262144 65536 2
-327680 65536 2
-393216 65536 2
-458752 65536 2
-524288 65536 2
-589824 65536 2
-655360 65536 2
-720896 65536 2
-786432 65536 2
-851968 65536 2
-917504 65536 2
-983040 65536 2
-- 
2.26.2