安卓使用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 次。
    作者:帅得不敢出门
相关推荐
黄林晴7 小时前
Google Play 发版链路全面重构:合规前置、审核自动化、生态全面收紧
android·google
通玄9 小时前
Jetpack Compose 入门系列(四):动画基本使用
android
杉氧9 小时前
Kotlin 协程深度解析②:生存指南——掌握结构化并发的生命线
android·kotlin
故渊at9 小时前
第四板块:Android 输入系统与触控事件 | 第十五篇:InputReader 与 InputDispatcher 的触控流水线
android·anr·输入系统·inputdispatcher·inputreader·触控事件·inputevent
方白羽9 小时前
Vibe Coding 四个核心阶段
android·前端·app
潘潘潘11 小时前
Android网络结构分析——有线网络
android
踏雪羽翼11 小时前
Android OpenGL实现十几种美颜功能
android
Android小码家13 小时前
BootAnimation+SE+开机MP4动画播放
android·framework
加农炮手Jinx13 小时前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops