NVMe 解除分配测试(徽标)
此测试检查在 NVMe 控制器驱动器上的 Deallocate 命令的合规性。
测试详细信息
规范 |
|
平台 |
|
支持的版本 |
|
预计运行时间(以分钟为单位) | 2 |
类别 | 开发 |
超时(以分钟为单位) | 120 |
需要重启 | false |
需要特殊配置 | false |
类型 | automatic |
其他文档
此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:
运行测试
在运行测试之前,请按照如下测试要求中所述完成测试设置:硬盘驱动器测试先决条件。
此测试要求连接 NVMe 控制器驱动器。 驱动器还必须满足以下要求:
驱动器应为非启动驱动器。 测试具有破坏性。 将用正确的分区和格式化准备磁盘,以进行测试。
驱动器必须支持 Deallocate (Trim/Unmap/Discard) 命令。 该测试将使用 DATA SET MANAGEMENT Trim 命令发送 Deallocate 命令。
确保有单独的驱动器可以用作记录器驱动器。 测试将自动选取日志记录驱动器。 尽可能减少驱动器上发生徽标测试范围外的活动非常重要。 由于这是性能测试,因此范围外的活动可能会影响结果。
故障排除
有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题。
检查 WTT 跟踪
查看运行修整性能测试的任务日志。
打开日志文件 TrimPerf.wtl。
检查可能解决问题的消息。
复制 .wtl 日志文件。 这是 WTT 跟踪部分所述的 WTT 跟踪。
检查启动的命令的结果
浏览修整性能测试(徽标)的作业日志。
打开 LaunchCommand.result。
如果错误与启动某个进程相关,请确定 logman 或 tracerpt 失败的原因。
未找到指标
此测试依赖于启用 Storport ETW 跟踪以获取命令完成指标。 有关启用此跟踪的详细信息,请参阅“ETW 跟踪”一节。
请确保当前没有其他 Storport ETW 跟踪正在日志记录。 一次只能有一个 Storport ETW 跟踪处于活动状态。
如果收到错误消息“测试驱动器不支持 trim/unmap/deallocate/discard”,请尝试以下操作:
检查 NVMe 驱动器,确保 VPD B2h 页的 LBPU 位设置为 1。
尝试通过 DATA SET MANAGEMENT 的 Trim 命令发送 Deallocate 命令。
再次运行测试。
测试失败,出现“不匹配”错误
此测试会发送 Deallocate 命令并验证已解除分配区域中的内容。 它会检查以下三种方案。 如果所有方案都失败,则会报告错误。
以前的数据:Deallocate 命令未对该区域执行任何操作。
所有 0x00:Deallocate 命令将所有 0x00 都写入到该区域。
所有 0xFF:Deallocate 命令将所有 0xFF 都写入到该区域。
此测试会输出一个冲突的位置。 检查冲突偏移量时,请使用日志文件中输出的偏移量加上冲突的字节偏移量。
例如,在日志文件中,它会输出:
检查以前的数据:字节 X 处不匹配;预期:0x3D,实际:0xFF
剪裁验证检查在偏移量为 Y 且长度为 Z 的位置失败
因此,冲突字节的偏移量为 X + Y(以字节为单位)。
测试失败,出现“找到重置事件”消息
Deallocate 命令不应导致磁盘重置事件。 如果发生此类错误,请检查 NVMe deallocate 命令的实现。
如果想要通过运行特定测试用例来调试失败,可以尝试以下命令行选项:
用编号显示所有测试用例:TrimPerf.exe /DriveNumber [StorageDriveNumber] /LogDriveLetter [LoggerDriveLetter]: /DeviceType NVMe /Scenario Compliance /PrintTestCaseName
按测试用例编号运行特定测试用例:TrimPerf.exe /DriveNumber [StorageDriveNumber] /LogDriveLetter [LoggerDriveLetter]: /Scenario Compliance /Precondition F /TestCase [TestCaseNumber]
如果想要更快地调试失败,请尝试通过添加 /Precondition F 参数来禁用预处理(将驱动器填满到 90%,时间较长),如下所示:
- TrimPerf.exe /DriveNumber [StorageDriveNumber] /LogDriveLetter [LoggerDriveLetter]: /DeviceType NVMe /Scenario Complaince /DiskSize 0 /Cooldown 2 /Precondition F
如需更多故障排除信息,请参阅排查 Device.Storage 测试问题。
更多信息
此测试将评估以下指标:
Deallocate 命令
所有 Deallocate 命令都应在解除分配的区域上写入所有 0x00 或 0xFF 数据或以前的数据。
Deallocate 命令不应引发磁盘重置事件。
IO 命令(在不同区域同时进行 Deallocate 发送)
- Deallocate 命令不应影响读/写操作的正确性。
手动重现步骤
打开注册表编辑器,导航到以下路径:HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Enum-> SCSI -> Disk&Ven_[受测 NVMe 驱动器(非控制器)的名称] -> [设备实例路径] -> 设备参数 -> Storport
右键单击“Storport”,再单击“新建”,然后单击“DWORD (32 位)值”。
将项命名为 EnableLogoETW,并将值设置为 1。
将受测驱动器再次插入系统,或重启计算机以启用注册表项。
将 TrimPerf.exe、EtwProcessor.dll、Wex.Common.dll 和 Wex.Communication.dll 文件复制到本地计算机。
运行命令行。
命令语法
命令 | 说明 |
---|---|
TrimPerf.exe /DriveNumber [StorageDriveNumber] /LogDriveLetter [LogDriveLetter]: /DeviceType StorConsumer /Scenario Performance /DiskSize 0 /Cooldown 2 |
|
运行测试。 |
注意
有关此测试二进制文件的命令行帮助,请键入 /h。
文件列表
文件 | 位置 |
---|---|
TrimPerf.exe |
<[testbinroot]>\nttest\driverstest\storage\wdk\ |
Etwprocessor.dll |
<[taefbinroot]>\ |
Wex.common.dll |
<[taefbinroot]>\ |
Wex.communication.dll |
<[taefbinroot]>\ |
参数
参数名称 | 参数说明 |
---|---|
WDKDeviceID | 要测试的设备的实例路径。 |
LLU_NetAccessOnly | 用于访问测试文件共享的用户帐户。 |
LLU_LclAdminUsr | 用于运行测试的用户帐户。 |
Destructive | (0,1) 0=被动,1=破坏性 |
StorageDriveNumber | 存储驱动器号 |