Creating IO Tests

Start an IO test with default parameters:

start_IO(dut)

Start an IO test with custom behaviors:

params = {
    'iotype': 'Read',
    'threads': 1,
    'iosperthread': '300s',  # 5 minutes
    'seektype': 0,
}

config = {
    'OnError': 'StopTest',
}

start_IO(dut, params, config)

start_IO

start_IO provides a wrapper around XML_API.get_vlun_start_test.

It does the following for your convenience:
– Ensures that configuration parameters passed to the XML API are defined properly
– Cleanly parses the XML API response into a form that is easier to use
– Handles and logs any problems that arise when starting the IO test
– Ensures that the new IO test is tracked properly during script execution
start_IO(dut, params=None, config=None, fail_type='error')
dut : XML_API
The DUT the new IO test will run on
params : dict Optional
A dictionary for configuring the behavior of the IO test
config : dict Optional
A dictionary for configuring how the test will be managed by the system
fail_type : int or str Optional
Specifies the action to be taken if the IO test fails to start:
0 or 'pass' : Log a PASS
1 or 'notify' : Log a NOTE
2 or 'warn' : Log a WARNING and increment the warnings counter
3 or 'error' : Log an ERROR and increment the errors counter
4 or 'test' : Log an ERROR and immediately fail the entire test

The options passed in params and config closely correspond to the settings available when starting a new IO test in the Controller/Namespace Tests tab in the GUI.

Warning

It is highly recommended that within scripts you only start new IO tests using start_IO instead of XML_API.get_vlun_start_test. Using start_IO ensures that the new IO test will be tracked properly throughout script execution.

params

The params parameter is used to configure IO test behavior. The available settings correspond with the parameters of get_vlun_start_test.

Where possible, values given will be converted to integers.

For many settings, users have the option to use the legacy name instead of the new name found in the XML API. Conversion to the new form will be handled automatically.

The available settings are as follows. Legacy names are listed first:

iotype

The type of IO test to start as format “IOType_IOName”

Examples:

  • ‘Read’

  • ‘Write’

  • ‘Compare’

  • ‘Verify’

  • ‘Rewrite’

  • ‘RrWw’

  • ‘RrWwZzUu where r/w/z/u are positive decimal integers’

The new ZzUu part can be omitted for backwards compatibility, in which “Z” means Write Zeroes and “U” means Write Uncorrectable. Currently, for RrWw, r and w must add to 100, so r and w are “percents”. But they are really just ratios. R90W10 is a ratio of reads to writes of 9:1, while R25W75 is a ratio of 1:3.

Note

There is no longer a need to make r+w+z+u equal to 100 (though if the new ZzUu part is omitted, the existing rule still applies, and r+w must be equal to 100). Now, r/w/z/u are simply ratio values – out of every r+w+z+u I/Os, r will be Read, w will be Write, Z will be Write Zeroes, and u will be Write Uncorrectable.

‘R400W300Z200U1 – out of every 400+300+200+1=901 I/Os, 400 will be reads, etc., and 1 will be write uncorrectable.

Note

R25W75 can also be written as R1W3Z0U0 (out of every 4 I/Os, 1 will be a read, and 3 will be writes). If just issue write zeroes the IOType can be R0W0Z1U0, or if just issue write uncorrectable the IOType can be R0W0Z0U1.’

Note

The IOName can be numbers like “1”, “2” and so on, or with specific system/port/target/LUN/test_index numbers like “1_0_106_1_178” (system = 1, port = 0, target = 106, LUN = 1, test_index = 178).

threads

The number of test threads to run

Note

You can think about this a test que depth. User can specify “threads=32” it will run 32 threads in parallel

blocks

The number of blocks per IO.

Note

  • -1 for Random I/O sizes, or

  • -N for Random I/O sizes that are multiples of N blocks, or a

  • number for an I/O size in blocks, or a

  • number followed by a size (‘kb’, ‘mb’) for an I/O size in bytes (e.g., 3.5kb); 0 is invalid.

  • User can specify “blocks=256” if transfer size is 256 blocks. Our SW will handle the MDTS (Maximum Data Transfer Size) even user specified transfer size larger than MDTS

iosperthread

The number of IOs per thread. (number of IOs to do).

Note

Option are as follows:
  • 0 for unlimited, or a

  • number as a limit in I/Os (e.g., 1000), or a

  • number followed by ‘s’ as a limit in seconds (e.g., 10s), or a

  • number followed by a size (‘kb’, ‘mb’, ‘gb’, ‘tb’) as a limit in bytes, or

  • -N to use N times the device capacity as a test limit.

