簡體   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