欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理表的方法、訪問表的方法和裝置與流程

文檔序號(hào):12363542閱讀:227來源:國知局
處理表的方法、訪問表的方法和裝置與流程

本發(fā)明涉及通信領(lǐng)域,尤其涉及處理表的方法、訪問表的方法和裝置。



背景技術(shù):

移動(dòng)網(wǎng)絡(luò)的蓬勃發(fā)展和物聯(lián)網(wǎng)的興起,使網(wǎng)絡(luò)流量爆炸式增長,并且在可預(yù)見的一段時(shí)間內(nèi)將維持這種高速增長趨勢,網(wǎng)絡(luò)流量的快速增長導(dǎo)致網(wǎng)絡(luò)設(shè)備的性能成為瓶頸,這對(duì)網(wǎng)絡(luò)設(shè)備商來說既是挑戰(zhàn)也是機(jī)遇。

通常網(wǎng)絡(luò)處理器是路由器的核心,其性能是路由器競爭力的關(guān)鍵。目前,單鏈路接口的速率將要突破50吉比特每秒(Gigabit per second,縮寫Gbps),這意味著,未來網(wǎng)絡(luò)處理器的單芯片吞吐能力將可以做到2太比特每秒(Terabits per second,縮寫Tbps)甚至更高,比現(xiàn)在提高4到8倍以上。如此高的吞吐量,對(duì)網(wǎng)絡(luò)處理器內(nèi)部的處理性能提出了更高的要求。

內(nèi)存帶寬作為網(wǎng)絡(luò)處理器的性能瓶頸,相比于接口性能的快速提高,這些年來的增長速度相對(duì)緩慢,尤其是雙倍速率(Double Data Rate,簡稱DDR)同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Synchronous Dynamic Random Access Memory,簡稱SDRAM)的帶寬,隨機(jī)訪問模式下,在多存儲(chǔ)陣列(bank)復(fù)制下,目前第四代DDR(DDR4)單芯片只能提供最高125*128兆比特(Megabit,縮寫Mb)左右的穩(wěn)定訪問速率。一個(gè)報(bào)文從入到出,大多數(shù)場景下需要訪問業(yè)務(wù)表所在的內(nèi)存10次以上,每次讀取128位(bit)的表項(xiàng),在750百萬包每秒(Million Packet Per Second,縮寫MPPS)的包速下,內(nèi)存共需要提供超過750*10*128Mb的帶寬,如果所有表的表項(xiàng)都放在DDR里,則需要60片以上的DDR芯片,這是不現(xiàn)實(shí)的。

目前,路由器需要支持的轉(zhuǎn)發(fā)業(yè)務(wù)有幾十種,每種轉(zhuǎn)發(fā)業(yè)務(wù)會(huì)訪問約8~20張業(yè)務(wù)表,路由器上共有超過400張業(yè)務(wù)表。但是,在任何一種場景下,一臺(tái)設(shè)備上,同時(shí)只會(huì)有一種或幾種轉(zhuǎn)發(fā)業(yè)務(wù)處于高速運(yùn)行狀態(tài),其他大多數(shù)轉(zhuǎn)發(fā)業(yè)務(wù)處于低速或空閑狀態(tài)。也就是說,現(xiàn)實(shí)場景下,只有少數(shù)業(yè)務(wù)表被高速訪問,大多數(shù)業(yè)務(wù)表被訪問的頻率很低甚至處于空閑狀態(tài)。即使高速 訪問的業(yè)務(wù)表,并不是所有表項(xiàng)被訪問的頻率都一樣。研究表明,90%以上的流量集中在5%~10%的大流上,其中20%~40%的流量集中在0.1%~0.5%的超大流上,這意味著,大多數(shù)流量會(huì)命中少數(shù)表項(xiàng),而大多數(shù)表項(xiàng)被訪問的頻率很低甚至沒有訪問。然而,當(dāng)前通用的方案是,按照整表的訪問性能需求預(yù)先選擇整表的存儲(chǔ)位置,當(dāng)表的容量很大時(shí),就需要很大的高帶寬的內(nèi)存,超出了下一代網(wǎng)絡(luò)處理器的支持能力。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明提供了一種處理表的方法、訪問表的方法和裝置,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

第一方面,提供了一種處理表的方法,第一表包括多個(gè)子表,第一存儲(chǔ)器包括多個(gè)存儲(chǔ)單元,所述多個(gè)子表中包括第一子表,所述多個(gè)存儲(chǔ)單元中包括第一存儲(chǔ)單元,該方法包括:處理器在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在所述第一存儲(chǔ)單元中的所述第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中,所述第二存儲(chǔ)器的剩余帶寬高于所述第一子表被訪問時(shí)占用的帶寬,且所述第二存儲(chǔ)器的剩余存儲(chǔ)空間大于所述第一子表占用的存儲(chǔ)空間;所述處理器在所述第一存儲(chǔ)單元中刪除所述第一子表;所述處理器將所述第一子表與所述第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系發(fā)送給網(wǎng)絡(luò)處理器,以使網(wǎng)絡(luò)處理器將保存的所述第一子表與所述第一存儲(chǔ)單元的對(duì)應(yīng)關(guān)系更新為所述第一子表與所述第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述處理器在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在所述第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中包括:所述處理器確定第一存儲(chǔ)器占用的帶寬;所述處理器在所述第一存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,將所述第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中;或者,

所述處理器獲取所述第一存儲(chǔ)器的剩余存儲(chǔ)空間;在所述第一存儲(chǔ)器的剩余存儲(chǔ)空間小于或等于第二預(yù)設(shè)值的情況下,所述處理器將所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ)單元中。

結(jié)合第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述在所述第一存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,所述處理器將已存儲(chǔ)在所述第一存儲(chǔ)單元的所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ) 單元中,包括:所述處理器獲取所述第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);所述處理器根據(jù)所述被訪問次數(shù),從所述第一存儲(chǔ)器中確定所述第一存儲(chǔ)單元,所述第一存儲(chǔ)單元的被訪問頻率高于所述第一存儲(chǔ)器中所述第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;所述處理器從多個(gè)存儲(chǔ)器中確定所述第二存儲(chǔ)器,所述第二存儲(chǔ)器的剩余帶寬高于所述多個(gè)存儲(chǔ)器中所述第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余帶寬;所述處理器將所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ)單元中。

結(jié)合第一種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,所述處理器將已存儲(chǔ)在所述第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中包括:所述處理器確定所述第一存儲(chǔ)器占用的帶寬;所述處理器在所述第一存儲(chǔ)器占用的帶寬小于第三預(yù)設(shè)值的情況下,獲取所述第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);所述處理器根據(jù)所述每個(gè)存儲(chǔ)單元的被訪問次數(shù),確定所述第一存儲(chǔ)單元,所述第一存儲(chǔ)單元的被訪問頻率低于所述第一存儲(chǔ)器中所述第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;所述處理器從多個(gè)存儲(chǔ)器中確定所述第二存儲(chǔ)器,所述第二存儲(chǔ)器的剩余存儲(chǔ)空間高于所述多個(gè)存儲(chǔ)器中所述第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余存儲(chǔ)空間;所述處理器將所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ)單元中。

結(jié)合第一方面或第一種至第三種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,在所述在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,所述處理器將已存儲(chǔ)在所述第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器中的第二存儲(chǔ)單元中之前,所述方法還包括:所述處理器獲取第一寫請(qǐng)求,所述第一寫請(qǐng)求用于請(qǐng)求對(duì)第一表的第一表項(xiàng)進(jìn)行寫操作;所述處理器根據(jù)所述第一寫請(qǐng)求為所述第一子表分配所述第一存儲(chǔ)單元,所述第一子表包括所述第一表項(xiàng)。

結(jié)合第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,還包括:所述處理器獲取第二寫請(qǐng)求,所述第二寫請(qǐng)求用于請(qǐng)求對(duì)第二子表的第二表項(xiàng)進(jìn)行寫操作,所述多個(gè)子表中還包括所述第二子表;如果所述處理器確定所述第二子表未分配存儲(chǔ)單元,則所述處理器根據(jù)所述第二寫請(qǐng)求為所述第二子表分配第三存儲(chǔ)單元。

結(jié)合第一方面的上述任一種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式 中,所述第一表采用哈希的方式進(jìn)行存儲(chǔ),所述第一表的表項(xiàng)的關(guān)鍵字key存儲(chǔ)在哈希桶的表項(xiàng)中,所述方法還包括:

處理器在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到所述第一哈希桶中;

所述處理器在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到所述第一哈希桶和第二哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,所述第一哈希桶和所述第二哈希桶采用不同的哈希函數(shù);

所述處理器在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到所述第三哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函數(shù);

所述處理器在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到第三哈希桶和第四哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函數(shù),所述第二哈希桶和所述第四哈希桶采用相同的哈希函數(shù)。

結(jié)合第六種可能的實(shí)現(xiàn)方式在,在第七種可能的實(shí)現(xiàn)方式中,還包括:

所述處理器在所述第一哈希桶的被訪問次數(shù)與所述第三哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配所述第三哈希桶,再匹配所述第一哈希桶;

所述處理器在所述第二哈希桶的被訪問次數(shù)與所述第四哈希桶的被訪問次數(shù)的比值小于或等于所述第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配所述第四哈希桶,再匹配所述第二哈希桶;

所述處理器在所述第一哈希桶和所述第三哈希桶的被訪問次數(shù)與所述第二哈希桶和所述第四哈希桶的被訪問次數(shù)的比值小于或等于所述第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配所述第二哈希桶和所述第四哈希桶,再匹配所述第一哈希桶和所述第三哈希桶。

第二方面,提供了一種訪問表的方法,包括:網(wǎng)絡(luò)處理器所述第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址,所述內(nèi)存塊映射信息表包括所述第一表中的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系;所述網(wǎng)絡(luò)處理器根據(jù)所述基址和所述第一 表的第一表項(xiàng)的索引訪問所述內(nèi)存塊映射信息表,并根據(jù)所述內(nèi)存塊映射信息表確定所述第一表項(xiàng)所在的第一子表對(duì)應(yīng)的存儲(chǔ)單元的索引,所述第一子表為所述第一表中的任意子表;所述網(wǎng)絡(luò)處理器根據(jù)所述存儲(chǔ)單元的索引和所述第一表項(xiàng)的索引,確定所述第一表項(xiàng)的物理地址;所述網(wǎng)絡(luò)處理器根據(jù)所述第一表項(xiàng)的物理地址訪問所述第一表項(xiàng)。

結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述網(wǎng)絡(luò)處理器獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址包括:所述網(wǎng)絡(luò)處理器根據(jù)所述第一表的表標(biāo)識(shí)TID訪問內(nèi)存塊映射基址表,并根據(jù)所述內(nèi)存塊映射基址表確定所述內(nèi)存儲(chǔ)塊映射信息表的基址。

結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第二種可能的實(shí)現(xiàn)方式中,還包括:所述網(wǎng)絡(luò)處理器更新所述存儲(chǔ)單元的被訪問次數(shù)。

