ScatterGather(系统)

此项测试主要以异步方式利用 ReadFile/WriteFile/ReadFileScatter/WriteFileGather API 来验证文件系统 I/O 可靠性方案。 HLK 测试将运用预定义的自动回归变体。

测试详细信息

   
规范
  • System.Fundamentals.StorageAndBoot.BootPerformance
平台
  • Windows 10,客户端版本 (x86)
  • Windows 10,客户端版本 (x64)
支持的版本
  • Windows 10
  • Windows 10 版本 1511
  • Windows 10 版本 1607
  • Windows 10 版本 1703
  • Windows 10 版本 1709
  • Windows 10 版本 1803
  • Windows 10 版本 1809
  • Windows 10 版本 1903
  • Windows 10 的下一次更新
预计运行时间(以分钟为单位) 240
类别 方案
超时(以分钟为单位) 14400
需要重启 false
需要特殊配置 false
类型 automatic

 

其他文档

此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:

运行测试

在运行测试之前,请按照如下测试要求中所述完成测试设置:WDTF 系统基础测试先决条件

利用 I/O 完成端口以多线程方式同时执行 I/O(写入和读取),以完成 I/O。 该测试首先完成文件的 EOF 初始设置并调度 I/O 线程。 在写入文件时,该测试会在预期零或偏移量计算值的位置执行联机验证。 写入整个文件后,它将执行文件的完整验证,如果遇到零值或意外值,测试将会失败。

故障排除

有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题

有关故障排除信息,请参阅排查系统基础功能测试问题

此测试返回“通过”或“失败”。 要查看测试详细信息,请查看 Windows Hardware Lab Kit (Windows HLK) Studio 中的测试日志。

详细信息

支持的测试模式:

我们预期大多数用户都会使用预定义的回归变体。

“默认”、“回归”(预定义的变体)和“压力”表示特定类型的失败,例如虚拟分配重试等。对于默认模式,如果用户不希望手动提供参数,有一个 flagsauto 标志可用于管理大部分参数。 此外,默认和压力模式还支持计时器功能。 对于回归模式,有一个预定义的计时器变体。

支持的读取/写入模式:

读取/写入模式:

  • RW(读取,写入)

  • RWG(读取,聚集写入)

  • RSW(分散读取,写入)

  • RSWG(分散读取,聚集写入)

  • RRW(随机读取,写入)

  • RRWG(随机读取,聚集写入)

  • RWR(读取,随机写入)

  • RSWR(分散读取,随机写入)

  • RRWR(随机读取,随机写入 - 大约 50% 分散/聚集)-> 默认

  • RRWR7(随机读取,随机写入 - 大约 30% 分散/聚集)

  • RRWR3(随机读取,随机写入 - 大约 70% 分散/聚集)

此外,该测试支持反向读取和反向写入。

I/O 限制机制:

支持受控 IO 请求的 上 & 低阈值还可以使用旁路模式 ,这实质上是使用 I/O 来爆破系统。

数据模式:

计算出的简单偏移量字母值。 不过,对于计时器变体,可能存在漏洞。

数据验证模式:

支持联机(与写入同时验证)、完整检查(在所有写入完成后)和脱机验证模式。 可以关闭/打开所有这些模式。 如果关闭联机验证,则在初始阶段实质上只会发生写入,之后将执行完整检查。

联机验证和完整检查的差别在于,完整检查只会在单个线程完成所有写入后进行,而联机验证则在写入期间同时完成,在此期间需要零值或计算出的偏移量值,而完整检查只需要计算出的偏移量值。

命令用法

命令 说明

ScatterMultiThread.exe -default -rwmode:rw -iomode:sync

使用默认文件大小在同步模式下执行读写 IO。

ScatterMultiThread.exe -default -rwmode:RSWG -RR -RER:2 -TESTPATH:d:\Scatter -FILESIZE:500m

在使用随机偏移量和反向读取指定的测试路径中执行完整的分散聚集,文件大小为 500m。

ScatterMultiThread.exe -default -rwmode:RRWR -FILESIZE:2g -IODIFFUPPERTHRESHOLD:500 -IODIFFLOWERTHRESHOLD:100

使用 I/O 上限和下限阈值执行 50% 的分散聚集 IO,文件大小为 2GB

ScatterMultiThread.exe -regression -regression:6

执行预定义的回归变体 6。

ScatterMultiThread.exe -stress -RWMODE:rrwr -THREADS:2 -BS:100k

在压力模式下使用 2 个读取器和 2 个写入器线程执行分散聚合,I/O 块大小为 100k

ScatterMultiThread.exe -default -FILE:timer.dat -timer:19s -FILESIZE:5g -ONLINEVERIFY:FALSE

计时器模式读写非缓冲 I/O,无 OnlineVerify 模式。

ScatterMultiThread.exe -default -OFFLINEVERIFY -FILE:timer.dat -FULLCHECK:FALSE -ALLOWZERO4VERIFY

在禁用完整检查的情况下使用 AllowZero4Verify 模式对上述变体进行脱机验证。

 

命令语法

命令选项 说明

ScatterMultiThread.exe

下面列出了此测试的命令行选项。

-help 或 /?

显示帮助。

-default

在命令行中使用测试参数运行默认变体。

-stress

压力模式。 发生内存分配失败等情况时重试。

-regression

回归模式。 运行预定义的回归模式。

-testpath

文件的完整路径。

默认值:CWD

-file

testpath 中的文件,或文件的完整路径。

默认值:Scatter.dat

-filesize

文件大小,以字节为单位。 还可以追加 k、m、g 或 t。

默认值:1m

-threads

读取器和写入器独占线程的数量。

默认值:2

-completionthreads

完成线程的数量。

默认值:处理器数量的两倍

