MMA Q&A

Q: 如何调整mma内存?

目前DDR total memory = linux memory+ mma + kernel reserved

linux memory大小可通过输入cat /proc/meminfo,查看MemTotal参数

mma的大小通过输入cat/proc/mi_modules/mi_sys_mma/mma_heap_name0,查看length参数

因为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使用,保证系统内存够用。 

  1. 增加mma减少linux memory

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

    程序运行时如果打印 [MI ERR ]: MI_SYS_IMPL_MmaAlloc[6195]: fail! 等log时考虑增加mma内存,需修改project/configs/defconfigs下的配置文件。

    例打开dispcam_p3_spinand.glibc-9.1.0-s01a.64.qfn128.demo_defconfig配置文件,找到CONFIG_KERNEL_BOOT_ENV配置项,更改mma_heap=mma_heap_name0,miu=0,sz=0x1E00000参数中sz的size。

    我们先将mma的size设置得足够大,跑一个mma内存使用最大的场景,保证程序正常运行,然后输入cat /proc/mi_modules/mi_sys_mma/mma_heap_name0查看chunk_mgr_avail的大小。这个参数表示mma可用剩余内存,在之前设置的mma size上减去chunk_mgr_avail的size并多预留一定内存,作为最终mma的size,写到配置文件中。

  2. 减小mma大小增加linux memory

    程序运行时打印Out of memory错误log,可以cat/proc/meminfo,查看可用剩余内存MemFree有多少,此时考虑增加linux memory的大小,保证应用能正常跑起来。

    按照上述介绍修改project/configs/defconfigs下的配置文件,调小mma size则linux memory增加。

    我们需要找一个中间值既要保证sdk能从mma申请到内存,也要保证linux应用不出现out of memory,一般而言,先调mma取一个临界值,剩下的全部给linux memory。

...