使用memtester工具对嵌入式Linux内存压力测试
文章目录
- 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内存压力测试相关推荐
- 嵌入式Linux内存压力测试
原文参考:添加链接描述 1 前言 内存是电子计算机的最重要组成要素之一. 与内存对应的就是外存,如硬盘.外部存储器等.内存是将外存与CPU连接起来的桥梁,计算机中所有数据都需经过内存进行交互,而且 ...
- Linux内存压力测试stressapptest
/*********************************************************************** Linux内存压力测试stressapptest* 说 ...
- Android内存压力测试工具(memtester移植)
该文章转载于: android用memtester内存压力测试_W歹匕示申W的博客-CSDN博客 Android内存压力测试工具(memtester移植)_甜牛奶蛋糕的博客-CSDN博客_androi ...
- 《嵌入式linux内存使用与性能优化》读书笔记
<嵌入式linux内存使用与性能优化>读书笔记 前言 本书的重点分为系统内存和性能优化,前4章着重内存使用,尽量减少进程的内存使用量,定位和发现内存泄漏:后5章着重与如何让系统性能优化,加 ...
- 《嵌入式Linux内存使用与性能优化》笔记
<嵌入式Linux内存使用与性能优化>笔记 这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相 ...
- android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试
android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试 android 智能电视 电视盒子 安卓嵌入式硬件LAN压力测试 android环境下部分必须用到的查询命令 操作命令 LAN口使用a ...
- linux搭建压力测试,安装GTKStressTesting:对Linux系统进行压力测试变得更加容易
GTKStressTesting(GST)的目标是将您需要了解的有关CPU.RAM和主板的所有信息整合到一个屏幕中,包括使用情况监视器.温度传感器等.您可以使用该应用程序运行一些压力测试,如果您想了解 ...
- 内存压力测试软件,TestMem5内存压力测试
想检测电脑内存压力的用户们可以试试利用这款TestMem5来帮助您,通过该程序您可以快速的测试您的PC内存稳定度和系统的储存能力,支持全命令行控制,允许自动测试或定期测试,可在所有主流windows操 ...
- (转)用mysql自带工具mysqlslap对数据库进行压力测试
http://aolens.blog.51cto.com/7021142/1901557-------用mysql自带工具mysqlslap对数据库进行压力测试 mysqlslap是mysql自带的工 ...
最新文章
- Go 学习笔记(34)— Go 方法声明、方法调用、方法值、方法表达式、切片对象方法、指针对象方法
- Android——与查询联系人相关的3张表
- RESTful到底是什么玩意??
- 自定义标签 (转载)
- Adobe Bridge 2021中文版
- IIS6、7添加反向代理的步骤
- 据阿里云EMR快速搭建数据平台(二)
- 16个超实用的jQuery技巧攻略
- Qt Creator基本快捷键
- 给python小白的几个小练习(附答案详解哦)
- (转)Hibernate框架基础——在Hibernate中java对象的状态
- 域名申请+云服务器购买+花生壳内网穿透+myeclipse web 登录
- 攒齐智能产品组合,世界召唤四大超级力量
- FS2222可调过压过流芯片IC,40V耐压过压保护可调OVP可调OCP
- OpenStack Ironic 裸金属的配置及使用
- ads1258_ADS1258:高精度多通道模/数转换芯片
- armadillo + openblas 编译
- Adreno GPU上Android 游戏开发介绍 (2)
- CLRS第十章思考题
- 汇编语言实验2-P72页