文章目录

  • 1 前言
  • 2 memtester工具
  • 3 工具编译与使用
    • 3.1 编译
    • 3.2 使用
      • 3.2.1 命令使用格式
      • 3.2.2 测试结果
  • 4 在RK3399平台上测试

1 前言

  内存是电子计算机的最重要组成要素之一。 与内存对应的就是外存,如硬盘、外部存储器等。内存是将外存与CPU连接起来的桥梁,计算机中所有数据都需经过内存进行交互,而且所有应用程序都运行在内存中。可见,内存的重要性。如果内存出现问题,轻则是数据错误,严重则是导致系统崩溃。

  与通用计算机的内存条可插拔的形式不同,嵌入式计算机(Linux、Android、IOS)的内存通常是焊接在PCB上,与CPU内存控制器直接相连。内存芯片,一般指的是SDRAM,如DDR3、DDR4;内存芯片数据线属于高速总线,由几百MHz到GHz以上,对于PCB走线要求也非常高。因此,对于一个全新的项目,或者调整了内存走线的PCB,有必要对内存的性能和稳定性进行测试。这样避免后期系统出现内存崩溃的情况时,可以排除硬件内存走线的问题,而定位在软件bug上。也进而避免软硬件扯不清楚的问题。

  这里,我们使用“memtester”工具,对嵌入式Linux系统上的内存性能进行测试。

2 memtester工具

  memtester是一款比较经典而且使用广泛的内存检测工具,具备使用简单、易于移植、检测结果可靠性好的特点,支持32位和64位的类Unix系统(Unix、Linux、Android、IOS)上使用。memtester主要支持的功能包括:

  • 捕捉内存错误,及长时间处于高位或者低位的内存坏位
  • 支持多项测试,随机值、异或比较、异或运算、乘法、除法、减法
  • 可指定测试内存起始地址、内存大小以及测试次数

​   memtester官网和下载地址:http://pyropus.ca/software/memtester/

3 工具编译与使用

3.1 编译

【1】解压

tar xvzf memtester-4.5.0.tar.gz

【2】修改Makefile

  如果是在X86/X64 Linux系统使用,则无需修改Makefile文件,默认是选择系统gcc编译。在嵌入式Linux上使用需修改编译器。

  这里通过配置文件“conf-cc”“conf-ld”选择编译器。把“conf-cc”“conf-ld”文件的默认编译器“cc”改为目标编译器。

#Hi3520DV400平台编译
## conf-cc
arm-hisiv400-linux-gcc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 -DTEST_NARROW_WRITES -c## conf-ld
arm-hisiv500-linux-gcc -s#RK3399平台编译
## conf-cc
aarch64-linux-gnu-gcc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 -DTEST_NARROW_WRITES -c## conf-ld
aarch64-linux-gnu-gcc -s

<

【3】编译和安装

  执行“make”编译生成可执行文件“memtester”;然后执行“make install”将执行文件安装到系统,并加入环境变量。嵌入式环境下,我们一般不选择安装,直接把可执行文件拷贝到系统执行即可。

3.2 使用

3.2.1 命令使用格式

  memtester工具使用命令格式为memtester [-p 内存物理起始地址] [测试内存大小B/K/M/G] [测试次数]。命令格式不是固定的,可以省略部分。

  • 省略测试次数,则连续进行测试,直到手动结束
  • 省略内存物理起始地址,则由系统随机选择空闲内存测试

实例:

#对1G内存测试100次
./memtester 1G 100#对2G内存进行连续测试
./memtester 2G#从0x00010000地址开始测试1G内存100次
./memtester -p 0x10000 1G 100

  更详细的介绍和使用说明可执行more README查看。

3.2.2 测试结果

  如果有测试项不通过,会输出对应的异常项目;否则会循环测试,直到测试次数完成或者手动结束。

  我们首先在X64 Ubuntu上编译测试。

