                  IOBENCH NetWare Benchmark


IOBENCH is a NetWare Loadable Module used to measure the performance 
of disk devices.  Unlike client based benchmarks, this program does 
not run across a network or through the NetWare file system and is 
therefore not subject to the throughput limits of the clients or 
network topology, and its results are not affected by file system 
cache.  IOBENCH can be run directly from the console prompt or from 
within the server shell, NWSHELL.

IOBENCH consists of three different benchmarking programs:
  (1) IODTEST exercises "raw" devices (no partitions or file systems)
  (2) IOPTEST exercises NetWare partitions
  (3) IOLTEST exercises NetWare logical partitions (mirrors)

The program has a number of configuration options including the  
size of the IO in sectors, from 1-128 (512 bytes - 64K), read/write 
ratio, and the size of the IO queue to maintain throughout the test.  
The program operates over the entire address space of the specified 
device using either a fixed, sequential or random addresses or a 
reduced seek range can be specified.

Output from IOBENCH includes a summary of the input parameters, the 
average number of IO operations performed per second, and the 
throughput per second.  To test multiple devices, multiple instances 
of IO?TEST are started by IOBENCH (one for each device specified on 
the IOBENCH command line with -u).  The data reduction utility, 
DREDUX.NLM, will combine the results from multiple IO?TEST runs to 
provide a total performance figure.  Use the "-o" option with IOBENCH 
to redirect the test results to a file.

IOBENCH works with Novell NetWare 3.11, 3.12 and 4.01.  If using with 
NetWare 3.11, two patches must be loaded: PATCHMAN.NLM, DEVRQFIX.NLM.  
These modules are available directly from Novell or they can be found 
on NETWIRE.  NWSHELL.NLM version 3.11d is needed to run the scripts.  
It is available from Novell Labs only.  

Use IOBENCH.NLM and IODTEST.NLM without command line arguments to 
see complete usage syntax.

************************************************************************
WARNING:  These benchmarks write data to the devices specified and WILL 
          destroy file systems and data that may already exist on the 
          device.  Be sure to backup critical information before using 
          these programs and to specify the correct device when testing.
************************************************************************

To use IOBENCH:

(1)  Install all of the NLM's from the IOBENCH diskette on the 
     file server.  Using the SYS:\SYSTEM directory is best.

(2)  Install the NetWare shell scripts on the file server.  
     You need server shell NWSHELL.NLM to run the scripts.

(3)  Determine the NetWare device number you want to test with 
     the command "load iodtest -l".  This will list the devices 
     that have been registered.  MONITOR.NLM will register 
     devices and can be used to confirm device configuration.

(4)  Modify MASTER.NWS to meet your configuration.  Indicate the 
     number of ranks or devices you will be testing and list the 
     device (-u?) for the first device variable, dev0.  Specify 
     an output file name and comments for the shell variables.

(5)  Using the server shell NWSHELL.NLM, execute MASTER.NWS.  All 
     of the output is sent to the server console.


DREDUX.NLM is used to summarize results when multiple devices are 
tested and a single performance value is needed.  The program takes 
two values as arguments, input file and output file names.  The 
input file is the file with the results from IOBENCH (IOD|P|LTEST).  

Complete IOBENCH Syntax
=======================