結(jié)合第二方面或第二方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第二方面的第三種可能的實(shí)現(xiàn)方式中,所述網(wǎng)絡(luò)處理器根據(jù)所述基址和所述第一表項(xiàng)的索引訪問所述內(nèi)存塊映射信息表包括:所述網(wǎng)絡(luò)處理器根據(jù)下式確定的地址訪問所述內(nèi)存塊映射信息表,

其中,base為所述基址,entry index為所述第一表項(xiàng)的索引,block size為所述第一子表包含的表項(xiàng)的數(shù)量。

結(jié)合第二方面或第二方面的第一種或第二種或第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述網(wǎng)絡(luò)處理器根據(jù)所述存儲(chǔ)單元的索引和所述第一表項(xiàng)的索引,確定所述第一表項(xiàng)的物理地址,包括:所述網(wǎng)絡(luò)處理器根據(jù)下式確定所述第一表項(xiàng)的物理地址,

real block index*block size+entry index%block size

其中,real block index為所述存儲(chǔ)單元的索引,block size為所述第一子表包含的表項(xiàng)的數(shù)量,所述第一子表包含的表項(xiàng)的數(shù)量與所述存儲(chǔ)單元存儲(chǔ)的表項(xiàng)的數(shù)量相同,entry index為所述第一表項(xiàng)的索引。

第三方面,提供了一種處理表的裝置,第一表包括多個(gè)子表,第一存儲(chǔ)器包括多個(gè)存儲(chǔ)單元,所述多個(gè)子表中包括第一子表,所述多個(gè)存儲(chǔ)單元中包括第一存儲(chǔ)單元,所述裝置包括:處理單元,用于在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在所述第一存儲(chǔ)單元中的所述第一子表 存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中,所述第二存儲(chǔ)器的剩余帶寬高于所述第一子表被訪問時(shí)占用的帶寬,且所述第二存儲(chǔ)器的剩余存儲(chǔ)空間大于所述第一子表占用的存儲(chǔ)空間;刪除單元,用于在所述第一存儲(chǔ)單元中刪除所述第一子表;發(fā)送單元,用于將所述第一子表與所述第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系發(fā)送給網(wǎng)絡(luò)處理器,以使網(wǎng)絡(luò)處理器將保存的所述第一子表與所述第一存儲(chǔ)單元的對(duì)應(yīng)關(guān)系更新為所述第一子表與所述第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

結(jié)合第三方面,在第三方面的第一種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:確定所述第一存儲(chǔ)器占用的帶寬;在所述第一存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,將所述第一子表存儲(chǔ)到第二存儲(chǔ)器中;或者,獲取所述第一存儲(chǔ)器的剩余存儲(chǔ)空間;在所述第一存儲(chǔ)器的剩余存儲(chǔ)空間小于或等于第二預(yù)設(shè)值的情況下,將所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ)單元中。

結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:獲取所述第一存儲(chǔ)器中的每個(gè)存儲(chǔ)單元的被訪問次數(shù);根據(jù)所述每個(gè)存儲(chǔ)單元的被訪問次數(shù),從所述第一存儲(chǔ)器中確定所述第一存儲(chǔ)單元,所述第一存儲(chǔ)單元的被訪問頻率高于所述第一存儲(chǔ)器中所述第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;從多個(gè)存儲(chǔ)器中確定所述第二存儲(chǔ)器,所述第二存儲(chǔ)器的剩余帶寬高于所述多個(gè)存儲(chǔ)器中所述第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余帶寬;將所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ)單元中。

結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:確定所述第一存儲(chǔ)器占用的帶寬;在所述第一存儲(chǔ)器占用的帶寬小于第三預(yù)設(shè)值的情況下,獲取所述第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);根據(jù)所述每個(gè)存儲(chǔ)單元的被訪問次數(shù),確定所述第一存儲(chǔ)單元,所述第一存儲(chǔ)單元的被訪問頻率低于所述第一存儲(chǔ)器中所述第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;從多個(gè)存儲(chǔ)器中確定所述第二存儲(chǔ)器,所述第二存儲(chǔ)器的剩余存儲(chǔ)空間高于所述多個(gè)存儲(chǔ)器中所述第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余存儲(chǔ)空間;將所述第一子表存儲(chǔ)到所述第二存儲(chǔ)器的第二存儲(chǔ)單元中。

結(jié)合第三方面或第三方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式,在第三方面的第四種可能的實(shí)現(xiàn)方式中,所述處理單元 還用于:在所述第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在所述第一存儲(chǔ)單元中的所述第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中之前,獲取第一寫請(qǐng)求,所述第一寫請(qǐng)求用于請(qǐng)求對(duì)第一表的第一表項(xiàng)進(jìn)行寫操作;根據(jù)所述第一寫請(qǐng)求為所述第一子表分配所述第一存儲(chǔ)單元,所述第一子表包括所述第一表項(xiàng)。

結(jié)合第三方面的第四種可能的實(shí)現(xiàn)方式,在第三方面的第五種可能的實(shí)現(xiàn)方式中,所述處理單元還用于:獲取第二寫請(qǐng)求,所述第二寫請(qǐng)求用于請(qǐng)求對(duì)第二子表的第二表項(xiàng)進(jìn)行寫操作,所述多個(gè)子表中還包括所述第二子表;如果確定所述第二子表未分配存儲(chǔ)單元,則根據(jù)所述第二寫請(qǐng)求為所述第二子表分配第三存儲(chǔ)單元。

結(jié)合第三方面或第三方面的上述任一種可能的實(shí)現(xiàn)方式,在第三方面的第六種可能的實(shí)現(xiàn)方式中,所述第一表采用哈希的方式進(jìn)行存儲(chǔ),所述第一表的表項(xiàng)的關(guān)鍵字key存儲(chǔ)在哈希桶的表項(xiàng)中,所述處理單元還用于:

在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至所述第一哈希桶;

在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至所述第一哈希桶和第二哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,所述第一哈希桶和所述第二哈希桶采用不同的哈希函數(shù);

在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至所述第三哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函數(shù);

在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第三哈希桶和第四哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函數(shù),所述第二哈希桶和所述第四哈希桶采用相同的哈希函數(shù)。

結(jié)合第三方面的第六種可能的實(shí)現(xiàn)方式,在第三方面的第七種可能的實(shí)現(xiàn)方式中,還包括:控制單元,用于:

在所述第一哈希桶的被訪問次數(shù)與所述第三哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配所述第三哈希桶, 再匹配所述第一哈希桶;

在所述第二哈希桶的被訪問次數(shù)與所述第四哈希桶的被訪問次數(shù)的比值小于或等于所述第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配所述第四哈希桶,再匹配所述第二哈希桶;

在所述第一哈希桶和所述第三哈希桶的被訪問次數(shù)與所述第二哈希桶和所述第四哈希桶的被訪問次數(shù)的比值小于或等于所述第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配所述第二哈希桶和所述第四哈希桶,再匹配所述第一哈希桶和所述第三哈希桶。

第四方面,提供了一種訪問表的裝置,包括:處理單元,用于:獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址,所述內(nèi)存塊映射信息表包括所述第一表中的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系;根據(jù)所述基址和所述第一表的第一表項(xiàng)的索引訪問所述內(nèi)存塊映射信息表,并根據(jù)所述內(nèi)存塊映射信息表確定所述第一表項(xiàng)所在的第一子表對(duì)應(yīng)的存儲(chǔ)單元的索引,所述第一子表為所述第一表中的任意子表;根據(jù)所述存儲(chǔ)單元的索引和所述第一表項(xiàng)的索引,確定所述第一表項(xiàng)的物理地址;訪問單元,用于根據(jù)所述第一表項(xiàng)的物理地址訪問所述第一表項(xiàng)。

結(jié)合第四方面,在第四方面的第一種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:根據(jù)第一表的表標(biāo)識(shí)TID訪問內(nèi)存塊映射基址表,并根據(jù)所述內(nèi)存塊映射基址表確定所述內(nèi)存儲(chǔ)塊映射信息表的基址。

結(jié)合第四方面或第四方面的第一種可能的實(shí)現(xiàn)方式,在第四方面的第二種可能的實(shí)現(xiàn)方式中,還包括:記錄單元,用于更新所述存儲(chǔ)單元的被訪問次數(shù)。

結(jié)合第四方面或第四方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第四方面的第三種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:根據(jù)下式確定的地址訪問所述內(nèi)存塊映射信息表,

其中,base為所述基址,entry index為所述第一表項(xiàng)的索引,block size為所述第一子表包含的表項(xiàng)的數(shù)量。

結(jié)合第四方面或第四方面的第一種或第二種或第三種可能的實(shí)現(xiàn)方式,在第四方面的第四種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:根據(jù)下式確定所述第一表項(xiàng)的物理地址,

real block index*block size+entry index%block size

其中,real block index為所述存儲(chǔ)單元的索引,block size為所述第一子表包含的表項(xiàng)的數(shù)量,所述第一子表包含的表項(xiàng)的數(shù)量與所述存儲(chǔ)單元存儲(chǔ)的表項(xiàng)的數(shù)量相同,entry index為所述第一表項(xiàng)的索引。

基于上述技術(shù)方案,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

附圖說明

為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)本發(fā)明實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1是根據(jù)本發(fā)明實(shí)施例的表和存儲(chǔ)器的示意圖。

圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的處理表的方法的示意性流程圖。

圖3是根據(jù)本發(fā)明另一實(shí)施例的處理表的方法的示意性流程圖。。

圖4是根據(jù)本發(fā)明另一實(shí)施例的處理表的方法的統(tǒng)計(jì)單元的示意圖。

圖5是根據(jù)本發(fā)明另一實(shí)施例的處理表的方法的示意性流程圖。

圖6是根據(jù)本發(fā)明另一實(shí)施例的處理表的方法的示意性流程圖。

圖7是路由器的哈希桶的示意圖。

圖8a、8b、8c和8d是根據(jù)本發(fā)明實(shí)施例的處理表的方法的示意圖。

圖9是根據(jù)本發(fā)明實(shí)施例的訪問表的方法的示意性流程圖。

圖10是根據(jù)本發(fā)明實(shí)施例的訪問表的方法的存儲(chǔ)系統(tǒng)架構(gòu)示意圖。

圖11是根據(jù)本發(fā)明實(shí)施例的訪問表的方法的內(nèi)存映射單元的示意圖。

圖12是根據(jù)本發(fā)明一個(gè)實(shí)施例的處理表的裝置的示意性框圖。

圖13是根據(jù)本發(fā)明另一實(shí)施例的處理表的裝置的示意性框圖。

圖14是根據(jù)本發(fā)明一個(gè)實(shí)施例的訪問表的裝置的示意性框圖。

圖15是根據(jù)本發(fā)明另一實(shí)施例的訪問表的裝置的示意性框圖。

圖16是根據(jù)本發(fā)明另一實(shí)施例的處理表的裝置的示意性框圖。

圖17是根據(jù)本發(fā)明另一實(shí)施例的訪問表的裝置的示意性框圖。

具體實(shí)施方式

下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。

