【MemTester】内存测试工具Memtester使用方法
1.MemTester简介
MemTester是一个用于压力测试内存子系统的工具,它特别有效于发现间歇性和非确定性的故障。以下是MemTester的一些主要特点和功能:
- 内存错误捕获:MemTester主要用于捕获内存错误和识别一直处于高或低电平的坏位。
- 多种测试项目:它提供了一系列测试项目,包括随机值测试、异或比较、减法、乘法、除法和与或运算等。
- 用户空间测试:MemTester是一个用户空间的测试工具,它通过malloc(3)分配指定的内存量,如果失败,则减少请求的内存量直到成功。
- 内存锁定:测试时,MemTester会尝试mlock(3)锁定内存,如果无法锁定,测试速度会变慢,效果也会降低。
- 系统限制:MemTester能够测试的内存量受到系统总内存和其他系统限制的影响,例如操作系统、库和其他系统限制会占用一部分内存。
- 内存容量和速度测试:MemTester可以测试内存的不同方面,包括内存容量、速度、类型和通道。
- 系统容错性测试:通过模拟异常情况下的内存使用,MemTester可以测试开发板在处理异常情况时的表现,并确定开发板能否在不影响数据完整性的情况下恢复正常工作。
- 测试结果:使用MemTester进行长时间测试(如72小时以上)可以帮助确定系统是否能够在长时间高负载占用内存的工作环境下保持可靠性和稳定性。
- 测试方法:MemTester的使用命令格式为
memtester [-p 内存物理起始地址] [测试内存大小B/K/M/G] [测试次数]
,可以灵活配置测试的物理地址、内存大小和测试次数。
2.MemTester交叉编译
2.1 MemTester源码下载
源码下载地址:memtester version 4
当前最新版本是memtester-4.6.0.tar.gz,下载成功后将压缩包移到虚拟机环境中,准备执行交叉编译。
2.2 交叉编译
需要提前将目标平台的编译器先安装到虚拟机环境中
2.2.1.解压memteser压缩包
tar -xvf memtester-4.6.0.tar.gz
cd memtester-4.6.0
2.2.2.交叉编译
2.2.2.1 直接使用源代码编译
# 加载编译器环境
source /opt/fsl-auto/38.0/environment-setup-cortexa53-crypto-fsl-linux
# 此处仿照仿照yocto工程中的memtester.dd文件中的编译语句配置conf-cc和conf-ld
echo ${CC} ${CFLAGS} -DPOSIX -c > conf-cc
echo ${CC} ${LDFLAGS} > conf-ld
# 然后执行make编译
make
编译成功:
user@user:~/soft/memtester-4.6.0$ make
( cat warn-auto.sh; \
echo CC=\'`head -1 conf-cc`\'; \
echo LD=\'`head -1 conf-ld`\' \
) > auto-ccld.sh
cat auto-ccld.sh make-compile.sh > make-compile
chmod 755 make-compile
cat auto-ccld.sh find-systype.sh > find-systype
chmod 755 find-systype
./find-systype > systype
( cat warn-auto.sh; ./make-compile "`cat systype`" ) > \
compile
chmod 755 compile
./compile memtester.c
./compile tests.c
cat auto-ccld.sh make-load.sh > make-load
chmod 755 make-load
( cat warn-auto.sh; ./make-load "`cat systype`" ) > load
chmod 755 load
./extra-libs.sh "`cat systype`" >extra-libs
./load memtester tests.o `cat extra-libs`
当前路径路径下出现可执行的memtester程序:
-rwxr-xr-x 1 user user 241 Nov 1 14:22 make-load
-rwxr-xr-x 1 user user 73 Dec 20 2022 make-load.sh
-rwxr-xr-x 1 user user 210 Dec 20 2022 make-makelib.sh
-rwxrwxr-x 1 user user 31160 Nov 1 14:22 memtester
-rw-r--r-- 1 user user 4726 Dec 20 2022 memtester.8
-rw-r--r-- 1 user user 14703 Dec 20 2022 memtester.c
-rw-r--r-- 1 user user 679 Dec 20 2022 memtester.h
确认产物架构
user@user:~/soft/memtester-4.6.0$ file memtester
memtester: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=9c2feb45ce3b438ae59a9746d920dca544132f8b, for GNU/Linux 3.14.0, with debug_info, not stripped
3.将编译产物传输到目标板中
可以通过网络使用scp命令或winscp,filezilla等工具将memteser传输到目标板的/bin目录下,如执行权限不够,则赋上权限即可使用
chmod 777 /bin/memtester
2.2.2.2 需要定制源代码
参考网络建议,如果要修改还test.h文件,需要添加必要的头文件包含
vi test.h
# 添加 #include <stddef.h>
然后执行2.2.2.1的编译部署步骤即可
3.MemTester使用
3.1 MemTester的基本命令
1.测试1GB的内存
memtester 1G
2.测试特定区域的内存
memtester -p 0x40000000 1G
3.指定测试运行的次数,例如要运行5次测试
memtester 1G 5