安卓使用memtester进行内存压力测试

memteser简介

memtester 是一个用于测试内存可靠性的工具。

它可以对计算机的内存进行压力测试,以检测内存中的错误,例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行,并且可以针对不同大小的内存进行测试。

下载源码

memtester官方地址

https://pyropus.ca./software/memtester/

最新源码下载版本是4.6.0

下载源码解压后文件比较简单:

内置到安卓SDK

把这个文件夹放到android sdk下的externel中重命名为memtester

创建Android.mk放memtester中

mk 复制代码
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
        memtester.c \
        tests.c

LOCAL_MODULE:= memtester
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

编译

在sdk中

  1. source build/envsetup.sh
  2. lunch xxx
    这里的xxx不同的平台不一样.
  3. mmm external/memtester/

编译出错

external/memtester/memtester.c:143:22: error: using the result of an assignment as a condition without parentheses [-Werror,-Wparentheses]
    if (env_testmask = getenv("MEMTESTER_TEST_MASK")) {
        ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/memtester/memtester.c:143:22: note: place parentheses around the assignment to silence this warning
    if (env_testmask = getenv("MEMTESTER_TEST_MASK")) {
                     ^
        (                                           )
external/memtester/memtester.c:143:22: note: use '==' to turn this assignment into an equality comparison
    if (env_testmask = getenv("MEMTESTER_TEST_MASK")) {
                     ^
                     ==
external/memtester/memtester.c:314:75: error: arithmetic on a pointer to void is a GNU extension [-Werror,-Wpointer-arith]
                aligned = (void volatile *) ((size_t) buf & pagesizemask) + pagesize;
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
external/memtester/memtester.c:367:67: error: arithmetic on a pointer to void is a GNU extension [-Werror,-Wpointer-arith]
        aligned = (void volatile *) ((size_t) buf & pagesizemask) + pagesize;
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
external/memtester/memtester.c:239:9: error: variable 'memshift' is used uninitialized whenever switch default is taken [-Werror,-Wsometimes-uninitialized]
        default:
        ^~~~~~~
external/memtester/memtester.c:243:55: note: uninitialized use occurs here
    wantbytes_orig = wantbytes = ((size_t) wantraw << memshift);
                                                      ^~~~~~~~
external/memtester/memtester.c:121:29: note: initialize the variable 'memshift' to silence this warning
    int memfd, opt, memshift;

在Android.mk中添加上一行

mk 复制代码
  LOCAL_CFLAGS += -Wno-parentheses \
        -Wno-pointer-arith \
        -Wno-sometimes-uninitialized

编译成功后生成 sdkout/xx/system/bin/memtester

放到安卓设备上

把memtester放到安卓设备上

adb root

adb remount

adb push memtester /system/bin/

memtester测试指令

放到设备上后,就可以进行测试了

以下是一些常见的 memtester 测试命令示例:

  1. 基本测试:
    memtester <内存大小> <测试次数>:这是最基本的用法,比如 memtester 1G 10,表示测试 1GB 的内存,测试 10 次。如果不指定测试次数,memtester 会一直测试下去,直到你手动中断(通常使用 Ctrl + C)。
  2. 指定内存范围测试(适用于特定硬件开发或深入排查问题):
    memtester -p <起始物理地址(十六进制)> <内存大小>:这种方式可以测试特定物理地址开始的一段内存。例如,如果要测试从物理地址 0x10000000 开始的 512MB 内存,可以使用 memtester -p 0x10000000 512M。请注意,这种测试可能会覆盖正在使用的系统内存或其他应用程序的内存,导致系统崩溃,所以要谨慎使用。
  3. 结合其他参数进行测试:
    memtester -d <设备文件>:通过 -d 参数指定一个设备文件来进行测试。默认情况下,memtester 会使用 /dev/mem 设备文件,但在某些特殊情况下,你可能需要指定其他的内存映射设备文件。例如,如果你的系统中有一个特殊的内存设备 /dev/my_memory_device,你可以使用 memtester -d /dev/my_memory_device 100M 5 来测试该设备对应的 100MB 内存,测试 5 次。
    作者:帅得不敢出门
相关推荐
长亭外的少年1 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
建群新人小猿3 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神5 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
兰琛5 小时前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Y多了个想法5 小时前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
NotesChapter7 小时前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快8 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl8 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
麦田里的守望者江8 小时前
KMP 中的 expect 和 actual 声明
android·ios·kotlin
Dnelic-8 小时前
解决 Android 单元测试 No tests found for given includes:
android·junit·单元测试·问题记录·自学笔记