本申請(qǐng)的說明書和權(quán)利要求書及附圖中的術(shù)語“第一”、“第二”和“第三”等是用于區(qū)別不同對(duì)象,而不是用于描述特定順序。此外,術(shù)語“包括”和“具有”不是排他的。例如包括了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備沒有限定于已列出的步驟或單元,還可以包括沒有列出的步驟或單元。

本發(fā)明實(shí)施例中,一個(gè)表包括多個(gè)子表,一個(gè)存儲(chǔ)器包括多個(gè)存儲(chǔ)單元,如圖1所示。應(yīng)理解,本發(fā)明實(shí)施例中的存儲(chǔ)器的物理空間可以根據(jù)物理結(jié)構(gòu)進(jìn)行劃分,也可以根據(jù)邏輯進(jìn)行劃分。

圖2是根據(jù)本發(fā)明實(shí)施例的處理表的方法200的示意性流程圖。如圖2所示,方法200包括如下內(nèi)容。

210、處理器在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中,第二存儲(chǔ)器的剩余帶寬高于第一子表被訪問時(shí)占用的帶寬,且第二存儲(chǔ)器的剩余存儲(chǔ)空間大于第一子表占用的存儲(chǔ)空間。

本發(fā)明實(shí)施例中,第一表包括多個(gè)子表,第一存儲(chǔ)器包括多個(gè)存儲(chǔ)單元,多個(gè)子表中包括第一子表,多個(gè)存儲(chǔ)單元中包括第一存儲(chǔ)單元。如圖1所示,第一表中的多個(gè)子表可以都存儲(chǔ)在第一存儲(chǔ)器中,也可以存儲(chǔ)在不同的存儲(chǔ)器中。其中,一個(gè)存儲(chǔ)單元用于存儲(chǔ)一個(gè)子表,一個(gè)子表包含固定數(shù)量的連續(xù)的表項(xiàng)。

其中,存儲(chǔ)器的運(yùn)行狀態(tài)可以包括占用的帶寬和存儲(chǔ)空間。第二存儲(chǔ)單元是第二存儲(chǔ)器的多個(gè)存儲(chǔ)單元中任意一個(gè)沒有存儲(chǔ)子表的存儲(chǔ)單元。

應(yīng)理解,本發(fā)明實(shí)施例中的處理器指的是控制面的處理器。

220、處理器在第一存儲(chǔ)單元中刪除第一子表。

230、處理器將第一子表與第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系發(fā)送給網(wǎng)絡(luò)處理器,以使網(wǎng)絡(luò)處理器將保存的第一子表與第一存儲(chǔ)單元的對(duì)應(yīng)關(guān)系更新為第一 子表與第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

現(xiàn)有技術(shù)中,通常按照同時(shí)滿足所有典型業(yè)務(wù)場景的線速要求選擇整表的存儲(chǔ)位置,這要求轉(zhuǎn)發(fā)面的網(wǎng)絡(luò)處理器提供大容量高帶寬的內(nèi)存系統(tǒng)。這種通過靜態(tài)預(yù)分配內(nèi)存滿足所有場景性能要求的方式,無法支持1Tbps以上網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬和內(nèi)存容量的需求,成為高性能網(wǎng)絡(luò)處理器的瓶頸。而本發(fā)明實(shí)施例中,在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,能夠靈活地選擇該存儲(chǔ)器中存儲(chǔ)的部分子表的存儲(chǔ)位置,使得能夠減小高性能網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求,進(jìn)而提高網(wǎng)絡(luò)處理器的處理性能。

因此,本發(fā)明實(shí)施例的處理表的方法,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

本發(fā)明實(shí)施例中僅以處理器將第一子表搬移至第二存儲(chǔ)器的過程為例進(jìn)行描述,本發(fā)明實(shí)施例中處理器可以將多個(gè)存儲(chǔ)單元存儲(chǔ)的多個(gè)子表搬移至一個(gè)存儲(chǔ)器,或者可以將多個(gè)子表搬移至多個(gè)存儲(chǔ)器,本發(fā)明實(shí)施例對(duì)此并不限定。

可選地,如圖3所示,步驟210中,處理器在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中包括:

211、處理器確定第一存儲(chǔ)器占用的帶寬;

212、處理器在第一存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

該第一預(yù)設(shè)值可以作為存儲(chǔ)器的帶寬是否接近用完的判斷標(biāo)準(zhǔn)。

本發(fā)明實(shí)施例對(duì)處理器確定存儲(chǔ)器占用的帶寬的方法不作限定。例如:處理器可以輪詢網(wǎng)絡(luò)處理器獲取存儲(chǔ)器的被訪問次數(shù),進(jìn)一步確定存儲(chǔ)器的被訪問頻率,然后根據(jù)被訪問頻率確定存儲(chǔ)器占用的帶寬。處理器還可以輪詢網(wǎng)絡(luò)處理器獲取存儲(chǔ)器的占用的帶寬。需要說明的是,本發(fā)明實(shí)施例并不限定網(wǎng)絡(luò)處理器確定存儲(chǔ)器占用的帶寬的方法。例如,網(wǎng)絡(luò)處理器還可以由硬件通過判斷入口隊(duì)列長度觸發(fā)終端確定存儲(chǔ)器占用的帶寬。

可選地,步驟212中,處理器將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中包括:

處理器獲取第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);

處理器根據(jù)每個(gè)存儲(chǔ)單元的被訪問次數(shù),從第一存儲(chǔ)器中確定第一存儲(chǔ)單元,第一存儲(chǔ)單元的被訪問頻率高于第一存儲(chǔ)器中第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;

處理器將第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

具體地,控制面的處理器可以通過輪詢轉(zhuǎn)發(fā)面的網(wǎng)絡(luò)處理器獲取存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù)。例如,網(wǎng)絡(luò)處理器中可以設(shè)置統(tǒng)計(jì)單元,如圖4所示,該統(tǒng)計(jì)單元包括多個(gè)計(jì)數(shù)器,該多個(gè)計(jì)數(shù)器分別與存儲(chǔ)器中的各個(gè)存儲(chǔ)單元相關(guān)聯(lián),記錄各個(gè)存儲(chǔ)單元的被訪問次數(shù)。處理器根據(jù)獲取到的每個(gè)存儲(chǔ)單元在一定周期內(nèi)的被訪問次數(shù)即可確定每個(gè)存儲(chǔ)單元的被訪問頻率。

需要說明的是,在存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,只要將該存儲(chǔ)器中存儲(chǔ)的部分子表搬移到其他存儲(chǔ)器上,即可達(dá)到降低該存儲(chǔ)器占用的帶寬的目的。因此處理器不僅可以將存儲(chǔ)器中的一個(gè)或多個(gè)被訪問頻率最高的存儲(chǔ)單元上存儲(chǔ)的子表搬移到一個(gè)或多個(gè)其他存儲(chǔ)器中,還可以將存儲(chǔ)器中的任意一個(gè)或多個(gè)存儲(chǔ)單元上存儲(chǔ)的子表搬移至其他存儲(chǔ)器,本發(fā)明實(shí)施例對(duì)此并不限定。

本發(fā)明實(shí)施例中,在運(yùn)行過程中,處理器根據(jù)各存儲(chǔ)器的帶寬的實(shí)際占用情況和存儲(chǔ)單元的被訪問次數(shù)的統(tǒng)計(jì)進(jìn)行子表的搬移,能夠滿足網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬的需求。

可選地,步驟212中,在處理器將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中之前,方法200還包括:處理器從多個(gè)存儲(chǔ)器中確定第二存儲(chǔ)器,第二存儲(chǔ)器的剩余帶寬高于多個(gè)存儲(chǔ)器中第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余帶寬。

在本發(fā)明實(shí)施例中,通過將被訪問頻率最高的子表搬移到有足夠剩余帶寬的存儲(chǔ)器上,能夠使得具有高帶寬的存儲(chǔ)器上存儲(chǔ)被訪問頻率高的子表,這樣能夠大大減小網(wǎng)絡(luò)處理器對(duì)高性能存儲(chǔ)器容量的需求。

換句話說,通過統(tǒng)計(jì)存儲(chǔ)器和子表的被訪問頻率,把被訪問頻率高的子表放置到高帶寬內(nèi)存,訪問頻率低的子表放置在低帶寬內(nèi)存,與按照整表的訪問性能選擇整表的存儲(chǔ)位置相比,能有效減少對(duì)高帶寬內(nèi)存的容量需求, 使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

例如,基于子表的訪問統(tǒng)計(jì)選擇子表的存儲(chǔ)位置,經(jīng)過不斷地搬移,使例如片上內(nèi)存只存儲(chǔ)高速訪問的表項(xiàng),能夠大大減小網(wǎng)絡(luò)處理器對(duì)片上內(nèi)存容量的需求。其中,片上內(nèi)存,也稱片上存儲(chǔ)器,指與處理器集成在同一芯片上的存儲(chǔ)器。相應(yīng)地,沒有與處理器集成在同一芯片上的存儲(chǔ)器稱為片外內(nèi)存,也稱片外存儲(chǔ)器。片上內(nèi)存相對(duì)于片外內(nèi)存具有更高的帶寬。

在片上內(nèi)存采用高速緩沖存儲(chǔ)器(cache)的情況下,初始狀態(tài),表數(shù)據(jù)存儲(chǔ)在片外內(nèi)存,片上內(nèi)存用作片外內(nèi)存的備份。處理器優(yōu)先訪問片上內(nèi)存,當(dāng)cache未命中時(shí)才訪問片外內(nèi)存,連續(xù)訪問的數(shù)據(jù)會(huì)長時(shí)間保留在cache中。片上內(nèi)存,即cache,可以很小,在cache命中率較高的情況下,能夠提供很高的訪問性能。cache適用于數(shù)據(jù)訪問具有較強(qiáng)局部性的應(yīng)用場景,但是路由器報(bào)文處理過程中的內(nèi)存訪問不具有局部性特點(diǎn),報(bào)文處理過程中要訪問數(shù)十個(gè)不同的表,每個(gè)表的大小從幾兆比特(megabit,縮寫Mb)到幾百M(fèi)bs不等,而且,不同報(bào)文訪問同一個(gè)表時(shí)可能命中的表項(xiàng)大多數(shù)情況下也沒有局部性的特征,報(bào)文處理的這些訪問特點(diǎn)導(dǎo)致cache命中率可能非常低,從而使報(bào)文轉(zhuǎn)發(fā)性能較低。這樣,高速表項(xiàng)之間、以及高速表項(xiàng)和低速表項(xiàng)之間,都會(huì)存在cache沖突的可能。也許在某種場景下,cache命中率很高,但很可能在另一種場景下,cache命中率可能非常低,其原因是cache采用靜態(tài)的哈希(Hash)機(jī)制進(jìn)行內(nèi)存映射。因此,cache無法保證轉(zhuǎn)發(fā)業(yè)務(wù)性能。

本發(fā)明實(shí)施例通過實(shí)時(shí)統(tǒng)計(jì)存儲(chǔ)器中各個(gè)子表的被訪問頻率,根據(jù)實(shí)際的被訪問頻率,將子表在不同的存儲(chǔ)器之間進(jìn)行搬移,使得高性能存儲(chǔ)器(例如片上內(nèi)存)只存儲(chǔ)高速訪問的子表,使得采用較小的片上內(nèi)存支持所有場景的高速轉(zhuǎn)發(fā)業(yè)務(wù)成為可能。因此本發(fā)明實(shí)施例的方案要優(yōu)于cache機(jī)制。

