《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 一種基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸速率優(yōu)化方法研究
一種基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸速率優(yōu)化方法研究
2015年微型機(jī)與應(yīng)用第4期
陳 實(shí),,武 杰
(中國(guó)科學(xué)技術(shù)大學(xué) 近代物理系,安徽 合肥 230026)
摘要: 基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸系統(tǒng)在許多領(lǐng)域被普遍采用,系統(tǒng)的傳輸效率需要提高,。基于ARM Cortex-M4內(nèi)核和常用的嵌入式網(wǎng)絡(luò)協(xié)議棧LwIP,,針對(duì)點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸?shù)奶攸c(diǎn),,采用了零數(shù)據(jù)拷貝技術(shù)并對(duì)UDP協(xié)議加以優(yōu)化改進(jìn),大大提高了傳輸性能,。測(cè)試結(jié)果表明,,數(shù)據(jù)傳輸?shù)乃俾蕪奈磧?yōu)化的2.03 MB/s提升到9.80 MB/s,已接近百兆以太網(wǎng)的極限,。同時(shí)引入ACK回應(yīng)機(jī)制保障了UDP數(shù)據(jù)傳輸?shù)目煽啃浴?
Abstract:
Key words :

  摘  要: 基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸系統(tǒng)在許多領(lǐng)域被普遍采用,,系統(tǒng)的傳輸效率需要提高?;贏RM Cortex-M4內(nèi)核和常用的嵌入式網(wǎng)絡(luò)協(xié)議棧LwIP,,針對(duì)點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸?shù)奶攸c(diǎn),采用了零數(shù)據(jù)拷貝技術(shù)并對(duì)UDP協(xié)議加以優(yōu)化改進(jìn),,大大提高了傳輸性能,。測(cè)試結(jié)果表明,數(shù)據(jù)傳輸?shù)乃俾蕪奈磧?yōu)化的2.03 MB/s提升到9.80 MB/s,,已接近百兆以太網(wǎng)的極限,。同時(shí)引入ACK回應(yīng)機(jī)制保障了UDP數(shù)據(jù)傳輸?shù)目煽啃浴?/p>

  關(guān)鍵詞STM32F407LwIP/UDP,;零數(shù)據(jù)拷貝,;ACK

0 引言

  基于以太網(wǎng)的嵌入式數(shù)據(jù)傳輸系統(tǒng)由于其結(jié)構(gòu)靈活、通用性強(qiáng),、傳輸速度快,、傳輸距離遠(yuǎn)等特點(diǎn),在許多應(yīng)用領(lǐng)域都發(fā)揮著重要的作用[1],。但由于嵌入式系統(tǒng)本身的結(jié)構(gòu)[1]以及網(wǎng)絡(luò)協(xié)議棧的限制[2],,網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)男什桓撸h(yuǎn)遠(yuǎn)達(dá)不到以太網(wǎng)傳輸?shù)睦碚搸?。一方面通過改進(jìn)嵌入式系統(tǒng)的硬件結(jié)構(gòu),,如利用FPGA并行處理的優(yōu)勢(shì)[2],可以大大提高數(shù)據(jù)傳輸?shù)男?;另一方面,,通過分析并改進(jìn)嵌入式網(wǎng)絡(luò)協(xié)議棧,也可以提高網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)乃俣萚3],。

  嵌入式網(wǎng)絡(luò)傳輸系統(tǒng)由于成本資源的限制,,往往采用簡(jiǎn)化的網(wǎng)絡(luò)傳輸協(xié)議TCP/IP協(xié)議。LwIP協(xié)議棧是TCP/IP協(xié)議的一種簡(jiǎn)化版本,,專門針對(duì)嵌入式系統(tǒng)開發(fā),,專注于減少資源消耗,,對(duì)性能優(yōu)化卻比較少,效率不是很高[4],。

  本文通過研究,、分析常用的嵌入式網(wǎng)絡(luò)協(xié)議棧LwIP的結(jié)構(gòu)[4],針對(duì)簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)傳輸網(wǎng)絡(luò)環(huán)境,,提出一種簡(jiǎn)單,、靈活、高效的基于UDP協(xié)議的嵌入式數(shù)據(jù)傳輸效率的優(yōu)化方法,。