#查看可执行文件类型
acuity@ubuntu:/mnt/hgfs/LSW/software/memtester-4.5.0$ file memtester
memtester: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0dcd3ddc63cb0aa9defa6db7a065195ed9c28cd, stripped
  • 首先查看系统剩余空闲内存,确保测试内存不要超出剩余空间
#free命令查看的内存大小单位为K
acuity@ubuntu:/mnt/hgfs/LSW/software/memtester-4.5.0$ freetotal        used        free      shared  buff/cache   available
Mem:        8156736      261328     6498036       13748     1397372     7541972
Swap:             0           0           0
  • 执行测试
#对100M内存测试2次
./memtester 100M 2
Loop 1/2:Stuck Address       : ok         Random Value        : okCompare XOR         : okCompare SUB         : okCompare MUL         : okCompare DIV         : okCompare OR          : okCompare AND         : okSequential Increment: okSolid Bits          : ok         Block Sequential    : ok         Checkerboard        : ok         Bit Spread          : ok         Bit Flip            : ok         Walking Ones        : ok         Walking Zeroes      : ok         8-bit Writes        : ok16-bit Writes       : okLoop 2/2:Stuck Address       : ok         Random Value        : okCompare XOR         : okCompare SUB         : okCompare MUL         : okCompare DIV         : okCompare OR          : okCompare AND         : okSequential Increment: okSolid Bits          : ok         Block Sequential    : ok         Checkerboard        : ok         Bit Spread          : ok         Bit Flip            : ok         Walking Ones        : ok         Walking Zeroes      : ok         8-bit Writes        : ok16-bit Writes       : okDone.

  如果存在测试失败项,会有提示“failure”,进而意味内存芯片本身存在问题或者PCB稳定性存在问题。

4 在RK3399平台上测试

  修改配置文件,交叉编译在RK3399板子上测试,通过U盘、以太网、WiFi等手段将可执行文件拷贝到板子上。以下方式通过U盘方式执行。

  • 第一步,接入U盘后,查看存储名称,这里为sda1
firefly@firefly:~$ cat /proc/partitions
major minor  #blocks  name1        0       4096 ram0179        0   15267840 mmcblk1179        1       4096 mmcblk1p1179        2       4096 mmcblk1p2179        3      32768 mmcblk1p3179        4      32768 mmcblk1p4179        5   15083503 mmcblk1p5179       96       4096 mmcblk1rpmb179       64       4096 mmcblk1boot1179       32       4096 mmcblk1boot08        0   15649792 sda8        1   15649776 sda1
  • 第二步,手动挂载到"/home"目录(可以挂载到任意目录),这一步需要root权限。
root@firefly:~# mount -t vfat /dev/sda1 /home
  • 第三步,进入"/home"目录,将memtester拷贝到"/usr"目录;然后切换至"/usr"目录,并执行。
root@firefly:~# cd /home
root@firefly:~# cp memtester /usr
root@firefly:~# cd /usr
root@firefly:/usr# ./memtester 1G 1

  此时memtester文件可能没有执行权限,需修先改文件属性为“可执行”,再执行。

root@firefly:/usr# chmod 777 memtester
root@firefly:/usr# ./memtester 1G 1

测试结果:

root@firefly:/usr# ./memtester 1G 1
memtester version 4.5.0 (64-bit)
Copyright (C) 2001-2020 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 1024MB (1073741824 bytes)
got  1024MB (1073741824 bytes), trying mlock ...locked.
Loop 1/1:Stuck Address       : ok         Random Value        : okCompare XOR         : okCompare SUB         : okCompare MUL         : okCompare DIV         : okCompare OR          : okCompare AND         : okSequential Increment: okSolid Bits          : ok         Block Sequential    : ok         Checkerboard        : ok         Bit Spread          : ok         Bit Flip            : ok         Walking Ones        : ok         Walking Zeroes      : ok         8-bit Writes        : ok16-bit Writes       : okDone.