舉例說明,存儲(chǔ)器的帶寬接近用完時(shí),假設(shè)大于80%,首先找出該存儲(chǔ)器訪問頻率最高的那些存儲(chǔ)單元(例如,前幾個(gè)、幾十個(gè)或幾百個(gè)等等),然后采取某種策略把其中的一部分存儲(chǔ)單元上的子表搬移到其他有足夠剩余帶寬的存儲(chǔ)器上??梢栽谌我獯鎯?chǔ)器之間進(jìn)行子表的搬移,例如:可以從第一片上存儲(chǔ)器搬到第二片上存儲(chǔ)器上,或者從片上存儲(chǔ)器搬到片外存儲(chǔ)器上,或者從第一片外存儲(chǔ)器搬到第二片外存儲(chǔ)器上,或者從片外存儲(chǔ)器搬到片上存儲(chǔ)器上。搬移完成后,更新網(wǎng)絡(luò)處理器的內(nèi)存映射表上存儲(chǔ)單元和子 表之間的映射關(guān)系。

另外,存儲(chǔ)器也可以關(guān)聯(lián)一個(gè)計(jì)數(shù)器,處理器能夠獲取該計(jì)數(shù)器的值并確定該存儲(chǔ)器的被訪問頻率,進(jìn)而能夠確定該存儲(chǔ)器占用的帶寬。

可選地,如圖5所示,步驟210中,處理器在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中,包括:

213、處理器獲取第一存儲(chǔ)器的剩余存儲(chǔ)空間;

例如,處理器可以通過輪詢轉(zhuǎn)發(fā)面的網(wǎng)絡(luò)處理器獲取存儲(chǔ)器的剩余存儲(chǔ)空間。

214、處理器在第一存儲(chǔ)器的剩余存儲(chǔ)空間小于或等于第二預(yù)設(shè)值的情況下,將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

本發(fā)明實(shí)施例中,在運(yùn)行過程中,處理器根據(jù)各存儲(chǔ)器的存儲(chǔ)空間的實(shí)際占用情況進(jìn)行子表的搬移,能夠滿足網(wǎng)絡(luò)處理器內(nèi)存容量的需求。

具體地,在步驟214中,處理器將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中包括:

處理器確定第一存儲(chǔ)器占用的帶寬;

處理器在第一存儲(chǔ)器占用的帶寬小于第三預(yù)設(shè)值的情況下,獲取第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);

處理器根據(jù)每個(gè)存儲(chǔ)單元的被訪問次數(shù),確定第一存儲(chǔ)單元,第一存儲(chǔ)單元的被訪問頻率低于第一存儲(chǔ)器中第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;

處理器將第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

在本發(fā)明實(shí)施例中,當(dāng)存儲(chǔ)器的帶寬占用小于預(yù)設(shè)值,但該存儲(chǔ)器的容量已經(jīng)接近占滿時(shí),通過把該存儲(chǔ)器上占用帶寬最小的一個(gè)或多個(gè)子表搬移到其它有較大空余容量同時(shí)具有足夠剩余帶寬的存儲(chǔ)器上,能夠滿足網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求。

可選地,步驟214中,在處理器將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中之前,方法200還可以包括:處理器從多個(gè)存儲(chǔ)器中確定第二存儲(chǔ)器,第二存儲(chǔ)器的剩余存儲(chǔ)空間高于多個(gè)存儲(chǔ)器中第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余存儲(chǔ)空間。本發(fā)明實(shí)施例中,將子表搬移到剩余存儲(chǔ)空間最大的 存儲(chǔ)器中,能夠使得存儲(chǔ)資源的分配更加均衡。

在步驟210之前,方法200還可以包括:處理器為第一子表分配第一存儲(chǔ)單元。

具體地,處理器為第一子表分配第一存儲(chǔ)單元包括:

處理器獲取第一寫請(qǐng)求,第一寫請(qǐng)求用于請(qǐng)求對(duì)第一表的第一表項(xiàng)進(jìn)行寫操作;

處理器根據(jù)第一寫請(qǐng)求為第一子表分配第一存儲(chǔ)單元,第一子表包括第一表項(xiàng)。

應(yīng)理解,在為第一子表分配第一存儲(chǔ)單元之后,處理器可以根據(jù)第一寫請(qǐng)求將第一表項(xiàng)寫入第一存儲(chǔ)單元。

本發(fā)明實(shí)施例中,表的內(nèi)存不再預(yù)先靜態(tài)分配,表和存儲(chǔ)器被劃分成多個(gè)塊,即表被劃分成多個(gè)子表,存儲(chǔ)器被劃分成多個(gè)存儲(chǔ)單元??蛇x地,存儲(chǔ)器中的各個(gè)存儲(chǔ)單元的容量相同,表中各個(gè)子表的大小相同,但本發(fā)明實(shí)施例對(duì)此并不限定。例如,存儲(chǔ)器中各個(gè)存儲(chǔ)單元的容量也可以不同,表中各個(gè)子表的大小也可以不同。

初始狀態(tài)下,處理器不會(huì)預(yù)先為整表分配存儲(chǔ)空間,在寫表項(xiàng)的時(shí)候才從存儲(chǔ)器中按需動(dòng)態(tài)地以子表為單位分配存儲(chǔ)單元,并記錄子表與存儲(chǔ)單元之間的映射關(guān)系。這樣能夠大大減小網(wǎng)絡(luò)處理器對(duì)內(nèi)存的總需求。

因此,本發(fā)明實(shí)施例的處理表的方法,通過為表按需增量動(dòng)態(tài)分配內(nèi)存,能夠避免為表預(yù)留內(nèi)存空間而導(dǎo)致的內(nèi)存空間浪費(fèi),從而能夠減少網(wǎng)絡(luò)處理器對(duì)內(nèi)存的需求。

由于在不同場景下,各個(gè)表的實(shí)際大小是不相同的,比如在場景1下轉(zhuǎn)發(fā)信息庫(Fowarding Information Base,簡稱FIB)表很大多協(xié)議標(biāo)簽交換(Multi-Protocol Label Switching,簡稱MPLS)表很小,而場景2下FIB表很小MPLS表很大。如果采用靜態(tài)預(yù)分配內(nèi)存的方案,為了同一個(gè)版本即能夠支持場景1又能支持場景2,就需要同時(shí)為FIB表和MPLS表預(yù)分配足夠大的空間,而事實(shí)上,任何場景下,都有很多內(nèi)存空間是完全空閑的,采用本發(fā)明實(shí)施例處理表的方法就能避免此問題。

可選地,方法200還可以包括:

處理器獲取第二寫請(qǐng)求,第二寫請(qǐng)求用于請(qǐng)求對(duì)第二子表的第二表項(xiàng)進(jìn)行寫操作;

如果處理器確定第二子表未分配存儲(chǔ)單元,則處理器根據(jù)第二寫請(qǐng)求為第二子表分配第三存儲(chǔ)單元。

其中,第二子表可以是第一表的多個(gè)子表中除第一子表外的任一子表,第二子表還可以是第二表的多個(gè)子表中的任一子表。第三存儲(chǔ)單元可以位于第一存儲(chǔ)器中,也可以位于第二存儲(chǔ)器中,還可以位于第一存儲(chǔ)器和第二存儲(chǔ)器之外的第三存儲(chǔ)器中。

本發(fā)明實(shí)施例中在寫表項(xiàng)時(shí),能夠按需動(dòng)態(tài)地為表分配存儲(chǔ)空間。

本發(fā)明實(shí)施例中,處理器可以根據(jù)存儲(chǔ)器的占用情況,確定為子表分配哪個(gè)存儲(chǔ)器的存儲(chǔ)單元。處理器可以優(yōu)先為子表分配已部分存儲(chǔ)了子表的存儲(chǔ)器,當(dāng)該存儲(chǔ)器已用完時(shí),再為需要分配存儲(chǔ)空間的子表分配其他存儲(chǔ)器。例如,當(dāng)處理器確定第一存儲(chǔ)器未滿時(shí),則處理器在第一存儲(chǔ)器中為第二子表分配第三存儲(chǔ)單元;當(dāng)處理器確定第一存儲(chǔ)器已滿,第二存儲(chǔ)器未滿時(shí),則處理器在第二存儲(chǔ)器中為第二子表分配第三存儲(chǔ)單元。當(dāng)處理器確定第一存儲(chǔ)器和第二存儲(chǔ)器均已滿時(shí),則處理器在第三存儲(chǔ)器中為第二子表分配第三存儲(chǔ)單元。以此類推,不再贅述。

處理器還可以根據(jù)子表的類型,確定為子表分配哪個(gè)存儲(chǔ)器的存儲(chǔ)單元。例如,第二子表為第二表的多個(gè)子表中的任一子表,第二表為非線速業(yè)務(wù)的表,相應(yīng)地,第二子表為非線速業(yè)務(wù)的表。當(dāng)?shù)谝淮鎯?chǔ)器用于存儲(chǔ)線速業(yè)務(wù)的表,第二存儲(chǔ)器和第三存儲(chǔ)器用于存儲(chǔ)非線速業(yè)務(wù)的表時(shí),如果第二存儲(chǔ)器已部分存儲(chǔ)了子表,則處理器可以優(yōu)先在第二存儲(chǔ)器中為第二子表分配第三存儲(chǔ)單元。如果處理器確定第二存儲(chǔ)器已滿,則處理器在第三存儲(chǔ)器中為第二子表分配第三存儲(chǔ)單元。可選地,第一存儲(chǔ)器的帶寬高于第二存儲(chǔ)器或第三存儲(chǔ)器的帶寬。

需要說明的是,這里存儲(chǔ)器的帶寬指的是存儲(chǔ)器本身能夠提供的總帶寬。

在初始存儲(chǔ)業(yè)務(wù)表時(shí),線速業(yè)務(wù)的表優(yōu)先存儲(chǔ)在帶寬較高的存儲(chǔ)器中,當(dāng)該帶寬較高的存儲(chǔ)器用完時(shí),才將線速業(yè)務(wù)的表存儲(chǔ)在帶寬較低的存儲(chǔ)器中,非線速業(yè)務(wù)的表優(yōu)先存儲(chǔ)在帶寬較低的存儲(chǔ)器中。

例如,在第一子表對(duì)應(yīng)線速業(yè)務(wù)、第二子表對(duì)應(yīng)非線速業(yè)務(wù)的情況下,將第一子表存儲(chǔ)至片上內(nèi)存,將第二子表存儲(chǔ)至片外內(nèi)存。

可選地,在選擇初始存儲(chǔ)位置時(shí),如果在任意一個(gè)轉(zhuǎn)發(fā)業(yè)務(wù)中任意兩個(gè) 表會(huì)被同時(shí)訪問,則將該兩個(gè)表存儲(chǔ)在不同的存儲(chǔ)器上。