1 系統(tǒng)結(jié)構(gòu)和協(xié)議棧分析及改進(jìn)

  系統(tǒng)以嵌入式微處理器STM32F407為核心,,使用輕型網(wǎng)絡(luò)傳輸協(xié)議棧LwIP實(shí)現(xiàn)百兆以太網(wǎng)傳輸數(shù)據(jù)??紤]到嵌入式系統(tǒng)的處理速度和資源限制,,為保證高效的數(shù)據(jù)傳輸,選擇更高效的UDP協(xié)議[5],。對(duì)于數(shù)據(jù)傳輸?shù)目煽啃?,提出基于ACK回應(yīng)的機(jī)制來改善。

  1.1 系統(tǒng)硬件結(jié)構(gòu)

  選擇意法半導(dǎo)體的微處理器STM32F407作為系統(tǒng)的核心,。它采用專為要求高性能,、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的ARMCortex-M4內(nèi)核,,時(shí)鐘頻率達(dá)到168 MHz,,具有專門的網(wǎng)絡(luò)MAC層接口和專用于網(wǎng)絡(luò)的DMA通道,外加PHY芯片和網(wǎng)絡(luò)接口,,通過網(wǎng)線就可以實(shí)現(xiàn)網(wǎng)絡(luò)傳輸,。

  1.2 LwIP協(xié)議棧結(jié)構(gòu)

  LwIP協(xié)議棧是基于分層的方式設(shè)計(jì)的,包括應(yīng)用層,、IP層,、傳輸層等,每一層的協(xié)議都代表一個(gè)獨(dú)立的模塊,,但是為了最小限度地使用系統(tǒng)資源,,模塊間使用松散的通信機(jī)制,通過共享內(nèi)存來實(shí)現(xiàn)通信[6],。

  LwIP協(xié)議棧設(shè)置了一個(gè)各層共享的內(nèi)存空間——網(wǎng)絡(luò)數(shù)據(jù)包緩沖區(qū),,數(shù)據(jù)分組存在一個(gè)確定的緩沖區(qū)Data buff中,在層與層之間打包與解包的過程中傳遞的只是這個(gè)緩沖區(qū)的地址payload,,只有當(dāng)數(shù)據(jù)要被發(fā)送至PHY或被應(yīng)用程序取走時(shí)才會(huì)通過數(shù)據(jù)拷貝來實(shí)現(xiàn),。LwIP協(xié)議棧使用pbuf來管理這個(gè)包緩沖區(qū),從而實(shí)現(xiàn)在協(xié)議棧各層之間數(shù)據(jù)包的零拷貝。pbuf結(jié)構(gòu)如圖1所示,,包括包的信息,、標(biāo)志、地址等,,payload指針指向包緩沖區(qū)Data buff。

001.jpg

  1.3 系統(tǒng)網(wǎng)絡(luò)傳輸過程分析

  整個(gè)數(shù)據(jù)通路如圖2所示,。

