大多数设备需要连续的内存。例如GPU,VPU。
CMA和静态内存分配是连续内存的示例。
为什么需要连续内存?
答案 0 :(得分:2)
仅可用于连续范围的物理内存的I / O设备需要连续的内存分配(CMA)。在具有I / O内存管理单元(IOMMU)的系统上,这不会成为问题,因为IOMMU可以将设备地址空间中连续的缓冲区映射到物理内存的不连续区域。另外,某些设备可以执行scatter/gather DMA(即可以从多个不连续的缓冲区读取/写入数据)。理想情况下,所有I / O设备都应设计为在IOMMU后面运行,或者应具有分散/聚集DMA的能力。不幸的是,情况并非如此,并且有些设备需要物理上连续的缓冲区。设备驱动程序有两种分配连续缓冲区的方法:
CMA通过提供这两种方法的优点而没有缺点,解决了这个确切的问题。基本思想是使迁移已分配的物理页面以为连续缓冲区创建足够的空间成为可能。有关here的更多信息,请参见{{3}}。