pci_alloc_consistent 未缓存的内存
pci_alloc_consistent uncached memory
可以说 pci_alloc_consistent
分配了一个连续的非缓存、非分页内核内存块。我问的原因是我在一些 kernel/driver 代码中看到了这个评论(不是在香草内核源代码中),我想我明白内存是连续的,但不确定它是否被分配为非缓存,因为缓存一致性的思想是保持缓存中的数据和DMA内存中的数据一致。
此外,不确定他们为什么称其为非分页。
例如https://www.kernel.org/doc/Documentation/DMA-API.txt 在 Part Ia
部分说:
一致性内存是设备或
处理器可以立即被处理器或设备读取
无需担心缓存效果。
所以不能推断内存是非缓存,所以我倾向于认为我看到的评论有些误导。
如果能得到有用的评论,我将不胜感激。谢谢!
在 x86 上,缓存是 DMA 一致的(这要求缓存控制器监听所有 DMA 流量),因此一致的内存只是普通(缓存的)内存。
在大多数其他体系结构上,缓存不是 DMA 一致的,因此 pci_alloc_consistent()
必须分配非缓存内存。
"Non-paged"表示内存不能交换到磁盘。但是,这是 Windows 驱动程序编写者会关心的事情; none 正常 Linux 内核分配函数 returns 可交换内存。
可以说 pci_alloc_consistent
分配了一个连续的非缓存、非分页内核内存块。我问的原因是我在一些 kernel/driver 代码中看到了这个评论(不是在香草内核源代码中),我想我明白内存是连续的,但不确定它是否被分配为非缓存,因为缓存一致性的思想是保持缓存中的数据和DMA内存中的数据一致。
此外,不确定他们为什么称其为非分页。
例如https://www.kernel.org/doc/Documentation/DMA-API.txt 在 Part Ia
部分说:
一致性内存是设备或 处理器可以立即被处理器或设备读取 无需担心缓存效果。
所以不能推断内存是非缓存,所以我倾向于认为我看到的评论有些误导。
如果能得到有用的评论,我将不胜感激。谢谢!
在 x86 上,缓存是 DMA 一致的(这要求缓存控制器监听所有 DMA 流量),因此一致的内存只是普通(缓存的)内存。
在大多数其他体系结构上,缓存不是 DMA 一致的,因此 pci_alloc_consistent()
必须分配非缓存内存。
"Non-paged"表示内存不能交换到磁盘。但是,这是 Windows 驱动程序编写者会关心的事情; none 正常 Linux 内核分配函数 returns 可交换内存。