iosperpass

Number of I/Os of each type to do per pass for use with compare tests.

Note

It is the number of ios to write before reading back, or a number followed by a size (‘kb’, ‘mb’, ‘gb’, ‘tb’) as a size per pass, or -1 to use the device capacity as the size per pass.

Example: If a user specify “iosperpass=0” it will do 1 write immediately followed by a read. Example: If a user specify “iosperpass=-1” it will write the device capacity before doing the first read.

seektype

The access type of the IO test (sequential, random, etc) The User can specify “seektype=0” for sequential.

Note

Available option are
  • 0-Sequential,

  • 1-Random,

  • 2-Min/Max,

  • 3-Butterfly).

opcode

Note

The opcode to use (6,10,12,16, 0 (random)), for SCSI only User can specify “opcode=0” for random opcode pickup.

initiator

The initiator the test will be run on. (-1 for all)

writeblocks

Note

The number of blocks to write before skipping. Rewrite only

skipblocks

Note

The number of blocks to skip after writing. Rewrite only

pattern

The IO pattern to user for Writes User can specify “pattern=0” for random data pattern.

Note

All supported data patterns are as follows:

  • 0 - random

  • 1 - 0x00ff00ff

  • 2 - 0x55aa55aa

  • 3 - 8-bit incr

  • 4 - 8-bit walking 1,0

  • 5 - 0x0000ffff

  • 6 - 0x5555aaaa

  • 7 - 16-bit incr

  • 8 - 16-bit walking 1,0

  • 9 - 32-bit incr

  • 10 - Low Frequency 8B/10B

  • 11 - Med Frequency 8B/10B

  • 12 - High Frequency 8B/10B

  • 13 - Jitter (CJPAT)

  • -1 - custom

  • -2 - existing data

  • (for the following the last two digits can be changed to indicate de-dup percentage). Examples:

  • -100 - random, 0% dup

  • -101 - random, 1% dup

  • -175 - random, 75% dup

  • -199 - random, 99% dup

  • -300 - random, nodup

  • -303 - random, dedup&compression

dedup_ratio

The deduplication ratio for random like X.Y:Z or X:Y or X:1 or X%%

Note

If users specify “dedup_ratio=1:1” and it means the deduplication ratio = 1:1.

comp_ratio

Compression ratio for random like X.Y:Z or X:Y or X:1 or X%%.

Note

If users specify “comp_ratio=1:1” and it means the compression ratio = 1:1.

dup_uniq

The duplicate uniqueness percent ranging from 1 (minimal) to 100 (maximal).

Note

If users specify “dup_uniq=0” and it means the duplicate uniqueness percentage is 0%.

alignment

Block boundary to align each I/O to, a number for an alignment size in blocks, or a number followed by a size (‘kb’, ‘mb’) for an alignment size in bytes (e.g., 3.5kb).

Note

If users specify “alignment=0” and it means the block boundary to align each I/O to is 0.

skip_blocks

Number of blocks to skip after writing which is unused except for rewrite. If user specify “skipblocks=1” which means 1 block to skip after writing during rewrite.

Note