From the NetWare console prompt:

    load iobench <io?test> -u# [arguments]

        where io?test = iodtest - for a device (partition not required)
                        ioptest - for a partition
                        ioltest - for a logical partition (mirror/duplex)

        If no arguments are specified for iobench, usage syntax will be 
        displayed.  The first argument for iobench is io?test which 
        specifies the kind of device to use for the test.

        IODTEST uses the physical device I/O interface.  It ignores any 
        partition information that may reside on the device.  The first 
        I/O address available to this program is the actual first block 
        on the device.  Because IODTEST has access to the first block of 
        the storage device, it can destroy partition, mirror, HotFix and 
        file system information.  USE WITH CARE!

        IOPTEST uses the physical partition I/O interface.  Partitions 
        are added to a device with INSTALL.NLM.  This I/O interface is 
        not often used.  It was added to demonstrate that I/O performance
        to a physical partition is not affected by the OS and should be 
        the same as device level I/O.  IOPTEST can destroy logical 
        partition information.  USE WITH CARE!

        IOLTEST uses the logical partition I/O interface.  This is most 
        useful in that it provides access to mirrored and duplexed I/O 
        interfaces.  Use INSTALL.NLM to create mirror/duplexed partitions.  
        Using a mirrored/duplexed interface, you will see differences in 
        performance compared to using two or more physical devices.  The 
        OS will make decisions on how to best complete I/O requests and 
        performance can vary depending on a number of factors.  IOLTEST 
        can be destructive to file systems.  USE WITH CARE!!

    load iobench io?test -l

        l = list devices available to io?test

        A list of registered devices will displayed.  Use the device 
        number from the list to specify one or more units to test with 
        the "-u" parameter.  Note that the DOS boot device and the 
        device with the SYS volume may be listed.  Don't use those for 
        writing!!
        
        Devices are registered with the operating system by using 
        MONITOR.NLM and selecting the "Disk Information" item from the 
        main menu.  The console command "scan for new devices" can also 
        be used to register devices.

        IODTEST -l lists: device # ......
        IOPTEST -l lists: physical partition # ......
        IOLTEST -l lists: logical partition # .....
            Non-mirrored devices may be listed by IOLTEST.  Select a logical
            partition that is mirrored/duplexed to test that feature.

    load iobench iodtest -u1 -u2 

        u = device/partition/logical partition to be used for the test

        This parameter is the only required parameter for benchmarking.  
        You may list as many devices as needed by using "-u#" multiple 
        times.  To find the available devices, use the "-l" parameter.

        If no other parameters are specified, the program will default to 
        100% reads to the device(s), test duration will be 60 seconds, 
        the I/O size will be 8 sectors (4K), all I/O's will be aligned on 
        8 sector boundries, the program will maintain a queue depth of 10, 
        and I/O addresses will be selected at random.

    load iobench iodtest -u1 -s8

        s = I/O size in sectors to be used for the test

        If "-s" is omitted, the default is 8 sectors.  The value can range 
        from 1 to 128 sectors.  128 sectors is the maximum I/O size 
        allowed by the operating system at this time.

    load iobench iodtest -u1 -s8 -a8

        a = I/O alignment in sectors
            Default: 8
            Range:   1 - 128

        The alignment parameter specifies a boundary for which all I/O 
        requests will begin upon.  In the example above, the program will 
        do 8 sector reads, and all reads will be aligned on an 8 sector 
        address.  If an alignment value is not specified, the program 
        will align all I/O request on 8 sector boundaries.  Set "-s" and 
        "-a" to the same value.

    load iobench iodtest -u1 -s8 -a8 -i10

        i = Maximum number of outstanding I/O requests to maintain
            Default: 10
            Range:   1 - limited by host adapter or system recources

        This parameter is used to specify how may concurrent outstanding 
        I/O requests the program is to maintain.  It is used to simulate 
        different workloads.  The default is 10 and can range from 1 to 
        the size of an integer.  See what the maximum outstanding I/O 
        queue is for your disk driver.  Specifying more than that will 
        just back up I/O's in the OS queue and consume OS resources.

        See how your storage devices handle increasing workload by 
        varying queue depth from 1 to the maximum value supported by your 
        disk driver.  In some cases, the disk driver may be limiting your 
        performance if it is not allowing enough I/O's to be sent to the 
        storage device.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100

        p = Percentage of I/O requests that are reads
            Default: 100
            Range:   0 - 100

        This parameter is used to vary the read/write workload for the 
        benchmark.  The program will default to 100 which indicates 100% 
        read operations.  "-p0" will perform only write I/O requests to 
        the specified device.  "-p75" will perform 25% writes, 75% reads.  
        
        Using a value of less than 100 will tell the program to write to 
        the specified device!!  Be sure you identify the correct device!!
        When told to write, the program will write without regard to any 
        information that may already be contained on a device.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -r[0, #, -#]

        r = I/O pattern
            Default: 23917
            Values:  0 = sequential I/O pattern
                     # = number to be used for random number seed
                    -# = fixed sector reads starting at sector #

        This parameter is used to specify the I/O pattern to be used for 
        the benchmark.  If the "-r" parameter is not specified, I/O 
        addresses are selected at random using a seed of 23917.  
        Sequential I/O pattern will begin at the first sector of the 
        device or partition, proceed to the end of the media and then 
        restart at the beginning of the device or partition.  A fixed I/O 
        pattern will perform I/O at the specified sector, adjusted 
        if necessary, based on the alignment parameter.  Specifying a  
        number will use that value as the seed for the random number  
        generator.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -c#

        c = Seek range in sectors for the specified device
            Default: entire capacity of the device or partition
            Range:   1 - capacity of the device or partition

        This parameter is used to limit the address (seek) range during 
        the benchmark.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -t#[s, m, h]

        t = Duration of the test
            Default: 60 seconds
            Values:  #[s, m, h, d] s = seconds, m = minutes, h = hours
                                   d = days

        This parameter is used to specify the duration of the benchmark.  
        Test times should be long enough to reach a sustained performance 
        rate for the device under test.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -b#

        b = I/O offset in sectors
            Default: 0

        This parameter is seldom used.  It is used to specify an offset 
        for the starting address of I/O's.  It was implemented to provide 
        compatibility with another benchmark.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -f#

        f = NetWare I/O function
            Default: 0 - read
            Values:  1 - write
                  0x80 - disable OS elevator sorting

        This parameter is seldom used.  It was added in order to have the 
        ability to disable elevator sorting of I/O requests by the 
        operating system and test the sorting capabilities of other pieces 
        in the I/O path, ie. disk driver and I/O device.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -v

        v = Verbose mode

        This parameter will capture all messages that are displayed in 
        the specified output file.  This can be useful for capturing 
        messages and results of tests.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -mTEXT

        m = Text used to describe test

        This parameter can be used to add a description or comments to 
        the test results.  Use with the "-o" parameter to add comments to 
        test results that are put in the output file.

    load iobench iodtest -u1 -s8 -a8 -i10 -p100 -mTEXT -oFILENAME.EXT

        o = Name of file to store test results

        Test results are stored in a file if the "-o" parameter is 
        specified.  Use the parameter if multiple devices are being 
        tested and you want to use DREDUX to provide a total performance 
        figure.

Results
=======

When "IOBENCH IODTEST" is running, you will output similar to this 
displayed on the system console:

---- Summary of parameters ----------------------------------------
device 1 sectors 8 alignment 8 bias 0 capacity 8193142 queue 10
device 1 function 100% reads 0% writes random IO using seed 23917  
device 1    20 seconds - begin test
-------------------------------------------------------------------

---- Every 10 seconds, current counters will be displayed ---------
device 1    10s IOs  2551   IOs/sec  255   Kb/sec  1020   CPU   0%
-------------------------------------------------------------------

---- Summary of results will be displayed when the test completes -
================================================================================DEVICE -u1              kb/sec         :   1017      IO's/sec:   254
==========          Bias           :      0  Capacity:  4000MB d/1     
IO's sent :   5099  IO's completed :   5096  IO type :    RR
Q size    :     10  Read percent   :    100  IO size :     8 sectors
Wait Count:   5089  CPU util.      :     0%  device 1 iotest completed
--------------------------------------------------------------------

The following is an example of what will be stored in the output file:

-------------------------------------------------------------------------
 4K  RR 100  10  20   4000MB d/1        1017    254   5089   0%     0   0 
-------------------------------------------------------------------------

Definition of fields for output file:

    Field  Description
    -----  --------------------------------------------------------------
      1    I/O size in Kbytes
      2    Access pattern. First letter:  R - random, s - sequential
                                          F - fixed address
                           Second letter: R - reads, M - read/write mix
      3    Read percentage
      4    Queue depth
      5    Test duration
      6    Unit capacity and description
      7    Throughput in KBytes per second
      8    Throughput in I/O operations per second
      9    I/O's completed
     10    Average CPU utilization
     11    Bias
     12    Message




This program is still under development (and so is the documentation).  
If you have any problems or suggestions for improvements please contact 
Mark Regester at Symbios Logic, Inc.

=============================== NOTICE ====================================
This computer program and its accompanying documentation are being 
provided to on as "AS-IS" basis without warranty of any kind.  ALL 
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES 
OF TITLE, MERCHANTABILITY, AND/OR FITNESS FOR INTENDED PURPOSE, ARE HEREBY 
DISCLAIMED.

This program is provided to you free of charge.  You use it at your own 
risk, and you agree that Symbios Logic Incorporated will not be liable for 
any damages whatsoever, including but not limited to claims for 
incidental damages, consequential damages, lost profits or loss of data, 
that may result from your use of the program.
===========================================================================



--
Mark Regester - Symbios Logic, Inc.
(316)636-8340   3718 North Rock Road
 FAX:636-8889   Wichita, KS 67226     
email: Mark.Regester@KS.HMPD.COM