002.jpg

  下面就LwIP協(xié)議棧UDP數(shù)據(jù)包的發(fā)送過程做詳細(xì)的分析,。應(yīng)用程序要利用UDP協(xié)議發(fā)送數(shù)據(jù),先要建立UDP會(huì)話結(jié)構(gòu)體udp_pcb,,綁定本地IP地址與端口,。由于udp_pcb結(jié)構(gòu)體本身很小,且在已分配好的內(nèi)存中,,因此這一步執(zhí)行很快,。

  接下來,分配并建立pbuf,,然后將待發(fā)送數(shù)據(jù)拷貝至pbuf緩沖區(qū)中,。這個(gè)過程其實(shí)是將數(shù)據(jù)從應(yīng)用層傳遞至網(wǎng)絡(luò)層的過程,這是第一次較大數(shù)據(jù)量的內(nèi)存拷貝,,占用了很多系統(tǒng)資源,,降低了系統(tǒng)的性能。

  至此,,發(fā)送前基本工作準(zhǔn)備完畢,,接下來發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包。先要在網(wǎng)絡(luò)接口netif全局鏈表中查找網(wǎng)絡(luò)信息包將被傳輸至哪一個(gè)網(wǎng)絡(luò)接口,。由于本系統(tǒng)是簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)環(huán)境,,系統(tǒng)也只有一個(gè)默認(rèn)網(wǎng)絡(luò)接口,因此此步驟可以省去,。

  然后進(jìn)入U(xiǎn)DP協(xié)議傳輸層,,生成UDP數(shù)據(jù)包頭;再轉(zhuǎn)入IP層,,生成IP層包頭,。這兩個(gè)過程不涉及數(shù)據(jù)拷貝,待發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包一直存儲(chǔ)在pbuf中,,UDP包頭和IP包頭通過指針和數(shù)據(jù)包連接在一起,。

  生成IP包以后,需要通過DMA(Direct Memory Access)將IP包發(fā)送到鏈路層MAC控制器的FIFO中然后發(fā)送出去,。這個(gè)過程中涉及第二次大的內(nèi)存拷貝,,要把pbuf里的IP包拷貝到DMA控制器的發(fā)送緩存中。

  上面分析了嵌入式LwIP協(xié)議棧收發(fā)網(wǎng)絡(luò)數(shù)據(jù)包的過程,包括數(shù)據(jù)由應(yīng)用程序傳至協(xié)議棧pbuf緩沖包(API_to_Pbuf)和從pbuf緩沖包轉(zhuǎn)移到以太網(wǎng)DMA緩沖區(qū)(Pbuf_to_DMA)時(shí)的兩次大的數(shù)據(jù)拷貝過程,,數(shù)據(jù)由DMA傳輸至MAC控制器的FIFO(DMA_to_FIFO)中,,還有一些內(nèi)存分配、打包解包及由于考慮協(xié)議棧的通用性而導(dǎo)致的多余開銷(Others),。

  測(cè)試?yán)孟到y(tǒng)內(nèi)部定時(shí)器完成,,傳輸1 KB的數(shù)據(jù)包,上述4個(gè)部分開銷的測(cè)試結(jié)果如表1所示,。

  006.jpg

  如圖3所示,,最大的開銷就在兩次大的數(shù)據(jù)拷貝過程,占到整個(gè)開銷的73%,。有很多關(guān)于TCP/IP協(xié)議零拷貝的研究[7],,但多數(shù)對(duì)零拷貝的研究都是基于避免用戶空間與系統(tǒng)空間,與本系統(tǒng)存在的問題不太相同,。其實(shí),,LwIP協(xié)議棧通過pbuf緩沖包在各層之間傳遞數(shù)據(jù)包的地址指針已經(jīng)實(shí)現(xiàn)了協(xié)議棧內(nèi)部的零拷貝技術(shù),但對(duì)于協(xié)議棧與應(yīng)用程序之間的數(shù)據(jù)拷貝并沒有過多考慮,。

003.jpg

  1.4 LwIP協(xié)議棧改進(jìn)

  基于以上的分析,,對(duì)于本系統(tǒng)這樣一個(gè)簡(jiǎn)單網(wǎng)絡(luò)環(huán)境,只需實(shí)現(xiàn)網(wǎng)絡(luò)的點(diǎn)對(duì)點(diǎn)通信,,同時(shí)只傳輸固定格式的數(shù)據(jù)包,,所以可以考慮讓網(wǎng)絡(luò)接口DMA控制器的數(shù)據(jù)緩存與協(xié)議棧pbuf緩沖包實(shí)現(xiàn)內(nèi)存共享,達(dá)到真正的零數(shù)據(jù)拷貝,。為了實(shí)現(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ù)包,,并只設(shè)置一個(gè)DMA緩存,,使得數(shù)據(jù)包被系統(tǒng)接收以后不至于分散在多個(gè)DMA緩存中,否則將造成多個(gè)DMA緩存地址不連續(xù)而無法與緩沖包共享內(nèi)存,。對(duì)于數(shù)據(jù)包頭的問題,,由于本系統(tǒng)明確是UDP協(xié)議傳輸,且是點(diǎn)對(duì)點(diǎn)固定節(jié)點(diǎn)的網(wǎng)絡(luò)傳輸,,可以在網(wǎng)絡(luò)傳輸前即將包頭設(shè)定完畢并保存下來,,當(dāng)進(jìn)行網(wǎng)絡(luò)傳輸時(shí)直接應(yīng)用這個(gè)固定包頭(其中UDP包頭8 B、IP包頭20 B,、MAC幀頭14 B)即可,。

  同樣通過系統(tǒng)的定時(shí)器測(cè)試4個(gè)部分的開銷,測(cè)試結(jié)果如表2所示。

