嵌入式系统一次EMMC测试的体会及错误分析过程

环境配置

由于本次需要测试EMMC和内存,所以编写脚本如下:

#!/bin/sh
for i in {1..100}
doj=`expr $[i] % 10`if test $[j] -eq 0thenecho "-----------------emmc $i round of testing----------------------------"iozone -a -n 512m -g 4g -i 0 -i 1 -i 5 -f /mnt/iozone -Rb ./iozone${i}.xlssyncsleep 2s echo "-----------------emmc $i round of testing end---------------------------"sleep 300sfiecho "********`date +%T  ` memtester test " |tee -a  ./mem.logsleep 20smemtester 300M 1if [ $? -eq 0 ]thenecho "memtest sucsessed" | tee -a  ./mem.logelseecho "memtest failed" | tee -a  ./mem.logfiecho -e "`date +%T` ********************************\n" | tee -a ./mem.logsleep 20s
done

脚本说明

脚本的功能分成2个部分,一个是iozone,分别对EMMC进行write/rewrite、read/re-read、stride-read测试,读写的文件依次从512m到4G,以2倍的形式增长(我的板子的EMMC是8G的),结果放到iozone*.xls文件中,
文件大概内容如下:

第二部分是进行内存压力测试,我的开发板的内存是512M的,压力测试使用300M

流程是每执行10次内存压力测试,执行一次EMMC读写操作,一直循环执行到测试结束为止;

