为什么在linux中需要连续内存分配?

eqqqjvef  于 2023-02-15  发布在  Linux
关注(0)|答案(1)|浏览(177)

GPU和VPU需要连续内存。
CMA和静态内存分配是连续内存的示例。
为什么这里需要连续内存?

yzckvree

yzckvree1#

只能使用连续物理内存范围的I/O设备需要连续内存分配(CMA)。只能使用连续范围的I/O设备是以这种方式构建的,目的是简化设备的设计。
在具有I/O内存管理单元的系统上(IOMMU),这将不是问题,因为IOMMU可以将设备地址空间中连续的缓冲区Map到物理内存的非连续区域。(即,可以从/向多个非连续缓冲器读/写)。理想地,所有的I/O设备都应该设计成在IOMMU后面工作,或者能够分散/聚集DMA。2不幸的是,情况并非如此,有些设备需要物理上连续的缓冲区。3设备驱动程序有两种方法来分配连续的缓冲区:

  • 设备驱动程序可以在引导时分配一块物理内存。这是可靠的,因为大多数物理内存在引导时都是可用的。但是,如果I/O设备没有被使用,那么分配的物理内存就是浪费了。
  • 物理内存块可以按需分配,但可能很难找到所需大小的连续空闲范围。不过,其优点是内存只在需要时分配。

CMA通过提供这两种方法的优点而没有它们的缺点来解决这个确切的问题。基本思想是使迁移已分配的物理页成为可能,以便为连续缓冲区创建足够的空间。有关CMA如何工作的更多信息可以在here中找到。

相关问题