專利名稱:一種存儲管理的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信技術(shù)中分組轉(zhuǎn)發(fā)設(shè)備的存儲管理方法,特別是涉及一種高速路由器流量管理芯片存儲管理方法和系統(tǒng)。
背景技術(shù):
隨著網(wǎng)絡(luò)容量與業(yè)務(wù)不斷地快速增長,分組轉(zhuǎn)發(fā)設(shè)備,特別是i 各由器的接口速度迅速增加。為了實(shí)現(xiàn)報(bào)文的高速轉(zhuǎn)發(fā)處理, 一般在路由器內(nèi)部采用專門的流量管理芯片完成對高速凄t據(jù)流的管理,將"^艮文緩存后輸出。
對于高端路由器等設(shè)備而言, 一個(gè)基本的要求是能緩存200ms線速的報(bào)文數(shù)據(jù),40Gbps環(huán)境下,則至少擁有8Gb的存儲能力。對于如此大的存儲容量, 一般采用在流量管理芯片外掛存儲芯片存儲數(shù)據(jù),在流量管理芯片內(nèi)部采用鏈表結(jié)構(gòu)進(jìn)行管理。以鏈表的每個(gè)節(jié)點(diǎn)對應(yīng)每個(gè)報(bào)文或分片的存儲空間,預(yù)先記錄鏈表首尾節(jié)點(diǎn),對于鏈表除首尾節(jié)點(diǎn)之外的其他節(jié)點(diǎn)可以根據(jù)數(shù)量的多少存儲在流量管理芯片內(nèi)部或片外專門的存儲器中。
為了能夠應(yīng)用到40Gbps的網(wǎng)絡(luò)環(huán)境,流量管理芯片必須能夠線速處理OC-768速度等級上的IP包。在OC-768速度等級上,典型的IP包長與IP包轉(zhuǎn)發(fā)率之間的關(guān)系如圖1。
因此,為了滿足要求,芯片需提供100MPPS的分組處理能力。在100MHz的系統(tǒng)時(shí)鐘下,100MPPS的分組處理能力,對應(yīng)為每個(gè)周期應(yīng)處理一個(gè)鏈表節(jié)點(diǎn),然后利用該鏈表節(jié)點(diǎn)訪問數(shù)據(jù)存儲區(qū)。由于鏈表結(jié)構(gòu)的固有特性,必須要以鏈表的當(dāng)前節(jié)點(diǎn)作為依據(jù)去讀取鏈表的下一個(gè)節(jié)點(diǎn),在得到下一個(gè)節(jié)點(diǎn)之前,鏈表是無法繼續(xù)有效進(jìn)行工作的,而片內(nèi)和片外的存儲器都存在讀取延遲(讀取延遲指發(fā)起讀操作到真正獲得所要讀取內(nèi)容,存在時(shí)間間隔),片內(nèi)存儲器一般會有1-2個(gè)周期讀取延遲,而片外存儲器延遲更長。因?yàn)樽x取延遲的存在,普通的鏈表結(jié)構(gòu)無法做到流水操作,也就無法滿足每個(gè)周期
5處理一個(gè)鏈表節(jié)點(diǎn)要求。
普通單鏈表結(jié)構(gòu)如圖2所示,A0、 Al........ Dm.......為鏈表節(jié)點(diǎn),
每個(gè)鏈表節(jié)點(diǎn)指向一塊數(shù)據(jù)存儲空間,在硬件實(shí)現(xiàn)中,預(yù)先記錄鏈表的首尾節(jié)點(diǎn)內(nèi)容,由于鏈表節(jié)點(diǎn)數(shù)量巨大,其他節(jié)點(diǎn)放入存儲器保存。在同一隊(duì)列的數(shù)據(jù)報(bào)文連續(xù)出列時(shí),需要連續(xù)獲取鏈表節(jié)點(diǎn),保證報(bào)文數(shù)據(jù)的持續(xù)出隊(duì)。訪問鏈表時(shí),由當(dāng)前節(jié)點(diǎn)作為存儲器的地址,讀取鏈表的下一節(jié)點(diǎn),然后再由讀取到的鏈表節(jié)點(diǎn)作為存儲器的讀地址,繼續(xù)去讀下一節(jié)點(diǎn)。由于硬件存儲器的固有讀延遲,由當(dāng)前節(jié)點(diǎn)作為讀地址讀取下一節(jié)點(diǎn),到真正讀取到該地址存儲器的內(nèi)容,需要若干個(gè)時(shí)鐘周期,這一段時(shí)間內(nèi)鏈表是無法有效使用的,因?yàn)楸仨毷褂米x到的內(nèi)容作為地址繼續(xù)讀取,才能使流水線持續(xù)工作。這樣在實(shí)際高速、大容量網(wǎng)絡(luò)環(huán)境下是無法滿足需求的。
申請?zhí)?00410010495.2的中國專利《具有鏈表處理器的存儲管理系統(tǒng)》,提出了適合于處理鏈表數(shù)據(jù)文件的一個(gè)存儲器管理系統(tǒng)(1800 )。該系統(tǒng)具有多個(gè)低容量高速存儲器(1803 )和一個(gè)低速高容量的大容量存儲器(1806 )。 一個(gè)訪問流量調(diào)節(jié)器(1801 )生成請求以通過存儲器讀寫鏈表文件。頭部和尾部緩沖區(qū)以及鏈表的任何中間部分緩沖區(qū),都被寫入高速存儲器。中間部分緩沖區(qū)立即從高速存儲器被傳輸?shù)缴鲜龃笕萘看鎯ζ鳎瑫r(shí)將鏈表的頭緩沖區(qū)和尾緩沖區(qū)留在高速存儲器中。在讀操作中,從高速存儲器中讀出頭和尾部緩沖區(qū)。將中間部分緩沖區(qū)從大容量存儲器傳輸?shù)缴鲜龈咚俅鎯ζ?,并接著從該高速存儲器中讀出。該專利對于高速、大容量存儲結(jié)構(gòu)進(jìn)行提出了一種方案,使用了鏈表,但對于鏈表的管理方法并沒有具體涉及。
申請?zhí)?00710038679.3的中國專利《一種快速檢索數(shù)據(jù)的鏈表實(shí)現(xiàn)方法》提出了 一種快速檢索數(shù)據(jù)的鏈表實(shí)現(xiàn)方法,將鏈表中的每一個(gè)節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)都指向一個(gè)數(shù)組空間,在初始化時(shí)指定節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)指向數(shù)組的類型;在初
始化時(shí)指定或默認(rèn)每一個(gè)節(jié)點(diǎn)的數(shù)據(jù)項(xiàng)指向的數(shù)組的元素個(gè)數(shù)并設(shè)定每個(gè)元素的字節(jié)數(shù),數(shù)據(jù)項(xiàng)指向的數(shù)組中的每個(gè)元素都具備一個(gè)唯一的索引號;鏈表可以為單向鏈表或雙向鏈表;數(shù)組可以是動態(tài)分配的數(shù)組或指定的數(shù)組,整個(gè)鏈表中的數(shù)據(jù)為排序存放。該專利提出了一種鏈表結(jié)構(gòu),但沒有解決高帶寬、大容量環(huán)境下的硬件實(shí)現(xiàn)高速存儲管理所遇到的難點(diǎn)。
由此可以看出,現(xiàn)有的技術(shù)并沒有很好的解決上面提到的采用硬件實(shí)現(xiàn)高速、大容量存儲管理所遇到的問題。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種便于硬件芯片實(shí)現(xiàn)的,適應(yīng)高速、大容量存儲管理的方法和系統(tǒng)。
為了解決上述問題,本發(fā)明提供了一種存儲管理方法,包括
報(bào)文入隊(duì)時(shí),為所述報(bào)文建立n條鏈表,依次稱為0號鏈表至n-l號鏈表,所述n不小于2,保存所述n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn),所述n條鏈表中每條鏈表包括若干個(gè)組塊,每個(gè)組塊內(nèi)包含若干個(gè)區(qū)塊,每個(gè)區(qū)塊對應(yīng)一個(gè)節(jié)點(diǎn),同一組塊內(nèi)各區(qū)塊的地址為基地址加偏移地址,同一組塊內(nèi)其各區(qū)塊的基地址相同,其相鄰區(qū)塊偏移地址相差一指定值;
報(bào)文出隊(duì)時(shí),從0號鏈表開始,依次使用0號鏈表至n-l號鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-l號鏈表的下一組塊;依此類推,直到報(bào)文結(jié)束;
其中,使用每個(gè)組塊的方法為從該組塊的首個(gè)區(qū)塊開始,依次使用該組塊中的每個(gè)區(qū)塊,其中,根據(jù)當(dāng)前使用的區(qū)塊的偏移地址加上所述指定值得到下一區(qū)塊的偏移地址;使用完每個(gè)組塊時(shí),使用該組塊中區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
進(jìn)一步地,上述方法還可具有以下特點(diǎn),為所述n條鏈表建立鏈表出隊(duì)活動標(biāo)志和鏈表空標(biāo)志,為每個(gè)節(jié)點(diǎn)建立包尾標(biāo)志,報(bào)文出隊(duì)時(shí),根據(jù)鏈表出隊(duì)活動標(biāo)志判斷當(dāng)前要使用的鏈表,根據(jù)鏈表空標(biāo)志判斷鏈表是否為空,根據(jù)包尾標(biāo)志判斷是否到達(dá)報(bào)文尾節(jié)點(diǎn),使用完i號鏈表的某一組塊時(shí),將i號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為非活動,將i+l號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為活動,i=0,...,n-2;當(dāng)鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將該鏈表的鏈表空標(biāo)志設(shè)置為空。進(jìn)一步地,上述方法還可具有以下特點(diǎn),所述n條鏈表中,每個(gè)鏈表中每個(gè)組塊包含的區(qū)塊個(gè)數(shù)相同。
進(jìn)一步地,上述方法還可具有以下特點(diǎn),所述n條鏈表的組塊中,同一組塊內(nèi)相鄰區(qū)塊的偏移地址相差1,每個(gè)組塊的首個(gè)區(qū)塊的偏移地址為0,使用完每個(gè)組塊時(shí),使用該組塊中首個(gè)區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
進(jìn)一步地,上述方法還可具有以下特點(diǎn),報(bào)文入隊(duì)時(shí),按如下方式建立n條鏈表
根據(jù)報(bào)文長度申請可用的組塊,將第一個(gè)申請的組塊分給O號鏈表,第二個(gè)申請的組塊分給1號鏈表,依此類推,將第n個(gè)申請的組塊分給n-l號鏈表,如果報(bào)文未結(jié)束,將第n+l個(gè)申請的組塊分給0號鏈表,將第n+2個(gè)申請^組塊分給1號鏈表,依此類推,直到報(bào)文結(jié)束;申請的組塊數(shù)目由入隊(duì)報(bào)文的總大小決定;每個(gè)鏈表的第一個(gè)組塊的首個(gè)區(qū)塊為該鏈表的首節(jié)點(diǎn),每個(gè)鏈表的最后一個(gè)組塊中使用到的最后一個(gè)區(qū)塊為該鏈表的尾節(jié)點(diǎn)。
本發(fā)明還提供一種存儲管理系統(tǒng),包括報(bào)文入隊(duì)管理模塊和報(bào)文出隊(duì)管理模塊,其中
所述報(bào)文入隊(duì)管理模塊,用于在報(bào)文入隊(duì)時(shí),為所述報(bào)文建立n條鏈表,依次稱為0號鏈表至n-l號鏈表,保存所述n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn),所述n條鏈表中每條鏈表包括若干個(gè)組塊,每個(gè)組塊內(nèi)包含若干個(gè)區(qū)塊,每個(gè)區(qū)塊對應(yīng)一個(gè)節(jié)點(diǎn),同一組塊內(nèi)各區(qū)塊的地址為基:l也址加偏移地址,同一組塊內(nèi)其各區(qū)塊的基地址相同,其相鄰區(qū)塊偏移地址相差一指定值,所述n不小于2;
所述報(bào)文出隊(duì)管理模塊,用于在報(bào)文出隊(duì)時(shí),從0號鏈表開始,依次使用0號鏈表至n-l號鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-l號鏈表的下一組塊;依此類推,直到報(bào)文結(jié)束;其中,使用每個(gè)組塊的方法為從該組塊的首個(gè)區(qū)塊開始,依次使用該組塊中的每個(gè)區(qū)塊,其中,根據(jù)當(dāng)前使用的區(qū)塊的偏移地址加上所述指定值得到下一區(qū)塊的偏移地址;使用完每個(gè)組塊時(shí),使用該組塊中區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn),所述"R文入隊(duì)管理^t塊還用于
為所述n條鏈表建立鏈表出隊(duì)活動標(biāo)志和鏈表空標(biāo)志,為每個(gè)節(jié)點(diǎn)建立包尾標(biāo)志,所述報(bào)文出隊(duì)管理模塊,還用于在報(bào)文出隊(duì)時(shí),根據(jù)所述鏈表出隊(duì)活動標(biāo)志判斷當(dāng)前要使用的鏈表,根據(jù)鏈表空標(biāo)志判斷鏈表是否為空,根據(jù)包尾標(biāo)志判斷是否到達(dá)報(bào)文尾節(jié)點(diǎn),使用完i號鏈表的某一組塊時(shí),將i號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為非活動,將i+l號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為活動,i=0,...,n-2;當(dāng)鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將該鏈表的鏈表空標(biāo)志設(shè)置為空。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn),所述報(bào)文入隊(duì)管理模塊建立的所述n條鏈表中每個(gè)鏈表中每個(gè)組塊包含的區(qū)塊個(gè)數(shù)相同。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn),所述報(bào)文入隊(duì)管理模塊建立的所述n條鏈表的組塊中,同一組塊內(nèi)相鄰區(qū)塊的偏移地址相差1,每個(gè)組塊的首個(gè)區(qū)塊的偏移地址為0;所述報(bào)文出隊(duì)管理模塊在使用完每個(gè)組塊時(shí),使用該組塊中首個(gè)區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn),所述報(bào)文入隊(duì)管理模塊用于在報(bào)文入隊(duì)時(shí),按如下方式建立n條鏈表
根據(jù)報(bào)文長度申請可用的組塊,將第一個(gè)申請的組塊分給O號鏈表,第二個(gè)申請的組塊分給1號鏈表,依此類推,將第n個(gè)申請的組塊分給n-l號鏈表,如果報(bào)文未結(jié)束,將第n+l個(gè)申請的組塊分給0號鏈表,將第n+2個(gè)申請的組塊分給l號鏈表,依此類推,直到報(bào)文結(jié)束;申請的組塊數(shù)目由入隊(duì)報(bào)文的總大小決定;每個(gè)鏈表的第一個(gè)組塊的首個(gè)區(qū)塊為該鏈表的首節(jié)點(diǎn),每個(gè)鏈表的最后一個(gè)組塊中使用的最后一個(gè)區(qū)塊為該鏈表的尾節(jié)點(diǎn)。
本發(fā)明提供的 一種硬件易于實(shí)現(xiàn)的高速、大容量存儲管理方法和系統(tǒng),采用多鏈表管理數(shù)據(jù)存儲空間,同時(shí)若干個(gè)相鄰的鏈表節(jié)點(diǎn)匯聚成Chunk,使得每條鏈表的使用間隔加大,隱藏了硬件存儲器的讀取延遲,同時(shí)方便管理。
9
圖1是OC-768速度等級上,典型的IP包長與IP包轉(zhuǎn)發(fā)率的關(guān)系示意圖2是現(xiàn)有單鏈表結(jié)構(gòu)示意圖3時(shí)本發(fā)明存儲管理方法流程圖4是本發(fā)明基本應(yīng)用系統(tǒng)模型;
圖5是本發(fā)明多鏈表和節(jié)點(diǎn)匯聚使用流程圖6是本發(fā)明n=2、 m=3時(shí)多鏈表和節(jié)點(diǎn)匯聚結(jié)構(gòu)示意圖7是本發(fā)明多鏈表和節(jié)點(diǎn)匯聚使用示意圖。
具體實(shí)施例方式
本發(fā)明的核心思想是,為報(bào)文建立多個(gè)鏈表,每個(gè)鏈表包含若干個(gè)組塊(Chunk),每個(gè)組塊包含若干個(gè)區(qū)塊(Block) , block即節(jié)點(diǎn),每個(gè)Chunk內(nèi)各Block地址連續(xù),出隊(duì)時(shí),輪流使用各個(gè)鏈表的組塊,并且在使用完一個(gè)組塊時(shí),讀取該組塊所在鏈表的下一組塊的地址,從而在下一次使用該鏈表時(shí),已經(jīng)從存儲器中讀出該組塊的地址,可以直接使用該組塊,避免了現(xiàn)有技術(shù)中由于存儲器讀取延遲而導(dǎo)致無法滿足每個(gè)周期處理一個(gè)鏈表節(jié)點(diǎn)要求。
本發(fā)明提供一種存儲管理方法,如圖3所示,包括
步驟310,報(bào)文入隊(duì)時(shí),為所述報(bào)文建立n條鏈表,依次稱為0號鏈表至n-l號鏈表,n不小于2,該n條鏈表中每條鏈表包括若干個(gè)Chunk,每個(gè)組塊包含若干個(gè)Block,每個(gè)Block對應(yīng)一個(gè)節(jié)點(diǎn),同一 Chunk內(nèi)的Block地址為基地址加偏移地址,同一 Chunk內(nèi)其各Block的基地址相同,其相鄰Block偏移地址相差一指定值;保存該n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn)。
其中,每個(gè)Chunk內(nèi)包含的Block數(shù)可以相同或不同,同一 Chunk內(nèi)各Block的偏移地址可以相差X, X事先給定。
一種實(shí)現(xiàn)方式是,每個(gè)Chunk所包含的Block個(gè)數(shù)相同,為m+1,同一Chunk內(nèi)的Block地址是連續(xù)的,即X = 1 ,所在地址表示為基地址+偏移地 址,同一 Chunk內(nèi)的每個(gè)Block的基地址相同,實(shí)際上基地址也就是每個(gè) Chunk的地址。
具體建立n條鏈表的方法為當(dāng)某一隊(duì)列有報(bào)文入隊(duì)時(shí),根據(jù)報(bào)文長度 申請空閑鏈表,即申請可用的Chunk,第 一個(gè)申請的Chunk分給0號鏈表, 第二個(gè)申請的Chunk分給1號鏈表,依此類推,前n個(gè)Chunk的每個(gè)首Block 節(jié)點(diǎn)記錄為該隊(duì)列n條鏈表的首指針(即首節(jié)點(diǎn)),至于申請的Chunk數(shù)目 由入隊(duì)報(bào)文的總大小決定。同時(shí),記錄該隊(duì)列的n條鏈表的尾指針(即尾節(jié) 點(diǎn)),為每條鏈表最后一個(gè)Chunk中使用到的最后一個(gè)Block節(jié)點(diǎn),同樣也 要記錄鏈表活動標(biāo)志和包尾標(biāo)志。其他隊(duì)列入隊(duì)時(shí),也進(jìn)行相同處理,為每 個(gè)隊(duì)列建立自己的n條鏈表。
步驟320,報(bào)文出隊(duì)時(shí),從0號鏈表開始,依次使用0號鏈表至n-1號 鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-l號鏈表的下一組塊;依此類 推,直到報(bào)文結(jié)束。
其中,使用每個(gè)組塊的方法為從該組塊的首個(gè)區(qū)塊開始,依次使用該 組塊中的每個(gè)區(qū)塊,其中,根據(jù)當(dāng)前使用的區(qū)塊的偏移地址加上所述指定值 得到下一區(qū)塊的偏移地址;使用完每個(gè)組塊時(shí),使用該組塊中區(qū)塊的基地址 得到該組塊所在鏈表中下一組塊的基地址。
具體的說,首先使用0號鏈表的首個(gè)組塊,使用完O號鏈表的首個(gè)組塊 后,使用1號鏈表的首個(gè)組塊,依次類推,直到使用完n-l號鏈表的首個(gè)組 塊;使用完n-l號鏈表的首個(gè)組塊后,使用0號鏈表的下一組塊;使用完0 號鏈表的下一組塊時(shí),使用l號鏈表的下一組塊;依次類推,直到報(bào)文結(jié)束。
當(dāng)各Chunk均包含m+1個(gè)Block,且同一 Chunk內(nèi)各節(jié)點(diǎn)的地址連續(xù)時(shí), 報(bào)文出隊(duì)時(shí)首先使用0號鏈表的首節(jié)點(diǎn),即0號Chunk中的0號Block。然 后直接將節(jié)點(diǎn)地址中的偏移地址直接增加1,就可得到鏈表的下一節(jié)點(diǎn),即O 號Chunk中的1號Block。當(dāng)使用到編號為m的Block時(shí)用0號鏈表的首節(jié) 點(diǎn)的基地址讀取0號鏈表的下一基地址,作為0號鏈表新的首節(jié)點(diǎn)。當(dāng)0號 鏈表讀取下一 Chunk地址時(shí),更新標(biāo)志位,同時(shí)使用1號鏈表的首節(jié)點(diǎn),并 依次類推。當(dāng)再次輪到使用0號鏈表時(shí),0號鏈表新的首節(jié)點(diǎn)已經(jīng)從存儲器中讀出,更新完畢,可以使用。
這樣保證了鏈表可以每個(gè)周期都正常工作,直到進(jìn)行到報(bào)文尾部,結(jié)束 一4侖出隊(duì)才喿作。
報(bào)文入隊(duì)時(shí),還為所述n條鏈表建立鏈表入隊(duì)活動標(biāo)志,鏈表出隊(duì)活動
標(biāo)志和鏈表空標(biāo)志,為每個(gè)節(jié)點(diǎn)建立包尾標(biāo)志,報(bào)文出隊(duì)時(shí),根據(jù)鏈表出隊(duì) 活動標(biāo)志判斷當(dāng)前要使用的鏈表,根據(jù)鏈表空標(biāo)志判斷鏈表是否為空,根據(jù) 包尾標(biāo)志判斷是否到達(dá)報(bào)文尾節(jié)點(diǎn),使用完i號鏈表的某一組塊時(shí),將i號 鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為非活動,將i+l號鏈表的鏈表出隊(duì)活動標(biāo)志
設(shè)置為活動,i=0,...,n-2;當(dāng)鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將該鏈表的鏈表空 標(biāo)志設(shè)置為空。
本發(fā)明基本應(yīng)用系統(tǒng)模型如圖4所示,包括隊(duì)列調(diào)度系統(tǒng)、隊(duì)列緩存管 理系統(tǒng)、報(bào)文數(shù)據(jù)存儲器和鏈表節(jié)點(diǎn)存儲器,隊(duì)列調(diào)度系統(tǒng)用于發(fā)起隊(duì)列調(diào) 度請求至隊(duì)列緩存管理系統(tǒng),報(bào)文數(shù)據(jù)存儲器用于存儲報(bào)文數(shù)據(jù),鏈表節(jié)點(diǎn) 存儲器用于存儲鏈表節(jié)點(diǎn)信息,本發(fā)明中,主要涉及隊(duì)列緩存管理系統(tǒng),該 隊(duì)列緩存管理系統(tǒng)包括報(bào)文入隊(duì)管理模塊和報(bào)文出隊(duì)管理模塊,其中
報(bào)文入隊(duì)管理模塊,用于在報(bào)文入隊(duì)時(shí),為所述報(bào)文建立n條鏈表,依 次稱為0號鏈表至n-l號鏈表,保存所述n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn),所述 n條鏈表中每條鏈表包括若干個(gè)組塊,每個(gè)組塊內(nèi)包含若干個(gè)區(qū)塊,每個(gè)區(qū) 塊對應(yīng)一個(gè)節(jié)點(diǎn),同一組塊內(nèi)各區(qū)塊的地址為基地址加偏移地址,同一組塊 內(nèi)其各區(qū)塊的基地址相同,其相鄰區(qū)塊偏移地址相差一指定值,所述n不小 于2;
其中,報(bào)文入隊(duì)管理模塊具體按如下方式建立n條鏈表
根據(jù)報(bào)文長度申請可用的組塊,將第一個(gè)申請的組塊分給O號鏈表,第 二個(gè)申請的組塊分給1號鏈表,依此類推,將第n個(gè)申請的組塊分給n-l號 鏈表,如果報(bào)文未結(jié)束,將第n+l個(gè)申請的組塊分給0號鏈表,將第n+2個(gè) 申請的組塊分給l號鏈表,依此類推,直到報(bào)文結(jié)束;申請的組塊數(shù)目由入 隊(duì)報(bào)文的總大小決定;每個(gè)鏈表的第一個(gè)組塊的首個(gè)區(qū)塊為該鏈表的首節(jié)點(diǎn),每個(gè)鏈表的最后一個(gè)組塊中使用到的最后一個(gè)區(qū)塊為該鏈表的尾節(jié)點(diǎn)。
報(bào)文出隊(duì)管理模塊,用于在報(bào)文出隊(duì)時(shí),從0號鏈表開始,依次使用0 號鏈表至n-l號鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-l號鏈表的下 一組塊;依此類推,直到報(bào)文結(jié)束;其中,使用每個(gè)組塊的方法為從該組 塊的首個(gè)區(qū)塊開始,依次使用該組塊中的每個(gè)區(qū)塊,其中,根據(jù)當(dāng)前使用的 區(qū)塊的偏移地址加上所述指定值得到下一區(qū)塊的偏移地址;使用完每個(gè)組塊 時(shí),使用該組塊中區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
進(jìn)一步的,所述報(bào)文入隊(duì)管理模塊還用于為所述n條鏈表建立鏈表活動 標(biāo)志(包括鏈表入隊(duì)活動標(biāo)志和鏈表出隊(duì)活動標(biāo)志,鏈表入隊(duì)活動標(biāo)志指示 報(bào)文該入哪個(gè)鏈表,鏈表出隊(duì)活動標(biāo)志指示當(dāng)前出隊(duì)該使用哪個(gè)鏈表)和鏈 表空標(biāo)志,為每個(gè)節(jié)點(diǎn)建立包尾標(biāo)志,報(bào)文出隊(duì)管理模塊使用并維護(hù)這些標(biāo) 志。報(bào)文出隊(duì)管理模塊在報(bào)文出隊(duì)時(shí),根據(jù)鏈表出隊(duì)活動標(biāo)志判斷當(dāng)前要使 用的鏈表,根據(jù)鏈表空標(biāo)志判斷鏈表是否為空,根據(jù)包尾標(biāo)志判斷是否到達(dá) 報(bào)文尾節(jié)點(diǎn),使用完i號鏈表的某一組塊時(shí),將i號鏈表的鏈表出隊(duì)活動標(biāo) 志設(shè)置為非活動,將i+l號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為活動,i=0,...,n-2; 當(dāng)鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將該鏈表的鏈表空標(biāo)志設(shè)置為空。
所述報(bào)文入隊(duì)管理模塊建立的所述n條鏈表中每個(gè)鏈表中每個(gè)組塊包含 的區(qū)塊個(gè)數(shù)相同,每個(gè)鏈表的同一組塊內(nèi)相鄰區(qū)塊的偏移地址相差1,每個(gè) 組塊的首個(gè)區(qū)塊的偏移地址為0。所述報(bào)文出隊(duì)管理模塊在使用完每個(gè)組塊 時(shí),使用該組塊中首個(gè)區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地
的基地址,具體使用哪個(gè)區(qū)塊可以事先約定。
下面結(jié)合圖5的流程,說明本發(fā)明方法在存儲管理中的詳細(xì)工作步驟。
對應(yīng)報(bào)文數(shù)據(jù)存儲空間,建立多鏈表結(jié)構(gòu),鏈表個(gè)數(shù)為n,鏈表節(jié)點(diǎn)對 應(yīng)報(bào)文或分片的存儲空間,每個(gè)鏈表都有各自的首尾節(jié)點(diǎn),同時(shí)設(shè)置標(biāo)志位, 為每個(gè)鏈表設(shè)置鏈表活動標(biāo)志LinkActFlag (包括鏈表入隊(duì)活動標(biāo)志 LinkWActFlag和鏈表出隊(duì)活動標(biāo)志LinkRActFlag )和鏈表空標(biāo)志
一組塊
13LinkEmptyFlag,為每個(gè)節(jié)點(diǎn)設(shè)置包尾標(biāo)志PktEopFlag,用來確定當(dāng)前應(yīng)該使 用的鏈表編號以及各個(gè)鏈表是否為空,以及是否到達(dá)報(bào)文的尾節(jié)點(diǎn)。其中, 每個(gè)Chunk所包含的Block個(gè)數(shù)為(m+l)。同一 Chunk內(nèi)的Block地址是 連續(xù)的,所在地址表示為基地址+偏移地址,每個(gè)Block的基地址相同。
隊(duì)列緩存管理系統(tǒng)入隊(duì)時(shí)按照多鏈表和節(jié)點(diǎn)匯聚的結(jié)構(gòu)建立鏈表對數(shù)據(jù) 緩存進(jìn)行管理。才艮文出隊(duì)時(shí),隊(duì)列緩存管理系統(tǒng)響應(yīng)隊(duì)列調(diào)度系統(tǒng)的出隊(duì)請 求,開始新一輪次的工作,具體包括
步驟S502,隊(duì)列緩存管理系統(tǒng)接收出P人請求,并且根據(jù)多鏈表和節(jié)點(diǎn)匯 聚結(jié)構(gòu)中的鏈表出隊(duì)活動標(biāo)志確定當(dāng)前應(yīng)該使用哪一條鏈表。
根據(jù)鏈表出隊(duì)活動標(biāo)志確定當(dāng)前應(yīng)該使用哪個(gè)鏈表,對于n條鏈表,設(shè) 置位寬為n的鏈表出隊(duì)活動標(biāo)志LinkRActFlag[(n-l):O],每bit對應(yīng)一條鏈表, 如LinkRActFlag[x]對應(yīng)x號鏈表,當(dāng)其值為'1,時(shí),表明當(dāng)前應(yīng)該使用該 條鏈表。
根據(jù)鏈表空標(biāo)志LinkEmptyFlag確定當(dāng)前各個(gè)鏈表是否為空,設(shè)置位寬 為n的鏈表空標(biāo)志LinkEmptyFlag[(n-l):O],每bit對應(yīng)一條鏈表,當(dāng)其值為 '1,時(shí)鏈表為空,'0,為非空。
步驟S504,確定當(dāng)前選用的鏈表應(yīng)該使用哪個(gè)Block,即哪個(gè)節(jié)點(diǎn)。
其中選中的鏈表首節(jié)點(diǎn)為基地址+y,表示當(dāng)前使用的Block為該Chunk 中的y號Block。當(dāng)y-m時(shí),令y,+l,作為新的鏈表首節(jié)點(diǎn),以便下次4吏 用;當(dāng)y=m時(shí),表示當(dāng)前使用的Blcok為當(dāng)前Chunk的最后一個(gè)Block,此 時(shí)以該Chunk的基地址作為讀地址讀取存儲器,獲取下一 Chunk的基地址, 同時(shí)將LinkRActFlag[x]更新為'0, , LinkRActFlag[x+l]更新為'1,,表示 下次開始使用另一條鏈表,x表示當(dāng)前使用的鏈表標(biāo)號。
當(dāng)某條鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將對應(yīng)的LinkEmptyFlag置'1,, 表示該鏈表空。
步驟S506,判斷當(dāng)前節(jié)點(diǎn)是否為出隊(duì)報(bào)文數(shù)據(jù)的尾節(jié)點(diǎn)。
這其中,根據(jù)包尾標(biāo)志PktEopFlag確定才艮文的尾節(jié)點(diǎn)。為T時(shí),該 節(jié)點(diǎn)為本次出隊(duì)才艮文的尾節(jié)點(diǎn),本輪操作完成;為'0,時(shí),該節(jié)點(diǎn)不是本次 出隊(duì)報(bào)文的尾節(jié)點(diǎn),返回到步驟S502,繼續(xù)操作,直到輸出報(bào)文尾節(jié)點(diǎn),然后結(jié)束本輪操作。
下面結(jié)合一具體實(shí)例說明該方法的具體實(shí)現(xiàn)。
在OC-768速度等級上,為了滿足要求,芯片需提供100MPPS的分組處 理能力。在100MHz的系統(tǒng)時(shí)鐘下,100MPPS的分組處理能力,對應(yīng)為每個(gè) 周期處理一個(gè)鏈表節(jié)點(diǎn),利用該鏈表節(jié)點(diǎn)訪問數(shù)據(jù)存儲區(qū)。以11=2、 m=3為 例的多鏈表和節(jié)點(diǎn)匯聚結(jié)構(gòu)為例,如圖6所示,構(gòu)建2條鏈表,每個(gè)Chunk 包含4個(gè)Block,同一 Chunk內(nèi)的每個(gè)Block的地址是連續(xù)的,都是由基地 址+偏移地址。以鏈表0為例,A0、 Al、 A2、 A3四個(gè)Block組成一個(gè)Chunk, 基地址為X,每個(gè)Block的偏移地址分別為0、 1、 2、 3,同時(shí)以每個(gè)Chunk 的基地址作為指針指向該鏈表下一個(gè)Chunk的基地址。
使用時(shí),隊(duì)列緩存管理系統(tǒng)預(yù)先記錄下n (本實(shí)施例中n為2 )條鏈表 的首尾節(jié)點(diǎn),同時(shí)設(shè)置標(biāo)志位,確定當(dāng)前應(yīng)該使用哪個(gè)鏈表以及每個(gè)鏈表是 否為空以及每個(gè)節(jié)點(diǎn)是否為報(bào)文的尾節(jié)點(diǎn)。隊(duì)列緩存管理系統(tǒng)接收到隊(duì)列調(diào) 度系統(tǒng)鏈表操作請求時(shí),根據(jù)標(biāo)志位,確定使用的鏈表編號。 一般最初使用 時(shí),首先使用O號鏈表的首節(jié)點(diǎn)AO,然后下一周期將AO的偏移地址直接加 1,得到A1,繼續(xù)使用。當(dāng)使用到編號為m的Block時(shí),即A3,送出A3的 同時(shí),以其基地址讀取下一 Chunk,并更新標(biāo)志位。下個(gè)周期開始使用1號 鏈表,即送出BO,繼續(xù)操作,等到使用B3時(shí),以其基地址讀取下一 Chunk, 并更新標(biāo)志位。下個(gè)周期又重新開始使用0號鏈表,而此時(shí)O號鏈表新的首 節(jié)點(diǎn)CO已經(jīng)從存儲器中讀出,并且準(zhǔn)備完畢,可以-使用,如圖7所示。這 樣按順序輪流操作,直到報(bào)文尾部結(jié)束本輪操作。
上例中,該應(yīng)用完全滿足了 100MPPS的分組處理需求,每個(gè)時(shí)鐘周期 鏈表節(jié)點(diǎn)都是可以有效使用的。
與現(xiàn)有技術(shù)相比較,在硬件實(shí)現(xiàn)中本方法可以保證鏈表的高效使用,克 服了硬件自身讀取延遲帶來的問題。且根據(jù)實(shí)際應(yīng)用環(huán)境,可更優(yōu)的選取合 適的n和m進(jìn)行組合,使得本方法面對不同的應(yīng)用環(huán)境更加靈活有效。采用 本發(fā)明中的方法,使高速、大容量條件下的存儲管理可以在硬件中簡單有效 的實(shí)現(xiàn)。
權(quán)利要求
1、一種存儲管理方法,其特征在于,包括報(bào)文入隊(duì)時(shí),為所述報(bào)文建立n條鏈表,依次稱為0號鏈表至n-1號鏈表,所述n不小于2,保存所述n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn),所述n條鏈表中每條鏈表包括若干個(gè)組塊,每個(gè)組塊內(nèi)包含若干個(gè)區(qū)塊,每個(gè)區(qū)塊對應(yīng)一個(gè)節(jié)點(diǎn),同一組塊內(nèi)各區(qū)塊的地址為基地址加偏移地址,同一組塊內(nèi)其各區(qū)塊的基地址相同,其相鄰區(qū)塊偏移地址相差一指定值;報(bào)文出隊(duì)時(shí),從0號鏈表開始,依次使用0號鏈表至n-1號鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-1號鏈表的下一組塊;依此類推,直到報(bào)文結(jié)束;其中,使用每個(gè)組塊的方法為從該組塊的首個(gè)區(qū)塊開始,依次使用該組塊中的每個(gè)區(qū)塊,其中,根據(jù)當(dāng)前使用的區(qū)塊的偏移地址加上所述指定值得到下一區(qū)塊的偏移地址;使用完每個(gè)組塊時(shí),使用該組塊中區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
2、 如權(quán)利要求1所述的方法,其特征在于,為所述n條鏈表建立鏈表 出隊(duì)活動標(biāo)志和鏈表空標(biāo)志,為每個(gè)節(jié)點(diǎn)建立包尾標(biāo)志,報(bào)文出隊(duì)時(shí),根據(jù) 鏈表出隊(duì)活動標(biāo)志判斷當(dāng)前要使用的鏈表,根據(jù)鏈表空標(biāo)志判斷鏈表是否為 空,根據(jù)包尾標(biāo)志判斷是否到達(dá)報(bào)文尾節(jié)點(diǎn),使用完i號鏈表的某一組塊時(shí), 將i號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為非活動,將i+l號鏈表的鏈表出隊(duì)活 動標(biāo)志設(shè)置為活動,i=0,...,n-2;當(dāng)鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將該鏈表的 鏈表空標(biāo)志設(shè)置為空。
3、 如4又利要求1所述的方法,其特征在于,所述n條l連表中,每個(gè)鏈 表中每個(gè)組塊包含的區(qū)塊個(gè)數(shù)相同。
4、 如權(quán)利要求l所述的方法,其特征在于,所述n條鏈表的組塊中, 同一組塊內(nèi)相鄰區(qū)塊的偏移地址相差1,每個(gè)組塊的首個(gè)區(qū)塊的偏移地址為 0,使用完每個(gè)組塊時(shí),使用該組塊中首個(gè)區(qū)塊的基地址得到該組塊所在鏈表 中下一組塊的基地址。
5、 如權(quán)利要求1所述的方法,其特征在于,凈艮文入隊(duì)時(shí),按如下方式建立n條鏈表根據(jù)報(bào)文長度申請可用的組塊,將第一個(gè)申請的組塊分給O號鏈表,第 二個(gè)申請的組塊分給1號鏈表,依此類推,將第n個(gè)申請的組塊分給n-l號 鏈表,如果報(bào)文未結(jié)束,將第n+l個(gè)申請的組塊分給0號鏈表,將第n+2個(gè) 申請的組塊分給l號鏈表,依此類推,直到報(bào)文結(jié)束;申請的組塊數(shù)目由入 隊(duì)報(bào)文的總大小決定;每個(gè)鏈表的第一個(gè)組塊的首個(gè)區(qū)塊為該鏈表的首節(jié)點(diǎn), 每個(gè)鏈表的最后 一個(gè)組塊中使用到的最后 一個(gè)區(qū)塊為該鏈表的尾節(jié)點(diǎn)。
6、 一種存儲管理系統(tǒng),其特征在于,包括報(bào)文入隊(duì)管理模塊和報(bào)文出 隊(duì)管理模塊,其中所述報(bào)文入隊(duì)管理模塊,用于在報(bào)文入隊(duì)時(shí),為所述報(bào)文建立n條鏈表, 依次稱為0號鏈表至n-l號鏈表,保存所述n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn),所 述n條鏈表中每條鏈表包括若干個(gè)組塊,每個(gè)組塊內(nèi)包含若干個(gè)區(qū)塊,每個(gè) 區(qū)塊對應(yīng)一個(gè)節(jié)點(diǎn),同一組塊內(nèi)各區(qū)塊的地址為基地址加偏移地址,同一組 塊內(nèi)其各區(qū)塊的基地址相同,其相鄰區(qū)塊偏移地址相差一指定值,所述n不 小于2;所述報(bào)文出隊(duì)管理模塊,用于在報(bào)文出隊(duì)時(shí),從0號鏈表開始,依次使 用0號鏈表至n-l號鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-l號鏈表 的下一組塊;依此類推,直到4艮文結(jié)束;其中,使用每個(gè)組塊的方法為從 該組塊的首個(gè)區(qū)塊開始,依次使用該組塊中的每個(gè)區(qū)塊,其中,根據(jù)當(dāng)前使 用的區(qū)塊的偏移地址加上所述指定值得到下一區(qū)塊的偏移地址;使用完每個(gè) 組塊時(shí),使用該組塊中區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地 址。
7、 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述報(bào)文入隊(duì)管理模塊還 用于為所述n條鏈表建立鏈表出隊(duì)活動標(biāo)志和鏈表空標(biāo)志,為每個(gè)節(jié)點(diǎn)建立 包尾標(biāo)志,所述報(bào)文出隊(duì)管理模塊,還用于在報(bào)文出隊(duì)時(shí),根據(jù)所述鏈表出 隊(duì)活動標(biāo)志判斷當(dāng)前要使用的鏈表,根據(jù)鏈表空標(biāo)志判斷鏈表是否為空,根 據(jù)包尾標(biāo)志判斷是否到達(dá)報(bào)文尾節(jié)點(diǎn),使用完i號鏈表的某一組塊時(shí),將i 號鏈表的鏈表出隊(duì)活動標(biāo)志設(shè)置為非活動,將i+l號鏈表的鏈表出隊(duì)活動標(biāo) 志設(shè)置為活動,i=0,...,n-2;當(dāng)鏈表的首節(jié)點(diǎn)等于尾節(jié)點(diǎn)時(shí),將該鏈表的鏈表空標(biāo)志設(shè)置為空。
8、 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述報(bào)文入隊(duì)管理模塊建立的所述n條鏈表中每個(gè)鏈表中每個(gè)組塊包含的區(qū)塊個(gè)數(shù)相同。
9、 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述報(bào)文入隊(duì)管理模塊建立的所述n條鏈表的組塊中,同一組塊內(nèi)相鄰區(qū)塊的偏移地址相差1,每個(gè)組塊的首個(gè)區(qū)塊的偏移地址為0;所述報(bào)文出隊(duì)管理模塊在使用完每個(gè)組塊時(shí),使用該組塊中首個(gè)區(qū)塊的基地址得到該組塊所在鏈表中下一組塊的基地址。
10、 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述報(bào)文入隊(duì)管理模塊用于在報(bào)文入隊(duì)時(shí),按如下方式建立n條鏈表根據(jù)報(bào)文長度申請可用的組塊,將第一個(gè)申請的組塊分給O號鏈表,第二個(gè)申請的組塊分給1號鏈表,依此類推,將第n個(gè)申請的組塊分給n-l號鏈表,如果報(bào)文未結(jié)束,將第n+l個(gè)申請的組塊分給0號鏈表,將第n+2個(gè)申請的組塊分給l號鏈表,依此類推,直到報(bào)文結(jié)束;申請的組塊數(shù)目由入隊(duì)報(bào)文的總大小決定;每個(gè)鏈表的第一個(gè)組塊的首個(gè)區(qū)塊為該鏈表的首節(jié)點(diǎn),每個(gè)鏈表的最后一個(gè)組塊中使用的最后一個(gè)區(qū)塊為該鏈表的尾節(jié)點(diǎn)。
全文摘要
本發(fā)明提供了一種存儲管理方法,包括報(bào)文入隊(duì)時(shí)建立n條鏈表,保存該n條鏈表的首節(jié)點(diǎn)和尾節(jié)點(diǎn),每條鏈表包括若干個(gè)組塊,每個(gè)組塊內(nèi)包含若干個(gè)區(qū)塊,同一組塊內(nèi)其各區(qū)塊的基地址相同,其相鄰區(qū)塊偏移地址相差一指定值;報(bào)文出隊(duì)時(shí),依次使用0號鏈表至n-1號鏈表的首個(gè)組塊;然后依次使用0號鏈表至n-1號鏈表的下一組塊;依此類推,直到報(bào)文結(jié)束;使用每個(gè)組塊時(shí),依次使用該組塊中的每個(gè)區(qū)塊,根據(jù)當(dāng)前使用的區(qū)塊的偏移地址加上指定值得到下一區(qū)塊的偏移地址;使用完每個(gè)組塊時(shí),使用該組塊中區(qū)塊的基地址得到下一組塊的基地址。本發(fā)明還提供了一種存儲管理系統(tǒng)。本發(fā)明通過加大鏈表使用間隔,實(shí)現(xiàn)了每個(gè)周期處理一個(gè)鏈表節(jié)點(diǎn)的要求。
文檔編號H04L12/56GK101635682SQ20091016190
公開日2010年1月27日 申請日期2009年8月5日 優(yōu)先權(quán)日2009年8月5日
發(fā)明者吳風(fēng)波, 闖 王, 潔 肖 申請人:中興通訊股份有限公司