6.5.2. 参数配置
6.5.2.1. 内核配置
MPP 依赖 VE 驱动,MPP Heap 内存管理框架,请在 MPP 编译前进行配置。
6.5.2.1.1. MPP Heap
ZX 平台使用 DMA-BUF 来实现多媒体模块间的 buffer 共享。对于 DMA-BUF,Kernel 提供 System Heap 和 CMA Heap 两个 exporter。 前者直接申请匿名页面,后者则在 CMA 内存中申请页面。
虽然通过这两个 exporter 都能拿到足够的物理连续内存,但它们在系统长时间运行后,都面临内存碎片化问题。特别是在 64 M 小内存方案中,碎片化问题尤为严重。
为了 解决内存碎片化 的问题,ZX 基于 CMA Heap 进行封装,提供一个私有的 exporter ,即 MPP Heap 。
参考快速入门 - 编译概述 - Kernel配置,进入 kernel 的功能配置,按如下选择:
Linux
Device Drivers --->
DMABUF options --->
[*] Explicit Synchronization Framework
[*] Sync File Validation Framework
[*] userspace dmabuf misc driver
[ ] Move notify between drivers (EXPERIMENTAL)
< > Selftests for the dma-buf interfaces
[*] DMA-BUF Userland Memory Heaps --->
[ ] DMA-BUF System Heap
[*] DMA-BUF CMA Heap
[*] DMA-BUF MPP Heap
MPP Heap 在 CMA 内存中申请一大块物理连续内存,使用 genpool 算法进行管理,提供给 MPP 中间件专用,其大小配置:
Linux
Library routines --->
[*] DMA Contiguous Memory Allocator
[ ] Enable separate DMA Contiguous Memory Area for each NUMA Node
*** Default contiguous memory area size: ***
(16) Size in Mega Bytes
(8) Size in Mega Bytes for MPP Heap
在上述例子中,系统预留了 16M CMA 内存,MPP Heap 再从 16M CMA 内存中申请 8M。
因为 MPP Heap 的内存是从 CMA 中申请的,前者是后者的子集,所以 MPP Heap 的 size 要小于 CMA 的 size。
备注
为了兼顾系统中其他需要物理连续内存的模块,不能将 CMA 内存全部分配给 MPP Heap,分配数值设置可参考 mpp heap 设置。
6.5.2.1.2. VE 驱动
VE 模块驱动配置请参考 VE 使用指南 内核配置
6.5.2.2. DTS 参数配置
VE 模块 DTS 配置请参考 VE 使用指南 内核配置