1. 什么是cma
cma(contigous memory allocator),是内存管理子系统中的一个模块,负责物理地址连续的内存分配。一般系统会在启动过程中,从整个memory中配置一段连续内存用于cma,其他模块可以通过cma的接口api进行连续内存分配。
2. cma优势
解决内存浪费的问题,其保留的内存可以由buddy系统分配,当真正需要此连续内存时,可以将由buddy系统分配的内存migrate到其他地方,腾出连续的空间
3. cma问题
性能问题,内存迁移会带来性能损耗,在内存紧张时尤为明显,cpu占用率会变高
4. cma类型
cma有两种类型:global cma area和per device cma area
5. cma配置
linux 4.9中已经实现cma的相关机制,可以在make config中进行相关配置打开此功能
Kernel Features --->
[*] Contiguous Memory Allocator
Device Drivers --->
Generic Driver Options --->
[*] DMA Contiguous Memory Allocator
(是否有其他配置选项还有待研究)
6. cma分配
有3种方法进行cma内存分配,通过dts分配(推荐),通过命令行参数,通过make config配置
后两种方法只可以分配global cma area,所以推荐使用dts分配。
dts分配参考示例