繁体   English   中英

在Linux中DMA如何处理memcpy

[英]how memcpy is handled by DMA in linux

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

在某些体系结构中,CPU和内存之间的总线比较弱。 这些体系结构中的某些体系结构添加了DMA引擎,以允许复制大块内存而无需在CPU上运行循环。

在Linux中,您可以使用dmaengine子系统访问DMA引擎,但是这种引擎是否实际可用取决于硬件。

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

DMA强制将数据从CPU缓存中移出,因此对程序变量进行DMA复制将毫无意义,因为之后的第一个CPU访问将必须将它们读回到缓存中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM