图形处理器(GPUs)和视频处理器(VPUs)需要连续的内存。
连续内存分配(CMA)和静态内存分配是连续内存的示例。
为什么这里需要连续内存?
图形处理器(GPUs)和视频处理器(VPUs)需要连续的内存。
连续内存分配(CMA)和静态内存分配是连续内存的示例。
为什么这里需要连续内存?
连续内存分配(CMA)是为需要使用连续物理内存范围的I/O设备所需的。只能使用连续范围的I/O设备是为了简化设备的设计。
在具有I/O内存管理单元(IOMMU)的系统上,这不是问题,因为在设备地址空间中连续的缓冲区可以由IOMMU映射到非连续的物理内存区域。此外,某些设备可以进行{{link1:散布/聚集DMA}}(即可以从/写入多个非连续缓冲区)。理想情况下,所有I/O设备都应该设计为要么在IOMMU后面工作,要么具有散布/聚集DMA的能力。不幸的是,情况并非如此,存在需要物理连续缓冲区的设备。设备驱动程序有两种方法来分配连续缓冲区:
CMA通过提供这两种方法的优点来解决这个问题,同时不会出现它们的缺点。基本思想是使得可能迁移已分配的物理页面以创建足够的空间来存储连续缓冲区。有关CMA如何工作的更多信息,请单击此处。