当我使用Intel I/OAT通过async_memcpy进行 DMA 零复制/零周期(无 CPU)传输时,在虚拟寻址中,设备内存映射到哪里:到内核缓冲区(内核空间)或用户-缓冲区(用户空间)?
在现代 x86_64 CPU 中使用 I/OAT 是否有意义(当 CPU 内核可以在没有芯片组北桥的情况下快速访问 RAM)?
http://www.intel.com/content/www/us/en/wireless-network/accel-technology.html
当我使用Intel I/OAT通过async_memcpy进行 DMA 零复制/零周期(无 CPU)传输时,在虚拟寻址中,设备内存映射到哪里:到内核缓冲区(内核空间)或用户-缓冲区(用户空间)?
在现代 x86_64 CPU 中使用 I/OAT 是否有意义(当 CPU 内核可以在没有芯片组北桥的情况下快速访问 RAM)?
http://www.intel.com/content/www/us/en/wireless-network/accel-technology.html
鉴于内存是物理内存,它可以是内核可以寻址的任何内存,包括内核缓冲区和用户空间缓冲区。但是,它必须“固定”或“锁定”,这样内存才不会被带走(例如free
,在内存上做事的人不应该将内存释放回操作系统以重新分配给另一个进程,因为你可以得到如果是这样的话,效果会非常有趣)。当然,这与适用于各种其他 DMA 访问的规则相同。
我非常怀疑这有助于为您的普通用户模式应用程序复制数据结构。另一方面,我不相信英特尔会将这些功能放入处理器中,除非他们认为这在某种程度上是有益的。我理解它的方式是,它有助于将网络接收缓冲区复制到正在接收数据的用户模式应用程序中,而 CPU 参与较少。它不一定会大大加快实际的内存传输速度(如果有的话),但它可以减轻 CPU 的负担以做其他事情。
我很确定不久前我看到一些关于这项技术[或非常相似的东西]也进入了最新型号的处理器,所以我希望它有一些优势。