## 实验结果
执行了一段时间发现有错误```bash
[2022-3-18 21:39:34] Out of memory: Kill process 5364 (memtester) score 137 or sacrifice child
[2022-3-18 21:39:34] Killed process 5364 (memtester) total-vm:360100kB, anon-rss:69384kB, file-rss:20kB
[2022-3-18 21:39:34] 11:39:24  current temperature= -16945 runtime = 24834.14 47.30
[2022-3-18 21:39:34] ./mem.sh: line 16:  5364 Killed                  memtester 350M 1
[2022-3-18 21:39:34] 11:39:24  current freq=  792000
[2022-3-18 21:39:34] memtest failed

结束后,又执行了一次,发现还是有这个现象,这个时候观察,内存是够的,刚开始怀疑是操作太频繁了,将脚本修改sleep的延时增大,还是不行;
从网上查找资料,发现这个和linux核心的机制有关系;
Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。

在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日志文件中有如下信息:
Out of Memory: Killed process [PID] [process name].
该问题是low memory耗尽,因为内核使用low memory来跟踪所有的内存分配。
当low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运行。

LowMem 区 (也叫 NORMAL ZONE ) ,而且不能改变(除非用 hugemem 内核)。对于高负载的系统,就可能因为 LowMem 利用不好而引发 OOM Killer 。一个可能原因是 LowFree 太少了,另外一个原因是 LowMem 里都是碎片,请求不到连续的内存区域
查看内存,这里不能使用默认的free
egrep ‘High|Low’ /proc/meminfo
会列出不同的内存数据;

虽然现在还是没有完全弄明白如何解决,因为我这里也不能直接修改linux系统的内存部分,为了验证实验现象使用另外一种方式来验证,每执行一次iozone然后系统重新启动一次,另外内存压力测试执行的时候,要保证iozone没有执行,这样执行下来,发现都正常,也能侧面反正这个问题。
这个算是对EMMc测试的一个教训吧。

嵌入式系统一次EMMC测试的体会及错误分析过程相关推荐

  1. arm分支指令c语言,ARM嵌入式系统教与学(教学大纲)

    原标题:ARM嵌入式系统教与学(教学大纲) <ARM 嵌入式系统结构与编程> 课程教学大纲 学分 3 学时 32+24 01 课程说明 通过本课程的学习,培养学生掌握 ARM 体系结构,A ...

  2. ZedBoard--(5)嵌入式Linux下的DMA测试(Direct Register Mode)(PS + PL)

    ZedBorad–(5)嵌入式Linux下的DMA测试(PS+PL) 本文将详细介绍如何在ZedBorad上使用AXI接口的DMA IP核.(文末会给出测试代码的下载链接) DDR控制器.AXI DM ...

  3. ubuntu下安装PCL并测试(含视频安装过程记录)

    ☛☛ 视频安装过程记录 ☚☚ 原文章的标题为Ubuntu16.04下安装PCL1.7并测试(含视频安装过程记录),但我觉得随着时间的推移,版本会发生改变 1.更新源 sudo apt-get upda ...

  4. Android 开源安全测试工具 Drozer,安装过程中的问题

    Android 开源安全测试工具 Drozer,安装过程中的问题 记录安装过程中出现的问题 Android 开源安全测试工具 Drozer,安装过程中的问题 错误一 错误二 错误三 错误四 错误五 错 ...

  5. 对多个WCF服务进行统一的连接测试

    先看下面的代码: 代码 代码       BasicHttpBinding myBinding = new BasicHttpBinding();       EndpointAddress myEn ...

  6. emmc测试面面观-细谈emmc的几种测试方法

    以前我也发布了几篇文章,从不同的角度零零碎碎的谈了谈emmc,今天,我们来详细的了解一下emmc的测试. 首先我们先看看emmc信息收集,了解一下emmc信息如何查看,可以参看地址:https://b ...

  7. DSP外扩SRAM的应用测试心得体会

    原文地址:[http://www.51hei.com/bbs/dpj-32468-1.html] DSP的硬件测试说明: 平台说明: 图1-1  Code Composer Studio 6.0.0. ...

  8. Tomcat实现java与http_java – 使用嵌入式tomcat服务器的JUnit测试,如何为http和https连接器指定自动端口?...

    描述 我做了一个JUnit测试,专注于尝试测试一个SOAP Web服务的调用. 我正在使用嵌入式tomcat服务器进行测试,以便使用模拟服务器运行我的测试. 我也使用http和https连接器. 我需 ...

  9. RedHat el5.0 搭建 Postfix 邮件服务器系统一

    RedHat el5.0 搭建 Postfix 邮件服务器系统                        (postfix+cyrus-sasl2+courier-authlib+courier- ...

最新文章

  1. python3 库pandas写入csv格式文件出现中文乱码问题解决方法
  2. 【Git】Git 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )
  3. 正则表达式二 :贪婪与非贪婪
  4. 51nod 1100:斜率最大
  5. Oracle 11g数据库管理与开发指南
  6. 使用 ReSharper对.NET解决方案进行全面重构
  7. 无损1080i到1080p是如何制作的
  8. 设计、定义并实现Complex类
  9. uniApp中图片文件上传插件(uniFilePicker)
  10. 拯救报错:Error: connect ETIMEDOUT
  11. wrf模式计算机配置,科学网-WRF模式的运行-张乐乐的博文
  12. 怎么定位门面位置_如何选择店面位置
  13. 【二分】Caravan Robbers
  14. wifi 小程序 透传_微信小程序之一键连接wifi
  15. java程序员进阶必读书单
  16. 家用计算机的辐射,电脑的辐射有多大?
  17. 关于论文中bib文件的参考格式
  18. 使用ganache-cli和truffle构建以太坊智能合约,以实现“基于哈希锁定的跨链技术”为例
  19. 【生活·日常】一个与世隔绝的大学生如何补办身份证
  20. Visual Studio 2017最新版正式发布!适用于任何开发人员、平台及APP

热门文章

  1. poj3680(最小费用流 + 拆点)
  2. 南阳汉诺塔 一 java_南阳明清移民记.pdf
  3. Cocos Creator—最佳构建部署实践
  4. SQL Server 阻止了对组件 \'Ad Hoc Distributed Queries\' 的访问
  5. java开发的简易学生成绩管理系统
  6. Ubuntu 64位系统安装flash player
  7. Java知多少(中)
  8. Go Web 开发(一)
  9. 16个概念带你入门 Kubernetes
  10. HBase 在京东人资数据预处理平台中的实践!