MMA内存使用Debug参考


1. 概述

目前

DDR total memory = linux memory(cat /proc/meminfo的MemTotal) + mma(mma_heap_name0 + MMU_MMA) + kernel reserved

因为kernel reserved的部分一般是固定不变的,所以当mma增大时,对应的linux memory就会减少,反之linux memory就会增大。

其中linux memory一般是供linux系统调用分配的如malloc,mma是供SDK内部硬件IP使用的。如果出现linux oom说明linux memory不够了, 这时可以通过减少mma的大小来增加linux memory;如果出现mma alloc fail说明mma不够用了,这时可以适当的增加mma的大小。

mma和linux memory大小的分配要根据用户实际使用场景来决定,基本原则是在用户最大使用场景上,把多余的mma大小都拿出来给linux memory使用,保证系统内存够用。


2. mma alloc fail处理

  1. 把sys的debug level提高到MI_DBG_KMSG级别,当alloc mma fail时会自动打印mma的使用情况:

  2. 如果确实是chunk_mgr_avail不够了,那就需要在config中增大sz的值:

  3. 如果是chunk_mgr_avail还够,但是没有连续的一整块buf足够alloc(内存碎片),可以打开MMU,优化内存碎片问题,提高mma使用率 打开MMU的方法很简单,只需要在config中增加MMU的设定即可:

    其中sz为对应MMU的大小,打开MMU后,大部分sdk的内存会到MMU里面来alloc,所以可以把MMU_MMA的大小设定成接近mma_heap_name0的大小,然后使用cat/proc/mi_modules/mi_sys_mma/MMU_MMA,查看MMU的使用情况来决定需要分配多大的内存给MMU。

  4. 什么情况下需要调整mma/MMU内存分配:

    程序运行时打印 [MI ERR ]: MI_SYS_IMPL_MmaAlloc[6195]: fail! 等log时需考虑内存分配,如:

    表示VDEC申请mma内存失败,需要增加mma内存了