本發(fā)明實(shí)施例提供的處理表的方法可以和通常的靜態(tài)預(yù)分配內(nèi)存的方法一起使用,例如,部分很小的線速表可以仍然采用靜態(tài)預(yù)分配內(nèi)存的方案,這種靜態(tài)預(yù)分配的方案也可以應(yīng)用于算法樹中內(nèi)存占用較小的層級(jí),以減少訪問內(nèi)存映射表的次數(shù),進(jìn)而減小報(bào)文處理時(shí)延。

因此,本發(fā)明實(shí)施例的處理表的方法,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

可選地,第一表可以采用哈希(Hash)的方式進(jìn)行存儲(chǔ),第一表的表項(xiàng)的關(guān)鍵字key存儲(chǔ)在哈希桶的表項(xiàng)中,如圖6所示,方法200還可以包括以下內(nèi)容。

240、處理器在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第一哈希桶。

應(yīng)注意,key可以是壓縮key,也可以是完整key,本發(fā)明實(shí)施例對(duì)此并不限定。

250、處理器在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到第一哈希桶和第二哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,第一哈希桶和第二哈希桶采用不同的哈希函數(shù)。

260、處理器在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到第三哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函數(shù)。

270、處理器在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)到第三哈希桶和第四哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函數(shù),第二哈希桶和第四哈希桶采用相同的哈希函數(shù)。

應(yīng)理解,在240之前,將現(xiàn)有技術(shù)中的兩個(gè)哈希桶中的每個(gè)哈希桶的規(guī)格縮小,并為每個(gè)哈希桶增加至少一個(gè)擴(kuò)展桶。

還應(yīng)理解,哈希桶中的每個(gè)表項(xiàng)的內(nèi)容包括關(guān)鍵字和值,即鍵值對(duì) (key-value),處理器在將待存儲(chǔ)的key存儲(chǔ)到哈希桶中的同時(shí)會(huì)將該key對(duì)應(yīng)的value存儲(chǔ)到哈希桶中。為了描述簡潔,本發(fā)明實(shí)施例中僅以key為例進(jìn)行說明,但并非要限制本發(fā)明實(shí)施例的范圍。

現(xiàn)有技術(shù)中,在路由器里,很多業(yè)務(wù)表采用哈希(Hash)的方式進(jìn)行存儲(chǔ)和匹配,比如介質(zhì)訪問控制(Media Access Control,簡稱MAC)表、地址解析協(xié)議(Address Resolution Protocol,簡稱ARP)表等。為了減少Hash沖突,一般采用兩個(gè)哈希桶的方案,該兩個(gè)哈希桶對(duì)應(yīng)不同的哈希函數(shù),如圖7所示。但是由于Hash的隨機(jī)性,key隨機(jī)分布在各個(gè)哈希桶中,極少的(如1%)的key也會(huì)迫使驅(qū)動(dòng)申請(qǐng)出所有的哈希桶內(nèi)存,降低哈希桶內(nèi)存的利用率。而本發(fā)明實(shí)施例中,采用步驟240、250、260、270描述的策略將key存儲(chǔ)到哈希桶中,不僅可以有效保證本發(fā)明實(shí)施例提供的增量分配內(nèi)存的方式處理表,提高內(nèi)存利用率;同時(shí)能夠提高哈希桶內(nèi)存的利用率,有效地解決該問題。

因此,本發(fā)明實(shí)施例的處理表的方法,當(dāng)key的數(shù)量較少時(shí),能夠大大減少占用的內(nèi)存,并減少哈希桶訪問的次數(shù)。

應(yīng)理解,第一哈希桶和第三哈希桶對(duì)應(yīng)現(xiàn)有技術(shù)兩個(gè)哈希桶中的一個(gè)哈希桶,第二哈希桶和第四哈希桶對(duì)應(yīng)現(xiàn)有技術(shù)中兩個(gè)哈希桶中的另一哈希桶。

可選地,第一哈希桶和第三哈希桶的大小相同,第二哈希桶和第四哈希桶的大小相同,但本發(fā)明并不限定于此。

下面舉例說明,將圖7所示每個(gè)哈希桶的規(guī)格縮小一半,同時(shí)為每個(gè)哈希桶增加一個(gè)同樣大小的擴(kuò)展桶,即如圖8a、8b、8c和8d所示,哈希桶1和哈希桶3對(duì)應(yīng)圖7中的哈希桶1,哈希桶2和哈希桶4對(duì)應(yīng)圖7中的哈希桶2。假設(shè)哈希桶中的每個(gè)表項(xiàng)能存儲(chǔ)M條Key(比如M=6),第一閾值為M/2。

當(dāng)哈希桶1的每個(gè)表項(xiàng)中的key的數(shù)量小于M/2時(shí),新Key存儲(chǔ)在哈桶1里。如圖8a所示,此時(shí)哈希桶3、哈希桶2和哈希桶4都是空的,不占用內(nèi)存,即最多只占用1/4內(nèi)存,表查找只需要訪問哈希桶一次。

當(dāng)哈希桶1的每個(gè)表項(xiàng)中的key的數(shù)量大于等于M/2時(shí),新Key存儲(chǔ)在哈希桶1和哈希桶2中Key的數(shù)量少的那個(gè)桶的表項(xiàng)里。如圖8b所示,此時(shí)哈希桶3和哈希桶4都是空的,不占用內(nèi)存。也就是說此時(shí)最多只占用1/2 內(nèi)存,表查找最壞需要訪問哈希桶2次。

當(dāng)哈希桶1和哈希桶2的所有表項(xiàng)已滿,且哈希桶3的表項(xiàng)中的key的數(shù)量小于M/2時(shí),新key存儲(chǔ)在哈希桶3里。如圖8c所示,此時(shí)哈希桶4是空的,不占用內(nèi)存。也就是說此時(shí)最多只占用3/4內(nèi)存,表查找最壞需要訪問哈希桶3次。

當(dāng)哈希桶1和哈希桶2的所有表項(xiàng)已滿,且哈希桶3的表項(xiàng)中的key的數(shù)量大于或等于M/2時(shí),新Key存儲(chǔ)在哈希桶3和哈希桶4中key的數(shù)量較少的那個(gè)哈希桶的表項(xiàng)里。如圖8d所示,此時(shí)哈希桶1、哈希桶3、哈希桶2和哈希桶4都占用內(nèi)存,即此時(shí)占用整個(gè)內(nèi)存,表查找最壞需要訪問哈希桶4次。

因此,在本發(fā)明實(shí)施例中,通過將現(xiàn)有技術(shù)中的兩個(gè)哈希桶中的每個(gè)哈希桶的規(guī)格縮小,并為每個(gè)哈希桶增加至少一個(gè)擴(kuò)展桶,并根據(jù)設(shè)定的策略進(jìn)行存儲(chǔ),當(dāng)key的數(shù)量較少時(shí),能夠大大減少占用的內(nèi)存,并減少哈希桶訪問的次數(shù)。

可選地,第一哈希桶、第二哈希桶、第三哈希桶和第四哈希桶可以關(guān)聯(lián)計(jì)數(shù)器,計(jì)數(shù)器用于分別記錄第一哈希桶、第二哈希桶、第三哈希桶和第四哈希桶的被訪問次數(shù)。

本發(fā)明實(shí)施例中,也可以統(tǒng)計(jì)各個(gè)哈希桶的被訪問次數(shù),然后通過搬移,將高速訪問的業(yè)務(wù)表放置到對(duì)應(yīng)高帶寬存儲(chǔ)器(如片上內(nèi)存)的哈希桶中。

方法200還可以包括:

處理器在第一哈希桶的被訪問次數(shù)與第三哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第三哈希桶,再匹配第一哈希桶;

處理器在第二哈希桶的被訪問次數(shù)與第四哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第四哈希桶,再匹配第二哈希桶;

處理器在第一哈希桶和第三哈希桶的被訪問次數(shù)與第二哈希桶和第四哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第二哈希桶和第四哈希桶,再匹配第一哈希桶和第三哈希桶。

處理器可以通過輪詢的方式獲取各個(gè)哈希桶的被訪問次數(shù)并比較,然后根據(jù)哈希桶的被訪問次數(shù)的比值,控制轉(zhuǎn)發(fā)面的網(wǎng)絡(luò)處理器匹配哈希桶的順 序。

具體地,處理器可以根據(jù)哈希桶的被訪問次數(shù)的比值配置轉(zhuǎn)發(fā)面的寄存器的值(比如0或1),轉(zhuǎn)發(fā)面的網(wǎng)絡(luò)處理器讀取該寄存器的值,并根據(jù)寄存器的值決定哈希桶的匹配順序。

其中寄存器的值是預(yù)先設(shè)定的,例如寄存器的值可以為0或1。兩個(gè)哈希桶的被訪問次數(shù)的比值小于或等于第二閾值,說明該兩個(gè)哈希桶的被訪問次數(shù)接近。

需要說明的是,現(xiàn)有技術(shù)中,通過哈希函數(shù)查找數(shù)據(jù)時(shí),首先匹配兩個(gè)哈希桶中的第一個(gè)哈希桶,若匹配不成功,才會(huì)繼續(xù)匹配第二個(gè)哈希桶。依次類推,可以理解,本發(fā)明實(shí)施例中,首先匹配第一哈系統(tǒng),若匹配不成功,繼續(xù)匹配第三哈希桶(即第一哈希桶的擴(kuò)展桶);若匹配不成功,則繼續(xù)匹配第二哈希桶;若匹配還不成功,則繼續(xù)匹配第四哈希桶(即第二哈希桶的擴(kuò)展桶)。因此,如果第一哈希桶的被訪問次數(shù)與第三哈希桶的被訪問次數(shù)接近,則說明第一哈希桶的匹配成功率很低。同理,如果第一哈希桶和第三哈希桶的被訪問次數(shù)與第二哈希桶和第四哈希桶的被訪問次數(shù)接近,則說明第一哈希桶和第三哈希桶的匹配成功率很低。

在本發(fā)明實(shí)施例中,通過根據(jù)哈希桶的被訪問次數(shù)控制網(wǎng)絡(luò)處理器匹配哈希桶的順序,能夠減少哈希桶的訪問次數(shù),進(jìn)而能夠減少網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬的需求。

圖9是根據(jù)本發(fā)明實(shí)施例的訪問表的方法900的示意性流程圖。如圖9所示,方法900包括如下內(nèi)容。

910、網(wǎng)絡(luò)處理器獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址,內(nèi)存塊映射信息表包括第一表中的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

其中,內(nèi)存塊映射基址表中記錄了表與內(nèi)存塊映射信息表的對(duì)應(yīng)關(guān)系。

920、網(wǎng)絡(luò)處理器根據(jù)基址和第一表的第一表項(xiàng)的索引訪問內(nèi)存塊映射信息表,并根據(jù)內(nèi)存塊映射信息表確定第一表項(xiàng)所在的第一子表對(duì)應(yīng)的存儲(chǔ)單元的索引,第一子表為該第一表中的任意子表。

930、網(wǎng)絡(luò)處理器根據(jù)存儲(chǔ)單元的索引和第一表項(xiàng)的索引,確定第一表項(xiàng)的物理地址。

