大多数设备需要连续内存。例如 GPU、VPU。
CMA 和静态内存分配是连续内存的例子。
为什么需要连续内存?
最佳答案
只能使用连续范围的物理内存的 I/O 设备需要连续内存分配 (CMA)。在具有 I/O 内存管理单元 (IOMMU) 的系统上,这不会成为问题,因为 IOMMU 可以将设备地址空间中连续的缓冲区映射到物理内存的非连续区域。还有一些设备可以做 scatter/gather DMA (即,可以读取/写入多个非连续缓冲区)。理想情况下,所有 I/O 设备都应设计为在 IOMMU 后面工作,或者应该能够分散/收集 DMA。不幸的是,情况并非如此,有些设备需要物理上连续的缓冲区。设备驱动程序有两种分配连续缓冲区的方法:
- 设备驱动程序可以在启动时分配一 block 物理内存。这是可靠的,因为大部分物理内存在启动时可用。但是,如果不使用 I/O 设备,那么分配的物理内存就被浪费了。
- 可以按需分配一 block 物理内存,但可能很难找到所需大小的连续空闲范围。不过,优点是内存仅在需要时分配。
CMA 通过提供这两种方法的优点而没有它们的缺点来解决这个确切的问题。基本思想是使迁移分配的物理页面成为可能,从而为连续缓冲区创建足够的空间。有关 CMA 如何工作的更多信息,请参见 here .
关于linux - 为什么在 linux 中需要连续内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415606/