ScatterGather (SYSTEM)
This test validates file system I/O reliability scenarios, primarily asynchronously, utilizing the ReadFile/WriteFile/ReadFileScatter/WriteFileGather APIs. HCK tests exercises predefined automated regression variations.
Test details
Associated requirements |
System.Fundamentals.StorageAndBoot.BootPerformance |
Platforms |
Windows RT (ARM-based)
|
Expected run time |
~240 minutes |
Categories |
Certification |
Type |
Automated |
Running the test
Before you run the test, complete the test setup as described in the test requirements: WDTF System Fundamentals Testing Prerequisites.
Simultaneously performs I/O (both writes and read) in a multi-threaded fashion utilizing I/O completion ports to complete the I/O. It will start out by initially setting the EOF of the file and scheduling the I/O threads. While the file is being written, it performs online verification where it expects zero or offset computed value. Once the entire file has been written, it performs full verification of the file and will fail the test if zero or an unexpected value is encountered.
Troubleshooting
For troubleshooting information, see Troubleshooting System Fundamentals Testing.
This test returns Pass or Fail. To review test details, review the test log from Windows Hardware Certification Kit (Windows HCK) Studio.
More information
Supported test modes:
We expect most users to use predefined regression variations.
Default, Regression (predefined variations) and stress indicate certain types of failures, such as Virtual Alloc retries etc. For default mode, there is a flagsauto flag which manages most of the parameters if the user doesn't want to supply the parameters manually. In addition timer functionality is supported with default and stress modes. For regression mode, there is a pre-defined timer variation.
Supported read/write modes:
Read/Write mode:
-
RW( Read, Write)
-
RWG( Read, Write Gather)
-
RSW( Read Scatter, Write)
-
RSWG( Read Scatter, Write Gather)
-
RRW( Random Read, Write)
-
RRWG( Random Read, Write Gather)
-
RWR( Read, Random Write)
-
RSWR( Read Scatter, Random Write)
-
RRWR( Random Read, Random Write - Approx. 50% Scatter/Gather) -> Default
-
RRWR7( Random Read, Random Write - Approx. 30% Scatter/Gather)
-
RRWR3( Random Read, Random Write - Approx. 70% Scatter/Gather
Additionally, the test supports Reverse Read and Reverse Write.
I/O Throttle Mechanism:
Supports Upper & Lower threshold for controlled IO requests. Bypass mode is also possible which essentially blasts the system with I/O.
Data Pattern:
Simple Offset computed alphabetic value. For timer variation, there can be holes though.
Data Validation Modes:
Supports both online (simultaneous validation along with writes), fullcheck (which is after all write’s completed), and offline verification modes. All these modes can be turned off/on. If online verification is turned off, essentially only writes are happening during the initial phase after which fullcheck will be performed.
Difference between Online and Full check is that full check is only done after all the writes are completed by single thread while online verification is done simultaneously during the writes and during, which it either expects zero or offset computed value, unlike fullcheck where it only excepts offset computed value.
Command usage
Command | Description |
---|---|
ScatterMultiThread.exe -default -rwmode:rw -iomode:sync |
Perform Read Write IO in Sync mode with default file size. |
ScatterMultiThread.exe -default -rwmode:RSWG -RR -RER:2 -TESTPATH:d:\Scatter -FILESIZE:500m |
Perform full Scatter Gather, 500m file, in the testpath specified with random offset and reverse read. |
ScatterMultiThread.exe -default -rwmode:RRWR -FILESIZE:2g -IODIFFUPPERTHRESHOLD:500 -IODIFFLOWERTHRESHOLD:100 |
Perform 50% Scatter Gather IO 2GB file with I/O upper and lower threshold |
ScatterMultiThread.exe -regression -regression:6 |
Perform pre-defined regression variation 6. |
ScatterMultiThread.exe -stress -RWMODE:rrwr -THREADS:2 -BS:100k |
Perform scatter gather in stress mode with 2 reader and 2 writer threads with I/O block size of 100k/ |
ScatterMultiThread.exe -default -FILE:timer.dat -timer:19s -FILESIZE:5g -ONLINEVERIFY:FALSE |
Timer mode ReadWrite Unbuffered I/O and no OnlineVerify mode. |
ScatterMultiThread.exe -default -OFFLINEVERIFY -FILE:timer.dat -FULLCHECK:FALSE -ALLOWZERO4VERIFY |
Offline verification of the above variation with fullcheck disabled and AllowZero4Verify mode. |
Command syntax
Command option | Description | ||
---|---|---|---|
ScatterMultiThread.exe |
The command line options for the test are listed below. |
||
-help or /? |
Displays help. |
||
-default |
Runs the default variation with test parameters from the command-line. |
||
-stress |
Stress mode. Retries the memory allocation failures, etc. |
||
-regression |
Regression mode. Runs the predefined regression mode. |
||
-testpath |
Full path to the file. Default value: CWD |
||
-file |
File in the testpath or full path to the file. Default value: Scatter.dat |
||
-filesize |
File size in bytes. You can also append k, m, g, or t. Default value: 1m |
||
-threads |
Number of exclusive reader and writer threads. Default value: 2 |
||
-completionthreads |
The number of completion threads. Default value: Twice the number of processors |
||
-rwmode |
Read/write mode:
|
||
-iomode |
sync or async Default value: async |
||
-flagsauto |
TRUE or FALSE Default value: TRUE
|
||
-ffnb |
TRUE or FALSE Default value: FALSE
|
||
-ffss |
TRUE or FALSE Default value: FALSE
|
||
-ffra |
TRUE or FALSE Default value: FALSE
|
||
-ffwt |
TRUE or FALSE Default value: FALSE
|
||
-bs |
Block Size in bytes. You can append k, m, g, t. Default: 64k |
||
-bypass |
Bypasses the I/O Threshold wait. This can be either TRUE or FALSE. Default value: FALSE |
||
-nsegments |
The segment array size for Scatter/Gather. Default value: 16
|
||
-totalsleep |
The total sleep time for failed virtual allocation or I/O threshold scenarios. Default value: 30 minutes |
||
-sleepint |
The loop sleep interval for failed virtual allocation scenarios Default value: 2 minutes |
||
-iodifferupperthreshold |
The upper threshold for issuing I/O requests. Default value: 1000 |
||
-iodifflowerthreshold |
The lower threshold to resume I/O requested after I/O diff falls below this number. Default value: 100
|
||
-wfw |
The writer(WFW) flag waits for WriterThreads to be done before any read happens. This option can be either true or false. Default value: FALSE |
||
-rr |
The random offset read (RR) option makes ReaderThreads starts at a random offset. This value can be either true or false. Default value: TRUE |
||
-rw |
The random offset write (RW) option makes WriterThreads start at random offset. This value can be either true of false. Default value: FALSE |
||
-rer |
The reverse read from starting offset. This value can be either 0, 1, or 2. Default value: 2 |
||
-rew |
The reverse write from starting offset. This value can be either 0, 1, or 2. Default value: 0
|
||
-timer |
Timer mode (in seconds). You can append s, m, h. Default value: 0 This performs I/O until the timer has expired. |
||
-timerloop |
The timer loop interval (in seconds). You can append s, m, h. Default value: same as the timer option
|
||
-onlineverify |
Verifies the contents of the file after issuing write requests in online mode. Default value: TRUE |
||
-offlineverify |
Verifies the contents of the file in offline mode by rerunning the test again. Default value: FALSE |
||
-allowzero4verify |
Allows a zero to be part of the full verify (OFFLINE or ONLINE). Default value: FALSE |
||
-onlyzero4verify |
Allows a zero to be part of the full verify(OFFLINE or ONLINE). Default value: FALSE |
||
-sharedfh |
Allows the same file handle to be used for all I/O. Default value: FALSE |
||
-regression |
The regression variation. This value can be either – 1 - 10, or 1001(refers to all variations) Default value: 0 (no regression) |
||
-displayprogress |
Display I/O progress (in seconds), You can append s, m, h, Default value: 2m |
||
-fullcheck |
Full verification of the data after the online or offline verify. Default value: true |
||
-dbgcheck |
Breaks into a kernel debugger on failure. This value can be either true or false. Default value: true |
||
-toleratesurpriseremove |
Do not break into a kernel debugger on a SurpriseRemove failure. This value can be either true or false. Default value: false |
||
-toleraterepair |
Do not break into a kernel debugger on a repair failure. This value can be either true or false. Default value: false |
||
-toleratefailio |
Do not break into a kernel debugger on a FailIO failure. This value can be either true or false. Default value: false |
||
-exitonerror |
Exit on a failure. This value can be either true or false. Default value: False |
Note |
---|
For command-line help for this test, type /?. |
File list
File | Location |
---|---|
ScatterMultiThread.exe |
<[testbinroot]>\NTTest\BASETEST\core_file_services\NTFS\ScatterGather\ |
ntlog.dll |
<[osbinroot]>\NTTest\CommonTest\NtLog\ |
ntlogger.ini |
<[osbinroot]>\NTTest\CommonTest\NtLog\ |
stresslog.dll |
<[osbinroot]>\basetest\core_file_services\shared_libs\ |
fbslog.dll |
<[osbinroot]>\basetest\core_file_services\shared_libs\fbslog\ |