940、網(wǎng)絡(luò)處理器根據(jù)第一表項(xiàng)的物理地址訪問第一表項(xiàng)。

在本發(fā)明實(shí)施例中,網(wǎng)絡(luò)處理器通過根據(jù)表項(xiàng)的索引在內(nèi)存塊映射信息 表中確定表項(xiàng)的物理地址,能夠根據(jù)表項(xiàng)的物理地址訪問表項(xiàng)。

可選地,在步驟910中,網(wǎng)絡(luò)處理器獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址包括:網(wǎng)絡(luò)處理器根據(jù)第一表的表標(biāo)識(shí)(Table Identifier,簡稱TID)訪問內(nèi)存塊映射基址表,并根據(jù)內(nèi)存塊映射基址表確定內(nèi)存塊映射信息表的基址。

應(yīng)理解,網(wǎng)絡(luò)處理器還可以采用其他方法獲取內(nèi)存塊映射信息表的基址,本發(fā)明實(shí)施例對(duì)此不進(jìn)行限定。

可選地,在步驟910之前,方法900還包括:

網(wǎng)絡(luò)處理器接收處理器發(fā)送的第一表的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

網(wǎng)絡(luò)處理器接收到該對(duì)應(yīng)關(guān)系之后可以將該對(duì)應(yīng)關(guān)系寫入內(nèi)存映射單元中。

可選地,方法900還包括:網(wǎng)絡(luò)處理器更新存儲(chǔ)單元的被訪問次數(shù)。

當(dāng)然,網(wǎng)絡(luò)處理器還可以更新存儲(chǔ)器的被訪問次數(shù)。

可選地,步驟920中,網(wǎng)絡(luò)處理器根據(jù)基址和第一表項(xiàng)的索引訪問內(nèi)存塊映射信息表包括:

網(wǎng)絡(luò)處理器根據(jù)算式(1)確定的地址訪問內(nèi)存塊映射信息表;

其中,base為內(nèi)存塊映射信息表基址,entry index為第一表項(xiàng)的索引,block size為第一子表包含的表項(xiàng)的數(shù)量。

其中,符號(hào)表示向下取整,為第一子表的索引。

可選地,步驟940包括:網(wǎng)絡(luò)處理器根據(jù)算式(2)確定第一表項(xiàng)的物理地址;

real block index*block size+entry index%block size (2)

其中,real block index為存儲(chǔ)單元的索引,block size為第一子表包含的表項(xiàng)的數(shù)量,第一子表包含的表項(xiàng)的數(shù)量與存儲(chǔ)單元存儲(chǔ)的表項(xiàng)的數(shù)量相同,entry index為第一表項(xiàng)的索引。

其中,符號(hào)“%”表示取余運(yùn)算,符號(hào)“*”表示乘法運(yùn)算,(entry index%block size)為第一表項(xiàng)在第一子表中的偏移量。

下面結(jié)合圖10和圖11描述根據(jù)本發(fā)明實(shí)施例的訪問表的方法。

圖10所示為根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)器系統(tǒng)架構(gòu)示意圖。當(dāng)網(wǎng)絡(luò)處理器要訪問某個(gè)表時(shí),首先把要訪問的表的表標(biāo)識(shí)和表項(xiàng)的索引,即(tid,entry_index),發(fā)給內(nèi)存映射單元,內(nèi)存映射單元把表項(xiàng)索引轉(zhuǎn)換成真實(shí)的存儲(chǔ)器地址,然后訪問存儲(chǔ)器。同時(shí),內(nèi)存映射單元把訪問請(qǐng)求發(fā)給統(tǒng)計(jì)單元,統(tǒng)計(jì)單元對(duì)相應(yīng)存儲(chǔ)器和存儲(chǔ)單元的被訪問次數(shù)進(jìn)行計(jì)數(shù)。為了支持高性能處理能力,內(nèi)存映射單元和統(tǒng)計(jì)單元可以采用多份復(fù)制的方式,如圖10所示,比如8份復(fù)制。

內(nèi)存映射單元可以實(shí)現(xiàn)任意表的索引到存儲(chǔ)器的物理地址的轉(zhuǎn)換。如圖11所示,首先根據(jù)TID訪問內(nèi)存塊映射基址表獲得內(nèi)存塊映射信息表的基址,然后根據(jù)算式(1)得到的地址訪問內(nèi)存塊映射信息表,從內(nèi)存塊映射信息表中獲取該子表對(duì)應(yīng)的存儲(chǔ)單元的物理地址,然后根據(jù)算式(2)計(jì)算出待訪問的表項(xiàng)的物理地址。

因此,本發(fā)明實(shí)施例的處理表的方法,網(wǎng)絡(luò)處理器通過根據(jù)表項(xiàng)的索引在內(nèi)存塊映射信息表中確定表項(xiàng)的物理存儲(chǔ)地址,能夠根據(jù)表項(xiàng)的物理地址訪問表項(xiàng)。

應(yīng)理解,上述各過程的序號(hào)的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對(duì)本發(fā)明實(shí)施例的實(shí)施過程構(gòu)成任何限定。

上文詳細(xì)描述了根據(jù)本發(fā)明實(shí)施例的處理表的方法和訪問表的方法,下面詳細(xì)描述根據(jù)本發(fā)明實(shí)施例的處理表的裝置和訪問表的裝置。

圖12是根據(jù)本發(fā)明實(shí)施例的處理表的裝置1200的示意性框圖。如圖12所示,裝置1200包括處理單元1210和發(fā)送單元1220。應(yīng)理解,本發(fā)明實(shí)施例中,第一表包括多個(gè)子表,第一存儲(chǔ)器包括多個(gè)存儲(chǔ)單元,所述多個(gè)子表中包括第一子表,所述多個(gè)存儲(chǔ)單元中包括第一存儲(chǔ)單元。

處理單元1210,用于:在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中,第二存儲(chǔ)器的剩余帶寬高于第一子表被訪問時(shí)占用的帶寬,且第二存儲(chǔ)器的剩余存儲(chǔ)空間大于第一子表占用的存儲(chǔ)空間;在第一存儲(chǔ)單元中刪除第一子表。

發(fā)送單元1230,用于將所述第一子表與所述第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系發(fā)送給網(wǎng)絡(luò)處理器,以使網(wǎng)絡(luò)處理器將保存的所述第一子表與所述第一存儲(chǔ)單 元的對(duì)應(yīng)關(guān)系更新為所述第一子表與所述第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

因此,本發(fā)明實(shí)施例的處理表的裝置,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

可選地,處理單元1210具體用于:

確定第一存儲(chǔ)器占用的帶寬;

在第一存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,將第一子表存儲(chǔ)到第二存儲(chǔ)器第二存儲(chǔ)單元中。

相應(yīng)地,處理單元1210具體用于:

獲取第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);

根據(jù)每個(gè)存儲(chǔ)單元的被訪問次數(shù),從第一存儲(chǔ)器中確定第一存儲(chǔ)單元,第一存儲(chǔ)單元的被訪問頻率高于第一存儲(chǔ)器中第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;

從多個(gè)存儲(chǔ)器中確定第二存儲(chǔ)器,第二存儲(chǔ)器的剩余帶寬高于多個(gè)存儲(chǔ)器中第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余帶寬;

將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

本發(fā)明實(shí)施例中,在運(yùn)行過程中,處理器根據(jù)各存儲(chǔ)器的帶寬的實(shí)際占用情況和存儲(chǔ)單元的被訪問次數(shù)的統(tǒng)計(jì)進(jìn)行子表的搬移,能夠滿足網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬的需求。

另外,通過將被訪問頻率最高的子表搬移到有足夠剩余帶寬的存儲(chǔ)器上,能夠使得具有高帶寬的存儲(chǔ)器上存儲(chǔ)被訪問頻率高的子表,這樣能夠大大減小網(wǎng)絡(luò)處理器對(duì)高性能存儲(chǔ)器容量的需求。

可選地,處理單元1210具體用于:

獲取第一存儲(chǔ)器的剩余存儲(chǔ)空間;

在第一存儲(chǔ)器的剩余存儲(chǔ)空間小于或等于第二預(yù)設(shè)值的情況下,將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

本發(fā)明實(shí)施例中,在運(yùn)行過程中,處理器根據(jù)各存儲(chǔ)器的存儲(chǔ)空間的實(shí)際占用情況進(jìn)行子表的搬移,能夠滿足網(wǎng)絡(luò)處理器內(nèi)存容量的需求。

相應(yīng)地,處理單元1210具體用于:

確定第一存儲(chǔ)器占用的帶寬;

在第一存儲(chǔ)器占用的帶寬小于第三預(yù)設(shè)值的情況下,獲取第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);

根據(jù)每個(gè)存儲(chǔ)單元的被訪問次數(shù),確定第一存儲(chǔ)單元,第一存儲(chǔ)單元的被訪問頻率低于第一存儲(chǔ)器中第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;

從多個(gè)存儲(chǔ)器中確定第二存儲(chǔ)器,第二存儲(chǔ)器的剩余存儲(chǔ)空間高于多個(gè)存儲(chǔ)器中第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余存儲(chǔ)空間;

將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

在本發(fā)明實(shí)施例中,當(dāng)存儲(chǔ)器的帶寬占用小于第三預(yù)設(shè)值,但該存儲(chǔ)器的容量已經(jīng)接近占滿時(shí),通過把該存儲(chǔ)器上占用帶寬最小的一個(gè)或多個(gè)子表搬移到其它有較大空余容量同時(shí)帶寬滿足的存儲(chǔ)器上,能夠滿足網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求。

另外,將子表搬移到剩余存儲(chǔ)空間最大的存儲(chǔ)器中,能夠使得存儲(chǔ)資源的分配更加均衡。

可選地,處理單元1210還用于,在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器中之前,為第一子表分配第一存儲(chǔ)單元。

可選地,處理單元1210具體用于:獲取第一寫請(qǐng)求,第一寫請(qǐng)求用于請(qǐng)求對(duì)第一表的第一表項(xiàng)進(jìn)行寫操作;根據(jù)第一寫請(qǐng)求為第一子表分配第一存儲(chǔ)單元,第一子表包括第一表項(xiàng)。

可選地,處理單元1210還用于記錄第一子表與第一存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

可選地,處理單元1210還用于:

獲取第二寫請(qǐng)求,第二寫請(qǐng)求用于請(qǐng)求對(duì)第二子表的第二表項(xiàng)進(jìn)行寫操作,多個(gè)子表中還包括第二子表;

如果確定第二子表未分配存儲(chǔ)單元,則根據(jù)第二寫請(qǐng)求為第二子表分配第三存儲(chǔ)單元。

可選地,所述第一表采用哈希的方式進(jìn)行存儲(chǔ),所述第一表的表項(xiàng)的關(guān)鍵字key存儲(chǔ)在哈希桶的表項(xiàng)中。

相應(yīng)地,處理單元1210還用于:

在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的關(guān)鍵字key的數(shù)量小于第一閾值的 情況下,將待存儲(chǔ)的key存儲(chǔ)至第一哈希桶;

在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第一哈希桶和第二哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,第一哈希桶和第二哈希桶采用不同的哈希函數(shù);

