浅谈scatter-gather DMA
在正文開始之前需要先搞明白以下幾個(gè)問題:
1. 什么是DMA?
DMA的中文名稱叫做 直接內(nèi)存訪問,是一種不需要CPU參與,就能實(shí)現(xiàn)數(shù)據(jù)搬移的技術(shù)(從一個(gè)地址空間到另一個(gè)地址空間)。
2. DMA有什么用?
一定程度上解放CPU,對(duì)于實(shí)現(xiàn)? 高效嵌入式系統(tǒng) 與? 加速網(wǎng)絡(luò)數(shù)據(jù)處理? 有極其重要的作用。
3. DMA的實(shí)現(xiàn)簡(jiǎn)述
在實(shí)現(xiàn)DMA傳輸時(shí),是由DMA控制器直接掌管總線,因此,存在著一個(gè)總線控制權(quán)轉(zhuǎn)移問題。即DMA傳輸前,CPU要把總線控制權(quán)交給DMA控制器,而在結(jié)束DMA傳輸后,DMA控制器應(yīng)立即把總線控制權(quán)再交回給CPU。一個(gè)完整的DMA傳輸過程必須經(jīng)過DMA請(qǐng)求、DMA響應(yīng)、DMA傳輸、DMA結(jié)束?4個(gè)步驟。
?
scatter-gather DMA 與 block DMA
傳統(tǒng)的block DMA 一次只能傳輸物理上連續(xù)的一個(gè)塊的數(shù)據(jù), 完成傳輸后發(fā)起中斷。而scatter-gather DMA允許一次傳輸多個(gè)物理上不連續(xù)的塊,完成傳輸后只發(fā)起一次中斷。?
傳統(tǒng)的block DMA像這樣:
?
先進(jìn)的scatter-gather DMA像這樣:
?
這樣做的好處是直觀的,大大減少了中斷的次數(shù),提高了數(shù)據(jù)傳輸?shù)男省?/p>
?
scatter-gather DMA的應(yīng)用
dpdk在ip分片的實(shí)現(xiàn)中,采用了一種稱作零拷貝的技術(shù)。而這種實(shí)現(xiàn)方式的底層,正是由scatter-gather DMA支撐的。dpdk的分片包采用了鏈?zhǔn)焦芾?#xff0c;同一個(gè)數(shù)據(jù)包的數(shù)據(jù),分散存儲(chǔ)在不連續(xù)的塊中(mbuf結(jié)構(gòu))。這就要求DMA一次操作,需要從不連續(xù)的多個(gè)塊中搬移數(shù)據(jù)。附上e1000驅(qū)動(dòng)發(fā)包部分代碼:
?
總結(jié)
以上是生活随笔為你收集整理的浅谈scatter-gather DMA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 802.11ac/ax (wifi6)中
- 下一篇: 无线csa通告