private pool说明
1. 概述¶
sdk所有模块都在mma里申请内存,如果有频繁destory再create的动作(buffer释放再申请)容易出现内存空隙导致浪费内存。在mma里单独为每个模块分配一块private pool,能有效解决内存碎片问题:
MI_S32 MI_SYS_ConfigPrivateMMAPool(MI_SYS_GlobalPrivPoolConfig_t *pstGlobalPrivPoolConf);
2. 结构体说明¶
u8MMAHeapName, ## mma的名字,33x系列固定为”mma_heap_name0” u32PrivateHeapSize, ## 申请private pool的size(具体每个模块的size见《内存说明.pdf》)。 bCreate, ## TRUE表示申请,FALSE表示释放。
3. 使用说明¶
其中eConfigType 包括四种类型mma buffer:
-
E_MI_SYS_VPE_TO_VENC_PRIVATE_RING_POOL :
RingHeapAlloc : vpe port 0-->venc间的yuv单独申请一块private pool。
-
E_MI_SYS_PER_CHN_PRIVATE_POOL :
每个venc chnnel 单独申请一块private pool。
-
E_MI_SYS_PER_DEV_PRIVATE_POOL :
-
为所有ISP buffer申请一块private pool。
-
为所有RGN申请一块private pool。
-
为ao dev单独申请一块private pool,size= ao_Dev0_dma + ao-Dev0-tmp。
-
为ai dev单独申请一块private pool,size= ai-Dev0-dma + ai0-out0 * depth。
-
-
E_MI_SYS_PER_CHN_PORT_OUTPUT_POOL :
-
每个vpe port 单独申请一块private pool, size=vpe0-outx-y (x表示vpe chnnel ,y 表示port) *depth。
-
每个divp chnnel 单独申请一块private pool , size=divp0-outx-0 (x表示divp chnnel) *depth。
-
sample code请参考int ConfigMMAHeap(USER_MMA_INFO *MmaParam,int alloc_flag);
建议: MI_SYS_INIT() 后,就立即调该api 申请每个模块的Private Pool。这样可以最大化的避免碎片。
为所有模块申请private pool后,cat /proc/mi_modules/mi_sys_mma/mma_heap0_name
检查每个private pool是否申请过大或者过小。过大会浪费内存,过小会让模块buffer在private pool申请不到而跑到mma里申请。