DDR压力测试方案:
测试项
测试类别 | 环境温度 | 测试时长 |
---|---|---|
DDR常温压力测试 | 25度 | 48H |
DDR高温压力测试 | 60度 | 48H |
DDR低温压力测试 | -25度 | 48H |
测试环境
DUT压力程序
ITEM | 版本号/设备编号 | 适用测试项 |
---|---|---|
测试脚本 | xj3_ddr_stress.tar.gz | 压力测试通用 |
DUT数量 | 5台及以上 | 压力测试通用 |
从 X3M附加工具包 的 DDR_Stress_Test选择对应sdk版本的目录下载 xj3_ddr_stress.tar.gz
设置CPU模式和降频温度
# 若设备重启需再次配置这两条指令 echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor echo 105000 > /sys/devices/virtual/thermal/thermal_zone0/trip_point_1_temp
执行压力测试脚本, 后台运行cpu test和bpu test
sh ./scripts/xj3-stress.sh
#1 cpu test
echo 4 > /proc/sys/vm/drop_caches
nohup /userdata/xj3_ddr_stress/bin/stressapptest -s 172800 -M 100 -f /tmp/sat.io1 -f /tmp/sat.io2 -i 4 -m 8 -C 2 -W >/userdata/cpu-stress.log &
Kernel随机panic
在DDR参数已经相对稳定了后,在长稳、高低温等长稳测试中,可能会发生一些随机的Kernel panic,每次panic的位置不同,且panic的位置多在Kernel的通用代码中。这种就没必要分析软件逻辑了,很可能是DDR不稳定或者软件内存破坏导致。
例如下图中出错的地址是ffc00000f630,而正常的ARM64的kernel是ffffff开头的。
比如下图中的错误地址,地址的最高24位由ffffff变成了fff7ffb,说明在bit52和bit59发生了翻转,这种问题经常在高低温测试中遇到
Stressapptest内存压力测试错误
DDR长稳测试中经常使用stressapptest做内存压力测试,开发中遇到怀疑有DDR故障的板子也可以使用stressapptest做一下测试,确认ddr问题。比如下面log,检测到miscompare错误,是DDR不稳定导致。
stressapptest是开源工具,可以进行内存、CPU和存储的压力测试。
预编译测试工具路径:sample\sample_base_test\bin
下载源码自行交叉编译:GitHub - stressapptest/stressapptest: Stressful Application Test - userspace memory and IO test。
常用测试命令:
./stressapptest -M 128M -s 3600 -m 8 -i 8 -C 8 -l /userdata/x3_stressapptest.log --cc_test
类似下方的打印应当出现:
ECC错误检测
XJ3 系统软件支持DDR的ECC错误纠错、检测功能。打开ECC保护后,如果检测到ECC错误,也可以确认为DDR不稳定。
可以在如下sysfs接口中查询是否发生1bit、2bit和3bit以上翻转。
cat /sys/devices/platform/soc/a2d10000.ddr_monitor/ddr_ecc_stat
打开ECC后,如果发生了Kernel Panic,也会在panic log中打印ecc统计信息。如下图log,发生了2次2bit的翻转。
ECC保护可以通过下面命令打开,重启后生效。
hrut_ddr_ecc s on reboot