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