如何在linux中使用DMA处理memcpy

时间:2013-06-18 11:33:03

标签: c linux-kernel memcpy

我在我的程序中使用memcpy()。随着我增加变量的数量,不幸的是CPU使用率增加了。就像使用for循环迭代运行memcpy一样。 Linux中是否有快速memcpy功能?我应该使用补丁并编译内核吗?

1 个答案:

答案 0 :(得分:6)

有些架构的CPU和内存之间的总线相当弱;其中一些架构添加了一个DMA引擎,允许复制大块内存,而无需在CPU上运行循环。

在Linux中,您可以使用dmaengine子系统访问DMA引擎,但无论这种引擎是否实际可用,它都与硬件有关。

X86 CPU具有良好的内存子系统,并且还具有用于复制大块的特殊硬件支持,因此使用DMA引擎实际上不太可能提供帮助。 (英特尔在一些服务器主板上添加了一个名为I/OAT的DMA引擎,但总体results并不比普通的CPU副本好很多。)

DMA强制数据从CPU缓存中移出,因此为程序的变量执行DMA复制将完全没有意义,因为之后的第一次CPU访问必须将它们读回缓存。