007.jpg

  從測(cè)試結(jié)果來看,,經(jīng)改進(jìn)的主要開銷是數(shù)據(jù)由DMA搬運(yùn)到MAC控制器的FIFO的過程,,避免了兩次大的內(nèi)存拷貝,實(shí)現(xiàn)了數(shù)據(jù)零拷貝,,大大提升傳輸效率,,傳輸速度可以達(dá)到4_Z$6Z4)I9)P1ZNTAIW}$1U.jpg,接近百兆網(wǎng)的極限,。

2 基于ACK機(jī)制的UDP可靠傳輸

  UDP協(xié)議是一種無連接的傳輸層協(xié)議,,發(fā)送端把數(shù)據(jù)發(fā)送出去以后并不關(guān)心接收端是否接收到了數(shù)據(jù),所以雖然它效率高,,但并不可靠。很多文獻(xiàn)都討論過改進(jìn)UDP協(xié)議的可靠性[8],,下面提出一種提高UDP協(xié)議傳輸可靠性的簡(jiǎn)易方法,,在占用較少系統(tǒng)資源的前提下,盡量保證系統(tǒng)的傳輸性能和可靠性,。

  TFTP是一種基于ACK包回應(yīng)機(jī)制的簡(jiǎn)單協(xié)議,,其基本思想是:發(fā)送一個(gè)UDP包以后,等收到ACK包回應(yīng)才發(fā)送下一個(gè)UDP包,;在一定時(shí)間內(nèi),,如果沒有收到ACK包,即重新發(fā)送此包,。這種方法固然可以改善數(shù)據(jù)的可靠傳輸,,但每發(fā)送一個(gè)UDP包都多了一個(gè)ACK包回應(yīng)的開銷,降低了傳輸性能,。

  基于ACK機(jī)制,,本文提出兩點(diǎn)改進(jìn)來改善UDP傳輸?shù)目煽啃裕阂环矫妫槍?duì)點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)傳輸應(yīng)用,,基于數(shù)據(jù)零拷貝,,改進(jìn)LwIP/UDP協(xié)議棧;另一方面,,為了提高ACK機(jī)制的效率,,發(fā)送N個(gè)數(shù)據(jù)包才回應(yīng)一個(gè)ACK包。發(fā)送端每次發(fā)送N個(gè)數(shù)據(jù)包,,并將這N個(gè)包緩存起來,,在規(guī)定時(shí)間內(nèi),如果未收到ACK回應(yīng)包即重傳這N個(gè)包,。雖然UDP協(xié)議存在誤碼,,但誤碼率不高,因一個(gè)UDP包丟失而造成N個(gè)包都需重傳所造成的額外開銷并不明顯。具體實(shí)現(xiàn)時(shí),,需要區(qū)分ACK包和DATA包,,發(fā)送數(shù)據(jù)前需在UDP包末尾追加ACK標(biāo)識(shí)和NUM序號(hào),DATA包則在UDP數(shù)據(jù)包末尾追加DATA標(biāo)識(shí)和NUM序號(hào),。

004.jpg

  收發(fā)兩端的傳輸流程如圖4所示,。發(fā)送開始以后,發(fā)送端每次發(fā)送N個(gè)數(shù)據(jù)包,,發(fā)送完馬上開始超時(shí)計(jì)時(shí),,等待ACK包回應(yīng);接收端接收并解析數(shù)據(jù)包,,判斷一次傳輸是否完成(NUM%N為零即代表傳輸了N個(gè)包),,完成即生成并發(fā)送ACK響應(yīng)包;發(fā)送端收到ACK響應(yīng)包后再發(fā)送下一組N個(gè)數(shù)據(jù)包,,如果超時(shí),,重新發(fā)送上一組的N個(gè)數(shù)據(jù)包。

