MMA Q&A

Q: 如何调整mma内存?

DDR total memory = linux memory+ mma + kernel reserved

要查看linux memory大小可查看MemTotal参数

cat /proc/meminfo

要查看mma的大小可查看length参数

cat/proc/mi_modules/mi_sys_mma/mma_heap_name0

因为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,用cat/proc/meminfo查看MemFree,考虑增加linux memory的大小,保证应用能正常运行。

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

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

...