GPU和VPU需要连续内存。CMA和静态内存分配是连续内存的示例。为什么这里需要连续内存?
yzckvree1#
只能使用连续物理内存范围的I/O设备需要连续内存分配(CMA)。只能使用连续范围的I/O设备是以这种方式构建的,目的是简化设备的设计。在具有I/O内存管理单元的系统上(IOMMU),这将不是问题,因为IOMMU可以将设备地址空间中连续的缓冲区Map到物理内存的非连续区域。(即,可以从/向多个非连续缓冲器读/写)。理想地,所有的I/O设备都应该设计成在IOMMU后面工作,或者能够分散/聚集DMA。2不幸的是,情况并非如此,有些设备需要物理上连续的缓冲区。3设备驱动程序有两种方法来分配连续的缓冲区:
CMA通过提供这两种方法的优点而没有它们的缺点来解决这个确切的问题。基本思想是使迁移已分配的物理页成为可能,以便为连续缓冲区创建足够的空间。有关CMA如何工作的更多信息可以在here中找到。
1条答案
按热度按时间yzckvree1#
只能使用连续物理内存范围的I/O设备需要连续内存分配(CMA)。只能使用连续范围的I/O设备是以这种方式构建的,目的是简化设备的设计。
在具有I/O内存管理单元的系统上(IOMMU),这将不是问题,因为IOMMU可以将设备地址空间中连续的缓冲区Map到物理内存的非连续区域。(即,可以从/向多个非连续缓冲器读/写)。理想地,所有的I/O设备都应该设计成在IOMMU后面工作,或者能够分散/聚集DMA。2不幸的是,情况并非如此,有些设备需要物理上连续的缓冲区。3设备驱动程序有两种方法来分配连续的缓冲区:
CMA通过提供这两种方法的优点而没有它们的缺点来解决这个确切的问题。基本思想是使迁移已分配的物理页成为可能,以便为连续缓冲区创建足够的空间。有关CMA如何工作的更多信息可以在here中找到。