如何在linux中使用DMA处理memcpy

Sam*_*Sam 2 c memcpy linux-kernel

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

CL.*_*CL. 6

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

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

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

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