![](/img/trans.png)
[英]Memory allocation failed when required more than 16GB contiguous memory
[英]Why Contiguous memory allocation is required in linux?
大多数设备需要连续的内存。 例如GPU,VPU。
CMA和静态内存分配是连续内存的示例。
为什么需要连续内存?
对于只能与连续范围的物理内存一起使用的I / O设备,需要连续内存分配(CMA)。 在具有I / O内存管理单元(IOMMU)的系统上,这不会成为问题,因为IOMMU可以将设备地址空间中连续的缓冲区映射到物理内存的不连续区域。 同样,某些设备可以执行分散/收集DMA (即可以从多个不连续的缓冲区读取/写入数据)。 理想情况下,所有I / O设备都应设计为在IOMMU后面运行,或者应具有分散/聚集DMA的能力。 不幸的是,情况并非如此,并且有些设备需要物理上连续的缓冲区。 设备驱动程序有两种分配连续缓冲区的方法:
CMA通过提供这两种方法的优点而没有缺点,解决了这个确切的问题。 基本思想是使迁移已分配的物理页面以为连续缓冲区创建足够的空间成为可能。 有关CMA如何工作的更多信息,请参见此处 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.