专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
余杭发布  ·  5000+岗位!余杭大型招聘来了! ·  9 小时前  
余杭发布  ·  中考“个别生”报名,今天开始! ·  12 小时前  
陈忻儿童心理  ·  《从心理解孩子》在线课程2025春季班招生开 ... ·  2 天前  
51好读  ›  专栏  ›  嵌入式微处理器

记一次解决OTA死机重启bug(附问题分析与处理方法)

嵌入式微处理器  · 公众号  ·  · 2024-05-07 13:06

正文


01

背景介绍


平台:stm32mp151平台

1、什么是OTA?

说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上。

我们不仅可以通过网络下载OTA升级包,也可以通过下载OTA升级包到SD卡或U盘后再对设备升级。

OTA下载方式:

  • 短信方式
  • PUSH方式
  • 网络定制

本例网络定制方式。

2、现象描述

本产品通过OTA升级测试,升级162次,死机重启19次,如下图所示:



02

死机重启分析

1、为什么oom会导致重启?

当需要申请物理页面时,首先使用快通道申请页面,当快通道申请不到将会进入慢通道,当慢通道也无法申请是将触发oom-killer,正常情况下会杀死消耗物理页面最多的进程,而设备直接进入PANIC然后重启。

当申请物理页面时free页面很多情况也会存在页面申请失败的现象,一方面可能内存外碎片化严重,另一方面可能是无法借用其他迁移类型内存。因此尽量不要使能panic_on_oom,但设备使能该参数,如下图所示:

若去掉使能选项,oom-killer将会杀掉物理页最大进程,因此应该杀死蓝牙进程,在升级过程中,杀掉蓝牙进程对业务无任何影响。下图为不开启参数而杀掉最大物理页进程:


2、为什么free页面很多,但还是会进入oom?

当前我们已经知道因/proc/sys/vm/panic_on_oom=1 导致进入oom后便会panic然后重启,但为何内存不足呢?我们的日志提示还有126M物理页处于空闲可用,不应该会进入内存申请失败的情况。

细看可知gfp_mask=0x101cc0,则MIGRATE_MOVABLE未置1,导致ALLOC_CMA未置1,既不允许使用cma_pages,

当CMA页面不允许使用时,实际所剩余可申请的页面数:free减去free_cma,free_cma提示120多M(高达实际物理内存一半),所以剩余非迁移属性的页面只剩几M:



03

解决措施

因此,除了关闭panic_on_oom,还应该去查查为何free_cma为何可以分配的那么多,而不做最大值限制,通过启动日志可看出系统CMA的最大限制为128M,如下图所示:

CMA我们分配竟然达到了50%物理内存,因此将CMA降成64M大小,以释放64M用于非迁移属性页面申请。通过uboot传参cma=64M,可将cma最大值设置为64M。


END

来源:一口Linux







请到「今天看啥」查看全文