隨著通信協(xié)議的發(fā)展及多樣化,協(xié)議處理部分PE在硬件轉(zhuǎn)發(fā)實(shí)現(xiàn)方面,,普遍采用現(xiàn)有的商用芯片NP(Network Processor,,網(wǎng)絡(luò)處理器)來完成,流量管理部分需要根據(jù)系統(tǒng)的需要進(jìn)行定制或采用商用芯片來完成,。在很多情況下NP芯片,、TM芯片、交換網(wǎng)芯片無法選用同一家廠商的芯片,,這時(shí)定制TM成為了成本最低,、系統(tǒng)最優(yōu)化的方案,一般采用FPGA來實(shí)現(xiàn),,TM的常規(guī)結(jié)構(gòu)如圖1所示,。
圖1 TM的常規(guī)結(jié)構(gòu)圖
目前主流的TM接口均為SPI4-P2接口形式,SPI4-P2接口信號(hào)速率高,,TCCS(Chan nel-to-channel skew,,數(shù)據(jù)通道的抖動(dòng),包含時(shí)鐘的抖動(dòng))難以控制,,在常規(guī)情況下很難做到很高的速率。SPI4-P2接口為達(dá)到高速率同時(shí)避免TCCS問題在很多情況下都對(duì)接收端提出了DPA(動(dòng)態(tài)相位調(diào)整)的要求,。對(duì)于SPI4-P2接口形式可直接采用Altera公司的IP Core實(shí)現(xiàn),。Altera的主流FPGA均實(shí)現(xiàn)了硬件DPA功能,以Stratix II器件為例,在使能DPA的情況下使用SPI4-P2 IP Core可實(shí)現(xiàn)16Gb/s的接口數(shù)據(jù)速率,。
SEG模塊為數(shù)據(jù)切分塊,,根據(jù)交換網(wǎng)的數(shù)據(jù)結(jié)構(gòu)要求,在上交換網(wǎng)的方向上負(fù)責(zé)把IP包或數(shù)據(jù)包切分為固定大小的數(shù)據(jù)塊,,方便后期的存儲(chǔ)調(diào)度以及交換網(wǎng)的操作處理,,SEG模塊可配合使用SPI4-P2 IP Core來實(shí)現(xiàn)。與SEG模塊對(duì)應(yīng)的是RSM模塊,,RSM模塊將從交換網(wǎng)下來的數(shù)據(jù)塊重新組合成完整的IP包或數(shù)據(jù)包,。
BM(Buffer Management)模塊為緩沖管理模塊,管理TM的緩沖單元,,完成DRAM的存取操作,。外部DRAM的控制部分可使用使用DDR SDRAM IP Core實(shí)現(xiàn)。
QM模塊為隊(duì)列管理模塊,,負(fù)責(zé)完成端口的數(shù)據(jù)隊(duì)列管理功能,,接收BM模塊讀寫DRAM時(shí)的數(shù)據(jù)入隊(duì)、出隊(duì)請(qǐng)求,,TM所能支持的數(shù)據(jù)流的數(shù)目,、業(yè)務(wù)類型數(shù)目、端口的數(shù)目等性能指標(biāo)在QM模塊處體現(xiàn)出來,。
Scheduler模塊為調(diào)度模塊,,根據(jù)數(shù)據(jù)包類型及優(yōu)先級(jí)和端口分配的帶寬進(jìn)行調(diào)度,TM流量整形,、QOS等功能通過調(diào)度模塊實(shí)現(xiàn),。
CELL_EDIT模塊完成輸出數(shù)據(jù)的封裝,把由DRAM中讀出的數(shù)據(jù)封裝后發(fā)送出去,。
在TM中需要基于數(shù)據(jù)服務(wù)策略對(duì)于不同服務(wù)等級(jí)的數(shù)據(jù)包進(jìn)行不同的管理策略,,同時(shí)要保證流媒體的數(shù)據(jù)包不能亂序,數(shù)據(jù)包有大有小,,經(jīng)過SEG模塊所分割成的數(shù)據(jù)塊的數(shù)目也有多有少,,這樣就必須有一套行之有效的數(shù)據(jù)結(jié)構(gòu)基于鏈表的方法管理這些數(shù)據(jù)。QM模塊基于業(yè)務(wù),、數(shù)據(jù)流的方式管理隊(duì)列,,包的管理便由BM模塊完成。
BM模塊中基于包的數(shù)據(jù)結(jié)構(gòu)方面由兩部分構(gòu)成:BRAM和PRAM,。BRAM為數(shù)據(jù)緩沖區(qū),,對(duì)應(yīng)片外的DRAM。BRAM負(fù)責(zé)存儲(chǔ)數(shù)據(jù)單元,,相對(duì)于SEG模塊切分的數(shù)據(jù)單元,,BRAM內(nèi)有相應(yīng)大小的存儲(chǔ)單元BCELL與之對(duì)應(yīng),,BCELL在BRAM內(nèi)以地址空間劃分,每個(gè)BCELL相同大小,,BCELL為BRAM的最小存取單元,。在實(shí)際系統(tǒng)中基于SEG模塊切分的數(shù)據(jù)單元大小,BCELL一般為64~512B,。
PRAM為指針緩沖區(qū),,PRAM對(duì)應(yīng)片外的SSRAM。PRAM內(nèi)部同樣以地址空間分為PCELL,,PCELL與BCELL一一對(duì)應(yīng),,每一個(gè)PCELL對(duì)應(yīng)于一個(gè)BCELL,對(duì)應(yīng)的PCELL與BCELL地址相同,。
PCELL的地址對(duì)應(yīng)的代表相應(yīng)單元的BCELL的地址,,PCELL中的基本信息是下一跳指針。PRAM與BRAM關(guān)系如圖2所示,。
圖2 PRAM與BRAM關(guān)系圖
在PRAM中存在兩種鏈表形式,,PQ List代表已經(jīng)存儲(chǔ)的數(shù)據(jù)包鏈表。為方便數(shù)據(jù)讀出,,PQ List需要記錄數(shù)據(jù)包的第一個(gè)數(shù)據(jù)塊地址,,即首指針Pq_Hptr,為方便新的數(shù)據(jù)寫入,,PQ List需要記錄數(shù)據(jù)包的最后一個(gè)數(shù)據(jù)塊地址,,即尾指針Pq_Tptr。PQ List同時(shí)需要記錄該鏈表的長(zhǎng)度作為調(diào)度模塊進(jìn)行調(diào)度的權(quán)值計(jì)算使用,。
Free List代表空閑的地址隊(duì)列,。為方便地辨識(shí)、管理空閑的地址,,避免地址沖突,,在BM中將所有空閑的地址使用一個(gè)鏈表進(jìn)行管理。這個(gè)鏈表就是空閑地址隊(duì)列,??臻e地址隊(duì)列依據(jù)系統(tǒng)需求的不同有著不同的形式,一般空閑地址隊(duì)列的構(gòu)成和PQ List相似,,由空閑地址首指針Free_Hptr和空閑地址尾指針Free_Tptr構(gòu)成,。BM模塊的所有操作都圍繞著空閑的地址隊(duì)列Free List進(jìn)行。
基于BM模塊的數(shù)據(jù)流結(jié)構(gòu),,BM模塊一般分為Write Control模塊,、Free List control模塊、Read Control模塊,、PRAM Control模塊,、BRAM Control模塊,。BM的結(jié)構(gòu)如圖3所示。
圖3 BM結(jié)構(gòu)圖
Write Control模塊從Free List模塊處得到空閑地址,,向BRAM Control模塊提出寫請(qǐng)求,同時(shí)更新PRAM中的內(nèi)容,。Free List control模塊負(fù)責(zé)管理空閑地址列表,,提供Write Control模塊的寫B(tài)RAM地址及PRAM地址,回收經(jīng)Read Control模塊讀出數(shù)據(jù)塊后釋放的地址,。Read Control模塊根據(jù)調(diào)度器的調(diào)度結(jié)果,,通過BRAM Control模塊讀出需要發(fā)送的數(shù)據(jù)單元,同時(shí)將釋放的緩沖單元地址寫入空閑地址列表,。PRAM Control模塊為外部SSRAM的控制模塊,,可直接使用參考設(shè)計(jì)完成。BRAM Control模塊為外部DRAM控制模塊,,一般分為Datapath與Controler兩個(gè)子模塊,。Datapath模塊專門負(fù)責(zé)數(shù)據(jù)接口部分,完成DRAM接口的DQ,、DQS處理以及相應(yīng)的延時(shí)調(diào)整,,Controler模塊負(fù)責(zé)完成DRAM的控制需求。
在BM模塊中,,BRAM的帶寬與PRAM的帶寬一般為TM的瓶頸,。PRAM的帶寬主要受限于訪問的次數(shù),而BRAM的帶寬受限于接口帶寬,。例如對(duì)于一個(gè)10G的TM,,BRAM的有效帶寬必須保證20G,以接口利用率最差只能達(dá)到65%計(jì)算(考慮SEG模塊切分信元出現(xiàn)的N+1問題),,需要保證接口帶寬達(dá)到30G,。使用64位的DRAM接口,接口速率不能低于500MB/s,,這樣對(duì)Datapath模塊的設(shè)計(jì)提出了更高的要求,。在實(shí)際系統(tǒng)中,BRAM主要使用DDR SDRAM,、DDR II SDRAM,。
當(dāng)使用Stratix II FPGA,BRAM使用DDR II SDRAM時(shí),,測(cè)試表明DDR II SDRAM接口速率可達(dá)到800MB/s,。在常規(guī)使用的情況下,DDR II SDRAM接口速率可保證達(dá)到667MB/s,。對(duì)于一個(gè)64位的DRAM接口,,接口速率可達(dá)到42.7GB/s,,完全可以滿足一個(gè)10G的TM系統(tǒng)。
BM模塊作為緩沖管理模塊,,緩沖的基本單元為BCELL,,基于對(duì)BCELL的管理,對(duì)于BM的操作都牽涉到空閑地址隊(duì)列的操作以及鏈表的操作,。最基本的操作就是寫入操作和讀出操作,。BM模塊的寫入操作由Write Control模塊發(fā)起。
對(duì)于Write Control模塊,,有數(shù)據(jù)單元需要寫入,,首先向Free List模塊申請(qǐng)空閑地址,F(xiàn)ree List將首指針a給Write Control模塊,,作為該數(shù)據(jù)塊的寫地址,,同時(shí)讀出首指針a對(duì)應(yīng)在PRAM中的內(nèi)容,得到下一跳地址b,,將下一跳地址b作為新的空閑地址首指針,。
PQ List將尾指針n更新為新寫入的地址a,同時(shí)更新PRAM中n地址的內(nèi)容,,將a作為下一跳添入n地址,。基于節(jié)省操作周期,,NULL的內(nèi)容保留原值,,不再更新。這樣,,一次BRAM的寫入操作需要一次PRAM的讀取操作及一次PRAM的寫入操作,。
QM模塊接收調(diào)度模塊的出隊(duì)信息,將出隊(duì)的PQ鏈表信息傳送給BM模塊進(jìn)行讀取操作,。
圖4 BM模塊的寫入操作
圖5 讀出操作的Free List堆棧結(jié)構(gòu)
BM模塊的讀取操作由Read Control模塊發(fā)起完成,,當(dāng)有數(shù)據(jù)單元需要讀出,相應(yīng)的數(shù)據(jù)單元地址則需要回收進(jìn)入空閑地址隊(duì)列Free List,。對(duì)于不同的系統(tǒng)需求,,空閑地址隊(duì)列Free List有不同的形式。比較簡(jiǎn)單的操作是將Free List作為堆棧形式使用,。
Read Control模塊由PQ List的首地址0讀出相應(yīng)的BRAM中的內(nèi)容,,同時(shí)讀出PRAM中對(duì)應(yīng)的下一跳地址1,更新地址1為新的首地址,。Free List將首指針a更新為剛釋放的地址0,,同時(shí)地址0中寫入下一跳指針a。這樣一次BRAM的讀出操作需要一次PRAM的讀取操作及一次PRAM的寫入操作,。
作為堆棧形式的空閑地址隊(duì)列在實(shí)際操作中會(huì)把一部分空閑地址隊(duì)列放入片內(nèi)緩沖中,。這樣在讀BRAM釋放地址進(jìn)入空閑地址隊(duì)列時(shí)可以節(jié)省PRAM的一次寫入操作,,在寫B(tài)RAM時(shí)申請(qǐng)空閑地址時(shí)可以節(jié)省PRAM的一拍讀取操作。PRAM堆棧結(jié)構(gòu)下內(nèi)置空閑地址隊(duì)列表如圖6所示,。
圖6 PRAM堆棧結(jié)構(gòu)下內(nèi)置空閑地址隊(duì)列表
以圖5的讀出操作為例,,當(dāng)Read Control模塊由PQ List的首地址0讀出相應(yīng)的BRAM中的內(nèi)容,同時(shí)讀出PRAM中對(duì)應(yīng)的下一跳地址1,,更新地址1為新的首地址,。這時(shí),地址0為已經(jīng)釋放的地址,,按空閑隊(duì)列的操作要求,地址0需要進(jìn)入空閑地址隊(duì)列中,,在寫操作時(shí)再將地址0讀出提供給Write Control模塊用于寫B(tài)RAM,。而基于圖6的結(jié)構(gòu),地址0在被釋放后不再進(jìn)行更新PRAM中的空閑地址隊(duì)列Free List的操作,,直接寫入片內(nèi)緩沖中,,在Write Control模塊申請(qǐng)地址時(shí)由片內(nèi)緩沖中讀出提供給Write Control模塊 。僅在片內(nèi)Free List緩沖幾乎滿時(shí),,進(jìn)行PRAM中的空閑地址隊(duì)列Free List的更新操作,,或在片內(nèi)Free List緩沖空時(shí)進(jìn)行PRAM中的空閑地址隊(duì)列Free List的讀取操作?;趫D6的結(jié)構(gòu),,在一個(gè)讀寫周期內(nèi),可以節(jié)省兩次PRAM的操作,,在最壞情況下也可節(jié)省一次PRAM的操作,。但基于堆棧的結(jié)構(gòu),棧頂?shù)牡刂繁桓哳l率的反復(fù)的調(diào)用,,棧底的地址很難被使用,,DRAM的工作壽命會(huì)因此受到影響。為保證DRAM的工作壽命,,在有些系統(tǒng)中將空閑地址隊(duì)列Free List做成鏈表形式,,從而保證每個(gè)DRAM的存儲(chǔ)空間都能被平均的使用。讀出操作的Free Lis鏈表結(jié)構(gòu)如圖7所示,。
圖7 讀出操作的Free Lis鏈表結(jié)構(gòu)
Read Control模塊由PQ List的首地址0讀出相應(yīng)的BRAM中的內(nèi)容,,同時(shí)讀出PRAM中對(duì)應(yīng)的下一跳地址1,更新地址1為新的首地址,。
Free List相對(duì)于堆棧模式增加尾指針d,。Free List在回收地址時(shí)維持首指針a不變,將尾指針d更新為剛釋放的地址0,,同時(shí)地址d中寫入下一跳指針0,。這樣一次BRAM的讀出操作同樣需要一次PRAM的讀取操作及一次PRAM的寫入操作,。對(duì)于鏈表方式的空閑地址隊(duì)列Free List,在每個(gè)讀,、寫周期必須進(jìn)行兩次PRAM的寫入操作及兩次PRAM的讀取操作,,PRAM的效率不高。
針對(duì)兩種空閑地址隊(duì)列的效率及對(duì)DRAM的影響,,在很多系統(tǒng)中采用了折中的方法,,即在PRAM中使用鏈表方法管理空閑地址隊(duì)列Free List,在片內(nèi)采用堆棧模式另建一個(gè)空閑地址隊(duì)列Free List,,在這種情況下,,每個(gè)讀、寫周期需要三次PRAM的操作,。
在實(shí)際系統(tǒng)中,,BRAM的帶寬與PRAM的帶寬一般為TM的瓶頸,PRAM主要受限于訪問的次數(shù),,而BRAM受限于接口帶寬,。
在10G的TM系統(tǒng)中,片內(nèi)數(shù)據(jù)總線的位寬定為128位,,系統(tǒng)時(shí)鐘定為150MHz,,BCELL的大小定為64B。在這種情況下,,讀取操作和寫入操作均為4個(gè)時(shí)鐘周期,。在滿足10G系統(tǒng)的需求下,讀取,、寫入操作周期為7個(gè)時(shí)鐘周期,。在前面曾計(jì)算過,在滿足10G TM系統(tǒng)的情況下,,BRAM采用64位 DDR II SDRAM,,接口時(shí)鐘使用250MHz即可滿足數(shù)據(jù)接口的需求。PRAM采用32位ZBT SRAM ,,接口時(shí)鐘使用系統(tǒng)時(shí)鐘,,每個(gè)PCELL為64位,每個(gè)讀,、寫周期需要6個(gè)時(shí)鐘周期完成,。在實(shí)際系統(tǒng)中采用Altera FPGA,BM的設(shè)計(jì)可以滿足10G的TM線速工作的需求,。
在40G核心網(wǎng)的TM系統(tǒng)中,,片內(nèi)數(shù)據(jù)總線的位寬為256位,系統(tǒng)時(shí)鐘采用250MHz(在40GE的系統(tǒng)中可選用200MHz)。采用DDR II SDRAM,,接口時(shí)鐘使用333MHz,,則192位的BRAM可以滿足40G的TM需求。此時(shí),,BCELL可為96B,、192B、384B,,在這里選用1
92B,。當(dāng)BCELL選用192B時(shí),讀取操作和寫入操作同樣均為6個(gè)時(shí)鐘周期,。在滿足40G系統(tǒng)的需求下,,讀取、寫入操作周期為9個(gè)時(shí)鐘周期,。PRAM采用48位QDR SRAM,,接口時(shí)鐘使用150MHz,每個(gè)PCELL為96位,,在每個(gè)讀、寫時(shí)鐘周期內(nèi),,PRAM最多可被操作5次,。在采用Altera FPGA的情況下,BRAM采用192位 DDR II SDRAM,,PRAM采用48位QDR SRAM,,BM的設(shè)計(jì)可以滿足40G的TM線速工作的需求。