使用英特尔I / OAT时,在虚拟寻址中将设备内存映射到哪里?

时间:2013-09-01 18:04:08

标签: c++ c intel dma zero-copy

当我使用 Intel I/OAT 进行DMA零拷贝/零周期(无CPU)通过async_memcpy传输时,在虚拟寻址中映射设备内存的位置:到内核缓冲区(内核空间)还是用户缓冲区(用户空间)?

在现代x86_64 CPU中使用I / OAT是否有意义(当CPU核心可以在没有芯片组北桥的情况下快速访问RAM)?

http://www.intel.com/content/www/us/en/wireless-network/accel-technology.html

1 个答案:

答案 0 :(得分:2)

鉴于内存是物理内存,它可以是内核可以寻址的任何内存,包括内核缓冲区和用户空间缓冲区。然而它必须被“固定”或“锁定”,以便内存不会被带走(例如,在内存上执行free的人不应该将内存释放回操作系统以重新分配给另一个进程,因为如果是这样你可以得到非常有趣的效果)。这当然是适用于各种其他DMA访问的相同规则。

我非常怀疑这有助于复制普通用户模式应用程序的数据结构。另一方面,我不相信英特尔会把这些功能放到处理器中,除非他们认为它在某种程度上是有益的。我理解它的方式是将网络接收缓冲区复制到接收数据的用户模式应用程序中,这有助于减少CPU的使用。它不一定能加快实际的内存传输速度(如果有的话),但是它可以将CPU卸载到其他地方。

我很确定我不久前看到过这种技术[或类似的东西]也会进入最新型号的处理器,所以我希望它有一些优势。