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

版权声明:本文为博主原创文章,未经博主允许不得转载。如本文对您有帮助,欢迎点赞评论。 https://blog.csdn.net/sweetmilkcake/article/details/83241592

环境

博主测试环境是在Android 7.0上,理论上不用任何修改就可以适合所有Android版本。

memtester

memtester主要用于测试内存稳定性
官网:http://pyropus.ca/software/memtester/
版本:memtester-4.3.0.tar.gz(目前最新版本-2018.10.21)
官方已经预编译了大部分Linux系统的二进制文件,可以直接使用,现在我们将它移植到Android系统中。

移植

首先我们看看Makefile文件它在Linux系统是怎么编译的,这里移植memtester-4.3.0.tar.gz压缩包里的文件不需要任何修改。

memtester: \
$(OBJECTS) memtester.c tests.h tests.c tests.h conf-cc Makefile load extra-libs
    ./load memtester tests.o `cat extra-libs`

从上面的Makefile可以知道,要编译memtester需要编译memtester.c和tests.c以及相关的头文件,所以我们可以写出下面的Android.mk文件。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := memtester.c tests.c
LOCAL_MODULE := memtester
LOCAL_C_INCLUDES := $(LOCAL_PATH)
include $(BUILD_EXECUTABLE)

我们把下载下来的memtester-4.3.0.tar.gz解压到system/core/目录下,并命名为memtester目录,并把Android.mk放到同一目录。文件如下显示。

lemon@ubuntu:~/Develop/OrangePi_Lite2/android/system/core/memtester$ tree
.
├── Android.mk
├── BUGS
├── CHANGELOG
├── conf-cc
├── conf-ld
├── COPYING
├── extra-libs.sh
├── find-systype.sh
├── make-compile.sh
├── Makefile
├── make-load.sh
├── make-makelib.sh
├── memtester.8
├── memtester.c
├── memtester.h
├── README
├── README.tests
├── sizes.h
├── tests.c
├── tests.h
├── trycpp.c
├── types.h
└── warn-auto.sh

0 directories, 23 files

接下来mm此目录就可以编译生成

lemon@ubuntu:~/Develop/OrangePi_Lite2/android/system/core/memtester$ mm -j8
........
5 warnings generated.
[100% 6/6] Install: out/target/product/petrel-p1/system/bin/memtester
make: Leaving directory '/home/lemon/Develop/OrangePi_Lite2/android'

#### make completed successfully ####

然后就可以通过

adb push memtester /system/bin/
adb shell "chmod 777 /system/bin/memtester"
adb shell memtester

来执行测试。
由于我需要打包到系统,所以还需要在device.mk里面进行定义。

diff --git a/android/device/softwinner/petrel-p1/device.mk b/android/device/softwinner/petrel-p1/device.mk
index 9696939..9b6ff8f 100755
--- a/android/device/softwinner/petrel-p1/device.mk
+++ b/android/device/softwinner/petrel-p1/device.mk
@@ -62,6 +62,8 @@ PRODUCT_PACKAGES += \
 
 PRODUCT_PACKAGES += serial_comm
 
+PRODUCT_PACKAGES += memtester
+
 PRODUCT_COPY_FILES += \
     device/softwinner/petrel-p1/configs/virtual-remote.kl:system/usr/keylayout/virtual-remote.kl \
     device/softwinner/petrel-p1/configs/sunxi-keyboard.kl:system/usr/keylayout/sunxi-keyboard.kl \

编译出system.img进行烧写测试。

测试

使用方法:Usage: memtester [-p physaddrbase [-d device]] [B|K|M|G] [loops],比如memtester 5M 1,对应测试1次5M内存

petrel-p1:/ # memtester                                                                                                                               
memtester version 4.3.0 (32-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffff000
need memory argument, in MB

Usage: memtester [-p physaddrbase [-d device]] <mem>[B|K|M|G] [loops]

查看系统空闲内存,还有251M

petrel-p1:/ # free -h                                                                                                                                 
  total used free shared buffers
Mem: 978M 727M 251M 0 13M
-/+ buffers/cache: 714M 264M
Swap: 128M 0 128M

演示:memtester 5M 1,这里只是演示,测试1次5M内存,实际项目中这两个参数应尽可能大,才能覆盖整块内存,才能达到压力测试的结果,测试时失败有相应的log,我这里比较难复现就不贴了。

petrel-p1:/ # memtester 5M 1                                                                                                                          
memtester version 4.3.0 (32-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffff000
want 5MB (5242880 bytes)
got 5MB (5242880 bytes), trying mlock ...locked.
Loop 1/1:
  Stuck Address : ok         
  Random Value : ok
  Compare XOR : ok
  Compare SUB : ok
  Compare MUL : ok
  Compare DIV : ok
  Compare OR : ok
  Compare AND : ok
  Sequential Increment: ok
  Solid Bits : ok         
  Block Sequential : ok         
  Checkerboard : ok         
  Bit Spread : ok         
  Bit Flip : ok         
  Walking Ones : ok         
  Walking Zeroes : ok         

Done.
petrel-p1:/ # 

猜你喜欢

转载自blog.csdn.net/sweetmilkcake/article/details/83241592