使用memtester工具对嵌入式Linux内存压力测试相关推荐

  1. 嵌入式Linux内存压力测试

    原文参考:添加链接描述 1 前言   内存是电子计算机的最重要组成要素之一. 与内存对应的就是外存,如硬盘.外部存储器等.内存是将外存与CPU连接起来的桥梁,计算机中所有数据都需经过内存进行交互,而且 ...

  2. Linux内存压力测试stressapptest

    /*********************************************************************** Linux内存压力测试stressapptest* 说 ...

  3. Android内存压力测试工具(memtester移植)

    该文章转载于: android用memtester内存压力测试_W歹匕示申W的博客-CSDN博客 Android内存压力测试工具(memtester移植)_甜牛奶蛋糕的博客-CSDN博客_androi ...

  4. 《嵌入式linux内存使用与性能优化》读书笔记

    <嵌入式linux内存使用与性能优化>读书笔记 前言 本书的重点分为系统内存和性能优化,前4章着重内存使用,尽量减少进程的内存使用量,定位和发现内存泄漏:后5章着重与如何让系统性能优化,加 ...

  5. 《嵌入式Linux内存使用与性能优化》笔记

    <嵌入式Linux内存使用与性能优化>笔记 这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相 ...

  6. android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试

    android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试 android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试 android环境下部分必须用到的查询命令 操作命令 LAN口使用a ...

  7. linux搭建压力测试,安装GTKStressTesting:对Linux系统进行压力测试变得更加容易

    GTKStressTesting(GST)的目标是将您需要了解的有关CPU.RAM和主板的所有信息整合到一个屏幕中,包括使用情况监视器.温度传感器等.您可以使用该应用程序运行一些压力测试,如果您想了解 ...

  8. 内存压力测试软件,TestMem5内存压力测试

    想检测电脑内存压力的用户们可以试试利用这款TestMem5来帮助您,通过该程序您可以快速的测试您的PC内存稳定度和系统的储存能力,支持全命令行控制,允许自动测试或定期测试,可在所有主流windows操 ...

  9. (转)用mysql自带工具mysqlslap对数据库进行压力测试

    http://aolens.blog.51cto.com/7021142/1901557-------用mysql自带工具mysqlslap对数据库进行压力测试 mysqlslap是mysql自带的工 ...

最新文章

  1. Go 学习笔记(34)— Go 方法声明、方法调用、方法值、方法表达式、切片对象方法、指针对象方法
  2. Android——与查询联系人相关的3张表
  3. RESTful到底是什么玩意??
  4. 自定义标签 (转载)
  5. Adobe Bridge 2021中文版
  6. IIS6、7添加反向代理的步骤
  7. 据阿里云EMR快速搭建数据平台(二)
  8. 16个超实用的jQuery技巧攻略
  9. Qt Creator基本快捷键
  10. 给python小白的几个小练习(附答案详解哦)
  11. (转)Hibernate框架基础——在Hibernate中java对象的状态
  12. 域名申请+云服务器购买+花生壳内网穿透+myeclipse web 登录
  13. 攒齐智能产品组合,世界召唤四大超级力量
  14. FS2222可调过压过流芯片IC,40V耐压过压保护可调OVP可调OCP
  15. OpenStack Ironic 裸金属的配置及使用
  16. ads1258_ADS1258:高精度多通道模/数转换芯片
  17. armadillo + openblas 编译
  18. Adreno GPU上Android 游戏开发介绍 (2)
  19. CLRS第十章思考题
  20. 汇编语言实验2-P72页

热门文章

  1. IMX6Q调试之 ----- DDR3 32位移植
  2. 草根老板最容易犯的100个错误
  3. 单片机c语言如何表示二进制,单片机C语言中将二进制数转化为十进制的办法
  4. 转贴:千兆网线的做法,千兆水晶头的做法
  5. 注意stm32定时器的倍频器
  6. 答辩PPT的美化以及配色
  7. Android_性能优化之ViewPager加载成百上千高清大图oom解决方案
  8. 你知道linux的复制命令吗?cp
  9. 行业深度:区块链与金融、保险业那些不得不说的故事
  10. 2023年机器人与人工智能国际会议(JCRAI 2023)