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

  github地址:GitHub - jnavila/memtester: Simple memory tester mirror from http://pyropus.ca/software/memtester/. Please note that I am not the author of Memtester

  当前最新版本是memtester-4.6.0.tar.gz,下载成功后将压缩包移到虚拟机环境中,准备执行交叉编译。

  2.2 交叉编译

  需要提前将目标平台的编译器先安装到虚拟机环境中

  2.2.1.解压memteser压缩包


  1.  tar -xvf memtester-4.6.0.tar.gz

  2.   cd memtester-4.6.0

2.2.2.交叉编译

  2.2.2.1 直接使用源代码编译


  1. # 加载编译器环境

  2.   source /opt/fsl-auto/38.0/environment-setup-cortexa53-crypto-fsl-linux

  3.   # 此处仿照仿照yocto工程中的memtester.dd文件中的编译语句配置conf-cc和conf-ld

  4.   echo ${CC} ${CFLAGS} -DPOSIX -c > conf-cc

  5.   echo ${CC} ${LDFLAGS} > conf-ld

  6.   # 然后执行make编译

  7.   make

编译成功:


  1.  user@user:~/soft/memtester-4.6.0$ make

  2.   ( cat warn-auto.sh; \

  3.   echo CC=\'`head -1 conf-cc`\'; \

  4.   echo LD=\'`head -1 conf-ld`\' \

  5.   ) > auto-ccld.sh

  6.   cat auto-ccld.sh make-compile.sh > make-compile

  7.   chmod 755 make-compile

  8.   cat auto-ccld.sh find-systype.sh > find-systype

  9.   chmod 755 find-systype

  10.   ./find-systype > systype

  11.   ( cat warn-auto.sh; ./make-compile "`cat systype`" ) > \

  12.   compile

  13.   chmod 755 compile

  14.   ./compile memtester.c

  15.   ./compile tests.c

  16.   cat auto-ccld.sh make-load.sh > make-load

  17.   chmod 755 make-load

  18.   ( cat warn-auto.sh; ./make-load "`cat systype`" ) > load

  19.   chmod 755 load

  20.   ./extra-libs.sh "`cat systype`" >extra-libs

  21.   ./load memtester tests.o `cat extra-libs`

当前路径路径下出现可执行的memtester程序:

  1.  -rwxr-xr-x 1 user user 241 Nov 1 14:22 make-load

  2.   -rwxr-xr-x 1 user user 73 Dec 20 2022 make-load.sh

  3.   -rwxr-xr-x 1 user user 210 Dec 20 2022 make-makelib.sh

  4.   -rwxrwxr-x 1 user user 31160 Nov 1 14:22 memtester

  5.   -rw-r--r-- 1 user user 4726 Dec 20 2022 memtester.8

  6.   -rw-r--r-- 1 user user 14703 Dec 20 2022 memtester.c

  7.   -rw-r--r-- 1 user user 679 Dec 20 2022 memtester.h

确认产物架构


  1.   user@user:~/soft/memtester-4.6.0$ file memtester

  2.   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

将编译产物传输到目标板中

  可以通过网络使用scp命令或winscp,filezilla等工具将memteser传输到目标板的/bin目录下,如执行权限不够,则赋上权限即可使用。

chmod 777 /bin/memtester

 2.2.2.2 需要定制源代码

  参考网络建议,如果要修改还test.h文件,需要添加必要的头文件包含:


  1. vi test.h

  2.   # 添加 #include <stddef.h>

然后执行2.2.2.1的编译部署步骤即可。

  3.MemTester使用

  MemTester的基本命令

  1.测试1GB的内存

 memtester 1G

 2.测试特定区域的内存

 memtester -p 0x40000000 1G

  3.指定测试运行的次数,例如要运行5次测试

 memtester 1G 5

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