pci_alloc_consistent未缓存的内存

时间:2015-08-04 18:35:13

标签: linux-kernel dma pci pci-e

公平地说pci_alloc_consistent分配一个连续的非缓存,非分页内核内存块。我问的原因是我在一些内核/驱动程序代码中看到了这个注释(不是在vanilla内核源代码中),我想我明白内存是连续的,但是不确定它是什么分配非缓存,因为缓存一致性的想法是保持缓存中的数据和DMA内存一致。

另外,不确定为什么他们称之为非分页。

E.g。 Part Ia部分中的https://www.kernel.org/doc/Documentation/DMA-API.txt说:

一致性存储器是由设备或其写入的存储器 处理器或设备可以立即读取处理器 无需担心缓存效果。

所以我们无法推断内存非缓存,所以我倾向于认为我看到的评论有些误导。

我希望得到有用的评论。谢谢!

1 个答案:

答案 0 :(得分:3)

在x86上,缓存是DMA一致的(这要求缓存控制器监听所有DMA流量),因此一致的内存只是正常(缓存)内存。

在大多数其他体系结构中,缓存不是DMA一致的,因此pci_alloc_consistent()必须分配非缓存内存。

“非分页”表示内存无法交换到磁盘。但是,这是Windows驱动程序编写者所关心的事情;正常的Linux内核分配函数都没有返回可交换的内存。