專利名稱:基于鏈表的交換網(wǎng)絡(luò)中隊列緩沖管理方法
技術(shù)領(lǐng)域:
隊列管理是計算機網(wǎng)絡(luò)應(yīng)用(如路由器,交換機和防火墻等核心設(shè)備中) 的關(guān)鍵技術(shù)之一。隊列管理的任務(wù)是通過相應(yīng)的體系結(jié)構(gòu)、根據(jù)數(shù)據(jù)包相應(yīng)的 標(biāo)識信息,實現(xiàn)對數(shù)據(jù)包的分隊列存儲與輸出,它屬于計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域。
背景技術(shù):
隨著英特網(wǎng)的進一步發(fā)展,新的網(wǎng)絡(luò)業(yè)務(wù)不斷涌現(xiàn)。包括語音服務(wù)、虛擬 專用網(wǎng)絡(luò)在內(nèi)的多種網(wǎng)絡(luò)業(yè)務(wù)對網(wǎng)絡(luò)服務(wù)質(zhì)量提出了更高的要求。由于網(wǎng)絡(luò)流 量的突發(fā)特性,采用帶寬的過度預(yù)留己經(jīng)不能有效保證網(wǎng)絡(luò)的服務(wù)質(zhì)量。與此 同時,網(wǎng)絡(luò)服務(wù)提供商也希望通過提供有差別的服務(wù)來增加收入。
通過對不同的網(wǎng)絡(luò)業(yè)務(wù)執(zhí)行相應(yīng)的優(yōu)先級服務(wù)可以實現(xiàn)較好的網(wǎng)絡(luò)服務(wù) 質(zhì)量。而為了實現(xiàn)優(yōu)先級服務(wù),就必須實現(xiàn)對數(shù)據(jù)包的隊列管理,具體又分為 排隊存儲和調(diào)度輸出。排隊存儲的主要任務(wù)是把輸入的數(shù)據(jù)包根據(jù)對應(yīng)標(biāo)識(如 流號)、區(qū)分隊列分別存儲,并在每個隊列內(nèi)根據(jù)數(shù)據(jù)包到達的先后順序維護
FIFO (First In First Out, FIFO)結(jié)構(gòu)。而調(diào)度輸出則是根據(jù)調(diào)度算法得出的服 務(wù)次序、將指定隊列隊首的數(shù)據(jù)包送出,并更新相應(yīng)隊列狀態(tài)。
隨著網(wǎng)絡(luò)鏈路傳輸速率的快速提高,通過軟件方式實現(xiàn)的隊列管理已經(jīng)不 能滿足要求,而通過硬件實現(xiàn)的隊列管理芯片憑借其巨大的性能優(yōu)勢逐漸占據(jù) 高端應(yīng)用領(lǐng)域。通過設(shè)計相應(yīng)的硬件芯片,配合采用動態(tài)隨機存儲器(Dynamic Random Access Memory, DRAM)、靜態(tài)隨機存儲器(Static Random AccessMemory, SRAM)等外存芯片可以實現(xiàn)高速而又廉價的隊列管理系統(tǒng)。這個過 程中需要解決的問題是外存芯片只能根據(jù)對應(yīng)的物理地址實現(xiàn)相應(yīng)的數(shù)據(jù)讀 寫操作。如何組織相應(yīng)的數(shù)據(jù)結(jié)構(gòu),在外存所提供的線性存儲空間中實現(xiàn)多隊 列結(jié)構(gòu)是隊列管理的重要問題之一。這個問題還涉及到外存延遲、存儲開銷等 多方面內(nèi)容。
下面針對上述問題的一般解決方法進行相應(yīng)說明。 首先是外存芯片的規(guī)格化。為了盡可能地簡化硬件操作、實現(xiàn)外存存儲與 帶寬的最大化利用,在外存芯片(尤其是DRAM)的使用中,通常將多個存儲 單元視為一個大的存儲單元進行集中使用。這種方式可以較好地解決外存芯片 使用中的一些問題(如Bank Conflict, DRAM刷新等),但是也因此引入了額外 的開銷。由于存儲空間劃分的粒度加大,當(dāng)數(shù)據(jù)讀寫操作粒度相對較小時,仍 然需要對整個大存儲單元進行完整操作。在均衡多方面因素后, 一般認(rèn)為把 DRAM的存儲單元按照64字節(jié)或者128字節(jié)為單位進行使用效果最好。詳細原 因在此略過。
通過外存芯片的規(guī)格化,外存芯片所包含的存儲空間可視為一連串獨立的 大存儲單元。鏈?zhǔn)娇臻g管理可以實現(xiàn)對這些存儲單元較好的管理。其基本思想 是利用一個或者多個大存儲單元構(gòu)造鏈表單元,每個鏈表單元又存儲相應(yīng)控制 信息(如鏈表指針等),通過串聯(lián)多個鏈表單元實現(xiàn)隊列,同時在硬件芯片內(nèi)部 存儲對應(yīng)隊列的頭尾指針(頭尾鏈表單元對應(yīng)的外存地址)。這種方式只要額外 維護隊列的頭尾指針信息、存儲壓力較小,因而被廣泛采用。但是在具體的實 現(xiàn)細節(jié)上卻各有不同,效率上也有很大差別。重點體現(xiàn)在鏈表的存儲效率和鏈 表操作的效率兩個方面。
之前提到過每個大存儲單元因數(shù)據(jù)操作的粒度存在利用率問題,鏈表的存 儲效率則是指在實際數(shù)據(jù)操作中有效數(shù)據(jù)所占的比例。例如,設(shè)每個大存儲單 元為64字節(jié),在某次數(shù)據(jù)操作中,只有60字節(jié)被用于構(gòu)造鏈表,而鏈表單元內(nèi)部又額外存儲了 16字節(jié)的控制信息(如下一跳指針、當(dāng)前鏈表單元的有效長
度、數(shù)據(jù)包的分段信息等)。于是,實際鏈表的存儲效率只有(44/64)。
而鏈表的操作效率則是指在某段時間內(nèi)、對外存的實際數(shù)據(jù)操作所占時間
的比例。由于存在外存延遲,鏈表操作很難連續(xù)。例如在讀取某一隊列隊首 鏈表單元時,要先獲取其對應(yīng)隊首鏈表單元地址,然后讀取對應(yīng)地址的外存存 儲單元,又經(jīng)過若干周期后才獲得讀出數(shù)據(jù),送出數(shù)據(jù)并等待下次操作請求。 這個過程中,只有"獲得讀出數(shù)據(jù)"這一環(huán)節(jié)實際占用了外存芯片,于是相應(yīng) 的鏈表操作效率就很低了。
如何提高上述兩種效率是隊列管理的重要研究方向。
針對傳統(tǒng)方法存在的多種問題,本專利申請的技術(shù)方法的先進性和新穎 性體現(xiàn)在利用調(diào)度輸出^程以數(shù)據(jù)包為單位這個特點,壓縮存儲鏈表單元中 的控制信息,提高了鏈表單元的存儲效率;同時通過SRAM和DRAM構(gòu)造了數(shù) 據(jù)與控制分離的鏈表單元結(jié)構(gòu),設(shè)計流水線實現(xiàn)多個鏈表單元的并發(fā)處理,提 高了鏈表的操作效率。它開銷小、擴展性好。
發(fā)明內(nèi)容
本發(fā)明的目的在于,充分利用系統(tǒng)設(shè)計中松耦合設(shè)計的思想,將數(shù)據(jù)存儲 與隊列控制信息分離,通過壓縮控制信息,充分利用控制信息所存放的SRAM 的帶寬,節(jié)省系統(tǒng)的瓶頸DRAM帶寬,同時,利用數(shù)據(jù)和控制信息的異步操作, 通過流水設(shè)計隱藏外存儲器的延時,有效的提高了隊列管理系統(tǒng)的有效帶寬, 并且系統(tǒng)的設(shè)計非常靈活。
本發(fā)明的特征在于,所述方法是一種基于鏈表的交換網(wǎng)絡(luò)中多隊列緩沖管 理的方法,是在一種隊列緩沖管理系統(tǒng)中依次按以下步驟實現(xiàn)的
步驟(l).構(gòu)建一個用于所述交換網(wǎng)絡(luò)中多隊列緩沖管理的隊列管理系統(tǒng),所 述系統(tǒng)含有FPGA芯片、緩存數(shù)據(jù)包DRAM和緩存數(shù)據(jù)包描述控制信息用的SRAM,其中
FPGA芯片含有隊列管理模塊和片內(nèi)存儲器,其中 隊列管理模塊設(shè)有數(shù)據(jù)包輸入端口和數(shù)據(jù)包輸出端口, 片內(nèi)存儲器MRAM,與所述隊列管理模塊互連, 緩存數(shù)據(jù)包DRAM,與所述隊列管理模塊互連,所述緩存數(shù)據(jù)包DRAM是 一種延遲壓縮式的RLDRAM,以16個周期為讀寫操作的最小時間單位,實際配 置為64Bx512K,擁有讀/寫分離的數(shù)據(jù)總線,但讀寫復(fù)用一套地址及控制總線, 緩存數(shù)據(jù)包描述控制信息用的SRAM,型號為CYTC1370C,擁有一套讀寫復(fù) 用的數(shù)據(jù)和控制總線,實際配置為32bitsx512K;
步驟(2).把所選RLDRAM和SRAM共同組成一個"數(shù)據(jù)域和控制域分離" 的鏈表單元,所述的每個鏈表單元包含一個64B的數(shù)據(jù)域和一個32bits的控制 域,由擁有相同高位地址的所述RLDRAM和SRAM組成,
步驟(3).在所述FPGA中建立一個鏈表空間管理結(jié)構(gòu)實現(xiàn)的512K個所述 鏈表單元的管理在該FPGA的片內(nèi)存儲器MRAM中額外維護每個邏輯隊列的頭 尾指針,以對應(yīng)于頭尾鏈表單元對應(yīng)的外存地址,再通過一個存有空閑鏈表頭 尾指針的獨立隊列Freelist,實現(xiàn)對空閑鏈表單元的管理,
步驟(4).把所述交換網(wǎng)絡(luò)中多隊列緩沖的控制信息進行最大限度的壓縮 后得到流號Flow No,占16bits,分段信息Seg. Info占2bits,信元長度length 占5bits,數(shù)據(jù)包總長度Total Length占9bits,其中 流號FlowNo,高位表示目的線卡號CardNo,
分段信息Seg.Info,其中包括四種狀態(tài):"01"表示數(shù)據(jù)包頭,"00"表示 數(shù)據(jù)包中段,"10"表示數(shù)據(jù)包尾,"11"表示獨立數(shù)據(jù)包,
然后,在第一個鏈表單元中存儲所述16bits流號和9bits數(shù)據(jù)包總長度信 息,在后繼鏈表單元的后繼信元中存儲所述分段信息Seg.Info,以便在對所述 DRAM進行操作的同時讀取所述SRAM中下一鏈表單元的控制信息,步驟(5).按以下步驟對到達的4個信元A、 B、 C、 D依次進行流水線操作 以便等效于在16個周期內(nèi)處理一個信元
步驟(5.1).所述隊列管理模塊在4個周期內(nèi)讀取入隊信元A,并獲取 該信元A的流號信息,
步驟(5.2).所述隊列管理模塊在4個周期內(nèi),對所述片內(nèi)存儲器MRAM 進行一次讀操作,查詢步驟步驟(5.1)中獲取的流號所屬當(dāng)前隊列的隊尾指 針,同時,在8個周期內(nèi)對所述的SRAM進行一次讀操作,以查詢當(dāng)前空閑 鏈表,申請一個新鏈表單元,獲取當(dāng)前空閑鏈表的下一跳指針,用來更新空 閑鏈表,再在發(fā)出所述査詢當(dāng)前空閑鏈表一個周期后,用5個周期的時間對 所述SRAM進行一次寫操作,修改所述當(dāng)前隊列隊尾鏈表的下一跳指針,使 它指向所述新申請的鏈表,同時讀取到達信元B的流號信息,在該步驟(5.2) 中所執(zhí)行的所有操作在16個周期內(nèi)完成,去處理所述A和B兩個信元,
步驟(5.3).所述隊列管理模塊對所述MRAM進行一次寫操作,修改所述 信元A中的隊尾指針信息,同時,在11個周期內(nèi)對所述RLDRAM進行一 次寫操作,所述信元A寫入到對應(yīng)所述RLDRAM的鏈表單元的數(shù)據(jù)域,與 此同時,獲取所述信元C的流號信息,在該步驟(5.3)中所執(zhí)行的所有操作 在16個周期內(nèi)完成,同時處理所述A、 B、 C三個信元,
步驟(5.4).在每個所述的鏈表單元為64B的情況下,所述隊列管理模塊 再耗時16個周期,結(jié)束所述信元A的寫入,同時對所述信元B,在4個周 期內(nèi)執(zhí)行對所述MRAM的寫操作,修改隊列的隊尾指針信息,在ll個周期 內(nèi),對所述的RLDRAM執(zhí)行寫操作,寫入所述信元B,同時獲取所述信元 D的流號信息,在該步驟(5.4)中的執(zhí)行的所有操作在16個周期內(nèi)完成,去 處理所述A、 B、 C、 D共4個信元,
步驟(5.5).把所述信元C的RLDRAM寫入操作、所述信元D的査詢當(dāng)前流號所述當(dāng)前隊列的隊尾指針的對所述MRAM的讀操作,以及查詢當(dāng)前 空閑鏈表的對所述SRAM的讀操作、移入到下一階段4個16周期內(nèi)E、 F、 G、 H四個信元來臨時的第一個16周期內(nèi)進行,以此類推。
以上操作步驟的流程如圖1所示。
圖2示意了隊列管理的系統(tǒng)框圖,數(shù)據(jù)包一般在外存儲芯片DRAM進行排 隊和緩存,數(shù)據(jù)包構(gòu)成的隊列描述信息可存儲在外存儲芯片DRAM/SRAM或者 FPGA片內(nèi)存儲中。因DRAM帶寬有限, 一般盡量將額外的描述信息放在SRAM 或者片內(nèi)存儲中。
圖1本發(fā)明的流程圖。
圖2隊列管理器的系統(tǒng)框圖。
圖3數(shù)據(jù)域和控制域分離的鏈?zhǔn)娇臻g管理結(jié)構(gòu)示意圖。
圖4信元格式示意圖。
圖5存儲設(shè)備的錯峰使用原理示意圖。
圖6入隊操作時的4級流水示意圖。
圖7在不同數(shù)據(jù)包長度情況下系統(tǒng)的吞吐率曲線。
具體實施例方式
本發(fā)明的目的在于提供一種優(yōu)化的實現(xiàn)方案,最大化利用外存芯片、實現(xiàn) 高速的隊列管理
發(fā)明內(nèi)容
又可細分為兩大部分
1、 壓縮存儲鏈表單元中的控制信息,提高鏈表單元的存儲效率;
102、構(gòu)造數(shù)據(jù)與控制分離的鏈表單元結(jié)構(gòu),設(shè)計流水線實現(xiàn)多個鏈 表單元的并發(fā)處理,提高鏈表的操作效率;
下面依次對兩者的基本特征與核心思想進行說明。
首先是壓縮存儲鏈表單元中的控制信息??刂菩畔⒃阪湵淼木S護操作中是 必不可少的,但是它給系統(tǒng)帶來了額外的存儲與帶寬開銷。那么,如何壓縮控 制信息又保留等效的控制功能呢?本發(fā)明利用隊列管理調(diào)度輸出過程以數(shù)據(jù)包 為單位這個特點,通過繼承操作的方式,壓縮了同一數(shù)據(jù)包對應(yīng)的多個鏈表單 元中重復(fù)出現(xiàn)的控制信息。
由于每個鏈表單元大小有限,在數(shù)據(jù)包較大的情況下, 一個數(shù)據(jù)包會被分 割存儲于多個鏈表單元中。為了實現(xiàn)鏈表單元在外存中的存儲、數(shù)據(jù)包輸出時 的重組、或者數(shù)據(jù)包各個片段在網(wǎng)絡(luò)中的傳輸?shù)炔僮?,每個鏈表單元需要獨立 維護一定量的控制信息。
由于同一個數(shù)據(jù)包內(nèi)部的多個鏈表單元存在極大的相似性。如它們對應(yīng)的 優(yōu)先級相同,調(diào)度輸出的時間連續(xù),對應(yīng)的原始數(shù)據(jù)包的長度一致等。可以發(fā) 現(xiàn)控制信息在同一數(shù)據(jù)包內(nèi)部的多個鏈表單元間存在非常嚴(yán)重的重復(fù)現(xiàn)象。利 用這一特點,僅在數(shù)據(jù)包對應(yīng)的首個鏈表單元中存儲這部分控制信息,后繼同 一數(shù)據(jù)包的鏈表單元可以根據(jù)和首鏈表單元之間的相對關(guān)系,直接繼承這部分 控制信息。由于調(diào)度輸出時以數(shù)據(jù)包為單位,在實際硬件操作中只需要用寄存 器暫時維護這部分信息即可,而鏈表單元間的相對關(guān)系可以用2比特信息表示 (如"01"表數(shù)據(jù)包頭、"00"表示數(shù)據(jù)包中段、"10"表示數(shù)據(jù)包尾、"11"表 示獨立數(shù)據(jù)包)。對于長度較大的數(shù)據(jù)包,除包頭鏈表單元外的后繼鏈表單元僅 用2比特數(shù)據(jù)實現(xiàn)大量控制信息的等效存儲,從而大大地提高鏈表單元的存儲 效率。
借由這種方式每個鏈表單元內(nèi)部的控制信息被大大壓縮了,通過SRAM的 配合使用可以實現(xiàn)數(shù)據(jù)與控制分離的鏈表單元結(jié)構(gòu)。具體的做法是把SRAM和DRAM進行一一對應(yīng)、共同構(gòu)造鏈表單元,將大部分控制信息(如鏈表指針, 當(dāng)前鏈表單元有效長度,分段信息等)存儲于SRAM中。傳統(tǒng)方法是無法做到 這點的,因為SRAM的存儲容量通常要遠小于DRAM,每個鏈表單元未壓縮的 控制信息一般是無法單獨存儲于SRAM中的。
采用這種數(shù)據(jù)與控制分離的鏈表單元結(jié)構(gòu)給鏈表操作帶來了巨大的便利, 操作效率大大提高了。原因在于
1、 由于DRAM和SRAM分屬兩個物理設(shè)備,并行操作增大了系統(tǒng) 整體帶寬。
2、 鏈表單元的數(shù)據(jù)域和控制域分離了,使得鏈表操作可以異步執(zhí) 行,同時操作不同鏈表單元的數(shù)據(jù)域和控制域。
其中第二點尤為重要。由于單鏈表結(jié)構(gòu)中下一個鏈表單元的地址存儲于前 一鏈表單元的指針域中,單鏈表操作具有嚴(yán)格的順序操作限制(即不能在讀取 到某鏈表單元前對其下一跳鏈表進行讀取)。考慮外存芯片的延遲,背靠背的鏈 表操作很難實現(xiàn),造成外存芯片操作過程中出現(xiàn)大量"縫隙",影響了系統(tǒng)整體 的吞吐率。如果采用多鏈表結(jié)構(gòu)雖然可以解決此類問題,但是需要額外存儲一 定量的控制信息,存儲與更新開銷都將增大。
利用數(shù)據(jù)與控制分離的鏈表單元結(jié)構(gòu),在DRAM操作的同時超前讀取 SRAM中下一鏈表單元的控制信息,通過預(yù)操作克服外存延遲,利用流水化操 作消除外存芯片操作過程中的"縫隙"。其核心思想非常簡單,但在具體實現(xiàn)上 卻需要一定技巧。
具體實施過程中采用的FPGA芯片型號為Altera Stratix EP1S80F1508C5, RLDRAM(Reduced Latency DRAM)的型號為MT49H16M18C ,采用的SRAM型 號為CY7C1370C。
RLDRAM是一種延遲較小的DRAM存儲器,本次使用的芯片容量達到 16MX18bits,共計288Mbits,擁有8個Bank,運行頻率為166Mhz,它采用了DDR (Double Date Rate)技術(shù),等效運行頻率為333Mhz。它最大的特點在于擁 有讀/寫分離的數(shù)據(jù)總線,但讀/寫復(fù)用一套地址以及控制總線。
為了實現(xiàn)RLDRAM的讀/寫并行、最大程度上利用帶寬,在RLDRAM的使 用中以16個周期為讀寫操作的最小時間單位。對應(yīng)這16周期所能達到的最大 吞吐量為18bitsX2X16=576bits,其中排除用于校驗后的有效部分是576bitsX (16/18) =512bits=64B。則RLDRAM的實際配置可以理解為64BX512K。
CY7C1370C是Cypress公司出品的一款高性能SRAM。它擁有一套讀寫復(fù) 用的數(shù)據(jù)和控制總線。所有的數(shù)據(jù)操作都只能在時鐘上升沿觸發(fā)。其配置方式 為36bitsX512K,容量總計18Mbits,運行頻率為166Mhz??紤]4bits要用于校 驗,實際剩余空間及配置方式只能為32bitsX512K,共計16Mbits。
設(shè)計一"數(shù)據(jù)域和控制域分離"的鏈表結(jié)構(gòu),實現(xiàn)鏈?zhǔn)娇臻g管理。
利用RLDRAM和SRAM邏輯地址空間相同(都是512K),由RLDRAM和 SRAM共同組成"數(shù)據(jù)域和控制域分離"鏈表單元結(jié)構(gòu)。邏輯上,我們把擁有 相同高位地址的RLDRAM和SRAM視為一個完整的鏈表單元。對應(yīng)每個鏈表 單元包含一個64B的數(shù)據(jù)域(RLDRAM中存儲)和一個32 bits的控制域(SRAM
中存儲)。
通過圖3所示的鏈?zhǔn)娇臻g管理結(jié)構(gòu)實現(xiàn)對512K個鏈表單元的管理。其中 在FPGA片內(nèi)存儲器(MRAM)中額外維護每個邏輯隊列的頭尾指針,而通過 一個獨立隊列(Freelist)實現(xiàn)對空閑鏈表單元的維護。圖中示意了三個鏈表單 元的鏈接信息地址分別為A、 B、 C對應(yīng)的RLDRAM的64B的數(shù)據(jù)域存儲的 信元具有鏈接關(guān)系,地址A對應(yīng)于控制域的信息為B,即表示地址A處數(shù)據(jù)域 下一個信元為地址B所存儲。
13設(shè)計二壓縮信元中的控制信息。
針對交換網(wǎng)絡(luò)中多隊列緩沖應(yīng)用的具體需求。常見的控制信息包括
1、 Card No.,目的線卡號。由于每個信元都需要經(jīng)交換網(wǎng)絡(luò)接口封裝成幀,
通過交換網(wǎng)絡(luò)發(fā)往其他端口 。目的線卡號指出了這個信元具體的目的線卡地址。
2、 Flow No.,流號。流號是邏輯隊列內(nèi)部所有數(shù)據(jù)包的統(tǒng)一標(biāo)識,通過流 號可以區(qū)分各個數(shù)據(jù)包所屬的邏輯隊列。
3、 Length,長度。信元是由數(shù)據(jù)包分割得來的,對于某些短包或者長包的 最后一個信元來說,其有效信息可能不足64字節(jié)。由于RLDRAM采用的是固 定操作,當(dāng)某個信元內(nèi)部實際有效信息小于64字節(jié)時,需要由Length標(biāo)識出實 際負(fù)載的有效長度。
4、 Seg.Info,分段信息。數(shù)據(jù)包分割為信元經(jīng)過交換網(wǎng)絡(luò)后,需要還原為數(shù) 據(jù)包,此時需要一個信息用來指導(dǎo)重組。分段信息標(biāo)識了當(dāng)前信元對應(yīng)原數(shù)據(jù) 包的哪個部分。
5、 Total Length,數(shù)據(jù)包總長度。用來標(biāo)識信元對應(yīng)的數(shù)據(jù)包的原始長度, 用于檢測是否存在信元丟失。
可以看出上述控制信息對于每個信元都是必不可少的。首先對其進行最大 限度的壓縮。
1、 將CardNo與FlowNo做合并處理,用流號的高位表示目的線卡號???慮支持64K隊列則預(yù)留16bits。
2、 Seg.Info.,分段信息可以壓縮至2bits。由于在實際調(diào)度過程中,通常以 數(shù)據(jù)包為單位進行調(diào)度。同一數(shù)據(jù)包內(nèi)不會亂序。只需表明當(dāng)前信元屬于"包 頭"、"包尾"、"包中部"或者是"獨立包"即可。 一共4種狀態(tài),用2bits即可。
3、 Length,由于信元最大不過64B,設(shè)內(nèi)部數(shù)據(jù)接口為32bits,以4B為單 位。實際信元的長度不超過16X4B。所以長度字段只需5bits。(也可以用4bits,此時用0表示16。)
4、 Total Length,同樣以4B為單位,以1500字節(jié)為數(shù)據(jù)包最大長度,則需 要9bits存儲空間。
經(jīng)過壓縮,F(xiàn)low No占16bits, Seg.Info占2bits, Length占5bits, Total Length 占9bits,總計已經(jīng)32bits,超過SRAM剩余的13bits (全部32bits中的19bits
用于存儲鏈表單元下一跳指針)。
利用調(diào)度同一數(shù)據(jù)包過程中信元不亂序這個特點,可以進一步優(yōu)化控制信 息存儲的開銷。僅在SRAM中存儲2bits Seg.Info, 5bits Length,就可以達到與 存儲32bits相同的效果。
由于調(diào)度同一數(shù)據(jù)包過程中信元不亂序,所以只需要在第一個信元中存儲 16bits流號和9bits總長度信息,后繼信元經(jīng)由査詢Seg.Info字段得知某信元與 每個IP包第一個信元的關(guān)系,繼承第一個信元的流號信息即可。
反映到硬件實現(xiàn)的具體方法就是在調(diào)度第一個信元時,將第一個信元的 流號信息存于片內(nèi)寄存器供后繼信元使用。
于是定義的信元格式有兩種。圖4(a)所示的是數(shù)據(jù)包第一個信元或者當(dāng)數(shù) 據(jù)包僅有一個信元時的信元格式。圖4(b)所示的則是后繼信元的數(shù)據(jù)格式。
通過這種方式可大大提高系統(tǒng)在長數(shù)據(jù)包情況下的存儲效率。
設(shè)計三流水線設(shè)計。
僅僅靠減少外存額外開銷并不能直接提高系統(tǒng)的傳輸效率,更重的是如何 實現(xiàn)信元間背靠背的傳輸。通過采用了流水線設(shè)計可以極大地提高了系統(tǒng)效率。 本節(jié)將對設(shè)計流水線過程中遇到的問題和解決方法做簡要說明。
其中上文提到的"數(shù)據(jù)與控制分離"的特性對于實現(xiàn)系統(tǒng)流水線設(shè)計,增 加系統(tǒng)的吞吐率至關(guān)重要。
流水設(shè)計難點在本次實現(xiàn)范例中,每次對RLDRAM的操作是按照固定64B進行的,對 應(yīng)16個時鐘周期。而RLDRAM同時存在兩條獨立的讀寫分離的數(shù)據(jù)總線。這 就要求系統(tǒng)每16個周期要處理兩個數(shù)據(jù)包(一個入隊、 一個出隊)。平均8個 周期處理一個數(shù)據(jù)包。另一方面,存儲器的延遲(以返回的結(jié)果可以被利用的 總時間來計算)通常不小,舉例
(1) MRAM等片內(nèi)存儲讀取的延遲為4個周期;
(2) 片內(nèi)FIFO讀取延遲4個周期;
(3) 片外SRAM讀取的延遲8個周期,寫入延遲5個周期;
(4) RLDRAM讀取延遲12個周期,寫入延遲加上錯位延遲大約11 周期。
加之一些操作上存在一定的邏輯先后關(guān)系,8周期內(nèi)完成一次獨立的操作過 程是不可能的。
以入隊操作的完整過程說明各個操作環(huán)節(jié)所耗費的時鐘周期數(shù)。在順序操 作情況下, 一次入隊操作的過程可分為如下步驟
(1) 獲取即將入隊的信元的流號信息。這個過程要求讀取入隊 FIFO,耗時4周期。
(2) 査詢流號所屬隊列當(dāng)前隊尾指針。隊尾指針存儲于片內(nèi)存儲, 讀取它需要進行一次MRAM操作,耗時4個周期。
(3) 査詢當(dāng)前空閑鏈表,申請一個新鏈表單元,同時要獲取當(dāng)前空 閑鏈表頭的下一跳指針,用來更新空閑鏈表。此過程為一次SRAM讀操 作,耗時8周期。
(4) 修改當(dāng)前隊尾鏈表下一跳指針,使之指向新申請的鏈表單元, 此操作為SRAM寫操作,耗時5周期。
(5) 修改當(dāng)前隊列隊尾指針信息。此操作為MRAM操作,耗時4 周期。(6) 將信元寫入到對應(yīng)RLDRAM鏈表單元數(shù)據(jù)域。從發(fā)出命令到 RLDRAM內(nèi)部開始寫入,耗時11周期。
(7) 對應(yīng)64B信元情況下,再耗時16周期寫入結(jié)束。 可以看出一個入隊操作就要52個周期。如果再和出隊操作綜合考慮,排除
設(shè)備爭用的因素,則實際操作需要耗費60周期以上,與8周期的要求相差太遠。 而上述操作中只有16個周期執(zhí)行了 RLDRAM操作,外存利用效率極低。
解決方法
技術(shù)領(lǐng)域:
本發(fā)明采用兩種方法解決上述問題,概括地說就是
1、 壓縮
將那些無嚴(yán)格數(shù)據(jù)相關(guān)的操作安排在流水線中同一時隙;因為設(shè)備獨占而 具有排他性的操作盡可能安排在流水線中連續(xù)時隙以減少復(fù)位操作。
2、 折疊
利用鏈表單元數(shù)據(jù)和控制分離的特點,在調(diào)度當(dāng)前信元的同時,提前取得 下一個信元的控制信息,使得一個信元尋址和實際調(diào)度的時間被拉長到兩個甚 至三個流水線時隙(一個完整流水線時隙包含16周期)。
下面首先對"壓縮"進行舉例解釋,其具體思想的表現(xiàn)形式又可細分為如 下三種情況
1、 系統(tǒng)同時和FIFO, MRAM, SRAM, RLDRAM等設(shè)備存在聯(lián)系。而 這些設(shè)備是相對獨立的,這意味著同一時間內(nèi)可以有多種操作同時訪問這些設(shè) 備。
以之前的入隊操作為例。入隊操作步驟(5)和操作步驟(6)這兩個操作就分別 對應(yīng)片內(nèi)存儲和RLDRAM操作,且無邏輯先后關(guān)系。因此可以并行。
2、 節(jié)省復(fù)位操作的使用,壓縮讀寫。
依然以入隊操作為例進行說明。入隊操作步驟P)和入隊操作步驟(勺分別對
17應(yīng)一次SRAM讀操作和一次SRAM寫操作。從邏輯上來講二者沒有依賴關(guān)系。操作步驟(3)中需要獲取的指針信息直到 下次入隊操作才會被使用到。而操作步驟(4)對應(yīng)的寫入信息就是"當(dāng)前空閑鏈 表頭",在操作步驟(3)開始時已經(jīng)知道。換句話說,操作步驟(3)讀出的信息不急用,操作步驟(4)所要寫入的條件己 經(jīng)具備。兩個操作,理論上也可以同時被執(zhí)行。但是SRAM只有一套數(shù)據(jù)和控制總線,是輸入輸出復(fù)用的,不能同時執(zhí)行。 如果等到操作步驟(3)所需的8個周期完成后再開始操作步驟(4),則全過程耗費 13周期。簡單分析SRAM讀寫過程中總線的占用情況。設(shè)t。時刻,對SRAM執(zhí)行了 一次讀操作,則可知在t。+7時刻其對應(yīng)讀取結(jié)果被送出。而從tQ+l到t。+6這段 時間內(nèi),SRAM的總線實際上是空閑的。能否在t。+l時刻執(zhí)行寫操作呢?完全 可以。具體做法是把操作步驟(3)和操作步驟(4)間隔一個周期發(fā)出,操作歩驟(4) 被隱藏于操作步驟(3)的執(zhí)行過程中,兩者消耗的時間合計就只有8個周期。 3、存儲設(shè)備的錯峰使用。以入隊操作為例分析,操作步驟(2)與操作步驟(4)存在邏輯上的先后關(guān)系。 因此必須直到操作步驟(2)完成后才能開始歩驟(4)的操作。通過方法二可以 把操作步驟(3)、 (4)合并為一個8周期操作。因此入隊操作步驟(2)、 (3)、 (4)總共 耗時12周期。出隊操作也有類似結(jié)論。如果依然順序執(zhí)行入隊和出隊任務(wù),則 整個過程還是需要24周期。其實大可不必。繼續(xù)分析方法2中SRAM總線的占用情況可知SRAM總線 仍有空閑。采用方法二以后t。到t。+7時刻,總線占用的情況為t。時刻讀操作, tQ+l寫操作,tQ+2時刻寫復(fù)位操作,to+7時刻讀結(jié)果送出。而tQ+3到t。+6這4 個周期SRAM仍然是空閑的。這4個空閑的周期,正好可以供出隊方向使用。因為整個過程和現(xiàn)實生活中的錯峰用電現(xiàn)象類似,本發(fā)明將此一優(yōu)化方法 稱為"存儲設(shè)備的錯峰使用"。通過合理的錯峰使用,可以把整個過程控制在16個周期以內(nèi),節(jié)省8個周 期。圖5給出了 "存儲設(shè)備的錯峰使用"思想的邏輯示意,按照串行的方式執(zhí) 行入隊、出隊的MRAM和SRAM讀寫操作,總共需要24個周期,但如果對SRAM 進行存儲設(shè)備的錯峰使用,將入出隊對SRAM讀寫錯峰使用,可將時鐘數(shù)壓縮 到16個周期。以上就是采用的幾種壓縮流水線方法,通過"壓縮",可以把一個數(shù)據(jù)包對 應(yīng)的"MRAM和SRAM的尋址操作"壓縮到16周期,但是仍然不能把所有操 作壓入16周期。以入隊操作為例,操作步驟(1)和操作步驟(2)存在邏輯上的先后關(guān)系,不能 壓縮或并行。加上并發(fā)操作后的操作步驟(5)和操作歩驟(6),整個過程仍然達到47周期, 與16周期的要求還有差距。為了進一步優(yōu)化流水線設(shè)計就必須采用折疊流水的方法。以入隊操作為例,可以發(fā)現(xiàn)經(jīng)過"壓縮"后的操作步驟耗時呈現(xiàn) "4+16+11+16"分布。其中"4"對應(yīng)獲取信元控制信息,"16"對應(yīng)MRAM、 SRAM尋址(獲取隊列控制信息),"11"對應(yīng)RLDRAM數(shù)據(jù)操作延遲,"16" 對應(yīng)寫入64B數(shù)據(jù)所需時間。上述每個部分都單獨對應(yīng)了信元的控制信息操作或者數(shù)據(jù)信息操作。假設(shè)依次到達信元A、 B、 C、 D要求入隊。利用數(shù)據(jù)與控制分離的特點,在流水線的實現(xiàn)過程中,在一個16周期內(nèi)可以(1) 讀取信元D的控制信息。制信息。(3) 開始執(zhí)行信元B的RLDRAM操作。(4) 信元A寫入完成。上述4個步驟均可在16個周期內(nèi)完成。而且像"讀取信元D的控制信息" 這樣的操作甚至可以被拉長到16周期。圖6示意的是入隊操作時的4級流水。一個信元從開始處理到結(jié)束,共需要51個周期(協(xié)調(diào)流水線內(nèi)部操作后,單 個信元的處理時間比順序執(zhí)行有所加長)。圖6中用4種不同顏色來區(qū)分4個不同信元的處理過程??梢钥闯鲈?級 流水線中最多可以同時存在4個信元的對應(yīng)信息。而任意時刻可以最多有3個 信元正在接受處理。等效后系統(tǒng)在入隊方向上就可以每16周期處理一個信元。 在出隊方向也有類似的結(jié)論。于是一個系統(tǒng)可以并發(fā)處理6個以上信元,并在 一個流水線時隙內(nèi)完成其中的兩個。流水設(shè)計使得系統(tǒng)可以實現(xiàn)在入隊出隊兩 個方向上,信元的背靠背傳輸,極大地提高了數(shù)據(jù)傳輸效率。性能分析經(jīng)過流水線設(shè)計,信元在外存?zhèn)鬏數(shù)倪^程中是背靠背的。但是受限于 RLDRAM最小操作單元限制,在信元不足64B時,不足64B部分的外存帶寬只 能被浪費。另外,考慮RLDRAM在1024個周期內(nèi)必須固定32個周期用于DRAM 刷新。實際帶寬效率只有ri =96.875%。結(jié)合圖4所示信元格式以及采用芯片的具體性能,分析如下長度為yB的數(shù)據(jù)包會被分割為n個信元。其中在各個不同數(shù)據(jù)包長情況下的有效帶寬1 "ThrougXv') = 7x32 乂96.S7諷GbDS,40 ^ v s 1500對應(yīng)了公式得出的吞吐率曲線如圖7所示??梢钥闯鲈谠O(shè)計上,系統(tǒng)帶寬的 利用率已經(jīng)到達極限,1468字節(jié)情況下的最大帶寬(5.1526Gbps)已經(jīng)與外存 最大有效帶寬(166MhzX32BitsX ri=5.146Gbps)基本一致。結(jié)論,我們采用數(shù)據(jù)與控制分離的鏈表單元結(jié)構(gòu),通過流水線設(shè)計、壓縮控 制信息等技術(shù)實現(xiàn)了外存芯片帶寬的最大化利用,整體設(shè)計領(lǐng)先于國內(nèi)外當(dāng)前 其他任何技術(shù)。
權(quán)利要求
1.基于鏈表的交換網(wǎng)絡(luò)中隊列緩沖管理方法,其特征在于,所述方法是一種基于鏈表的交換網(wǎng)絡(luò)中多隊列緩沖管理的方法,是在一種隊列緩沖管理系統(tǒng)中依次按以下步驟實現(xiàn)的步驟(1).構(gòu)建一個用于所述交換網(wǎng)絡(luò)中多隊列緩沖管理的隊列管理系統(tǒng),所述系統(tǒng)含有FPGA芯片、緩存數(shù)據(jù)包DRAM和緩存數(shù)據(jù)包描述控制信息用的SRAM,其中FPGA芯片含有隊列管理模塊和片內(nèi)存儲器,其中隊列管理模塊設(shè)有數(shù)據(jù)包輸入端口和數(shù)據(jù)包輸出端口,片內(nèi)存儲器MRAM,與所述隊列管理模塊互連,緩存數(shù)據(jù)包DRAM,與所述隊列管理模塊互連,所述緩存數(shù)據(jù)包DRAM是一種延遲壓縮式的RLDRAM,以16個周期為讀寫操作的最小時間單位,實際配置為64B×512K,擁有讀/寫分離的數(shù)據(jù)總線,但讀寫復(fù)用一套地址及控制總線,緩存數(shù)據(jù)包描述控制信息用的SRAM,型號為CYTC1370C,擁有一套讀寫復(fù)用的數(shù)據(jù)和控制總線,實際配置為32bits×512K;步驟(2).把所選RLDRAM和SRAM共同組成一個“數(shù)據(jù)域和控制域分離”的鏈表單元,所述的每個鏈表單元包含一個64B的數(shù)據(jù)域和一個32bits的控制域,由擁有相同高位地址的所述RLDRAM和SRAM組成,步驟(3).在所述FPGA中建立一個鏈表空間管理結(jié)構(gòu)實現(xiàn)的512K個所述鏈表單元的管理在該FPGA的片內(nèi)存儲器MRAM中額外維護每個邏輯隊列的頭尾指針,以對應(yīng)于頭尾鏈表單元對應(yīng)的外存地址,再通過一個存有空閑鏈表頭尾指針的獨立隊列Freelist,實現(xiàn)對空閑鏈表單元的管理,步驟(4).把所述交換網(wǎng)絡(luò)中多隊列緩沖的控制信息進行最大限度的壓縮后得到流號Flow No,占16bits,分段信息Seg.Info占2bits,信元長度length占5bits,數(shù)據(jù)包總長度Total Length占9bits,其中流號Flow No,高位表示目的線卡號Card No,分段信息Seg.Info,其中包括四種狀態(tài)“01”表示數(shù)據(jù)包頭,“00”表示數(shù)據(jù)包中段,“10”表示數(shù)據(jù)包尾,“11”表示獨立數(shù)據(jù)包,然后,在第一個鏈表單元中存儲所述16bits流號和9bits數(shù)據(jù)包總長度信息,在后繼鏈表單元的后繼信元中存儲所述分段信息Seg.Info,以便在對所述DRAM進行操作的同時讀取所述SRAM中下一鏈表單元的控制信息,步驟(5).按以下步驟對到達的4個信元A、B、C、D依次進行流水線操作以便等效于在16個周期內(nèi)處理一個信元步驟(5.1).所述隊列管理模塊在4個周期內(nèi)讀取入隊信元A,并獲取該信元A的流號信息,步驟(5.2).所述隊列管理模塊在4個周期內(nèi),對所述片內(nèi)存儲器MRAM進行一次讀操作,查詢步驟步驟(5.1)中獲取的流號所屬當(dāng)前隊列的隊尾指針,同時,在8個周期內(nèi)對所述的SRAM進行一次讀操作,以查詢當(dāng)前空閑鏈表,申請一個新鏈表單元,獲取當(dāng)前空閑鏈表的下一跳指針,用來更新空閑鏈表,再在發(fā)出所述查詢當(dāng)前空閑鏈表一個周期后,用5個周期的時間對所述SRAM進行一次寫操作,修改所述當(dāng)前隊列隊尾鏈表的下一跳指針,使它指向所述新申請的鏈表,同時讀取到達信元B的流號信息,在該步驟(5.2)中所執(zhí)行的所有操作在16個周期內(nèi)完成,去處理所述A和B兩個信元,步驟(5.3).所述隊列管理模塊對所述MRAM進行一次寫操作,修改所述信元A中的隊尾指針信息,同時,在11個周期內(nèi)對所述RLDRAM進行一次寫操作,所述信元A寫入到對應(yīng)所述RLDRAM的鏈表單元的數(shù)據(jù)域,與此同時,獲取所述信元C的流號信息,在該步驟(5.3)中所執(zhí)行的所有操作在16個周期內(nèi)完成,同時處理所述A、B、C三個信元,步驟(5.4).在每個所述的鏈表單元為64B的情況下,所述隊列管理模塊再耗時16個周期,結(jié)束所述信元A的寫入,同時對所述信元B,在4個周期內(nèi)執(zhí)行對所述MRAM的寫操作,修改隊列的隊尾指針信息,在11個周期內(nèi),對所述的RLDRAM執(zhí)行寫操作,寫入所述信元B,同時獲取所述信元D的流號信息,在該步驟(5.4)中的執(zhí)行的所有操作在16個周期內(nèi)完成,去處理所述A、B、C、D共4個信元,步驟(5.5).把所述信元C的RLDRAM寫入操作、所述信元D的查詢當(dāng)前流號所述當(dāng)前隊列的隊尾指針的對所述MRAM的讀操作,以及查詢當(dāng)前空閑鏈表的對所述SRAM的讀操作、移入到下一階段4個16周期內(nèi)E、F、G、H四個信元來臨時的第一個16周期內(nèi)進行,以此類推。
全文摘要
基于鏈表的交換網(wǎng)絡(luò)中隊列緩沖管理方法,屬于計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域,其特征在于同時采用DRAM以及SRAM構(gòu)造數(shù)據(jù)與控制分離的鏈表單元結(jié)構(gòu),通過鏈表方式對外存空間進行管理,實現(xiàn)多隊列結(jié)構(gòu);利用隊列操作以數(shù)據(jù)包為單位這個特點,壓縮存儲鏈表單元中的控制信息,提高了鏈表單元的存儲效率;通過流水線設(shè)計實現(xiàn)多個鏈表單元的并發(fā)處理,克服了存儲器延遲的不利影響,提高了鏈表的操作效率。它的特點在于吞吐率高,擴展性好。
文檔編號H04L12/56GK101594299SQ200910084278
公開日2009年12月2日 申請日期2009年5月20日 優(yōu)先權(quán)日2009年5月20日
發(fā)明者斌 劉, 棟 林 申請人:清華大學(xué)