陳 實,武 杰
一種基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸速率優(yōu)化方法研究*
陳實,武杰
(中國科學技術大學近代物理系,安徽合肥230026)
基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸系統(tǒng)在許多領域被普遍采用,系統(tǒng)的傳輸效率需要提高?;贏RM Cortex-M4內(nèi)核和常用的嵌入式網(wǎng)絡協(xié)議棧Lw IP,針對點對點數(shù)據(jù)傳輸?shù)奶攸c,采用了零數(shù)據(jù)拷貝技術并對UDP協(xié)議加以優(yōu)化改進,大大提高了傳輸性能。測試結果表明,數(shù)據(jù)傳輸?shù)乃俾蕪奈磧?yōu)化的2.03 MB/s提升到9.80 MB/s,已接近百兆以太網(wǎng)的極限。同時引入ACK回應機制保障了UDP數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
STM32F407;Lw IP/UDP;零數(shù)據(jù)拷貝;ACK
基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸系統(tǒng)由于其結構靈活、通用性強、傳輸速度快、傳輸距離遠等特點,在許多應用領域都發(fā)揮著重要的作用[1]。但由于嵌入式系統(tǒng)本身的結構[1]以及網(wǎng)絡協(xié)議棧的限制[2],網(wǎng)絡數(shù)據(jù)傳輸?shù)男什桓?,遠遠達不到以太網(wǎng)傳輸?shù)睦碚搸?。一方面通過改進嵌入式系統(tǒng)的硬件結構,如利用FPGA并行處理的優(yōu)勢[2],可以大大提高數(shù)據(jù)傳輸?shù)男剩涣硪环矫?,通過分析并改進嵌入式網(wǎng)絡協(xié)議棧,也可以提高網(wǎng)絡數(shù)據(jù)傳輸?shù)乃俣龋?]。
嵌入式網(wǎng)絡傳輸系統(tǒng)由于成本資源的限制,往往采用簡化的網(wǎng)絡傳輸協(xié)議TCP/IP協(xié)議。Lw IP協(xié)議棧是TCP/IP協(xié)議的一種簡化版本,專門針對嵌入式系統(tǒng)開發(fā),專注于減少資源消耗,對性能優(yōu)化卻比較少,效率不是很高[4]。
本文通過研究、分析常用的嵌入式網(wǎng)絡協(xié)議棧Lw IP的結構[4],針對簡單的點對點傳輸網(wǎng)絡環(huán)境,提出一種簡單、靈活、高效的基于UDP協(xié)議的嵌入式數(shù)據(jù)傳輸效率的優(yōu)化方法。
系統(tǒng)以嵌入式微處理器STM32F407為核心,使用輕型網(wǎng)絡傳輸協(xié)議棧Lw IP實現(xiàn)百兆以太網(wǎng)傳輸數(shù)據(jù)??紤]到嵌入式系統(tǒng)的處理速度和資源限制,為保證高效的數(shù)據(jù)傳輸,選擇更高效的UDP協(xié)議[5]。對于數(shù)據(jù)傳輸?shù)目煽啃?,提出基于ACK回應的機制來改善。
1.1系統(tǒng)硬件結構
選擇意法半導體的微處理器STM32F407作為系統(tǒng)的核心。它采用專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARMCortex-M4內(nèi)核,時鐘頻率達到168 MHz,具有專門的網(wǎng)絡MAC層接口和專用于網(wǎng)絡的DMA通道,外加PHY芯片和網(wǎng)絡接口,通過網(wǎng)線就可以實現(xiàn)網(wǎng)絡傳輸。
1.2Lw IP協(xié)議棧結構
Lw IP協(xié)議棧是基于分層的方式設計的,包括應用層、IP層、傳輸層等,每一層的協(xié)議都代表一個獨立的模塊,但是為了最小限度地使用系統(tǒng)資源,模塊間使用松散的通信機制,通過共享內(nèi)存來實現(xiàn)通信[6]。
Lw IP協(xié)議棧設置了一個各層共享的內(nèi)存空間——網(wǎng)絡數(shù)據(jù)包緩沖區(qū),數(shù)據(jù)分組存在一個確定的緩沖區(qū)Data buff中,在層與層之間打包與解包的過程中傳遞的只是這個緩沖區(qū)的地址payload,只有當數(shù)據(jù)要被發(fā)送至PHY或被應用程序取走時才會通過數(shù)據(jù)拷貝來實現(xiàn)。Lw IP協(xié)議棧使用pbuf來管理這個包緩沖區(qū),從而實現(xiàn)在協(xié)議棧各層之間數(shù)據(jù)包的零拷貝。pbuf結構如圖1所示,包括包的信息、標志、地址等,payload指針指向包緩沖區(qū)Data buff。
圖1 pbuf結構
1.3系統(tǒng)網(wǎng)絡傳輸過程分析
整個數(shù)據(jù)通路如圖2所示。
圖2 LWIP/UDP協(xié)議發(fā)包過程
下面就Lw IP協(xié)議棧UDP數(shù)據(jù)包的發(fā)送過程做詳細的分析。應用程序要利用UDP協(xié)議發(fā)送數(shù)據(jù),先要建立UDP會話結構體udp_pcb,綁定本地IP地址與端口。由于udp_pcb結構體本身很小,且在已分配好的內(nèi)存中,因此這一步執(zhí)行很快。
接下來,分配并建立pbuf,然后將待發(fā)送數(shù)據(jù)拷貝至pbuf緩沖區(qū)中。這個過程其實是將數(shù)據(jù)從應用層傳遞至網(wǎng)絡層的過程,這是第一次較大數(shù)據(jù)量的內(nèi)存拷貝,占用了很多系統(tǒng)資源,降低了系統(tǒng)的性能。
至此,發(fā)送前基本工作準備完畢,接下來發(fā)送網(wǎng)絡數(shù)據(jù)包。先要在網(wǎng)絡接口netif全局鏈表中查找網(wǎng)絡信息包將被傳輸至哪一個網(wǎng)絡接口。由于本系統(tǒng)是簡單的點對點網(wǎng)絡環(huán)境,系統(tǒng)也只有一個默認網(wǎng)絡接口,因此此步驟可以省去。
然后進入UDP協(xié)議傳輸層,生成UDP數(shù)據(jù)包頭;再轉(zhuǎn)入IP層,生成IP層包頭。這兩個過程不涉及數(shù)據(jù)拷貝,待發(fā)送網(wǎng)絡數(shù)據(jù)包一直存儲在pbuf中,UDP包頭和IP包頭通過指針和數(shù)據(jù)包連接在一起。
生成IP包以后,需要通過DMA(Direct Memory Access)將IP包發(fā)送到鏈路層MAC控制器的FIFO中然后發(fā)送出去。這個過程中涉及第二次大的內(nèi)存拷貝,要把pbuf里的IP包拷貝到DMA控制器的發(fā)送緩存中。
上面分析了嵌入式Lw IP協(xié)議棧收發(fā)網(wǎng)絡數(shù)據(jù)包的過程,包括數(shù)據(jù)由應用程序傳至協(xié)議棧pbuf緩沖包(API_to_Pbuf)和從pbuf緩沖包轉(zhuǎn)移到以太網(wǎng)DMA緩沖區(qū)(Pbuf_to_DMA)時的兩次大的數(shù)據(jù)拷貝過程,數(shù)據(jù)由DMA傳輸至MAC控制器的FIFO(DMA_to_FIFO)中,還有一些內(nèi)存分配、打包解包及由于考慮協(xié)議棧的通用性而導致的多余開銷(Others)。
測試利用系統(tǒng)內(nèi)部定時器完成,傳輸1 KB的數(shù)據(jù)包,上述4個部分開銷的測試結果如表1所示。
表1 Lw IP協(xié)議各部分開銷
由表1可以計算出數(shù)據(jù)傳輸速度為:
如圖3所示,最大的開銷就在兩次大的數(shù)據(jù)拷貝過程,占到整個開銷的73%。有很多關于TCP/IP協(xié)議零拷貝的研究[7],但多數(shù)對零拷貝的研究都是基于避免用戶空間與系統(tǒng)空間,與本系統(tǒng)存在的問題不太相同。其實,Lw IP協(xié)議棧通過pbuf緩沖包在各層之間傳遞數(shù)據(jù)包的地址指針已經(jīng)實現(xiàn)了協(xié)議棧內(nèi)部的零拷貝技術,但對于協(xié)議棧與應用程序之間的數(shù)據(jù)拷貝并沒有過多考慮。
圖3 各部分開銷比重
1.4Lw IP協(xié)議棧改進
基于以上的分析,對于本系統(tǒng)這樣一個簡單網(wǎng)絡環(huán)境,只需實現(xiàn)網(wǎng)絡的點對點通信,同時只傳輸固定格式的數(shù)據(jù)包,所以可以考慮讓網(wǎng)絡接口DMA控制器的數(shù)據(jù)緩存與協(xié)議棧pbuf緩沖包實現(xiàn)內(nèi)存共享,達到真正的零數(shù)據(jù)拷貝。為了實現(xiàn)DMA控制器的數(shù)據(jù)緩存與協(xié)議棧pbuf緩沖包共享內(nèi)存,將pbuf緩存包分配成PBUF_ROM類型,將pbuf緩存包的payload指針指向DMA數(shù)據(jù)緩存的地址。DMA控制器的數(shù)據(jù)緩存由系統(tǒng)分配,是一組連續(xù)的固定的內(nèi)存空間。本系統(tǒng)傳輸固定大小和格式的數(shù)據(jù)包,并只設置一個DMA緩存,使得數(shù)據(jù)包被系統(tǒng)接收以后不至于分散在多個DMA緩存中,否則將造成多個DMA緩存地址不連續(xù)而無法與緩沖包共享內(nèi)存。對于數(shù)據(jù)包頭的問題,由于本系統(tǒng)明確是UDP協(xié)議傳輸,且是點對點固定節(jié)點的網(wǎng)絡傳輸,可以在網(wǎng)絡傳輸前即將包頭設定完畢并保存下來,當進行網(wǎng)絡傳輸時直接應用這個固定包頭(其中UDP包頭8 B、IP包頭20 B、MAC幀頭14 B)即可。
同樣通過系統(tǒng)的定時器測試4個部分的開銷,測試結果如表2所示。
表2 改進后各部分開銷
從測試結果來看,經(jīng)改進的主要開銷是數(shù)據(jù)由DMA搬運到MAC控制器的FIFO的過程,避免了兩次大的內(nèi)存拷貝,實現(xiàn)了數(shù)據(jù)零拷貝,大大提升傳輸效率,傳輸速度可以達到,接近百兆網(wǎng)的極限。
UDP協(xié)議是一種無連接的傳輸層協(xié)議,發(fā)送端把數(shù)據(jù)發(fā)送出去以后并不關心接收端是否接收到了數(shù)據(jù),所以雖然它效率高,但并不可靠。很多文獻都討論過改進UDP協(xié)議的可靠性[8],下面提出一種提高UDP協(xié)議傳輸可靠性的簡易方法,在占用較少系統(tǒng)資源的前提下,盡量保證系統(tǒng)的傳輸性能和可靠性。
TFTP是一種基于ACK包回應機制的簡單協(xié)議,其基本思想是:發(fā)送一個UDP包以后,等收到ACK包回應才發(fā)送下一個UDP包;在一定時間內(nèi),如果沒有收到ACK包,即重新發(fā)送此包。這種方法固然可以改善數(shù)據(jù)的可靠傳輸,但每發(fā)送一個UDP包都多了一個ACK包回應的開銷,降低了傳輸性能。
基于ACK機制,本文提出兩點改進來改善UDP傳輸?shù)目煽啃裕阂环矫?,針對點對點的網(wǎng)絡傳輸應用,基于數(shù)據(jù)零拷貝,改進Lw IP/UDP協(xié)議棧;另一方面,為了提高ACK機制的效率,發(fā)送N個數(shù)據(jù)包才回應一個ACK包。發(fā)送端每次發(fā)送N個數(shù)據(jù)包,并將這N個包緩存起來,在規(guī)定時間內(nèi),如果未收到ACK回應包即重傳這N個包。雖然UDP協(xié)議存在誤碼,但誤碼率不高,因一個UDP包丟失而造成N個包都需重傳所造成的額外開銷并不明顯。具體實現(xiàn)時,需要區(qū)分ACK包和DATA包,發(fā)送數(shù)據(jù)前需在UDP包末尾追加ACK標識和NUM序號,DATA包則在UDP數(shù)據(jù)包末尾追加DATA標識和NUM序號。
收發(fā)兩端的傳輸流程如圖4所示。發(fā)送開始以后,發(fā)送端每次發(fā)送N個數(shù)據(jù)包,發(fā)送完馬上開始超時計時,等待ACK包回應;接收端接收并解析數(shù)據(jù)包,判斷一次傳輸是否完成(NUM%N為零即代表傳輸了N個包),完成即生成并發(fā)送ACK響應包;發(fā)送端收到ACK響應包后再發(fā)送下一組N個數(shù)據(jù)包,如果超時,重新發(fā)送上一組的N個數(shù)據(jù)包。
圖4 ACK機制的傳輸流程
當每次只傳輸1個數(shù)據(jù)包時,各部分開銷分布如表3所示,采用改進的Lw IP/UDP協(xié)議,UDP部分主要開銷還是DMA_to_FIFO及其他打包解包等過程;采用ACK機制,增加了一次ACK包的生成與傳輸(Process_ACK)、兩次ACK包的解析及檢錯重傳所造成的額外開銷(Others)。
采用每N個包發(fā)一次ACK響應包,減少Process_ACK的開銷,提高了傳輸效率。不同單次發(fā)送數(shù)據(jù)包數(shù)下的傳輸速率如圖5所示,ACK機制各部分開銷比重如圖6所示。從圖5看出,隨著N的增大傳輸速率逐漸增大,但是當N增加到12以后,速率增加趨于平緩。而從圖6可以看出,N的增加只會減少處理ACK響應時間(Process_ACK包括生成并發(fā)送ACK包),其他3個部分耗時不會減少,故存在一個極限的速率。
圖5 不同單次發(fā)送數(shù)據(jù)包數(shù)下的傳輸速率
圖6 ACK機制各部分開銷比重
這種改進方法比較簡單,考慮到等待重發(fā)等因素的影響,實際的傳輸速率還要降低一些。但其效率確實顯著提高,而且通過選擇單次傳輸數(shù)據(jù)包個數(shù)N的大小,可以靈活地調(diào)整傳輸效率、改善傳輸?shù)目煽啃浴?/p>
表3 ACK機制各部分開銷
本文詳細分析、測試嵌入式網(wǎng)絡Lw IP/UDP協(xié)議的
數(shù)據(jù)傳輸過程,針對點對點的簡單網(wǎng)絡傳輸,基于零數(shù)據(jù)拷貝的思想,改進了Lw IP/UDP協(xié)議,明顯提升了傳輸?shù)男阅埽瑪?shù)據(jù)傳輸?shù)乃俾蕪奈磧?yōu)化的2.03 MB/s提升到9.80 MB/s,已接近百兆以太網(wǎng)的極限。另外,通過引入改進的ACK機制,改善了傳輸?shù)目煽啃?,實現(xiàn)了一種通用高效靈活的網(wǎng)絡傳輸優(yōu)化方法。
[1]王琳,商周,王學偉.數(shù)據(jù)采集系統(tǒng)的發(fā)展與應用[J].電測與儀表,2004,41(464):4-8.
[2]姚雪,楊光,張祥.嵌入式數(shù)據(jù)傳輸系統(tǒng)速度優(yōu)化方法[J].微計算機應用,2011,32(3):59-63.
[3]段之昱,趙昭旺.嵌入式系統(tǒng)網(wǎng)絡數(shù)據(jù)傳輸性能研究[J].天文研究與技術,2007,4(3):266-275.
[4]孫樂鳴,江來,代鑫.嵌入式TCP/IP協(xié)議棧LWIP的內(nèi)部結構探索與研究[J].電子元器件應用,2008,10(3):79-81.
[5]徐鑫,曹奇英.基于Lw IP協(xié)議棧的UDP協(xié)議分析與優(yōu)化[J].計算機應用與軟件,2011,28(3):246-249.
[6]ADAM D.Design and implementation of the Lw IP TCP/IP stack[M].Swedish Institute of Computer Science,2001.
[7]王小峰,時向泉,蘇金樹.一種TCP/IP卸載的數(shù)據(jù)零拷貝傳輸方法[J].計算機工程與科學,2008,30(2):135-138.
[8]李國,鞏光志,王冬冬.一種提高UDP可靠性的數(shù)據(jù)傳輸方法研究[J].中國民航大學學報,2012,30(1):41-45.
Study of optim ization method for an embedded data transm ission system based on ethernet
Chen Shi,Wu Jie
(Department of Modern Physics,University of Science and Technology of China,Hefei 230026,China)
The data transmission systems based on the ethernet have been employed in many fields,however,the transmission efficiency need to be improved.This paper aims to improve the transm ission efficiency and reliability of the data transmission of the net.It is based on the ARM and LwIP.Considering the characteristic of the zero data transmission,It adopts the zero data copy technology and optim izes the UDP protocol,which significantly enhances the transmission efficiency.The test results show that the data transmission rate increases from 2.1Mb/s to 10Mb/s,which nearly reaches the full transmission potential of the net.Moreover,it employs the ACK reaction mechanism to maintain the reliability of the data transmission.
STM32F407;LwIP/UDP;zero data copy;ACK
TL8,TP274+.2
A
1674-7720(2015)04-0064-03
國家重大科研裝備研制項目“深部資源探測核心裝備研發(fā)”(ZDYZ2012-1-05-03);國家科技重大專項“MEMS加速度傳感器規(guī)模化制造技術與數(shù)字檢波器集成”(2011ZX05008-005-61)
(2014-10-26)
陳實(1985-),男,碩士,主要研究方向:嵌入式數(shù)據(jù)傳輸。
武杰(1976-),通信作者,男,博士,副教授,主要研究方向:大規(guī)模數(shù)據(jù)獲取系統(tǒng)。E-mail:wujie@ustc.edu.cn。