-rwmode

读取/写入模式:

  • RW(读取,写入)

  • RWG(读取,聚集写入)

  • RSW(分散读取,写入)

  • RSWG(分散读取,聚集写入)

  • RRW(随机读取,写入)

  • RRWG(随机读取,聚集写入)

  • RWR(读取,随机写入)

  • RSWR(分散读取,随机写入)

  • RRWR(随机读取,随机写入 - 大约 50% 分散/聚集)-> 默认

  • RRWR7(随机读取,随机写入 - 大约 30% 分散/聚集)

  • RRWR3(随机读取,随机写入 - 大约 70% 分散/聚集)

-iomode

同步或异步

默认值:async

-flagsauto

TRUE 或 FALSE

默认值:TRUE

注意  

根据情况自动管理特定的文件标志

 

-ffnb

TRUE 或 FALSE

默认值:FALSE

注意  

FILE_FLAG_NO_BUFFERING 在某些情况下(例如分散/聚集)会自动打开。

 

-ffss

TRUE 或 FALSE

默认值:FALSE

注意  

FILE_FLAG_SEQUENTIAL_SCAN 在某些情况下(例如序列化 I/O)会自动打开。

 

-ffra

TRUE 或 FALSE

默认值:FALSE

注意  

FILE_FLAG_RANDOM_ACCESS 在某些情况下(例如随机 I/O)会自动打开。

 

-ffwt

TRUE 或 FALSE

默认值:FALSE

注意  

除非手动指定,否则 FILE_FLAG_WRITE_THROUGH 不会自动打开。

禁用 FLAGSAUTO 标志以单独管理文件标志和属性。

FLAGSAUTO 行为将根据其他参数(例如共享文件句柄或反向 I/O 等)而变化。

如果文件系统不支持缓存 I/O,并且 FFNB 不受文件系统支持或未指定,则 FFSS 和 FFRA 标志无效。

FFSS 和 FFRA 标志是互斥的,不能结合使用,否则会适得其反。

 

-bs

块大小,以字节为单位。 可以追加 k、m、g、t。

默认值:64k

-bypass

绕过 I/O 阈值等待。 可以是 TRUE 或 FALSE。

默认值:FALSE

-nsegments

分散/聚集的段数组大小。

默认值:16

注意  

对于分散/聚集,此选项在某些情况下会自动更正

 

-totalsleep

失败的虚拟分配或 I/O 阈值方案的总睡眠时间。

默认值:30 分钟

-sleepint

失败的虚拟分配方案的循环睡眠间隔

默认值:2 分钟

-iodifferupperthreshold

发出 I/O 请求的上限阈值。

默认值:1000

-iodifflowerthreshold

下限阈值,在 I/O 差异低于此数字后,将恢复请求的 I/O。

默认值:100

注意  

此选项与绕过模式互斥,如果打开了绕过模式,则会忽略此选项。

 

-wfw

writer(WFW) 标志在任何读取发生之前等待 WriterThreads 完成。 此选项可为 true 或 false。

默认值:FALSE

-rr

随机偏移读取 (RR) 选项使 ReaderThreads 从随机偏移位置开始。 此值可为 true 或 false。

默认值:TRUE

-rw

随机偏移写入 (RW) 选项使 WriterThreads 从随机偏移位置开始。 此值可为 true 或 false。

默认值:FALSE

-rer

从起始偏移位置反向读取。 此值可为 0、1 或 2。

默认值:2

-rew

从起始偏移位置反向写入。 此值可为 0、1 或 2。

默认值:0

注意  

对于 RER 和 REW 标志,0 表示非反向,1 表示直接反向,2 表示随机反向(并非始终应用)。

对于 RER 和 REW 标志,完整文件 I/O 可能无法完成,报告的统计信息和结果可能不准确。

 

-timer

计时器模式(以秒为单位)。 可以追加 s、m、h。

默认值:0

这会不断执行 I/O,直到计时器过期。

-timerloop

计时器循环间隔(以秒为单位)。 可以追加 s、m、h。

默认值:与 timer 选项相同

注意  

timer 选项仅用于发出请求,但请求仍会完成(没有计时器适用于完成)。

 

-onlineverify

在联机模式下发出写入请求后验证文件的内容。

默认值:TRUE

-offlineverify

通过重新运行测试,在脱机模式下验证文件的内容。

默认值:FALSE

-allowzero4verify

允许使用零作为完整验证的一部分(脱机或联机)。

默认值:FALSE

-onlyzero4verify

允许使用零作为完整验证的一部分(脱机或联机)。

默认值:FALSE

-sharedfh

允许对所有 I/O 使用相同的文件句柄。

默认值:FALSE

-regression

回归变体。 此值可以是 - 1 - 10 或 1001(表示所有变体)

默认值:0(无回归)

-displayprogress

显示 I/O 进度(以秒为单位),可以追加 s、m、h

默认值:2m

-fullcheck

在完成联机或脱机验证后对数据进行完整验证。

默认值:true

-dbgcheck

在失败时强行进入内核调试器。 此值可为 true 或 false。

默认值:true

-toleratesurpriseremove

在发生 SurpriseRemove 失败时不强行进入内核调试器。 此值可为 true 或 false。

默认值:false

-toleraterepair

在发生修复失败时不强行进入内核调试器。 此值可为 true 或 false。

默认值:false

-toleratefailio

在发生 FailIO 失败时不强行进入内核调试器。 此值可为 true 或 false。

默认值:false

-exitonerror

发生失败时退出。 此值可为 true 或 false。

默认值:False

注意

   如需此项测试的命令行帮助,请键入“/?”。

 

文件列表

文件 位置

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\

 

参数

参数名称 参数说明
LLU_NetAccessOnly
TEST_PATH