skip_blocks is used to specify the number of blocks to skip after each IO, or the alignment. alignment is given, it will be converted to a negative number to be passed into skip_blocks`. To use block skipping functionality, you must use skip_blocks.

seed

Random seed to use.

Note

If user specify “seed=0” and it means the random seed = 0, so the pseudo random numbers you get from random will start from the same point.

startpaused

Whether to start the test in a paused state

Note

User can specify “startpaused=1” to start test at paused state, If user specifies “startpaused=0” then the I/O test will start immediately.

multipath

Multiple pathing mode if multiple paths to LUN are detected and how to handle them.

Note

If user specify “multipath=1” and means this path only. The available options are as follows:

  • 0 - default

  • 1 - this path

  • 2 - one path

  • 3 - all paths

  • 4 - act/opt paths

  • 5 - act/non-opt paths

all_targets

0 or 1. If 1, the IO test will run on all targets/controllers on the machine

all_luns

0 or 1. If 1, the IO test will run on all namespaces under the passed DUT.

use_defaults

Whether to use default configuration settings (except for those specified in config)

If test_name or override_parameters are given they will be ignored.
config is used to populate override_parameters

For a more detailed explanation of the options, see the Python API Manual here.

config

The options passed in this dictionary are used to construct the value passed to override_parameters in get_vlun_start_test. These allow you to customize how the system will manage the IO test.

For some of the options and their functionality, see the CLI User Guide (init) here.

The complete list of currently supported options is as follows:

CompareType

For write / read / compare type testing, choices are:

  • 0: Entire I/O - compares the entire transfer, which is the most complete data integrity test, but slowest

  • 1: Partial I/O - compares the entire first and last block of the transfer

  • 2: Partial Block - compares the first 4 bytes and last 4 bytes of each block - the fastest compare test, least data checking

LBAInPatterns

LBAInPatterns=0 None, Normal, or Extended LBA (Logical Block Address) to use in test patterns.

  • 0: None - don’t put LBA into each block of pattern (default)

  • 1: Normal - Put LBA (4 bytes) into each block of pattern

  • 2: Extended - Put LBA (plus other info, 16 byte) into each block of pattern. The Extended option seeds additional information into the user block (device ID, timestamp, pass count).

  • 3: Timestamped - Put LBA (plus other info, plus a timestamp, 24 bytes) into each block of pattern.

UseVerify

The SCSI Verify command tells the target to take data from the initiator and compare it with data taken from the media. This can be used by the initiator to do essentially a “read then compare” operation without using any CPU cycles. 0: Disable 1: Enable

UseWSame

Instead of SCSI Write commands, use SCSI WriteSame. 0: Disable 1: Enable

UseXCopy

Interleave SCSI ExtendedCopy commands with SCSI writes. 0: Disable 1: Enable

UseCmpWr

When enabled, use NVMe CompareAndWrite to do Read/Compare and then Write operations. 0: Disable 1: Enable

NoT10DIF

If a given device is formatted with T10 DIF (Types 0, 1, or 2) then if enabled, use read and write commands that enable checking of the device’s T10 DIF protection information; if disabled, use read and write commands that disable checking of the protection information. If a given device is NOT formatted with T10 DIF of any type, this option does nothing. 0: Enable HW - Use hardware-assisted T10 DIF operations on capable devices. 1: Disable - Don’t use T10 DIF operations, even on capable devices. 2: Enable SW - Use software-assisted T10 DIF operations on capable devices.

xxPROTECT

xxPROTECT value to use in Read/Write/Verify commands, 0 means default (1 for Types 1, 2, and 3)xxPROTECT value to use in Read/Write/Verify commands, 0 means default (1 for Types 1, 2, and 3)

PRCHK

PRCHK value to use in Read/Write/Compare commands. These 2 values are as follows: Use default PRCHK value: default is 0 (7 for Types 1 and 2; 6 for Type 3) Custom PRCHK value: use custom value for PRCHK.

AppTag

AppTag=0,ffff T10 DIF Application Tag and Application Tag Mask: T10 DIF Application Tag: application tag value for T10 DIF, default is 0. T10 DIF Application Tag Mask: application tag mask value for T10 DIF, default is ffff.

ReservedEnd

Reserved Area, at the end of the device, in MB

ReservedStart

ReservedStart=0 Reserved Area, at the start of the device, in MB

TestLimit

Test Seek Limit, per device, in MB

TestLimits

Test limits are useful for testing only a portion of the targeted device. These 3 values are: Test Limit Size: sets number of blocks, MB, or Percent to test. 0 means no limit. Test Limit Position: specifies the starting block or MB to begin testing; 0 is at begininng, -1 is the end, otherwise in the middle. Test Limit Units: Specify range for test limits

0: blocks
1: MB
2: percent.

PassEndDelay

Wait this number of seconds before starting next pass, default is 0 for no delay.

GeneralTimeout

GeneralTimeout=15000ms Value in ms to timeout a non Read/Write I/O command. The default is 15000 ms.

TapeTimeout

Value in ms to timeout a tape movement command. (Not available for NVMe).

ReadWriteTimeout

ReadWriteTimeout=20000ms Value in ms to timeout a Read or Write command. The default is 20000 ms.

ReadTimeout

value in ms, if set, overrides Read/Write Timeout for Read commands

WriteTimeout

value in ms, if set, overrides Read/Write Timeout for Write commands

VerifyTimeout

value in ms, if set, overrides Read/Write Timeout for Verify commands

CompareTimeout

CompareTimeout=0ms value in ms, if set, overrides Read/Write Timeout for Compare commands

AbortTimeout

CompareAndWriteTimeout

CompareAndWriteTimeout=0ms value in ms, if set, overrides Read/Write Timeout for CompareAndWrite commands

WriteVerifyTimeout

value in ms, if set, overrides Read/Write Timeout for WriteVerify commands

WriteSameTimeout

value in ms, if set, overrides Read/Write Timeout for WriteSame commands

WriteZeroesTimeout

value in ms, if set, overrides Read/Write Timeout for WriteZeroes commands

WriteUncorrTimeout

value in ms, if set, overrides Read/Write Timeout for WriteUncorrectable commands

ZoneAppendTimeout

value in ms, if set, overrides Read/Write Timeout for ZoneAppend commands

UnmapTimeout

UnmapTimeout=0ms value in ms, if set, overrides Read/Write Timeout for Unmap commands

DatasetManagementTimeout

value in ms, if set, overrides Read/Write Timeout for DatasetMgmt commands

XCopyTimeout

Value in ms to timeout an Extended Copy Command (60000ms is default).

TaskMgmtTimeout

Value in ms to timeout a task management command. The default is 10000 ms.

NoPathTimeout

NoPathTimeout=60000ms Wait up to this time (in milliseconds) for the path to a device to return.

BusyDelay

BusyDelay=100ms Value in ms to wait before re-issuing the I/O command that previously had a busy status. The default is 100 ms.

BusyRetry

BusyRetry=0 Maximum number of times to retry a command that previously had a busy status. The default is 0.

Retry

Retry=5 Sets the number of times an I/O will be retried before considering the I/O in error. The default is 5.

QueuingPolicy

Determines whether the Simple, Ordered, or Head of Queue task attribute is used. (Not available for NVMe). Choose the policy for this I/O from the following: 0: Simple Queue 1: Head of Queue 2: Ordered Queue

NVMeQueueSelect

NVMeQueueSelect=-1 Controls which IO queues NVMe commands are driven to for a given test (Queue Select for Read/Write I/Os for NVMe only.) Choose one of the following: -1: Auto, Use all IO queues (default) -2: Round Robin -3: Urgent -4: High priority -5: Medium priority -6: Low priority 1-N: Only use the selected IO queue 0: NULL

TimeoutErrorRecovery

TimeoutErrorRecovery=5 Handling for timeout error recovery (can combine following options by adding them together, default is 5): 1: Send an Abort to end the timed-out command 2: Use Logical Unit Reset to end the timed-out command 4: Use Target Reset to end the timed-out command

VerifyWriteBuffer

Verify Write Buffer: 0: Disable 1: Enable

PatternInMetadata

Specify the Metadata pattern. Choices include: 0: All Zeroes, put all zeros into metadata of each block. 1: All Ones, put all ones into metadata of each block. 2: Test Pattern, extend test pattern into metadata of each block.

StreamIdentifier

Indicates a stream identifier should be automatically generated when a write test starts, using a value that is unique per-test, per-device, or perthread. Choices include: 0: None, -1: Per Test, -2: Per Device, -3: Per Thread, and any number >=1: Custom stream ID

JEDECRandom

JEDECRandom=0 Random I/O size selection algorithm. Optional values: 0: default, the current random I/O size selection algorithm is used (“random” is selected when a test starts and the I/O size is a negative number). 1: f 1, and the I/O size is -1, then the JEDEC random I/O size table below will be obeyed:

static int sim_jedec_random_blocks[100] = {
1, 1, 1, 1, 2, 3, 4, 5, 6, 7, // 0 to 9
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, // 10 to 19
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, // 20 to 29
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, // 30 to 39
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, // 40 to 49
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, // 50 to 59
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, // 60 to 69
8, 8, 8, 8, 8, 8, 8, 16, 16, 16, // 70 to 79
16, 16, 16, 16, 16, 16, 16, 32, 32, 32, // 80 to 89
32, 32, 32, 32, 64, 64, 64, 128, 128, 128 // 90 to 99
};

For each I/O, a random number from 0 to 99 is chosen, and the I/O size in blocks is taken from the above table.

ShadowThreads

ShadowThreads=0 When a new test starts, there will always be at least 1 real thread; next, up to N shadow threads are created; then, the remaining thread count will also be real threads. The shadow threads will be distributed across the real threads as evenly as possible (round-robin, essentially) but this distribution is fixed at creation time. If a real thread stops due to an error, its shadow threads will stop also. If ShadowThreads is 3 and a 16-thread test is started, threads 0 through 12 are “real”; thread 0 is shadowed by thread 13; thread 1 is shadowed by thread 14; and thread 2 is shadowed by thread 15. If ShadowThreads is 13 and a 16-thread test is started, threads 0 through 2 are “real”; thread 0 is shadowed by threads 3, 6, 9, 12, and 15; thread 1 is shadowed by threads 4, 7, 10, and 13; and thread 2 is shadowed by threads 5, 8, 11, and 14. No attempt is made to synchronize a real thread and its shadow threads. The rule is simple: when a shadow thread is ready to issue a new I/O, it simply issues the same I/O that the real thread last issued (same type, read or write; same LBA, same number of LBAs).

CompleteReadPassAfterCompareError

CompleteReadPassAfterCompareError=0 Complete Read Pass on Compare Error 0: Disable. After a Compare Error, continue read/compare I/Os if doing I/O in passes. 1: Enable. After a Compare Error, immediately stop I/Os.

OnError

Used to select the action to take in the case of a detected error. Continue: Ignore the error, keep running StopThread: Stop only the thread on which the error occurred StopTest: Stop all threads in the test (for example, all reads) StopDevTests: Stop all threads for all tests on this device StopAllTests: Stop all threads for all tests on this port

PerfLimits

In order to avoid overwhelming a device under test, you may impose performance limits when you start a test. The limits can apply to either the entire test (all devices being tested, as a set) or to each individual device being tested. The limits can be in I/Os per second, or in megabytes per second, or both. As the test is running, the test (or the device, whichever you selected) keeps track of the current I/O issue rate and the current transfer rate, and if starting a new I/O would exceed the limits set, then that I/O is delayed, until such time as it can be issued without exceeding the set limits. These 3 values are as follows: I/Os Per Sec - Limit number of I/Os/sec to this maximum, 0 means no limit. MBs Per Sec - Limit number of MBs/sec to this maximum, 0 means no limit. Type, Per - Values are “Per Test” or “Per Device” (0 means “Per Device” and 1 means “Per Test” which is default, The current default “per test” behavior is to divide the thread count among all of the devices being tested, but if “per device” is selected, the thread count is a total for all devices under test).

Burstiness

Burstiness lower bound and type. These 2 values are as follows: Burstiness lower bound: When set to a non-zero value, this is the low-water mark at which point additional IOs will be queued. When set to the default value of 0, IOs are immediately queued when the previous IO has completed. Burstiness type: Controls whether the “Burstiness, Lower Bound” setting applies on a per test or per device basis (0 means “Per Device” which is default and 1 means “Per Test”)

VerifyWritesMode

Path Failure on Write Pass: 0: Continue - Retry any write commands interrupted by path failure. The Compare/Verify test will continue with the current write pass. 1: Verify - Stop existing write pass in the event of a path failure and begin read/compare pass when a path returns. Continue with next write pass after successful completion of read/compare pass. The Compare/Verify test will stop the write pass and will verify all writes up to the path failure, then continue. 2: Verify & Stop - Stop existing write pass in the event of a path failure, and begin read/compare pass when a path returns. Stop test upon successful completion of read/compare pass. The Compare/Verify test will stop the write pass and will verify all writes up to the path failure, then stop (instead of continuing).

VerifyAtomicWrites

VerifyAtomicWrites=0,0 Any write that was not completed yet will be subject to verification if this is enabled. Each block can be in one of two states: (1) New data that was written or (2) Old data that has not yet been written (the write did not complete). New versus old data is determined via the timestamp. If the timestamp matches, it is considered new data, and if not, old data. If the timestamp is new, the entire block must match including the portion that is not timestamped. If the timestamp doesn’t match (the data is old) then none of the rest of the data matches. After looking at the timestamp to verify if it is new or old, this command checks whether it is obeying the atomic write unit as well. These 2 values are Verify Atomic Writes enable/disable and AWU (Atomic Write Unit) size: Verify Atomic Writes enable/disable: 0 is disable which is default, 1 is enable. AWU (Atomic Write Unit) size: Atomic Write Size guides how many blocks in a row to verify if you perform writes of more than one block. For example, if you have an 8-block write and you set the Atomic Write Unit to 4 blocks, the 8-block write is verified in two chunks of four. (For NVMe, a default value of 0 uses the AWUPF value reported in Identify Controller.)

DeallocAfterCompare

Deallocate written blocks after a compare. These 3 values are dealloc_after_compare, dealloc_verify and dealloc_use_random. dealloc_after_compare: 0 is disable (if you do not want to deallocate written blocks after compare). 1 is deallocate written blocks using “DatasetMgmt : Unmap”. 2 is deallocate written blocks using “WriteZeroes/Deallocate : WriteSame/Unmap”. dealloc_verify: 0 means disable (Don’t verify deallocated blocks), 1 means “Verify All Zeroes” (Verify deallocated blocks contain all zeroes), 2 means “Verify All Ones” (Verify deallocated blocks contain all ones). dealloc_use_random: 0 means not with Multiple Descriptors (for SCSI) or With Multiple Ranges (for NVMe) to deallocate a random number of descriptors. 1 means with with Multiple Descriptors (for SCSI) or With Multiple Ranges (for NVMe) to deallocate a random number of descriptors.

TestControl

TestControl= Test Error Control: Allows users to custom configure what to do in case of various errors conditions (ignore, log, retry, fail). Multiple errors can be configured. A set of error conditions can be saved and restored to or from a named file. Error conditions are: Path Failed, Residual != 0, NVMe Status, Data Miscompare, I/O Timeout. As users add error actions, the web page builds and displays a TestControl string in the following format: Type,action,status,key,asc,ascq Type - 1 (Path failed); 2 (Residual mismatch); 3 (SCSI status); 4 (Data miscompare); 6 (I/O timeout) Action - 0 (ignore); 1 (log); 2 (retry); 3 (fail); 4 (alert) Status - for SCSI or NVMe status only, SCSI/NVMe hex status value Key - for SCSI status only, SCSI hex sense key value ASC/ASCQ - for SCSI status only, SCSI hex ASC/ASCQ value Change - apply the change. The action string can be used at the CLI (See the CLI Guide for more information.) Example of using TestControl String at the CLI: # echo TestControl=1,0;3,3,02,01,20,33 > /iportX/port This will set the control to ignore path failures and fail on SCSI check conditions with asc/ascq of 20/33

TestAlertScript

Test Error Control: Alert Script - A script that will be run upon detection of any test failure. Default is template.sh. Note: Unless the failure action is set to “Alert”, Alert script will be disabled. Example Alert Script configuration: Set Action to “Alert” and “Add”, ssh to the CLI cp /virtualun/lundata/initscriptfiles/template.sh /virtualun/lundata/initscriptfiles/template_custom.sh vi /virtualun/lundata/initscriptfiles/template_custom.sh, make modifications and put the name like below: TestAlertScript=template_custom.sh The specified alert script “template_custom.sh” will be run on a test failure.

CheckWriteOverlap

CheckWriteOverlap=0 Can be set to ensure writes are done to unique LBAs 0: None - don’t check overlap 1: Writes - check that writes don’t overlap other writes 2: Reads/Writes - check that writes don’t overlap other reads and writes

UseZApp

Enable or disable the use NVMe ZoneAppend for zone filling. Optional values: 0: Disable the use NVMe ZoneAppend for zone filling. It will use NVM Write or other writes. 1: Enable the use NVMe ZoneAppend for zone filling. It will NOT use NVM Write or other writes but use zone append instead.

UseWrVer

VerifyAfterWrite

StopAfterErrorHandling

FastExit

IOsMin

IOsMin=0 Minimum required number of I/Os per second. For example IOsMin=D, when a test ends successfully (i.e., the status would be “Passed”), then if D is not 0, the performance of the test is verified. If D is not 0, it is the minimum required number of I/Os per second; if the computed value for the test falls below D, then an error occurs and the test fails.

MBsMin

MBsMin=0 Minimum required throughput in megabytes per second. For example MBsMin=E, when a test ends successfully (i.e., the status would be “Passed”), then if E is not 0, the performance of the test is verified. If E is not 0, then it is the minimum required throughput in megabytes per second; if the computed value for the test falls below E, then an error occurs and the test fails.

LatencyLimits

LatencyLimits=0,0,0 Latency checking as each I/O completes. For example LatencyLimits=A,B,C, check whether its latency exceeds A. If so, log it to tracing, and then if B is not 0, it is a count of how many latency violations are allowed. If C is not 0, then it is a time period in seconds that limits B – there must be B violations within C seconds for an error to occur. If C is 0, then after B violations over the life of the test, an error occurs. When an error occurs, the test stops.

MiscompareLimit

OverrideNACA

OverrideFUA

OverrideLR

OverridePattern

ZoneQueueDepth

ZoneQueueDepthTimeLimit

VerifyInjectedErrors

MediaAccessTimeout

BufferOffset

UseNVMeSGLs

Any unknown configuration options in the dictionary will be ignored, and a WARNING will be issued.