專(zhuān)利名稱(chēng):表項(xiàng)添加方法及裝置和表項(xiàng)處理方法、裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實(shí)施例涉及通信技術(shù)領(lǐng)域,特別是一種表項(xiàng)添加方法及裝置和表項(xiàng)處理方
法、裝置及系統(tǒng)。
背景技術(shù):
哈希(Hash)運(yùn)算是精確匹配查找的核心算法。哈希運(yùn)算是使用特定的哈希函數(shù) 將某一關(guān)鍵字的內(nèi)容存入特定地址內(nèi)的存儲(chǔ)方法,在精確匹配查找中有廣泛的應(yīng)用。當(dāng)用 戶(hù)向存儲(chǔ)器中添加某一表項(xiàng)時(shí),通過(guò)函數(shù)f(Key) = h對(duì)該信息的關(guān)鍵字Key進(jìn)行哈希運(yùn) 算,其中f()是特定的哈希函數(shù),Key是需要存儲(chǔ)表項(xiàng)的關(guān)鍵字,h是需要存儲(chǔ)的表項(xiàng)的哈希 地址,該地址對(duì)應(yīng)存儲(chǔ)空間的第h個(gè)位置(slot),把該Key值和該Key值對(duì)應(yīng)的信息都存入 該哈希地址h。查找時(shí),對(duì)Key值進(jìn)行哈希運(yùn)算獲取相應(yīng)的哈希地址h就可以取得需要的 信息。但添加信息時(shí),若對(duì)兩個(gè)Key值進(jìn)行哈希運(yùn)算得到同樣的哈希地址值,例如f (Keyl) =f(Key2) = M,則兩條信息可能需要存入同一個(gè)哈希地址M中,因此可能產(chǎn)生哈希沖突。
現(xiàn)有技術(shù)通過(guò)軟件解決哈希沖突的方法,例如鏈表存儲(chǔ)法,是在添加表項(xiàng)時(shí)把經(jīng) 過(guò)哈希運(yùn)算后,將表項(xiàng)存入一個(gè)鏈表中,如果出現(xiàn)沖突,則可以將沖突的表項(xiàng)存入該鏈表中 的下一個(gè)空位,查找表項(xiàng)時(shí),通過(guò)哈希運(yùn)算查找到該表項(xiàng)對(duì)應(yīng)的鏈表,然后遍歷鏈表,然后 得到查找結(jié)果。這種方法遍歷鏈表的速度決定了查找的速度?,F(xiàn)有技術(shù)通過(guò)硬件解決哈 希沖突的方法,例如在添加表項(xiàng)時(shí),將經(jīng)過(guò)哈希計(jì)算后沖突的表項(xiàng)存入硬件隨機(jī)存儲(chǔ)器 (RandomAccess Memory ;以下簡(jiǎn)稱(chēng)RAM)的桶(類(lèi)似于軟件中的鏈表),在查找表項(xiàng)時(shí),讀 取哈希運(yùn)算得到的哈希值對(duì)應(yīng)的桶內(nèi)的表項(xiàng)(類(lèi)似于遍歷鏈表),然后將要查找的表項(xiàng)與 讀出的表項(xiàng)一一比對(duì),得到查找結(jié)果,這種方法讀取RAM的桶內(nèi)表項(xiàng)的速度決定了查找運(yùn) 算的效率,而RAM的桶內(nèi)表項(xiàng)越多,讀取的速度越慢。圖l為經(jīng)過(guò)哈希運(yùn)算的表項(xiàng)在RAM中 的存儲(chǔ)方式,如圖l所示,Barrel表示桶,Key表示表項(xiàng),Index表示Key對(duì)應(yīng)的索引;Key x(y)表示編號(hào)為x的桶里內(nèi)的編號(hào)為y的表項(xiàng)。RAM根據(jù)查找表項(xiàng)的哈希值劃分為不同的 桶(類(lèi)似于軟件中的鏈表)。首先把RAM劃分為若干個(gè)桶,例如m個(gè)桶,每個(gè)桶對(duì)應(yīng)一個(gè)固 定的地址。根據(jù)桶的容量和表項(xiàng)的長(zhǎng)短確定每個(gè)桶可以存儲(chǔ)的表項(xiàng)個(gè)數(shù),例如n。添加表項(xiàng) 時(shí),采用哈希函數(shù)對(duì)下發(fā)添加的Key進(jìn)行哈希運(yùn)算得到一個(gè)桶地址,根據(jù)這個(gè)桶地址找到 對(duì)應(yīng)的桶,再將表項(xiàng)寫(xiě)入該桶內(nèi)空閑的位置;查找表項(xiàng)時(shí),采用添加表項(xiàng)時(shí)的同一個(gè)哈希函 數(shù)對(duì)下發(fā)查找的Key進(jìn)行哈希運(yùn)算后得到桶地址,根據(jù)桶地址找到對(duì)應(yīng)的桶,將桶內(nèi)所有 表項(xiàng)讀出,將讀出的表項(xiàng)與下發(fā)查找的Key—一比對(duì),如果有與Key相同的表項(xiàng),則把該Key 對(duì)應(yīng)的桶內(nèi)的索引(Index)返回,認(rèn)為查找命中;如果沒(méi)有與Key相同的表項(xiàng),則認(rèn)為沒(méi)有 匹配表項(xiàng),返回查找未命中。其中哈希算法有很多種,這里僅泛指其中某一種,具體采用何 種算法還需根據(jù)具體設(shè)計(jì)進(jìn)行選擇。 由于RAM資源的有限性,在桶的個(gè)數(shù)m固定的情況下,桶的深度即每個(gè)桶內(nèi)表項(xiàng)的 個(gè)數(shù)n也有相應(yīng)的上限,即n值不可能是無(wú)限大或者是足夠大,存在桶滿(mǎn)的時(shí)候。哈希算 法不是一個(gè)完美的算法,它是一個(gè)多對(duì)少的映射關(guān)系的函數(shù)抽象,即多個(gè)不同表項(xiàng)的哈希地址值可能是相同的,可能存在大于桶容量的n個(gè)表項(xiàng)經(jīng)過(guò)哈希運(yùn)算后需要存儲(chǔ)到同一個(gè)
桶內(nèi),若該桶已滿(mǎn),再往這個(gè)桶內(nèi)添加表項(xiàng)就會(huì)出現(xiàn)沖突。這種沖突與所采用的哈希算法、
RAM資源的大小以及表項(xiàng)結(jié)構(gòu)的分布都有關(guān)系。現(xiàn)有技術(shù)在哈希算法和表項(xiàng)結(jié)構(gòu)確定的情
況下,采用RAM進(jìn)行存儲(chǔ),可以通過(guò)增加桶深即RAM資源來(lái)減小發(fā)生沖突的概率,但卻不能
完全避免沖突的發(fā)生,從而限制了 RAM中的表項(xiàng)的容量。 在實(shí)現(xiàn)本發(fā)明過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問(wèn)題 由于RAM資源和RAM中因桶滿(mǎn)而發(fā)生沖突的概率相關(guān),RAM桶深越大,每個(gè)桶中可
以存儲(chǔ)的表項(xiàng)越多,發(fā)生沖突的概率就越小,但RAM桶深越大需要的RAM資源就越大。因此,
如果采用增加RAM資源的方法減小沖突概率,會(huì)浪費(fèi)存儲(chǔ)空間、增加成本和降低查找速度。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種表項(xiàng)添加方法及裝置和表項(xiàng)處理方法、裝置及系統(tǒng),在成 功添加、查找表項(xiàng)的同時(shí),節(jié)約RAM存儲(chǔ)空間,降低成本,提高查找速度。
本發(fā)明實(shí)施例提供一種表項(xiàng)添加方法,包括 接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索 引; 查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一
關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。 本發(fā)明實(shí)施例又提供一種表項(xiàng)處理方法,包括 接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索 引; 查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一 關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM ; 接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所述第一關(guān)鍵字;
查找所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。
本發(fā)明實(shí)施例提供一種表項(xiàng)添加裝置,包括 第一接收模塊,用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表 項(xiàng)的第一關(guān)鍵字和索引; 添加模塊,用于查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已 滿(mǎn),則將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。
本發(fā)明實(shí)施例又提供一種表項(xiàng)處理裝置,包括 第一接收模塊,用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表 項(xiàng)的第一關(guān)鍵字和索引; 添加模塊,用于查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已 滿(mǎn),將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM ; 第二接收模塊,用于接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所 述第一關(guān)鍵字; 返回模塊,用于查找所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的 表項(xiàng)的索引。
本發(fā)明實(shí)施例還提供一種表項(xiàng)處理系統(tǒng),包括 算法引擎、隨機(jī)存儲(chǔ)器RAM和三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM ; 所述算法引擎,用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表 項(xiàng)的第一關(guān)鍵字和索引;查詢(xún)?cè)摰谝魂P(guān)鍵字在所述RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所 述第一關(guān)鍵字和索引添加進(jìn)所述TCAM。 本發(fā)明實(shí)施例提供一種表項(xiàng)添加方法及裝置和表項(xiàng)處理方法、裝置及系統(tǒng),將RAM 中因桶滿(mǎn)而發(fā)生沖突的表項(xiàng)添加進(jìn)TCAM,避免了表項(xiàng)的沖突,保證所有表項(xiàng)都能夠添加成 功;無(wú)需增加RAM容量,因此節(jié)約了 RAM資源,且在RAM資源固定的情況下,擴(kuò)展了的可以存 儲(chǔ)的表項(xiàng)容量。
圖1為經(jīng)過(guò)哈希運(yùn)算的表項(xiàng)在RAM中的存儲(chǔ)方式; 圖2為本發(fā)明下發(fā)指令的系統(tǒng)的結(jié)構(gòu)示意圖; 圖3為本發(fā)明表項(xiàng)添加方法實(shí)施例的流程圖; 圖4為本發(fā)明表項(xiàng)處理方法第一實(shí)施例的流程圖; 圖5為本發(fā)明表項(xiàng)處理方法第二實(shí)施例的流程圖; 圖6為本發(fā)明表項(xiàng)添加裝置實(shí)施例的示意圖; 圖7為本發(fā)明表項(xiàng)處理裝置實(shí)施例的示意圖; 圖8為本發(fā)明表項(xiàng)處理系統(tǒng)實(shí)施例的示意圖。
具體實(shí)施例方式
下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
根據(jù)RAM資源空間的容量(M),每條表項(xiàng)的占用的空間量(N),可以計(jì)算出RAM的 表項(xiàng)容量(S),計(jì)算公式為S = M/N,然后對(duì)S取整或湊整。其中對(duì)S湊整的含義是將M/N 余出的容量盡量平均分配到表項(xiàng)對(duì)應(yīng)的空間中,使S保持為整數(shù),例如當(dāng)M為128位且N為 60位時(shí)S為2,則可以將剩余的8位平均分到2條表項(xiàng)中,每條表項(xiàng)在RAM中對(duì)應(yīng)的空間為 N+4 = 64位,60位存儲(chǔ)表項(xiàng),4位為空。由于在RAM中無(wú)法進(jìn)行快速查找,必須通過(guò)哈希運(yùn) 算將表項(xiàng)映射到不同的桶(RAM中指定的存儲(chǔ)空間),從而縮小查找范圍以提高查找速率, 這樣就會(huì)有數(shù)目大于單個(gè)桶容量的多個(gè)表項(xiàng)出現(xiàn)哈希值相同的情況,由于哈希值相同會(huì)導(dǎo) 致哈希值對(duì)應(yīng)的桶內(nèi)存不下所有表項(xiàng)的情況,這就是哈希沖突。根據(jù)所采用的桶的深度(d) 即桶的容量、桶的個(gè)數(shù)(m)、表項(xiàng)的結(jié)構(gòu)和哈希算法可以計(jì)算出的表項(xiàng)的沖突概率(n),使 n低于設(shè)計(jì)可以接受的上限,從而確定m和d的關(guān)系以保證具有相同哈希值的表項(xiàng)有相對(duì) 充足的空間可以存儲(chǔ)。桶的個(gè)數(shù)(m)的計(jì)算公式m二S/d,計(jì)算結(jié)果m取整。然而由于沖 突依然存在,不能保證所有表項(xiàng)都能夠存儲(chǔ)到桶內(nèi),其中桶的容量表示桶內(nèi)可以存儲(chǔ)的表 項(xiàng)的數(shù)目,桶的個(gè)數(shù)表示RAM中可以容納的桶的數(shù)目。 本發(fā)明實(shí)施例采用三態(tài)內(nèi)容尋址存儲(chǔ)器(Ternary Content AddressableMemory ; 以下簡(jiǎn)稱(chēng)TCAM)存儲(chǔ)這些RAM中由于桶滿(mǎn)發(fā)生沖突而不能創(chuàng)建的表項(xiàng),用于補(bǔ)償RAM資 源。圖2為本發(fā)明下發(fā)指令的系統(tǒng)的結(jié)構(gòu)示意圖,如圖2所示,轉(zhuǎn)發(fā)引擎1的下發(fā)指令 經(jīng)過(guò)算法引擎2解析,如果轉(zhuǎn)發(fā)引擎1下發(fā)指令是建表指令即表項(xiàng)添加請(qǐng)求,則判斷是創(chuàng)建到隨機(jī)存儲(chǔ)器(RAM) 17中還是創(chuàng)建到三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM)19中,其中RAM 可以為片外雙倍速內(nèi)存/新型的動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Double Data Rate/ReducedLatency Dynamic Random-Access Memory ;以下簡(jiǎn)稱(chēng)DDR/RLDRAM)或片內(nèi)同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ) 器(Synchronous Dynamic Random AccessMemory ;以下簡(jiǎn)稱(chēng)SDRAM)。如果下發(fā)指令是 查找指令即表項(xiàng)查找請(qǐng)求,則查找TCAM和/或RAM。本發(fā)明實(shí)施例以現(xiàn)場(chǎng)可編程門(mén)陣列 (Field-Programmable Gate Array ;以下簡(jiǎn)稱(chēng)FPGA)硬件算法進(jìn)行精確匹配查找。
圖3為本發(fā)明表項(xiàng)添加方法實(shí)施例的流程圖,如圖3所示,該表項(xiàng)添加方法包括以 下步驟 步驟101、接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān) 鍵字和索引。 用戶(hù)對(duì)隨機(jī)存儲(chǔ)器RAM中的記錄進(jìn)行更新或存儲(chǔ)時(shí),將要添加的新記錄即表項(xiàng)發(fā) 送給RAM,該過(guò)程可以通過(guò)發(fā)送表項(xiàng)添加請(qǐng)求來(lái)實(shí)現(xiàn),該表項(xiàng)添加請(qǐng)求中攜帶需要添加的表 項(xiàng)的第一關(guān)鍵字Keyl和索引Index。算法引擎接收該表項(xiàng)添加請(qǐng)求后,對(duì)表項(xiàng)添加請(qǐng)求中 請(qǐng)求添加的表項(xiàng)進(jìn)行處理。 步驟102、查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將 所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。 其中算法引擎根據(jù)該請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字可以獲取該第一關(guān)鍵字在該 RAM中對(duì)應(yīng)的桶地址。例如采用某個(gè)設(shè)定的哈希函數(shù)f (Keyl) = X對(duì)該Keyl進(jìn)行哈希運(yùn) 算,則以哈希值即哈希運(yùn)算值X為該表項(xiàng)在RAM中對(duì)應(yīng)的桶地址。假設(shè)X對(duì)應(yīng)的桶內(nèi)可以 存儲(chǔ)a條表項(xiàng),若此時(shí)已經(jīng)存儲(chǔ)了 a條表項(xiàng)則表示該第一關(guān)鍵字對(duì)應(yīng)的桶已滿(mǎn),若此時(shí)已經(jīng) 存儲(chǔ)的表項(xiàng)少于a條,則表示該第一關(guān)鍵字對(duì)應(yīng)的桶未滿(mǎn)。若X對(duì)應(yīng)的桶未滿(mǎn),則算法引擎 將第一關(guān)鍵字和索引添加進(jìn)該桶內(nèi)的空閑位置;若X對(duì)應(yīng)的桶已滿(mǎn),則算法引擎將請(qǐng)求添 加的表項(xiàng)的第一關(guān)鍵字和索引添加進(jìn)TCAM。 算法引擎返回此次添加過(guò)程的是否成功的添加結(jié)果消息,TCAM只要滿(mǎn)足設(shè)計(jì)規(guī) 格,容量可以不受限制,可以保證表項(xiàng)的成功添加。TCAM在查找時(shí)可以使用關(guān)鍵字進(jìn)行查 找。若請(qǐng)求添加的表項(xiàng)被添加進(jìn)TCAM,在查找過(guò)程中,算法引擎則可以根據(jù)該第一關(guān)鍵字 Keyl的值既訪問(wèn)RAM又訪問(wèn)TCAM,就可以查找到該表項(xiàng)。 本實(shí)施例將RAM因桶滿(mǎn)而發(fā)生沖突的表項(xiàng)添加進(jìn)TCAM,保證所有表項(xiàng)都能夠添加 成功;且無(wú)需增加RAM容量,因此節(jié)約了 RAM資源,并在RAM資源固定的情況下擴(kuò)展了可存 儲(chǔ)的表項(xiàng)容量。 圖4為本發(fā)明表項(xiàng)處理方法第一實(shí)施例的流程圖,如圖4所示,在本發(fā)明表項(xiàng)添加 方法實(shí)施例的基礎(chǔ)上,該表項(xiàng)處理方法包括以下步驟 步驟201、接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān) 鍵字和索引。 算法引擎接收用戶(hù)發(fā)送的表項(xiàng)添加請(qǐng)求后,對(duì)表項(xiàng)添加請(qǐng)求中請(qǐng)求添加的表項(xiàng)進(jìn) 行處理。 步驟202、查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將 所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。 算法引擎對(duì)該請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字進(jìn)行哈希運(yùn)算,可以獲取該第一關(guān)鍵字在該RAM中對(duì)應(yīng)的桶地址。若該桶地址對(duì)應(yīng)的桶未滿(mǎn),則算法引擎將第一關(guān)鍵字和索引 添加進(jìn)該桶內(nèi)的空閑位置;若該桶地址對(duì)應(yīng)的桶已滿(mǎn),則算法引擎將請(qǐng)求添加的表項(xiàng)的第 一關(guān)鍵字和索引添加進(jìn)TCAM。具體地,將所述第一關(guān)鍵字和索引添加進(jìn)RAM或TCAM的方法 可以參照本發(fā)明表項(xiàng)添加方法實(shí)施例中的描述,在此不再贅述。 步驟203、接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所述第一關(guān)鍵字。 根據(jù)步驟201和202進(jìn)行表項(xiàng)添加后,算法引擎可以將RAM中桶已滿(mǎn)時(shí)請(qǐng)求添加
的表項(xiàng)添加進(jìn)TCAM。在進(jìn)行快速精確匹配查找時(shí),算法引擎接收到表項(xiàng)查找請(qǐng)求后,可以根
據(jù)該表項(xiàng)查詢(xún)請(qǐng)求中攜帶的第一關(guān)鍵字Keyl對(duì)RAM和TCAM進(jìn)行訪問(wèn)。 步驟204、查找所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。 算法引擎若在RAM中桶已滿(mǎn)時(shí)將請(qǐng)求添加的表項(xiàng)添加進(jìn)TCAM,則在進(jìn)行快速精確 匹配查找時(shí),由于不知道下發(fā)指令中請(qǐng)求查找的表項(xiàng)的第一關(guān)鍵字Keyl對(duì)應(yīng)的表項(xiàng)的存 儲(chǔ)位置,算法引擎接收到表項(xiàng)查找請(qǐng)求后,就需要判斷RAM或TCAM中是否存在與第一關(guān)鍵 字對(duì)應(yīng)的表項(xiàng)。其中算法引擎查找TCAM中的TCAM表項(xiàng)和讀取RAM中與所述第一關(guān)鍵字對(duì) 應(yīng)的桶內(nèi)的RAM表項(xiàng)的過(guò)程沒(méi)有嚴(yán)格的時(shí)序關(guān)系,可以根據(jù)TCAM和RAM具體容量的大小來(lái) 設(shè)置。 —種方案是查找TCAM中的TCAM表項(xiàng),并讀取RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶 內(nèi)的RAM表項(xiàng);判斷所述TCAM中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng),若存在,則 返回與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的索引;若不存在,則判斷讀出的所述RAM表項(xiàng)中 是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的RAM 表項(xiàng)的索引。 另一種方案是查找TCAM中的TCAM表項(xiàng);判斷所述TCAM中是否存在與所述第一 關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的索引;若不 存在,則讀取RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng),并判斷讀出的所述RAM表項(xiàng) 中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的 RAM表項(xiàng)的索引。 還有一種方案是讀取RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng);判斷讀 出的所述RAM表項(xiàng)中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng),若存在,則返回與所述第 一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)的索引;若不存在,則查找TCAM中的TCAM表項(xiàng),并判斷所述TCAM 中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的 TCAM表項(xiàng)的索引。 其中算法引擎讀取RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng)的方法可 以是采用與添加表項(xiàng)時(shí)相同的哈希函數(shù)f()對(duì)所述第一關(guān)鍵字進(jìn)行哈希運(yùn)算,例如 f (Keyl) = X,則以哈希運(yùn)算值X作為所述第一關(guān)鍵字在所述RAM中對(duì)應(yīng)的桶地址,讀取所 述桶地址對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng)。 查找命中時(shí),算法引擎只需返回查找命中的表項(xiàng)對(duì)應(yīng)的索引即可,可以不返回命 中的表項(xiàng)中的其他內(nèi)容。算法引擎也可以在返回命中表項(xiàng)索引時(shí)返回查找成功的消息,或 者在TCAM和RAM中查找都未命中時(shí),返回查詢(xún)失敗的消息。
8
由于精確匹配的查找速率受RAM接口速率的限制,一次讀出RAM中整桶數(shù)據(jù)的延時(shí)比較大,若不能滿(mǎn)足快速查找的速率要求,則還可以通過(guò)增加RAM個(gè)數(shù)、減小桶的深度等方法來(lái)進(jìn)一步提高查找的速率。 本實(shí)施例通過(guò)訪問(wèn)TCAM和RAM,可以查找到存儲(chǔ)在RAM中的表項(xiàng),也可以查找到因RAM中桶滿(mǎn)而存儲(chǔ)在TCAM中的表項(xiàng),因無(wú)需增加RAM的桶深,節(jié)約了 RAM資源,減少了對(duì)RAM的訪問(wèn)次數(shù);利用TCAM芯片的高速查找性能,提高了精確匹配查找的速率,在RAM資源固定的情況下擴(kuò)展了可存儲(chǔ)的表項(xiàng)容量。 圖5為本發(fā)明表項(xiàng)處理方法第二實(shí)施例的流程圖,如圖5所示,該表項(xiàng)處理方法在本發(fā)明表項(xiàng)處理方法第一實(shí)施例的基礎(chǔ)上,該表項(xiàng)處理方法中算法引擎對(duì)請(qǐng)求查找的表項(xiàng)進(jìn)行查找的步驟203和步驟204可以包括以下步驟
步驟300、開(kāi)始查找,執(zhí)行步驟301、步驟302。 其中查找開(kāi)始時(shí),可以同時(shí)執(zhí)行步驟301和步驟302,也可以先執(zhí)行步驟301再執(zhí)
行步驟302,或者先執(zhí)行步驟302再執(zhí)行步驟301。 步驟301 、查找TCAM中的TCAM表項(xiàng),執(zhí)行步驟304。 步驟302、對(duì)請(qǐng)求查找的第一關(guān)鍵字Keyl進(jìn)行哈希運(yùn)算。 算法引擎對(duì)Keyl進(jìn)行哈希運(yùn)算,該哈希運(yùn)算采用的函數(shù)與添加表項(xiàng)時(shí)采用的哈希函數(shù)相同,f(Keyl) 二X,計(jì)算出的哈希運(yùn)算值X就是Keyl在RAM中對(duì)應(yīng)的桶地址,根據(jù)該桶地址可以在RAM中查找到Keyl對(duì)應(yīng)的桶。 步驟303、讀取RAM中Keyl對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng),執(zhí)行步驟305。 步驟304、判斷TCAM中是否查找命中,如果是則執(zhí)行步驟306,否則執(zhí)行步驟305。 步驟305、判斷RAM中是否查找命中,如果是則執(zhí)行步驟306,否則執(zhí)行步驟307。 由于只有沖突的表項(xiàng)才會(huì)被存入TCAM芯片,如果從TCAM芯片中查找命中了,即
TCAM中存儲(chǔ)的TCAM表項(xiàng)的關(guān)鍵字中有和Keyl相同的關(guān)鍵字,則算法引擎可直接返回命中
的TCAM表項(xiàng)的索引,不必對(duì)讀出的RAM中的RAM表項(xiàng)進(jìn)行處理,因?yàn)镽AM中不會(huì)再出現(xiàn)與
需要查找的關(guān)鍵字對(duì)應(yīng)的同一條命中的RAM表項(xiàng)。如果TCAM查找未命中,則算法引擎需要
將從桶內(nèi)讀取出的所有的關(guān)鍵字與請(qǐng)求查找的Keyl—一比對(duì),判斷從與Y所對(duì)應(yīng)的桶內(nèi)讀
出的所有RAM表項(xiàng)中是否有與Keyl相同的關(guān)鍵字,若有則認(rèn)為查找命中,算法引擎返回命
中的RAM表項(xiàng)對(duì)應(yīng)的索引,若沒(méi)有則認(rèn)為查找未命中。 步驟306、返回查找命中的表項(xiàng)對(duì)應(yīng)的索引,執(zhí)行步驟308。 步驟307、返回查找未命中的查詢(xún)結(jié)果消息,執(zhí)行步驟308。 步驟308、返回查找結(jié)束的消息及結(jié)果狀態(tài)。 查找命中時(shí),算法引擎只需返回查找命中的表項(xiàng)對(duì)應(yīng)的索引即可,可以不返回命中的表項(xiàng)中的其他內(nèi)容。在TCAM和RAM中查找都未命中時(shí),可以返回查詢(xún)失敗的消息。其中步驟306、308可以同時(shí)執(zhí)行,即在返回命中的表項(xiàng)對(duì)應(yīng)的索引的同時(shí)返回此次查找結(jié)束的結(jié)束位和結(jié)果狀態(tài)(命中、未命中、失敗原因等)。步驟307、30S也可以同時(shí)執(zhí)行,即在返回未命中的查詢(xún)結(jié)果消息的同時(shí)返回此次查找結(jié)束的結(jié)束位和結(jié)果狀態(tài)。
其中步驟301 、302、303、304和305之間沒(méi)有嚴(yán)格的時(shí)序關(guān)系,可以執(zhí)行步驟301的同時(shí)執(zhí)行步驟302、303,然后執(zhí)行步驟304 ;也可以先執(zhí)行步驟301、304,在步驟304判斷出TCAM未命中后,再執(zhí)行步驟302、303、305 ;還可以先執(zhí)行步驟302、303、305,在步驟305判斷出RAM未命中后執(zhí)行步驟301。 本實(shí)施例在對(duì)已添加的表項(xiàng)進(jìn)行查找時(shí),訪問(wèn)TCAM和RAM可以查找到存儲(chǔ)在RAM中和因RAM桶已滿(mǎn)而存儲(chǔ)在TCAM中的表項(xiàng),減少了對(duì)RAM的訪問(wèn)次數(shù);利用TCAM芯片的高速查找性能,提高了精確匹配查找的速率,在RAM資源固定時(shí)擴(kuò)展了可存儲(chǔ)的表項(xiàng)的容量。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述存儲(chǔ)介質(zhì)包括R0M、 RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。 圖6為本發(fā)明表項(xiàng)添加裝置實(shí)施例的示意圖,如圖6所示,該表項(xiàng)添加裝置包括第一接收模塊3和添加模塊5。其中第一接收模塊3用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引;添加模塊5用于查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器(RAM) 17中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),則將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM) 19。 具體地,需要向RAM中添加一條表項(xiàng)時(shí),用戶(hù)發(fā)送表項(xiàng)添加請(qǐng)求,該表項(xiàng)添加請(qǐng)求中攜帶需要添加的表項(xiàng)的第一關(guān)鍵字Keyl和索引Index。第一接收模塊3接收到該添加表項(xiàng)請(qǐng)求后,添加模塊5根據(jù)該表項(xiàng)添加請(qǐng)求中的Keyl的值可以獲取該表項(xiàng)在該RAM中對(duì)應(yīng)的桶地址。添加模塊5可以包括獲取單元51、判斷單元53和添加單元55。其中獲取單元51用于獲取所述第一關(guān)鍵字在所述RAM中對(duì)應(yīng)的桶地址;判斷單元53用于判斷所述桶地址對(duì)應(yīng)的桶是否已滿(mǎn);添加單元55用于若所述第一關(guān)鍵字在RAM中對(duì)應(yīng)的桶已滿(mǎn),則將所述第一關(guān)鍵字和索引添加進(jìn)TCAM。進(jìn)一步地,添加模塊5還用于若所述第一關(guān)鍵字在RAM中對(duì)應(yīng)的桶未滿(mǎn),則將所述第一關(guān)鍵字和索引添加進(jìn)所述桶內(nèi)的空閑位置。獲取單元51可以采用某個(gè)設(shè)定的哈希函數(shù)對(duì)Keyl進(jìn)行哈希運(yùn)算以獲取Keyl在RAM中對(duì)應(yīng)的桶地址,例如f (Keyl) = X,則哈希運(yùn)算值X為該表項(xiàng)在RAM中對(duì)應(yīng)的桶地址。判斷單元53則根據(jù)該桶的表項(xiàng)容量和實(shí)際存儲(chǔ)的表項(xiàng)的條數(shù)判斷該桶是否已滿(mǎn),假設(shè)X對(duì)應(yīng)的桶內(nèi)可以存儲(chǔ)a條表項(xiàng),若此時(shí)已經(jīng)存儲(chǔ)了 a條表項(xiàng)則表示此桶已滿(mǎn),若此時(shí)已經(jīng)存儲(chǔ)的表項(xiàng)少于a條,則表示此桶未滿(mǎn)。若X對(duì)應(yīng)的桶未滿(mǎn),則添加單元55將該表項(xiàng)的關(guān)鍵字和索引添加進(jìn)該桶內(nèi)的空閑位置;若X對(duì)應(yīng)的桶已滿(mǎn),則添加單元55將該表項(xiàng)的關(guān)鍵字和索引添加進(jìn)TCAM,若添加成功,則可以返回添加成功的添加結(jié)果消息。 一般TCAM只要滿(mǎn)足設(shè)計(jì)規(guī)格,容量可以不受限制,可以保證表項(xiàng)的成功添加。 本實(shí)施例表項(xiàng)添加裝置通過(guò)添加模塊將RAM中沖突的表項(xiàng)添加進(jìn)TCAM,保證所有表項(xiàng)都能夠添加成功;無(wú)需增加RAM容量,從而節(jié)約了 RAM資源,在RAM資源固定的情況下擴(kuò)展了可存儲(chǔ)的表項(xiàng)容量。 圖7為本發(fā)明表項(xiàng)處理裝置實(shí)施例的示意圖,如圖7所示,該表項(xiàng)處理裝置包括第一接收模塊3、添加模塊5、第二接收模塊7和返回模塊9。其中第一接收模塊3用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引;添加模塊5用于查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器(RAM) 17中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM)19,若未滿(mǎn),可以將所述第一關(guān)鍵字和索引添加進(jìn)隨機(jī)存儲(chǔ)器(RAM) 17中對(duì)應(yīng)的桶的空閑位置;第二接收模塊7用于接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的第一關(guān)鍵字;返回模塊9用于若三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM) 19或隨機(jī)存儲(chǔ)器(RAM) 17中存在與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),則返回與所 述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。 具體地,需要向RAM中添加一條表項(xiàng)時(shí),用戶(hù)發(fā)送表項(xiàng)添加請(qǐng)求,該表項(xiàng)添加請(qǐng)求 中攜帶需要添加的表項(xiàng)的第一關(guān)鍵字Keyl和索引Index。第一接收模塊3接收到該添加 表項(xiàng)請(qǐng)求后,添加模塊5根據(jù)該表項(xiàng)添加請(qǐng)求中的Keyl的值可以獲取該表項(xiàng)在該RAM中對(duì) 應(yīng)的桶地址。其中第一接收模塊3和添加模塊5可以采用本發(fā)明表項(xiàng)添加裝置實(shí)施例中的 結(jié)構(gòu)。第二接收模塊7接收到表項(xiàng)查找請(qǐng)求后,若TCAM或RAM中存在與所述第一關(guān)鍵字對(duì) 應(yīng)的表項(xiàng),則返回模塊9返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。進(jìn)一步地,返回模塊9 可以包括查找單元91和讀取單元92。其中查找單元91用于查找TCAM中的TCAM表項(xiàng);讀 取單元92用于讀取RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng)。返回模塊9還可以 包括第一返回單元93和第二返回單元94,其中第一返回單元93用于在所述TCAM中存在 與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)時(shí),返回與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的索引;第 二返回單元94用于在讀出的所述RAM表項(xiàng)中存在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)時(shí),返 回與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)的索引。接收到表項(xiàng)查找指令后,查找單元91可以在 TCAM芯片中進(jìn)行查找,讀取單元92根據(jù)采用與添加表項(xiàng)時(shí)相同的哈希函數(shù)f (Keyl) = X, 計(jì)算出第一關(guān)鍵字Keyl的哈希運(yùn)算值X即桶地址,讀取RAM中對(duì)應(yīng)桶內(nèi)的全部表項(xiàng)。根據(jù) 該桶地址可以在RAM中查找到對(duì)應(yīng)的桶,并讀取出該桶內(nèi)所有的RAM表項(xiàng)。若查找單元查 找TCAM與讀取單元讀取RAM同時(shí)進(jìn)行時(shí),若查找單元91在TCAM中查找命中,則第一返回 單元93可以返回命中的TCAM表項(xiàng)的索引,并指示讀取單元92停止讀取;若與讀取單元92 讀出的與Key 1對(duì)應(yīng)桶內(nèi)RAM表項(xiàng)對(duì)比命中,則第二返回單元94可以返回命中的RAM表項(xiàng) 的索引,并指示查找單元91停止查找。若在RAM和TCAM中都未命中,則返回模塊9還可以 返回查找失敗的消息。當(dāng)然查找單元91查找TCAM與讀取單元92讀取RAM也可以不同時(shí) 工作,即查找單元91查找TCAM未命中后,讀取單元92再讀取RAM ;或者讀取單元92從RAM 中讀出的表項(xiàng)未命中后,查找單元91再查找TCAM。 本實(shí)施例表項(xiàng)處理裝置的返回模塊查找TCAM和RAM,可以查找到存入RAM和TCAM 中的表項(xiàng),因無(wú)需增加RAM的桶深,節(jié)約了 RAM資源,減少了對(duì)RAM的訪問(wèn)次數(shù);利用TCAM 芯片的高速查找性能,提高了精確匹配查找的速率,在RAM資源固定的情況下擴(kuò)展了可存 儲(chǔ)的表項(xiàng)容量。 圖8為本發(fā)明表項(xiàng)處理系統(tǒng)實(shí)施例的示意圖,如圖8所示,該表項(xiàng)處理系統(tǒng)包括 包括算法引擎2、隨機(jī)存儲(chǔ)器(RAM)17和三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM)19。其中算法引擎2用 于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引;查 詢(xún)?cè)摰谝魂P(guān)鍵字在所述RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一關(guān)鍵字和索引添加 進(jìn)所述TCAM ;若未滿(mǎn),可以將所述第一關(guān)鍵字和索引添加進(jìn)所述RAM。 具體地,算法引擎2接收到下發(fā)指令后,需要對(duì)該下發(fā)指令進(jìn)行解析,判斷該下發(fā) 指令是表項(xiàng)添加指令還是表項(xiàng)查找指令,若所述下發(fā)指令為表項(xiàng)添加請(qǐng)求,則算法引擎2 進(jìn)行表項(xiàng)添加處理,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引。即算 法引擎2查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器(RAM)17中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將第一關(guān) 鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM)19 ;若未滿(mǎn),可以將所述第一關(guān)鍵字和索引 添加進(jìn)隨機(jī)存儲(chǔ)器(RAM) 17。若所述下發(fā)指令為表項(xiàng)查找請(qǐng)求,則算法引擎2進(jìn)行表項(xiàng)查找處理,因此該算法引擎2還用于接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所述第一關(guān)鍵字,然后查找所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。本實(shí)施例中算法引擎2進(jìn)行表項(xiàng)添加處理的方法可以參照本發(fā)明表項(xiàng)添加方法第一實(shí)施例中的描述,算法引擎2進(jìn)行表項(xiàng)查找處理的方法可以參照本發(fā)明表項(xiàng)處理方法第一、第二實(shí)施例中的描述,在此不再贅述。 本實(shí)施例通過(guò)算法引擎將隨機(jī)存儲(chǔ)器因桶已滿(mǎn)而發(fā)生沖突的表項(xiàng)添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器中,保證表項(xiàng)能夠添加成功,擴(kuò)展了可以存儲(chǔ)的表項(xiàng)容量;通過(guò)算法引擎可以查找到存儲(chǔ)在三態(tài)內(nèi)容尋址存儲(chǔ)器或隨機(jī)存儲(chǔ)器中的表項(xiàng),由于利用三態(tài)內(nèi)容尋址存儲(chǔ)器芯片的高速查找性能,提高了精確匹配查找的速率;且由于無(wú)需通過(guò)增加隨機(jī)存儲(chǔ)器容量的方法降低表項(xiàng)沖突的概率,從而節(jié)約了隨機(jī)存儲(chǔ)器資源。 最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
1權(quán)利要求
一種表項(xiàng)添加方法,其特征在于,包括接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引;查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。
2. 根據(jù)權(quán)利要求1所述的表項(xiàng)添加方法,其特征在于,查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ) 器RAM中對(duì)應(yīng)的桶是否已滿(mǎn)包括獲取所述第一關(guān)鍵字在所述RAM中對(duì)應(yīng)的桶地址; 判斷所述桶地址對(duì)應(yīng)的桶是否已滿(mǎn)。
3. 根據(jù)權(quán)利要求2所述的表項(xiàng)添加方法,其特征在于,所述獲取所述第一關(guān)鍵字在所 述RAM中對(duì)應(yīng)的桶地址包括對(duì)所述第一關(guān)鍵字進(jìn)行哈希運(yùn)算,以哈希運(yùn)算值作為所述第一關(guān)鍵字在所述RAM中對(duì) 應(yīng)的桶地址。
4. 根據(jù)權(quán)利要求l-3任意一項(xiàng)所述的表項(xiàng)添加方法,其特征在于,若所述第一關(guān)鍵字 在所述RAM中對(duì)應(yīng)的桶未滿(mǎn),將所述第一關(guān)鍵字和索引添加進(jìn)所述桶內(nèi)的空閑位置。
5. —種表項(xiàng)處理方法,其特征在于,包括接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引; 查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一關(guān)鍵 字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM ;接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所述第一關(guān)鍵字; 查找所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。
6. 根據(jù)權(quán)利要求5所述的表項(xiàng)處理方法,其特征在于,所述查找所述第一關(guān)鍵字對(duì)應(yīng) 的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引,包括查找所述TCAM中的TCAM表項(xiàng),并讀取所述RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM 表項(xiàng);判斷所述TCAM中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng),若存在,則返回與所 述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的索引;若不存在,則判斷讀出的所述RAM表項(xiàng)中是否存在 與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)的索 引;或查找所述TCAM中的TCAM表項(xiàng);判斷所述TCAM中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的 TCAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的索引;若不存在,則讀取所 述RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng),并判斷讀出的所述RAM表項(xiàng)中是否存 在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)的 索引;或讀取所述RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng);判斷讀出的所述RAM表項(xiàng) 中是否存在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的 RAM表項(xiàng)的索引;若不存在,則查找所述TCAM中的TCAM表項(xiàng),并判斷所述TCAM中是否存在 與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng),若存在,則返回與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的 索引。
7. 根據(jù)權(quán)利要求6所述的表項(xiàng)處理方法,其特征在于,所述讀取所述RAM中與所述第一 關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng),包括對(duì)所述第一關(guān)鍵字進(jìn)行哈希運(yùn)算,以哈希運(yùn)算值作為所述第一關(guān)鍵字在所述RAM中對(duì) 應(yīng)的桶地址,讀取所述桶地址對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng)。
8. —種表項(xiàng)添加裝置,其特征在于,包括第一接收模塊,用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的 第一關(guān)鍵字和索引;添加模塊,用于查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),則 將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。
9. 根據(jù)權(quán)利要求8所述的表項(xiàng)添加裝置,其特征在于,所述添加模塊還用于若所述第 一關(guān)鍵字在所述RAM中對(duì)應(yīng)的桶未滿(mǎn),則將所述第一關(guān)鍵字和索引添加進(jìn)所述桶內(nèi)的空閑 位置。
10. 根據(jù)權(quán)利要求8或9所述的表項(xiàng)添加裝置,其特征在于,所述添加模塊包括 獲取單元,用于獲取所述第一關(guān)鍵字在所述RAM中對(duì)應(yīng)的桶地址; 判斷單元,用于判斷所述桶地址對(duì)應(yīng)的桶是否已滿(mǎn);添加單元,用于若所述第一關(guān)鍵字在所述RAM中對(duì)應(yīng)的桶已滿(mǎn),則將所述第一關(guān)鍵字 和索引添加進(jìn)TCAM。
11. 一種表項(xiàng)處理裝置,其特征在于,包括第一接收模塊,用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的 第一關(guān)鍵字和索引;添加模塊,用于查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將 所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM ;第二接收模塊,用于接收表項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所述第 一關(guān)鍵字;返回模塊,用于查找所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng) 的索引。
12. 根據(jù)權(quán)利要求11所述的表項(xiàng)處理裝置,其特征在于,所述返回模塊包括 查找單元,用于查找所述TCAM中的TCAM表項(xiàng);讀取單元,用于讀取所述RAM中與所述第一關(guān)鍵字對(duì)應(yīng)的桶內(nèi)的RAM表項(xiàng); 第一返回單元,用于在所述TCAM中存在與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)時(shí),返回與所述第一關(guān)鍵字對(duì)應(yīng)的TCAM表項(xiàng)的索引;第二返回單元,用于在讀出的所述RAM表項(xiàng)中存在與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)時(shí),返回與所述第一關(guān)鍵字對(duì)應(yīng)的RAM表項(xiàng)的索引。
13. —種表項(xiàng)處理系統(tǒng),包括算法引擎和隨機(jī)存儲(chǔ)器RAM,其特征在于還包括三態(tài)內(nèi)容 尋址存儲(chǔ)器TCAM ;所述算法引擎,用于接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的 第一關(guān)鍵字和索引;查詢(xún)?cè)摰谝魂P(guān)鍵字在所述RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第 一關(guān)鍵字和索引添加進(jìn)所述TCAM。
14. 根據(jù)權(quán)利要求13所述的表項(xiàng)處理系統(tǒng),其特征在于,所述算法引擎還用于接收表 項(xiàng)查找請(qǐng)求,所述表項(xiàng)查找請(qǐng)求中攜帶請(qǐng)求查找的所述第一關(guān)鍵字;查找所述第一關(guān)鍵字 對(duì)應(yīng)的表項(xiàng),返回與所述第一關(guān)鍵字對(duì)應(yīng)的表項(xiàng)的索引。
全文摘要
本發(fā)明實(shí)施例涉及一種表項(xiàng)添加方法及裝置和表項(xiàng)處理方法、裝置及系統(tǒng),其中該表項(xiàng)添加方法包括接收表項(xiàng)添加請(qǐng)求,所述表項(xiàng)添加請(qǐng)求中攜帶請(qǐng)求添加的表項(xiàng)的第一關(guān)鍵字和索引;查詢(xún)?cè)摰谝魂P(guān)鍵字在隨機(jī)存儲(chǔ)器RAM中對(duì)應(yīng)的桶是否已滿(mǎn),若已滿(mǎn),將所述第一關(guān)鍵字和索引添加進(jìn)三態(tài)內(nèi)容尋址存儲(chǔ)器TCAM。本發(fā)明實(shí)施例將RAM中因桶滿(mǎn)而發(fā)生沖突的表項(xiàng)添加進(jìn)TCAM,保證所有表項(xiàng)都能夠添加成功;無(wú)需增加RAM容量,因此節(jié)約了RAM資源,在RAM資源固定的情況下擴(kuò)展了可存儲(chǔ)的表項(xiàng)容量。
文檔編號(hào)G06F17/30GK101770485SQ20081024742
公開(kāi)日2010年7月7日 申請(qǐng)日期2008年12月31日 優(yōu)先權(quán)日2008年12月31日
發(fā)明者沈士軍, 焦石, 秦增杰, 賈利敏 申請(qǐng)人:華為技術(shù)有限公司