??? 摘? 要: 針對(duì)現(xiàn)有網(wǎng)絡(luò)接入設(shè)備難以滿足流媒體等新業(yè)務(wù)要求的問(wèn)題,深入研究了EMD(擴(kuò)展用分復(fù)用單元)10G線路接口卡的功能與結(jié)構(gòu),并針對(duì)上行數(shù)據(jù)流的合路問(wèn)題提出了基于FPGA的WDRR(加權(quán)欠賬輪詢)算法,該算法在不過(guò)度改變計(jì)算復(fù)雜度的情況下,使得時(shí)延性能得到改善;針對(duì)超寬表項(xiàng)的1 920位組播查表問(wèn)題,提出了FPGA+TCAM+2*SRAM的組播流水線查表,與傳統(tǒng)的查表方案相比,其效率提高了67%。最后通過(guò)仿真,測(cè)試表明該硬件設(shè)計(jì)方案能夠滿足ACR路由器對(duì)EMD 10G線路接口卡的要求。?
??? 關(guān)鍵詞: 大規(guī)模接入?yún)R聚路由器; EMD 10G線路接口卡; FPGA; WDRR算法; TCAM?
?
??? 隨著互聯(lián)網(wǎng)的日趨成熟,新的業(yè)務(wù)流量不斷涌現(xiàn),語(yǔ)音、VOD、網(wǎng)絡(luò)電視、虛擬個(gè)人網(wǎng)絡(luò)等以視頻信息為代表的寬帶流媒體業(yè)務(wù),對(duì)邊緣網(wǎng)的交換設(shè)備提出了越來(lái)越高的要求,而現(xiàn)有的邊緣網(wǎng)絡(luò)級(jí)數(shù)多,端口密度低,帶寬不可控,這些特點(diǎn)使得現(xiàn)有網(wǎng)絡(luò)很難滿足新業(yè)務(wù)流的要求,當(dāng)有大量數(shù)據(jù)流到來(lái)時(shí),無(wú)法實(shí)現(xiàn)用戶層面的數(shù)據(jù)接入管理與控制。?
??? 國(guó)家“863”計(jì)劃中大規(guī)模接入?yún)R聚路由器(ACR)的研發(fā)就是為了從根本上解決邊緣網(wǎng)的大容量交換需求,以及用戶的大規(guī)模接入問(wèn)題。ACR不僅具有常規(guī)大容量高性能雙棧核心路由器的寬帶IPv4/v6組網(wǎng)功能,而且具有大規(guī)模用戶接入?yún)R聚功能[1]。ACR的大規(guī)模用戶接入?yún)R聚功能主要體現(xiàn)在對(duì)用戶接口和用戶業(yè)務(wù)的管理與控制,以及支持寬帶網(wǎng)絡(luò)業(yè)務(wù)運(yùn)營(yíng)環(huán)境。ACR中負(fù)責(zé)用戶端接入的模塊是遠(yuǎn)端模塊,它又包括擴(kuò)展用分復(fù)用單元EMD(Ethernet Multiplexer-Demultiplexer)和遠(yuǎn)端接口單元RIU(Remote Interface Unit)。其中,EMD主要完成上下行數(shù)據(jù)的合路與分發(fā),以及用戶業(yè)務(wù)控制功能,是ACR實(shí)施用戶管理與控制的主要設(shè)備。EMD包括二種線路接口,分別為EMD 10G線路接口和EMD 1000M線路接口。?
??? 本文主要介紹EMD 10G線路接口卡的設(shè)計(jì)與實(shí)現(xiàn)。圖1為EMD 10G線路接口在整個(gè)ACR中所處的位置。從圖1可以看出,一個(gè)10G線路接口卡通過(guò)ATCA背板下連4個(gè)千兆接口模塊,每個(gè)千兆接口模塊通過(guò)千兆接口下行支持10個(gè)RIU,每個(gè)RIU再下接48個(gè)BMG。于是,一個(gè)EMD設(shè)備最多可以接入1 920個(gè)用戶,在確保用戶服務(wù)質(zhì)量的條件下,每用戶不僅可同時(shí)觀看1路HDTV和1路SDTV節(jié)目,還可以獨(dú)享9M端到端帶寬用于VOD,或者PC上網(wǎng)業(yè)務(wù)。?
?
?
??? 10G線路接口模塊的功能主要包括:?
??? (1)下行數(shù)據(jù)流方向:將外部物理信號(hào)通過(guò)光電、串并轉(zhuǎn)換恢復(fù)成比特流。提取數(shù)據(jù)鏈路層幀并作相應(yīng)處理,將IP報(bào)文根據(jù)單、組播以及IPTV組播查表結(jié)果封裝成內(nèi)部自定義格式,將數(shù)據(jù)報(bào)文復(fù)制送往4個(gè)千兆接口模塊,實(shí)現(xiàn)組播復(fù)制。?
??? (2)上行數(shù)據(jù)流方向:對(duì)4個(gè)千兆接口模塊送來(lái)的四路數(shù)據(jù)調(diào)度合路輸出,再根據(jù)單、組播以及IPTV組播查表結(jié)果進(jìn)行上行的數(shù)據(jù)封裝,封裝成數(shù)據(jù)鏈路幀后,將比特流以光信號(hào)的形式發(fā)送到物理鏈路。?
1 EMD 10G線路接口卡的設(shè)計(jì)?
??? 根據(jù)10G線路接口卡的功能需求分析,采用單片的多路鏈路層處理芯片完成數(shù)據(jù)鏈路層的處理,然后用FPAG+TCAM+SRAM完成數(shù)據(jù)報(bào)文的后續(xù)分類(lèi)、查表以及封裝處理?;谶@種設(shè)計(jì)思想,給出EMD 10G線路接口卡的總體結(jié)構(gòu)如圖2所示。其工作流程仍分為上行和下行處理。可以看出,前端處理主要由商用芯片負(fù)責(zé),報(bào)文的提取以及查表封裝由FPGA完成。?
?
?
??? 在實(shí)際實(shí)現(xiàn)中,光電轉(zhuǎn)換器件選用住友(SEI)公司的SXP3101EX,串并轉(zhuǎn)換器件選擇AMCC公司的S19237芯片,鏈路層處理芯片選用AMCC公司的S19205,TCAM選用IDT公司的75K75100,SRAM選用71T75602,F(xiàn)PGA選用Xilinx公司Virtex4系列的XC4VLX160和XC4VFX60,兩塊芯片間通過(guò)SPI接口進(jìn)行數(shù)據(jù)交互,共同完成上下行的數(shù)據(jù)處理。?
2 FPGA設(shè)計(jì)分析?
??? 根據(jù)上一節(jié)的介紹可知,F(xiàn)PGA主要完成IP報(bào)文的預(yù)處理,查表封裝以及與4個(gè)千兆線路接口板數(shù)據(jù)的分合路。本節(jié)將詳細(xì)介紹FPGA的設(shè)計(jì)方案。?
??? 下行數(shù)據(jù)進(jìn)入FPGA中首先緩存,判斷是協(xié)議報(bào)文還是數(shù)據(jù)報(bào)文,如果是協(xié)議報(bào)文則上交板級(jí)處理機(jī),如是數(shù)據(jù)報(bào)文則進(jìn)行單組播和IPTV組播查表,再將數(shù)據(jù)報(bào)文和查表結(jié)果格式封裝下發(fā)分路到4個(gè)千兆接口板。上行方向,將從千兆接口收到的四路數(shù)據(jù)調(diào)度合路輸出,對(duì)數(shù)據(jù)和協(xié)議報(bào)文分路處理,協(xié)議報(bào)文仍上交板級(jí)處理機(jī),數(shù)據(jù)報(bào)文根據(jù)查表結(jié)果封裝輸出。根據(jù)該FPGA的功能分析,得到其內(nèi)部功能模塊劃分如圖3。圖中虛線左側(cè)為XC4VLX160芯片所完成的功能,虛線右側(cè)為XC4VFX60芯片完成的功能,XC4VFX60帶有兩個(gè)Power PC 405硬核,16路高速通道,每路高速通道的速率為3.11Gb/s,可以滿足4個(gè)千兆線路板的接口要求。?
?
?
??? 由于下行和上行數(shù)據(jù)在FPGA中的處理是一個(gè)相對(duì)的過(guò)程,現(xiàn)以上行數(shù)據(jù)流為例介紹FPGA的設(shè)計(jì)分析。在對(duì)上行數(shù)據(jù)流進(jìn)行處理時(shí),有三個(gè)關(guān)鍵環(huán)節(jié),分別是:4路千兆線路接口板數(shù)據(jù)的合路調(diào)度輸出,上行報(bào)文分路,數(shù)據(jù)報(bào)文的單組播查表以及IPTV組播查表。下面將詳細(xì)介紹這三個(gè)功能模塊的FPGA設(shè)計(jì)。?
2.1 上行合路調(diào)度輸出模塊設(shè)計(jì)方案?
??? 千兆線路接口送來(lái)的四路數(shù)據(jù)先放在4個(gè)整包緩存隊(duì)列中,等待合路調(diào)度輸出。由于IP報(bào)文是變長(zhǎng)數(shù)據(jù)包,同時(shí)兼顧到硬件實(shí)現(xiàn)的復(fù)雜度,因此,本文采用差額輪詢DRR(Deficit Round Robin)調(diào)度算法。DRR為每個(gè)隊(duì)列賦予了一個(gè)計(jì)數(shù)器,在每次輪循時(shí),只有待發(fā)分組長(zhǎng)度小于計(jì)數(shù)器值才允許發(fā)送分組。計(jì)數(shù)器的計(jì)算方法為:初值為定額值,每發(fā)送一個(gè)分組就減去此分組長(zhǎng)度值,每經(jīng)過(guò)一次輪循就加上定額值。但是由于DRR在輪詢隊(duì)列時(shí)是順序訪問(wèn)下一個(gè)隊(duì)列,沒(méi)有考慮隊(duì)列間的優(yōu)先級(jí)問(wèn)題,故易造成輸出報(bào)文的時(shí)延性較差[2]。?
??? 于是,在DRR算法的基礎(chǔ)上,本文采用一種改進(jìn)的加權(quán)DRR算法——WDRR(Weighted Deficit Round Robin)。該算法的基本思想是:給每個(gè)隊(duì)列賦予一個(gè)權(quán)值Wi,是該隊(duì)列的長(zhǎng)度和包到達(dá)速率的比值,表示該隊(duì)列的優(yōu)先級(jí)。在每一輪輪詢開(kāi)始之前,先計(jì)算各隊(duì)列的權(quán)值,并按降序排列,服務(wù)順序從大到小。設(shè)置隊(duì)列i的計(jì)數(shù)器Ci的初值為N字節(jié),每輪輪詢前各隊(duì)列的計(jì)數(shù)器Ci=Ci+N。開(kāi)始輪詢時(shí),如果權(quán)值最大隊(duì)列中有整包,且Ci>Lmin(Lmin表示網(wǎng)絡(luò)中最短包的字節(jié)數(shù)),則輸出該隊(duì)列中一個(gè)長(zhǎng)度為整包,同時(shí)使Ci=Ci-,再判斷是否滿足前述條件,重復(fù)此過(guò)程,直到Ci≤Lmin;如果該隊(duì)列中沒(méi)有整包,則將此輪分配的N字節(jié)積累到下輪使用。此隊(duì)列服務(wù)完成后轉(zhuǎn)到權(quán)值次小的隊(duì)列。在調(diào)度過(guò)程中,為了避免Ci無(wú)限增大,為其設(shè)置一個(gè)上限值Lmax。?
??? 在算法實(shí)現(xiàn)中,由于IPv6的最短包長(zhǎng)度為40B,于是取N和Lmin均為40;設(shè)網(wǎng)絡(luò)中IPv6的最長(zhǎng)包為1 500B,故取Lmax為1 500;設(shè)隊(duì)列的計(jì)數(shù)器Ci的寬度為11bit,故最大計(jì)數(shù)值為2 048。具體的算法流程見(jiàn)圖4。?
?
?
??? WDRR算法在傳統(tǒng)DRR算法的基礎(chǔ)上,允許在計(jì)數(shù)器小于整包長(zhǎng)度時(shí)仍可以輸出一個(gè)整包,避免了隊(duì)列中有包但無(wú)法傳輸?shù)那闆r。同時(shí),在不過(guò)度改變算法復(fù)雜度的情況下,對(duì)每個(gè)隊(duì)列賦予權(quán)值,每一輪按照權(quán)值大小依次調(diào)度,使得輸出結(jié)果更加平滑,時(shí)延性能得到改善,該算法由于其復(fù)雜度低也便于硬件實(shí)現(xiàn)與管理。?
2.2 上行報(bào)文分路模塊設(shè)計(jì)方案?
??? 對(duì)4路千兆線路接口卡送來(lái)的數(shù)據(jù)進(jìn)行合路后,形成一路數(shù)據(jù)輸出。為了便于后續(xù)查表和報(bào)文封裝操作,需要將報(bào)文分類(lèi),以判斷該報(bào)文是否需要查表,如果需要查表,確定是查單播表、組播表還是IPTV組播表。?
??? 首先提取協(xié)議類(lèi)型字段,判斷其是否是自定義控制幀,如是,則直接上交10G板級(jí)處理機(jī);然后根據(jù)目的MAC判斷單組播,對(duì)于組播報(bào)文,再根據(jù)協(xié)議類(lèi)型域區(qū)分IPv4和IPv6報(bào)文,提取目的IP作為查表關(guān)鍵字,查上網(wǎng)組播表,或者IPTV組播表;對(duì)于單播報(bào)文,則將目的MAC地址作為查表關(guān)鍵字,查單播表。對(duì)于不需要查表的報(bào)文,則直接進(jìn)行格式封裝后,上交ACR-S。具體的報(bào)文處理流程見(jiàn)圖5。?
?
?
2.3 查表模塊設(shè)計(jì)方案?
??? 報(bào)文進(jìn)入查表模塊后,根據(jù)報(bào)文類(lèi)型不同可能需要查三個(gè)表,分別是:?jiǎn)尾ケ?、上網(wǎng)組播表和IPTV組播表。根據(jù)ACR的總體設(shè)計(jì)方案,要求最多支持100個(gè)IPTV組播臺(tái),順序編號(hào)為0~99;最多支持1 920個(gè)用戶,順序編號(hào)為0~1? 919。再結(jié)合ACR路由器的體系結(jié)構(gòu),設(shè)計(jì)三種表項(xiàng)結(jié)構(gòu)見(jiàn)圖6。其中,單播MAC表是48bitMAC地址到EMD和RIU出接口的映射,組播IP表是128bitIP地址到1 920個(gè)用戶接口映射,IPTV組播表是128bitIPTV組播地址到1 920個(gè)用戶的映射。?
?
?
??? 由表項(xiàng)結(jié)構(gòu)可以看出,單播MAC查表采用傳統(tǒng)的FPGA->TCAM->SRAM->FPGA查表方式即可實(shí)現(xiàn)。但是對(duì)于組播IP查表和IPTV組播查表,由于表項(xiàng)寬度過(guò)寬,達(dá)到1 920位,如果仍采用這種方式,難免會(huì)影響查表效率。為了提高查IP組播表和IPTV組播表的效率,本文從以下兩個(gè)方面作了改進(jìn)。?
??? (1)傳統(tǒng)的FPGA->CAM->SRAM->FPGA流水線查表,TCAM送出的控制SRAM連續(xù)讀寫(xiě)的burst信號(hào)僅能維持5個(gè)周期,而對(duì)于數(shù)據(jù)位寬為32位的SRAM,需要最少60個(gè)周期才能完成IP組播表或是IPTV組播表的讀寫(xiě)操作,也就是最少進(jìn)行12次TCAM查表。TCAM從查表關(guān)鍵字送入到結(jié)果送出需要約10個(gè)周期,讀SRAM需要5個(gè)周期,因此多一次查T(mén)CAM就會(huì)浪費(fèi)5個(gè)周期,這樣,進(jìn)行一次組播查表需要120個(gè)周期,但其中有55個(gè)周期被浪費(fèi)。由此可以看出,在表項(xiàng)寬度較窄時(shí)此方式效率較高,但是表項(xiàng)寬度較寬時(shí),效率明顯降低[3][4]。?
????因此本文采用FPGA->CAM->FPGA->SRAM->FPGA的流水線操作,這種方式只需查一次TCAM,再根據(jù)TCAM返回的讀SRAM的索引地址,讀60個(gè)周期的SRAM,在70個(gè)周期內(nèi)就能完成組播查表。與前一種方法相比,節(jié)省了50個(gè)周期。?
??? (2)由于在SRAM中存放的查表結(jié)果有1 920位,即使采用FPGA->CAM->FPGA->SRAM->FPGA的流水線操作,讀SRAM的周期也太長(zhǎng),總共需要60個(gè)周期才能讀完一次查表結(jié)果。如果用兩片SRAM共同存放1 920位的組播結(jié)果,一片SRAM存放前960位結(jié)果,另一片SRAM存放后960位結(jié)果,前后兩個(gè)960位結(jié)果在兩片SRAM中所處的物理地址是對(duì)應(yīng)一致的。這樣查一次TCAM得到的索引SRAM的地址同時(shí)送到兩片SRAM,用30個(gè)周期即可讀完一個(gè)組播結(jié)果。在表項(xiàng)維護(hù)和表項(xiàng)更新時(shí),兩片SRAM也是同步進(jìn)行的。值得注意的是如果是查單播表,由于查表結(jié)果只需讀一個(gè)周期32位的數(shù)據(jù),因此在兩片SRAM的對(duì)應(yīng)地址中所存放的內(nèi)容應(yīng)該是一樣的,最后選擇其中一片SRAM的結(jié)果輸出即可。?
??? 綜上,采用FPGA+TCAM+2*SRAM的流水線查表操作后,進(jìn)行一次組播查表總共需要40個(gè)周期就能完成,與傳統(tǒng)的查表方式相比,完成一次組播查表減少80個(gè)周期,效率提高67%。?
3 FPGA實(shí)現(xiàn)及仿真?
??? 在仿真實(shí)現(xiàn)時(shí),上行合路模塊在XC4VFX60中完成,報(bào)文分類(lèi)和查表模塊在XC4VLX160中完成,從芯片資源的角度來(lái)看,兩片芯片的性能均能滿足需求。仿真時(shí),用ROM生成一個(gè)數(shù)據(jù)源,通過(guò)Xilinx 9.1集成開(kāi)發(fā)環(huán)境,得到的上行報(bào)文合路模塊和查表模塊的關(guān)鍵信號(hào)仿真結(jié)果如圖7和圖8。
?
?
?
??? 圖7為用ModelSim得到的上行合路模塊的仿真波形圖,其中g(shù)e0~ge3分別表示4路1000M接口卡送來(lái)的數(shù)據(jù),第129和128bit表示對(duì)應(yīng)報(bào)文的包頭和包尾指示,用來(lái)表示報(bào)文的開(kāi)始和結(jié)束。dout表示合路輸出數(shù)據(jù),結(jié)果表明WDRR算法實(shí)現(xiàn)了4路報(bào)文的調(diào)度合路輸出。?
??? 圖8為查表模塊一次IPTV組播查表的仿真波形圖。由于查表模塊需要片外TCAM和SRAM配合,才能得到輸出結(jié)果,故在仿真時(shí)通過(guò)在該功能模塊中插入chipscope核,測(cè)試查表效率。由圖可以看出,查表關(guān)鍵字cam_key送入后,10個(gè)周期左右得到查表命中match指示,3個(gè)周期后得到查T(mén)CAM的結(jié)果cam_rbus,然后同時(shí)送入兩片SRAM,讀30個(gè)周期的SRAM結(jié)果,這樣,按照預(yù)期目標(biāo)成功完成一次組播查表。?
??? 本文根據(jù)ACR路由器對(duì)EMD 10G線路接口卡的要求,設(shè)計(jì)了EMD 10G線路接口卡,并詳細(xì)分析了FPGA對(duì)數(shù)據(jù)流的處理。以對(duì)上行數(shù)據(jù)流的處理為例,對(duì)于4個(gè)千兆接口卡送來(lái)的四路數(shù)據(jù)報(bào)文,用WDRR算法,通過(guò)對(duì)每個(gè)隊(duì)列引入權(quán)重度量,使得輸出結(jié)果更加平滑,時(shí)延性能得到改善,但由于不過(guò)度改變算法的復(fù)雜度,仍較便于硬件實(shí)現(xiàn)與管理。對(duì)于報(bào)文分類(lèi)處理后等待查表的數(shù)據(jù)報(bào)文,由于ACR對(duì)用戶數(shù)量的支持,使得組播表項(xiàng)過(guò)寬,達(dá)到了1 920位,采用傳統(tǒng)的查表機(jī)制效率低,但通過(guò)改進(jìn)的FPGA+TCAM+2*SRAM的組播流水線查表,其效率可提高67%。通過(guò)編程以及仿真結(jié)果也可以看出,該10G接口卡基本上完成了所需要的功能。?
參考文獻(xiàn)?
[1] 張興明.大規(guī)模接入?yún)R聚路由器(ACR)總體技術(shù)規(guī)范[S].國(guó)家數(shù)字交換系統(tǒng)工程技術(shù)研究中心,2005.?
[2]?王重鋼,隆克平,龔向陽(yáng),等.分組交換網(wǎng)絡(luò)中隊(duì)列調(diào)度算法的研究及其展望[J].電子學(xué)報(bào),2001,29(4):553-559.?
[3] 趙永忠,蘭巨龍,劉勤讓?zhuān)?0Gbps線路接口設(shè)計(jì)分析與實(shí)現(xiàn)[J].微電子學(xué)和計(jì)算機(jī),2005,22(2):159-161.?
[4]?張佳杰,扈紅超,劉強(qiáng),等.基于接入?yún)R聚路由器的IPTV組播的實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2007,33(11):107-109.?
[5]?侯伯亨,顧新.VHDL硬件描述語(yǔ)言與數(shù)字邏輯電路設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2005.?