在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第三哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函數(shù);

在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第三哈希桶和第四哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函數(shù),第二哈希桶和第四哈希桶采用相同的哈希函數(shù)。

本發(fā)明實(shí)施例中當(dāng)key的數(shù)量較少時(shí),能夠減少占用的內(nèi)存,并減少哈希桶訪問的次數(shù)。

可選地,如圖13所示,裝置1200還包括控制單元1230。

控制單元1230用于:

在第一哈希桶的被訪問次數(shù)與第三哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第三哈希桶,再匹配第一哈希桶;

在第二哈希桶的被訪問次數(shù)與第四哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第四哈希桶,再匹配第二哈希桶;

在第一哈希桶和第三哈希桶的被訪問次數(shù)與第二哈希桶和第四哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第二哈希桶和第四哈希桶,再匹配第一哈希桶和第三哈希桶。

在本發(fā)明實(shí)施例中,通過根據(jù)哈希桶的被訪問次數(shù)控制網(wǎng)絡(luò)處理器匹配哈希桶的順序,能夠減少哈希桶的訪問次數(shù),進(jìn)而能夠減少網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬的需求。

可選地,第一哈希桶和第三哈希桶的可以相同,第二哈希桶和第四哈希桶的大小相同。

應(yīng)理解,根據(jù)本發(fā)明實(shí)施例的處理表的裝置1200可對(duì)應(yīng)于根據(jù)本發(fā)明 實(shí)施例的處理表的方法200中的處理器,并且裝置1200的各個(gè)單元的上述和其它操作和/或功能分別為了實(shí)現(xiàn)方法200的相應(yīng)流程,為了簡潔,在此不再贅述。

因此,本發(fā)明實(shí)施例的處理表的裝置,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

圖14是根據(jù)本發(fā)明實(shí)施例的訪問表的裝置1400的示意性框圖。如圖14所示,裝置1400包括處理單元1410和訪問單元1420。

處理單元1410,用于:獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址,內(nèi)存塊映射信息表包括第一表中的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系;根據(jù)基址和第一表的第一表項(xiàng)的索引訪問內(nèi)存塊映射信息表,并根據(jù)內(nèi)存塊映射信息表確定第一表項(xiàng)所在的第一子表對(duì)應(yīng)的存儲(chǔ)單元的索引,第一子表為第一表中的任意子表;根據(jù)存儲(chǔ)單元的索引和第一表項(xiàng)的索引,確定第一表項(xiàng)的物理地址。

訪問單元1420,用于根據(jù)第一表項(xiàng)的物理地址訪問第一表項(xiàng)。

在本發(fā)明實(shí)施例中,網(wǎng)絡(luò)處理器通過根據(jù)表項(xiàng)的索引在內(nèi)存塊映射信息表中確定表項(xiàng)的物理地址,能夠根據(jù)表項(xiàng)的物理地址訪問表項(xiàng)。

可選地,處理單元1410具體用于,根據(jù)第一表的表標(biāo)識(shí)TID訪問內(nèi)存塊映射基址表,并根據(jù)所述內(nèi)存塊映射基址表確定所述內(nèi)存儲(chǔ)塊映射信息表的基址。

可選地,如圖15所示,裝置1400還可以包括:接收單元1430,用于在處理單元1410獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址之前,接收處理器發(fā)送的第一表中的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

可選地,處理單元1410還用于更新存儲(chǔ)單元的被訪問次數(shù)。

可選地,處理單元1410具體用于:根據(jù)算式(1)確定的地址訪問內(nèi)存塊映射信息表,

其中,base為基址,entry index為第一表項(xiàng)的索引,block size為第一子表包含的表項(xiàng)的數(shù)量。

可選地,處理單元1410具體用于:根據(jù)算式(2)確定第一表項(xiàng)的物理 地址,

real block index*block size+entry index%block size (2)

其中,real block index為存儲(chǔ)單元的索引,block size為第一子表包含的的表項(xiàng)的數(shù)量,第一子表包含的表項(xiàng)的數(shù)量與存儲(chǔ)單元存儲(chǔ)的表項(xiàng)的數(shù)量相同,entry index為第一表項(xiàng)的索引。

應(yīng)理解,根據(jù)本發(fā)明實(shí)施例訪問表的裝置1400可對(duì)應(yīng)于根據(jù)本發(fā)明實(shí)施例的訪問表的方法900中的網(wǎng)絡(luò)處理器,并且裝置1400的各個(gè)單元的上述和其它操作和/或功能分別為了實(shí)現(xiàn)方法900的相應(yīng)流程,為了簡潔,在此不再贅述。

在本發(fā)明實(shí)施例中,網(wǎng)絡(luò)處理器通過根據(jù)表項(xiàng)的索引在內(nèi)存塊映射信息表中確定表項(xiàng)的物理地址,能夠根據(jù)表項(xiàng)的物理地址訪問表項(xiàng)。

本發(fā)明實(shí)施例還提供了一種處理表的裝置1600。如圖16所示,該裝置1600包括處理器1610、存儲(chǔ)器1620、總線系統(tǒng)1630和發(fā)送器1640。其中,處理器1610、存儲(chǔ)器1620和發(fā)送器1640通過總線系統(tǒng)1630相連,該存儲(chǔ)器1620用于存儲(chǔ)指令,該處理器1610用于執(zhí)行該存儲(chǔ)器1620存儲(chǔ)的指令。

存儲(chǔ)器1620還用于存儲(chǔ)子表。存儲(chǔ)器1620包括第一存儲(chǔ)器和第二存儲(chǔ)器。第一存儲(chǔ)器和第二存儲(chǔ)器分別包括多個(gè)存儲(chǔ)單元,一個(gè)存儲(chǔ)單元用于存儲(chǔ)一個(gè)子表。

處理器1610用于:用于在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)器的第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中,第二存儲(chǔ)器的剩余帶寬高于第一子表被訪問時(shí)占用的帶寬,且第二存儲(chǔ)器的剩余存儲(chǔ)空間大于第一子表占用的存儲(chǔ)空間;在第一存儲(chǔ)單元中刪除第一子表。

發(fā)送器1640用于將第一子表與第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系發(fā)送給網(wǎng)絡(luò)處理器,以使網(wǎng)絡(luò)處理器將保存的第一子表與第一存儲(chǔ)單元的對(duì)應(yīng)關(guān)系更新為第一子表與第二存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

因此,本發(fā)明實(shí)施例的處理表的裝置,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

應(yīng)理解,在本發(fā)明實(shí)施例中,該處理器1610可以是中央處理單元(Central Processing Unit,簡稱CPU),該處理器1610還可以是其他通用處理器、數(shù)字信號(hào)處理器(Digital Signal Processing,簡稱DSP)、專用集成電路(Application Specific Integrated Circuit,簡稱ASIC)、現(xiàn)場可編程門陣列(Field-Programmable Gate Array,簡稱FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件等。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。

該存儲(chǔ)器1620可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器1610提供指令和數(shù)據(jù)。存儲(chǔ)器1620的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器。例如,存儲(chǔ)器1620還可以存儲(chǔ)設(shè)備類型的信息。

該總線系統(tǒng)1630除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號(hào)總線等。但是為了清楚說明起見,在圖中將各種總線都標(biāo)為總線系統(tǒng)1630。

在實(shí)現(xiàn)過程中,上述方法的各步驟可以通過處理器1610中的硬件的集成邏輯電路或者軟件形式的指令完成。結(jié)合本發(fā)明實(shí)施例所公開的方法的步驟可以直接體現(xiàn)為硬件處理器執(zhí)行完成,或者用處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機(jī)存儲(chǔ)器、閃存、只讀存儲(chǔ)器、可編程只讀存儲(chǔ)器或者電可擦寫可編程存儲(chǔ)器、寄存器等本領(lǐng)域成熟的存儲(chǔ)介質(zhì)中。該存儲(chǔ)介質(zhì)位于存儲(chǔ)器1620,處理器1610讀取存儲(chǔ)器1620中的信息,結(jié)合其硬件完成上述方法的步驟。為避免重復(fù),這里不再詳細(xì)描述。

可選地,處理器1610具體用于:

確定第一存儲(chǔ)器占用的帶寬;

在第一存儲(chǔ)器占用的帶寬大于或等于第一預(yù)設(shè)值的情況下,將第一子表存儲(chǔ)到第二存儲(chǔ)器中。

相應(yīng)地,處理器1610具體用于:

獲取第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);

根據(jù)每個(gè)存儲(chǔ)單元的被訪問次數(shù),從第一存儲(chǔ)器中確定第一存儲(chǔ)單元,第一存儲(chǔ)單元的被訪問頻率高于第一存儲(chǔ)器中第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;

從多個(gè)存儲(chǔ)器中確定第二存儲(chǔ)器,第二存儲(chǔ)器的剩余帶寬高于多個(gè)存儲(chǔ)器中第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余帶寬;

將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

本發(fā)明實(shí)施例中,在運(yùn)行過程中,處理器根據(jù)各存儲(chǔ)器的帶寬的實(shí)際占用情況和存儲(chǔ)單元的被訪問次數(shù)的統(tǒng)計(jì)進(jìn)行子表的搬移,能夠滿足網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬的需求。

另外,通過將被訪問頻率最高的子表搬移到有足夠剩余帶寬的存儲(chǔ)器上,能夠使得具有高帶寬的存儲(chǔ)器上存儲(chǔ)被訪問頻率高的子表,這樣能夠大大減小網(wǎng)絡(luò)處理器對(duì)高性能存儲(chǔ)器容量的需求。

可選地,處理器1610還可以具體用于:

獲取第一存儲(chǔ)器的剩余存儲(chǔ)空間;

在第一存儲(chǔ)器的剩余存儲(chǔ)空間小于或等于第二預(yù)設(shè)值的情況下,將第一子表存儲(chǔ)到第二存儲(chǔ)器中。

本發(fā)明實(shí)施例中,在運(yùn)行過程中,處理器根據(jù)各存儲(chǔ)器的存儲(chǔ)空間的實(shí)際占用情況進(jìn)行子表的搬移,能夠滿足網(wǎng)絡(luò)處理器內(nèi)存容量的需求。

相應(yīng)地,處理器1610具體用于:

確定第一存儲(chǔ)器占用的帶寬;

在第一存儲(chǔ)器占用的帶寬小于第三預(yù)設(shè)值的情況下,獲取第一存儲(chǔ)器中每個(gè)存儲(chǔ)單元的被訪問次數(shù);

根據(jù)每個(gè)存儲(chǔ)單元的被訪問次數(shù),確定第一存儲(chǔ)單元,第一存儲(chǔ)單元的被訪問頻率低于第一存儲(chǔ)器中第一存儲(chǔ)單元之外的其他存儲(chǔ)單元的被訪問頻率;

從多個(gè)存儲(chǔ)器中確定第二存儲(chǔ)器,第二存儲(chǔ)器的剩余存儲(chǔ)空間高于多個(gè)存儲(chǔ)器中第二存儲(chǔ)器之外的其他存儲(chǔ)器的剩余存儲(chǔ)空間;

將第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中。

