如何在linux中使用DMA处理memcpy

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

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

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

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

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