2 分钟阅读 次阅读

概要:本文介绍了 Google 开发的高性能内存压力测试工具 stressapptest 的原理及使用方法,并通过示例对其测试结果进行分析,帮助开发者识别并判断 DDR 内存硬件稳定性问题。

1. 简介

注意,本文只讲解 stressapptest 方法,具体的 DDR 定频测试还需另外定频 DDR,并运行 glmark2 等有 GPU 或 NPU 持续运行的应用。

stressapptest 是一个由 Google 开发的高性能、专业性强的内存和存储子系统压力测试与稳定性验证工具。

其核心设计理念是:

模拟实际应用中复杂的内存访问模式,以在短时间内发现内存、总线和存储设备的深层硬件错误。

与传统的“填满内存”工具不同,stressapptest 采用多种科学的内存访问模式:

  • 随机访问
  • 顺序访问
  • 块移动
  • 缓存行冲刷

这些模式可以更真实地模拟数据库、科学计算等应用对内存子系统(包括 CPU 缓存、内存控制器、内存条本身)造成的压力。

1.1 数据完整性校验

这是 stressapptest 最核心、最强大的功能:

  • 向内存中写入已知模式的数据
  • 在后续的读写循环中不断校验读取到的数据是否与预期一致

1.2 与 stress 工具对比

工具 特点说明
stressapptest 写入-校验循环。写入已知模式数据,之后操作都包含读取和校验,主动探测错误
stress 分配-访问-释放循环。主要目的是消耗内存资源并制造内存压力

从原理上来说,stressapptest 的测试更为深入。
有些 stress 测不出来的问题,使用 stressapptest 就可以测出来。


2. 使用方式

2.1 查看可用内存

free -m

2.2 启动测试命令

建议将可用内存的 90% 用于测试:

stressapptest -s 43200 -i 4 -C 4 -W --stop_on_errors -M 3084

2.3 参数说明

参数 含义 您的设置分析
-s 43200 测试时间(秒) 12 小时,深度稳定性测试
-i 4 内存反转线程数 4 线程,匹配 4 核 CPU
-C 4 CPU 压力线程数 4 线程,匹配 4 核 CPU
-W 高压力模式 增加 CPU 和内存压力
--stop_on_errors 遇错即停 发现错误立即停止
-M 3084 测试内存量(MB) 约 3GB,为系统保留部分内存

2.4 测试技巧

  • 一般来说,如果ddr有问题,1min以内便会报告问题。短时间测不出问题,可以打断并重新运行命令,问题会比较容易测出来。
  • 对于测出问题的ddr,也多次运行命令,查看物理地址是否一致,协助问题判断(参考3.3)

3. 结果分析

3.1 错误输出示例

2026/01/14-09:25:18(UTC) Report Error: miscompare : DIMM Unknown : 1 : 7s
2026/01/14-09:25:18(UTC) Hardware Error: miscompare on CPU 2(0xFF) at 0x7d3e623b68(0x2acad2b6e:DIMM Unknown): read:0x0000a55a5aa5a55a, reread:0x0000a55a5aa5a55a expected:0x5aa5a55a5aa5a55a
...
2026/01/14-09:25:18(UTC) Log: Thread 24 found 1568 hardware incidents
2026/01/14-09:25:18(UTC) Stats: Found 55673 hardware incidents
2026/01/14-09:25:18(UTC) Stats: Completed: 46710.00M in 4.35s 10735.94MB/s, with 55673 hardware incidents, 0 errors
...
2026/01/14-09:25:18(UTC) Status: FAIL - test discovered HW problems

3.2 错误解读

  • 错误类型miscompare(数据不匹配)
    • 表示从某内存地址读取的值与写入期望值不一致
    • 示例地址:0x7d3e623b68,进行了两次读取(read 与 reread),结果一致但与 expected 不符
    • 排除了偶然干扰,指向硬件错误(如存储单元或数据传输路径问题)
  • 线程报告
    • 从 Thread 1 到 Thread 24 几乎都报告了 hardware incidents
    • 总计:55,673 个硬件事件
  • 最终状态
Status: FAIL - test discovered HW problems

测试工具明确判定系统内存存在硬件问题,不可靠。

3.3 地址一致性

多次打断并重新测试,查看地址是否在同一处,如果地址相同,基本上可以判断为颗粒本身,或者电路出了问题,可以运行用于测试ddr的loader加以验证

 Hardware Error: miscompare on CPU 1(0xFF) at 0x7eadb61190(0x1383d0195:DIMM Unknown): read:0x0200090002000000, reread:0x0200090002000000 expected:0x0200000002000000
2026/05/18-17:59:02(CST) Report Error: miscompare : DIMM Unknown : 1 : 32s
2026/05/18-17:59:02(CST) Hardware Error: miscompare on CPU 6(0xFF) at 0x7e0fd05190(0x1383d0195:DIMM Unknown): read:0x0000090000000000, reread:0x0000090000000000 expected:0x0000000000000000
2026/05/18-18:00:37(CST) Hardware Error: miscompare on CPU 2(0xFF) at 0x7f3db18190(0x1383d0195:DIMM Unknown): read:0x0000090000000000, reread:0x0000090000000000 expected:0x0000000000000000
2026/05/18-18:00:37(CST) Report Error: miscompare : DIMM Unknown : 1 : 11s
2026/05/18-18:02:38(CST) Hardware Error: miscompare on CPU 5(0xFF) at 0x7ef81c1190(0x1383d0195:DIMM Unknown): read:0x0000094000000040, reread:0x0000094000000040 expected:0x0000004000000040
2026/05/18-18:02:38(CST) Report Error: miscompare : DIMM Unknown : 1 : 72s
05/18-18:03:10(CST) Report Error: miscompare : DIMM Unknown : 1 : 9s
2026/05/18-18:03:10(CST) Hardware Error: miscompare on CPU 6(0xFF) at 0x7d35ae4190(0x1383d0195:DIMM Unknown): read:0x0200090004000000, reread:0x0200090004000000 expected:0x0200000004000000
2026/05/18-18:04:53(CST) Hardware Error: miscompare on CPU 7(0xFF) at 0x7dffd3e190(0x1383d0195:DIMM Unknown): read:0x0000090000000000, reread:0x0000090000000000 expected:0x0000000000000000
2026/05/18-18:05:25(CST) Hardware Error: miscompare on CPU 6(0xFF) at 0x7e664b7190(0x1383d0195:DIMM Unknown): read:0xaaaaafaaaaaaaaaa, reread:0xaaaaafaaaaaaaaaa expected:0xaaaaaaaaaaaaaaaa
2026/05/18-18:05:25(CST) Report Error: miscompare : DIMM Unknown : 1 : 15s
2026/05/18-18:15:48(CST) Hardware Error: miscompare on CPU 0(0xFF) at 0x7ebc8b9190(0x1383d0195:DIMM Unknown): read:0x4a4a4f4a4a4a4a4a, reread:0x4a4a4f4a4a4a4a4a expected:0x4a4a4a4a4a4a4a4a
2026/05/18-18:15:48(CST) Report Error: miscompare : DIMM Unknown : 1 : 182s

如上的日志,可以看到物理地址都是0x1383d0195,而前面的虚拟地址不同。且不同的测试模板(是全0,还是交替的 0xaa 或 0x4a)错误永远发生在数据串右数第 11 个字符(即第 40-43 个 bit 位)上。

留下评论