在本發(fā)明實(shí)施例中,當(dāng)存儲(chǔ)器的帶寬占用小于第三預(yù)設(shè)值,但該存儲(chǔ)器的容量已經(jīng)接近占滿時(shí),通過把該存儲(chǔ)器上占用帶寬最小的一個(gè)或多個(gè)子表搬移到其它有較大空余容量同時(shí)帶寬滿足的存儲(chǔ)器上,能夠滿足網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求。

另外,將子表搬移到剩余存儲(chǔ)空間最大的存儲(chǔ)器中,能夠使得存儲(chǔ)資源的分配更加均衡。

可選地,處理器1610還用于,在第一存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將已存儲(chǔ)在第一存儲(chǔ)器的第一存儲(chǔ)單元中的第一子表存儲(chǔ)到第二存儲(chǔ)器的第二存儲(chǔ)單元中之前,為第一子表分配第一存儲(chǔ)單元。

相應(yīng)地,處理器1610具體用于:獲取第一寫請(qǐng)求,第一寫請(qǐng)求用于請(qǐng)求對(duì)第一表的第一表項(xiàng)進(jìn)行寫操作;根據(jù)第一寫請(qǐng)求為第一子表分配第一存儲(chǔ)單元,第一子表包括第一表項(xiàng)。

可選地,存儲(chǔ)器1620還用于存儲(chǔ)第一子表與第一存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

可選地,處理器1610還用于:

獲取第二寫請(qǐng)求,第二寫請(qǐng)求用于請(qǐng)求對(duì)第二子表的第二表項(xiàng)進(jìn)行寫操作,多個(gè)子表中還包括第二子表;

確定第二子表未分配存儲(chǔ)單元,則根據(jù)第二寫請(qǐng)求為第二子表分配第三存儲(chǔ)單元。

可選地,第一表采用哈希的方式進(jìn)行存儲(chǔ),第一表的表項(xiàng)的關(guān)鍵字key存儲(chǔ)在哈希桶的表項(xiàng)中。

相應(yīng)地,處理單元1610還用于:

在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的關(guān)鍵字key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第一哈希桶;

在第一哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第一哈希桶和第二哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,第一哈希桶和第二哈希桶采用不同的哈希函數(shù);

在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中已存儲(chǔ)的key的數(shù)量小于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第三哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函數(shù);

在第一哈希桶和第二哈希桶的表項(xiàng)已滿,且第三哈希桶的每個(gè)表項(xiàng)中的key的數(shù)量大于或等于第一閾值的情況下,將待存儲(chǔ)的key存儲(chǔ)至第三哈希桶和第四哈希桶中已存儲(chǔ)的key的數(shù)量較少的哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函數(shù),第二哈希桶和第四哈希桶采用相同的哈希函數(shù)。

本發(fā)明實(shí)施例中,當(dāng)key的數(shù)量較少時(shí),能夠大大減少占用的內(nèi)存,并減少哈希桶訪問的次數(shù)。

可選地,處理器1610還用于:

在第一哈希桶的被訪問次數(shù)與第三哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第三哈希桶,再匹配第一哈希桶;

在第二哈希桶的被訪問次數(shù)與第四哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第四哈希桶,再匹配第二哈希桶;

在第一哈希桶和第三哈希桶的被訪問次數(shù)與第二哈希桶和第四哈希桶的被訪問次數(shù)的比值小于或等于第二閾值的情況下,控制網(wǎng)絡(luò)處理器先匹配第二哈希桶和第四哈希桶,再匹配第一哈希桶和第三哈希桶。

在本發(fā)明實(shí)施例中,通過根據(jù)哈希桶的被訪問次數(shù)控制網(wǎng)絡(luò)處理器匹配哈希桶的順序,能夠減少哈希桶的訪問次數(shù),進(jìn)而能夠減少網(wǎng)絡(luò)處理器對(duì)內(nèi)存帶寬的需求。

可選地,第一哈希桶和第三哈希桶的大小相同,第二哈希桶和第四哈希桶的大小相同。

應(yīng)理解,根據(jù)本發(fā)明實(shí)施例的處理表的裝置1600可對(duì)應(yīng)于根據(jù)本發(fā)明實(shí)施例的處理表的方法200中的處理器以及根據(jù)本發(fā)明實(shí)施例的處理表的裝置1200,并且裝置1600的各個(gè)單元的上述和其它操作和/或功能分別為了實(shí)現(xiàn)方法200的相應(yīng)流程,為了簡潔,在此不再贅述。

因此,本發(fā)明實(shí)施例的處理表的裝置,通過在存儲(chǔ)器的運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)條件的情況下,將部分存儲(chǔ)在該存儲(chǔ)器的存儲(chǔ)單元中的子表搬移到有足夠剩余帶寬和存儲(chǔ)空間的其他存儲(chǔ)器中,能夠減小高性能網(wǎng)絡(luò)處理器對(duì)高帶寬內(nèi)存的容量需求,使下一代高性能網(wǎng)絡(luò)處理器容易實(shí)現(xiàn)。

圖17是根據(jù)本發(fā)明實(shí)施例的訪問表的裝置1700的示意性框圖。如圖17所示,裝置1700包括處理器1710、存儲(chǔ)器1720和總線系統(tǒng)1730。其中,處理器1710和存儲(chǔ)器1720通過總線系統(tǒng)1730相連,該存儲(chǔ)器1720用于存儲(chǔ)指令,該處理器1710用于執(zhí)行該存儲(chǔ)器1720存儲(chǔ)的指令。

存儲(chǔ)器1720還可以用于存儲(chǔ)子表。存儲(chǔ)器1720包括多個(gè)存儲(chǔ)單元,其中一個(gè)存儲(chǔ)單元用于存儲(chǔ)一個(gè)子表。

處理器1710具體用于:

獲取第一表對(duì)應(yīng)的內(nèi)存塊映射信息表的基址,內(nèi)存塊映射信息表包括第一表中的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系;

根據(jù)基址和第一表的第一表項(xiàng)的索引訪問內(nèi)存塊映射信息表,并根據(jù)內(nèi)存塊映射信息表確定第一表項(xiàng)所在的第一子表對(duì)應(yīng)的存儲(chǔ)單元的索引,第一子表為第一表中的任意子表;

根據(jù)存儲(chǔ)單元的索引和第一表項(xiàng)的索引,確定第一表項(xiàng)的物理地址;

根據(jù)第一表項(xiàng)的物理地址訪問第一表項(xiàng)。

在本發(fā)明實(shí)施例中,網(wǎng)絡(luò)處理器通過根據(jù)表項(xiàng)的索引在內(nèi)存塊映射信息表中確定表項(xiàng)的物理地址,能夠根據(jù)表項(xiàng)的物理地址訪問表項(xiàng)。

應(yīng)理解,在本發(fā)明實(shí)施例中,該處理器1710可以是中央處理單元(Central Processing Unit,簡稱CPU),該處理器1710還可以是其他通用處理器、數(shù)字信號(hào)處理器(Digital Signal Processing,簡稱DSP)、專用集成電路(Application Specific Integrated Circuit,簡稱ASIC)、現(xiàn)場可編程門陣列(Field-Programmable Gate Array,簡稱FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件等。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。

該存儲(chǔ)器1720可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器1710提供指令和數(shù)據(jù)。存儲(chǔ)器1720的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器。例如,存儲(chǔ)器1720還可以存儲(chǔ)設(shè)備類型的信息。

該總線系統(tǒng)1730除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號(hào)總線等。但是為了清楚說明起見,在圖中將各種總線都標(biāo)為總線系統(tǒng)1730。

在實(shí)現(xiàn)過程中,上述方法的各步驟可以通過處理器1710中的硬件的集成邏輯電路或者軟件形式的指令完成。結(jié)合本發(fā)明實(shí)施例所公開的方法的步驟可以直接體現(xiàn)為硬件處理器執(zhí)行完成,或者用處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機(jī)存儲(chǔ)器、閃存、只讀存儲(chǔ)器、可編程只讀存儲(chǔ)器或者電可擦寫可編程存儲(chǔ)器、寄存器等本領(lǐng)域成熟的存儲(chǔ)介質(zhì)中。該存儲(chǔ)介質(zhì)位于存儲(chǔ)器1720,處理器1710讀取存儲(chǔ)器1720中的信息,結(jié)合其硬件完成上述方法的步驟。為避免重復(fù),這里不再詳細(xì)描述。

可選地,處理器1710還用于更新存儲(chǔ)單元的被訪問次數(shù)。

可選地,裝置1700還可以包括:接收器1740,通過總線系統(tǒng)1730與處理器1710、存儲(chǔ)器1720相連。接收器1740用于在處理器1710獲取內(nèi)存塊映射基址表的基址之前,接收控制面的處理器發(fā)送的第一表的各個(gè)子表與存儲(chǔ)單元的對(duì)應(yīng)關(guān)系。

可選地,處理器1710具體用于根據(jù)算式(1)確定的地址訪問內(nèi)存塊映射信息表;

其中,base為基址,entry index為第一表項(xiàng)的索引,block size為第一子表包含的表項(xiàng)的數(shù)量。

可選地,處理器1710具體用于:根據(jù)算式(2)確定第一表項(xiàng)的物理地址;

real block index*block size+entry index%block size (2)

其中,real block index為存儲(chǔ)單元的索引,block size為第一子表包含的表項(xiàng)的數(shù)量,第一子表包含的表項(xiàng)的數(shù)量與存儲(chǔ)單元存儲(chǔ)的表項(xiàng)的數(shù)量相同,entry index為第一表項(xiàng)的索引。

應(yīng)理解,根據(jù)本發(fā)明實(shí)施例的訪問表的裝置1700可對(duì)應(yīng)于根據(jù)本發(fā)明實(shí)施例的訪問表的方法900中的網(wǎng)絡(luò)處理器和根據(jù)本發(fā)明實(shí)施例的訪問表的裝置1400,并且裝置1700中的各個(gè)單元的上述和其它操作和/或功能分別為了實(shí)現(xiàn)方法900的相應(yīng)流程,為了簡潔,在此不再贅述。

在本發(fā)明實(shí)施例中,網(wǎng)絡(luò)處理器通過根據(jù)表項(xiàng)的索引在內(nèi)存塊映射信息表中確定表項(xiàng)的物理地址,能夠根據(jù)表項(xiàng)的物理地址訪問表項(xiàng)。

本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。

所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。

在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作 為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。

另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。

所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(Read-Only Memory簡稱ROM)、隨機(jī)存取存儲(chǔ)器(Random Access Memory,簡稱RAM)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
洱源县| 邳州市| 通州区| 芒康县| 泾阳县| 南川市| 洛阳市| 台东县| 壶关县| 肇东市| 长阳| 巴林左旗| 博白县| 中阳县| 吴江市| 惠安县| 永清县| 富顺县| 博白县| 客服| 宜良县| 孟州市| 吐鲁番市| 金阳县| 陆河县| 临泽县| 鄯善县| 泸州市| 哈密市| 台山市| 永吉县| 南昌市| 定边县| 呼伦贝尔市| 渭源县| 若尔盖县| 凤翔县| 长武县| 南通市| 托克逊县| 长寿区|