故障转储支持测试(徽标)

此测试验证 Windows 上的存储器微型端口驱动程序是否支持在出现发生系统停止错误后创建内存转储文件。

测试详细信息

   
规范
  • System.Fundamentals.StorageAndBoot.BootPerformance
  • Device.Storage.Controller.Boot.BasicFunction
  • System.Server.Base.ServerRequiredComponents
平台
  • Windows 10,客户端版本 (x86)
  • Windows 10,客户端版本 (x64)
  • Windows Server 2016 (x64)
  • Windows 10,客户端版本 (Arm64)
支持的版本
  • 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 的下一次更新
预计运行时间(以分钟为单位) 45
类别 方案
超时(以分钟为单位) 2700
需要重启 false
需要特殊配置
类型 automatic

 

其他文档

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

运行测试

在运行测试之前,请完成要测试的存储控制器类型的测试要求中所述的测试设置。 有关详细信息,请参阅存储器适配器或控制器测试概述

此测试需要其他软件和硬件:

  • 要测试的设备

  • 分区 C: 具有至少 20 GB 可用空间的硬盘驱动器。

在运行测试之前,还必须完成以下先决条件:

  • 如果测试系统具有 Internet 连接,则无需执行任何操作。

    如果测试系统没有 Internet 连接,请创建名为 C:\Symbols 的文件夹,然后下载并 Windows 操作系统符号。 为此,请按照下列步骤进行操作:

    注意

       分析转储文件需要符号。 安装符号失败是导致此测试失败的最常见测试设置问题。 符号的版本必须与测试计算机上安装的操作系统版本匹配。 因此,它必须下载到工具包外部。

     

    1. 在具有 Internet 连接的计算机上,下载 Windows 符号包。 有关详情,请参阅下载 Windows 符号包

    2. 将符号文件复制到测试计算机上的 C:\Symbols 文件夹中。 由于符号可能很大,因此只需复制适用于 x64 的 ntkrnlmp.pdb (或适用于 x86) 的 Arm) 或 ntkrpamp.pdb (。

故障排除

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

有关故障排除信息,请参阅排查 Device.Storage 测试问题

  • 测试日志错误消息“无法加载正确的符号”

    重新启动后,测试会检查转储文件是否正确。 与开发人员一样,此测试通过使用内核调试程序 kd 来执行该检查(请参阅下载并安装适用于 Windows 的调试工具)。 要分析转储文件,调试程序需要访问符号(请参阅符号文件)。 这是转储的字典。 它们使调试程序可以将内存(或故障转储文件)的内容分析到各个模块(可执行文件、库和驱动程序等)、这些模块中的函数和数据结构中。 通常,如果无法使用内核调试程序来检查转储文件,则测试无法通过。

    要使测试正常工作,它需要为调试程序提供符号。 当没有正确的符号时,它将记录在测试的第一个分析阶段的记录失败期间的警告。 执行此操作的当前机制是下载并安装公共符号包(请参阅下载 Windows 符号包),并在运行测试之前将其安装在测试计算机上。 未安装符号或符号与受测操作系统不匹配时,测试日志中可能会显示以下消息:

    • (x) 无法加载正确的符号。

    • (i) 请参阅 WDK 文档,了解如何安装操作系统符号。

    • (i) 你的符号也可能已过期,请使用 Microsoft 符号服务器更新符号。

    此消息实际上不会导致测试失败,因为在某些情况下,仍可使用部分匹配的符号来分析转储。 如果测试继续进行,并且更多测试用例失败,并显示“检索地址时出错”或“无法获取...”等消息,则意味着调试程序无法分析转储,因为缺少符号。 解决符号问题的其中一种方法是使用从 Internet 符号服务器缓存的符号来补充安装在本地的符号包。 按照以下步骤在本地缓存符号:

    1. 确保已创建故障转储。 执行此操作的最简单方法是运行测试一次,并让它失败。

    2. 确保已安装调试工具。 同样,执行此操作的最简单方法也是运行测试一次。 它会将工具安装到 C:\Debuggers。

    3. 打开权限提升的命令提示符。

    4. 键入以下命令 c:\Debuggers\kd -z c:\Windows\MEMORY.DMP -y SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols

    5. 这会使用 Microsoft 的远程符号存储将转储加载到内核调试程序中,并将本地目录 C:\Symbols 用作下游存储来缓存符号。

    6. 确保可以找到 NTOSKRNL 和 NTDLL 等操作系统文件的符号。 分析转储需要这些文件。 如果加载其他模块(例如第三方驱动程序)的符号时显示错误,也没问题。

    7. 现在应有一个 0: kd> 的提示。 在此命令提示符下键入命令 .reload /f。 此命令会强制调试程序加载并缓存转储中加载的模块的所有符号。

    8. 要退出调试程序,请按 Ctrl-B,然后按 Enter。

  • 测试日志错误消息“分页文件大小太小,无法进行完全转储”

    发生崩溃时,无法确定操作系统的哪些部分仍可正常运行。 网络或文件系统驱动程序可能导致了崩溃;例如,阻止访问文件系统结构以创建转储文件,或者阻止访问网络以远程存储文件。 操作系统通过使用已知存在的文件(页文件)来解决此问题,并直接写入到磁盘上该文件的逻辑块盘区。 转储过程会将物理内存的内容写入到系统磁盘上的页文件(通常为 c:\pagefile.sys)。 该页文件必须足够大,以容纳转储。 最大的转储是一个完整的转储,它需要物理内存的大小(例如 4096)加上额外的一兆字节来容纳标头信息。 此测试要求用户在执行前将页文件配置为适当的大小。 如果页文件大小不足,此测试将在初始化阶段记录以下错误:

    • (i) 正在验证分页文件大小。

    • (x) 分页文件太小,无法进行完全转储。

    • (i) 分页文件大小:330989568

    • (i) 物理内存大小:1073094656

    • (i) 请将最小分页文件大小配置为物理 RAM 大小 + 1MB。

  • 我看到系统停止错误(蓝屏),但 Bug 检查代码不是 E2

    在一些基本设置验证后,此测试将安装一个驱动程序,该驱动程序用于使系统崩溃并重新启动系统。 重新启动后,此测试将更改故障控制设置(对于完全内存转储),删除任何旧的转储文件,并使系统崩溃。 在崩溃时,系统将显示一个 Bug 检查屏幕(蓝屏),其中包含故障性质的详细信息。 Bug 检查的类型应为 MANUALLY_INITIATED_CRASH (e2)。 如果此处出现任何其他内容,则意味着在写入转储文件的过程中发生了第二次 Bug 检查。 应该通过将内核调试程序连接到测试客户端并调试存储适配器驱动程序,来对此进行调查。

  • 测试日志错误消息“转储文件正由另一个进程使用。 HRESULT: 0x80070020”

    写入转储文件后,测试计算机应会自动重新启动。 在崩溃后启动时,操作系统将检测页文件中是否存在转储信息,并开始写入转储。 此过程在计算机启动时异步进行,甚至会在用户登录后进行。 在此过程中,可以通过检查转储文件 (C:\windows\memory.dmp) 的大小或在任务管理器中查看进程 (werfault.exe),来查看进度。 此测试通常与该过程同时运行,并且会尝试访问同一个转储文件。 如果发生这种情况,日志中将显示以下消息:

    • (i) 正在连接到以下转储文件:C:\Windows\MEMORY.DMP

    • (i) 转储文件正由另一个进程使用。 HRESULT: 0x80070020

    • (i) 由于 RAM 较大,memory.dmp 通常仍在写入,请在 5 分钟后重试。

    然后,测试应重试访问该文件。 如果错误消息代码与此不同或已更改(例如 0x80070002: ERROR_FILE_NOT_FOUND),则意味着文件无法写入到磁盘。 首先要查看系统事件日志,以获取有用的调试信息。 要查看事件日志,请依次单击“开始”和“运行”,然后键入“Compmgmt.msc”。 在“计算机管理”窗口中,选择“计算机管理”>“系统工具”>“事件查看器”>“系统”。 浏览事件列表,查找具有源 Bug 检查的事件。 转储文件缺失的最常见原因是磁盘上的可用空间不足。 注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\MachineCrash 包含有关重新启动前最后一次崩溃的信息,包括部分转储文件(如果已创建)。 在尝试调试其他转储缺失问题时,此注册表项非常有用。

更多信息

故障转储是一种机制,在此机制中,操作系统在发生系统停止错误后调用存储适配器驱动程序,以将内存到内容写入到转储文件。 由于系统停止错误的性质,操作系统无法对系统稳定性做出任何假设。 因此,存储驱动程序可使用的系统服务很少。 故障转储支持测试用于验证存储适配器驱动程序在这些受约束的环境中是否仍可运行,并执行 I/O 以成功写入到转储。

Windows 操作系统允许生成三种不同类型的内存转储文件:

  • 完全

  • 内核

  • 小型

此测试将测试内核和微型转储文件类型。 有关这些转储文件类型的更多详细信息,请参阅内核模式转储文件

此测试将完成以下操作序列:

  1. 将适用于 Windows 到调试工具安装到 %SystemDrive%\Debuggers 目录,并初始化系统。

  2. 安装测试驱动程序以模拟故障。

  3. 设置页文件大小。

  4. 使用 Bug 检查代码 0x000000E2 模拟系统停止错误(蓝屏)。

  5. 重新启动系统并自动重启测试。

  6. 通过使用内核调试程序分析内存转储文件来检查以前的故障,并验证转储是否已正确写入。

  7. 对每种转储文件类型重复步骤 4 到 6。

命令语法

命令 说明

Crashdumptest.exe -c

清除任何过去的失败。

crashdumptest.exe -dtm -y [SymbolsDirectory] -ypass

初始化测试。

crashdumptest.exe -autorun -y [SymbolsDirectory] -dtm"

运行测试。

 

文件列表

命令选项 说明

Crashdumptest.exe

[TestBinRoot]\nttest\driverstest\storage\wdk\

BugCheck.sys

[TestBinRoot]\nttest\driverstest\storage\wdk\

 

参数

参数名称 参数说明
DebuggerDirectory 要将调试程序安装到的目录。
SymbolsDirectory 已将符号安装到的目录。
LLU_LclAdminUsr 用于运行测试的用户帐户。
LLU_NetAccessOnly 用于访问测试文件共享的用户帐户。
PagefileSize 页文件大小(以 MB 为单位,支持“内存+N”格式)