008.jpg

  當(dāng)每次只傳輸1個(gè)數(shù)據(jù)包時(shí),,各部分開銷分布如表3所示,,采用改進(jìn)的LwIP/UDP協(xié)議,UDP部分主要開銷還是DMA_to_FIFO及其他打包解包等過程,;采用ACK機(jī)制,,增加了一次ACK包的生成與傳輸(Process_ACK)、兩次ACK包的解析及檢錯(cuò)重傳所造成的額外開銷(Others),。

005.jpg

  采用每N個(gè)包發(fā)一次ACK響應(yīng)包,,減少Process_ACK的開銷,提高了傳輸效率,。不同單次發(fā)送數(shù)據(jù)包數(shù)下的傳輸速率如圖5所示,,ACK機(jī)制各部分開銷比重如圖6所示。從圖5看出,,隨著N的增大傳輸速率逐漸增大,,但是當(dāng)N增加到12以后,速率增加趨于平緩,。而從圖6可以看出,,N的增加只會(huì)減少處理ACK響應(yīng)時(shí)間(Process_ACK包括生成并發(fā)送ACK包),其他3個(gè)部分耗時(shí)不會(huì)減少,,故存在一個(gè)極限的速率,。

  這種改進(jìn)方法比較簡(jiǎn)單,考慮到等待重發(fā)等因素的影響,,實(shí)際的傳輸速率還要降低一些,。但其效率確實(shí)顯著提高,,而且通過選擇單次傳輸數(shù)據(jù)包個(gè)數(shù)N的大小,可以靈活地調(diào)整傳輸效率,、改善傳輸?shù)目煽啃浴?/p>

3 結(jié)論

  本文詳細(xì)分析,、測(cè)試嵌入式網(wǎng)絡(luò)LwIP/UDP協(xié)議的數(shù)據(jù)傳輸過程,針對(duì)點(diǎn)對(duì)點(diǎn)的簡(jiǎn)單網(wǎng)絡(luò)傳輸,,基于零數(shù)據(jù)拷貝的思想,,改進(jìn)了LwIP/UDP協(xié)議,明顯提升了傳輸?shù)男阅?,?shù)據(jù)傳輸?shù)乃俾蕪奈磧?yōu)化的2.03 MB/s提升到   9.80 MB/s,,已接近百兆以太網(wǎng)的極限。另外,,通過引入改進(jìn)的ACK機(jī)制,,改善了傳輸?shù)目煽啃裕瑢?shí)現(xiàn)了一種通用高效靈活的網(wǎng)絡(luò)傳輸優(yōu)化方法,。

參考文獻(xiàn)

  [1] 王琳,,商周,王學(xué)偉.數(shù)據(jù)采集系統(tǒng)的發(fā)展與應(yīng)用[J].電測(cè)與儀表,,2004,41(464):4-8.

  [2] 姚雪,,楊光,,張祥.嵌入式數(shù)據(jù)傳輸系統(tǒng)速度優(yōu)化方法[J].微計(jì)算機(jī)應(yīng)用,2011,,32(3):59-63.

  [3] 段之昱,,趙昭旺.嵌入式系統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)傳輸性能研究[J].天文研究與技術(shù),2007,,4(3):266-275.

  [4] 孫樂鳴,,江來,代鑫.嵌入式TCP/IP協(xié)議棧LWIP的內(nèi)部結(jié)構(gòu)探索與研究[J].電子元器件應(yīng)用,,2008,,10(3):79-81.

  [5] 徐鑫,曹奇英.基于LwIP協(xié)議棧的UDP協(xié)議分析與優(yōu)化[J].計(jì)算機(jī)應(yīng)用與軟件,,2011,,28(3):246-249.

  [6] ADAM D. Design and implementation of the LwIP TCP/IP stack[M]. Swedish Institute of Computer Science, 2001.

  [7] 王小峰,,時(shí)向泉,,蘇金樹.一種TCP/IP卸載的數(shù)據(jù)零拷貝傳輸方法[J].計(jì)算機(jī)工程與科學(xué),2008,,30(2):135-138.

  [8] 李國(guó),,鞏光志,,王冬冬.一種提高UDP可靠性的數(shù)據(jù)傳輸方法研究[J].中國(guó)民航大學(xué)學(xué)報(bào),2012,,30(1):41-45.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。