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

用于分組處理的基于多表哈希查找的制作方法

文檔序號(hào):11142881閱讀:284來(lái)源:國(guó)知局
用于分組處理的基于多表哈希查找的制造方法與工藝

概括地說(shuō),本發(fā)明實(shí)施例涉及分組處理,具體地說(shuō),涉及用于分組處理中的查找的哈希表。



背景技術(shù):

在分組處理芯片中,可以將分組信息(例如,來(lái)自分組報(bào)頭(header)的元數(shù)據(jù))用作在查找表中查找分組處理信息的鍵。該分組處理信息用于分組轉(zhuǎn)發(fā)和/或分類。例如,該鍵用于在轉(zhuǎn)發(fā)表中查找轉(zhuǎn)發(fā)信息。該查找表(例如,轉(zhuǎn)發(fā)表)被劃分為多個(gè)槽(slot)。每個(gè)槽可以有多個(gè)單元格(cell)用于存儲(chǔ)相應(yīng)的沖突元素。每個(gè)沖突元素存儲(chǔ)針對(duì)相應(yīng)鍵的分組處理信息以及該鍵本身。使用哈希函數(shù)h(k)來(lái)對(duì)槽進(jìn)行索引,其中k是鍵。由于哈希函數(shù)將多個(gè)鍵映射到同一個(gè)槽,所以在每個(gè)槽中包括有多個(gè)沖突元素。為了搜索針對(duì)特定鍵k的分組處理信息,可以讀取具有索引h(k)的槽中的沖突元素,并且將該沖突元素中存儲(chǔ)的鍵值與k比較。相匹配指示了匹配的沖突元素存儲(chǔ)針對(duì)k的分組處理信息。

可以通過(guò)增加每一槽的單元格數(shù)量并且因此增加沖突元素?cái)?shù)量來(lái)提高該查找表(例如,轉(zhuǎn)發(fā)表)的使用率:成功查找的可能性隨著每一槽的沖突元素的數(shù)量的增加而增加。然而,增加每一槽的單元格數(shù)量會(huì)增加執(zhí)行查找時(shí)要從一個(gè)槽中讀取的數(shù)據(jù)量,這增加了用于處理分組的時(shí)延。增加的時(shí)延導(dǎo)致降低的性能。

因此,需要限制存儲(chǔ)器訪問(wèn)然而提供高使用率的分組處理查找技術(shù)。



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

在一些實(shí)施例中,分組處理方法包括使用根據(jù)與分組相關(guān)聯(lián)的信息構(gòu)造的鍵來(lái)生成第一哈希值和第二哈希值。從第一表中的槽中的單元格讀取塊編號(hào),其中,所述第一表中的所述槽是由所述第一哈希值來(lái)索引的,并且所述單元格是由所述第二哈希值來(lái)索引的。執(zhí)行針對(duì)第二表中的槽中的塊的存儲(chǔ)器訪問(wèn)操作以便從所述塊讀取包括所述分組的分組處理信息的數(shù)據(jù)。所述第二表中的所述槽是由所述第一哈希值來(lái)索引的,并且所述塊是由所述塊編號(hào)來(lái)索引的。所述分組是根據(jù)所述分組處理信息來(lái)處理的。

在一些實(shí)施例中,維護(hù)用于分組處理的查找表的方法包括創(chuàng)建第一表,所述第一表被劃分為第一批多個(gè)槽,以及創(chuàng)建第二表,所述第二表被劃分為第二批多個(gè)槽。所述第一批多個(gè)槽中的每一個(gè)槽被劃分為多個(gè)單元格。所述第二批多個(gè)槽中的每一個(gè)槽被劃分為多個(gè)塊。使用鍵來(lái)生成第一哈希值和第二哈希值。將該鍵和與該鍵值相關(guān)聯(lián)的分組處理信息存儲(chǔ)在所述第二表中的相應(yīng)槽中的相應(yīng)塊中,其中,所述第二表中的所述相應(yīng)槽是由所述第一哈希值來(lái)索引的,并且所述相應(yīng)塊是由塊編號(hào)來(lái)索引的。將所述塊編號(hào)存儲(chǔ)在所述第一表中的相應(yīng)槽中的相應(yīng)單元格中,其中,所述第一表中的所述相應(yīng)槽是由所述第一哈希值來(lái)索引的,并且所述第一表中的所述相應(yīng)槽中的所述相應(yīng)單元格是由所述第二哈希值來(lái)索引的。

在一些實(shí)施例中,分組處理系統(tǒng)包括哈希模塊,其用于使用根據(jù)與分組相關(guān)聯(lián)的信息構(gòu)造的鍵來(lái)生成第一哈希值和第二哈希值。該分組處理系統(tǒng)還包括表訪問(wèn)模塊,其用于從第一表中的槽中的單元格讀取塊編號(hào),以及執(zhí)行針對(duì)第二表中的槽中的塊的存儲(chǔ)器訪問(wèn)以便從所述塊讀取包括分組處理信息的數(shù)據(jù)。所述第一表中的所述槽是由所述第一哈希值來(lái)索引的,并且所述單元格是由所述第二哈希值來(lái)索引的。所述第二表中的所述槽是由所述第一哈希值來(lái)索引的,并且所述塊是由所述塊編號(hào)來(lái)索引的。所述分組處理系統(tǒng)還包括分組處理模塊,其用于根據(jù)從所述塊讀取的分組處理信息來(lái)處理所述分組。

附圖說(shuō)明

本發(fā)明實(shí)施例是以舉例說(shuō)明的方式示出的并且并不意在受到附圖的限制。

圖1是根據(jù)一些實(shí)施例的用于處理分組的系統(tǒng)的框圖。

圖2A是根據(jù)一些實(shí)施例的哈希表和相應(yīng)的存根表的框圖。

圖2B示出了根據(jù)一些實(shí)施例的圖2A的哈希表中的塊。

圖3是示出了根據(jù)一些實(shí)施例的具有兩個(gè)相應(yīng)的存根表的兩個(gè)哈希表的框圖。

圖4A和圖4B示出了根據(jù)一些實(shí)施例的處理分組的方法的流程圖。

圖5A和圖5B示出了根據(jù)一些實(shí)施例的維護(hù)查找表的方法的流程圖。

貫穿整個(gè)附圖和本描述中相同的附圖標(biāo)記指代相應(yīng)的部分。

具體實(shí)施方式

在下面的描述中,闡釋了很多特定細(xì)節(jié),諸如特定組件、電路和過(guò)程的示例,以便提供對(duì)本公開(kāi)內(nèi)容的透徹理解。并且,在下面的描述中以及為了解釋說(shuō)明的目的,闡釋特定術(shù)語(yǔ)以便提供對(duì)本發(fā)明實(shí)施例的透徹理解。然而,對(duì)于本領(lǐng)域的技術(shù)人員顯而易見(jiàn)的是,可以不要求這些特定細(xì)節(jié)來(lái)實(shí)踐本發(fā)明實(shí)施例。在其它實(shí)例中,以框圖的形式示出了公知的電路和設(shè)備以避免模糊本公開(kāi)內(nèi)容。本文中使用的術(shù)語(yǔ)“耦合”意為直接連接或通過(guò)一個(gè)或多個(gè)中間組件或電路連接。在本文中描述的各個(gè)總線上提供的任何信號(hào)可以與其它信號(hào)時(shí)間復(fù)用并且在一個(gè)或多個(gè)公共總線上提供。另外,電路元件或軟件塊之間的互連可以顯示為總線或單個(gè)信號(hào)線。每個(gè)總線可以替代地是單個(gè)信號(hào)線,而每個(gè)單個(gè)信號(hào)線也可以替代地是總線,并且單個(gè)線或總線可以表示用于組件之間的通信的種種物理或邏輯機(jī)制中的任何一種或多種。本發(fā)明實(shí)施例不應(yīng)被解釋為僅限于本文中描述的特定示例,而是應(yīng)該將所附權(quán)利要求定義的所有實(shí)施例包括在其范圍內(nèi)。

圖1是根據(jù)一些實(shí)施例的用于處理分組的系統(tǒng)100的框圖。在一些實(shí)施例中,系統(tǒng)100是網(wǎng)絡(luò)交換機(jī)或路由器的一部分。系統(tǒng)100包括用于接收和發(fā)送分組的多個(gè)端口102。端口102耦合到處理電路104,該處理電路耦合到存儲(chǔ)器120和存儲(chǔ)器124。處理電路104可以通過(guò)存儲(chǔ)控制器(為了簡(jiǎn)單未示出)耦合到存儲(chǔ)器120和/或存儲(chǔ)器124。

存儲(chǔ)器120存儲(chǔ)一個(gè)或多個(gè)哈希表122,該哈希表存儲(chǔ)用于指定如何處理相應(yīng)分組的分組處理信息。一個(gè)或多個(gè)哈希表122的每一個(gè)都被劃分為槽,該槽也可以被稱為桶(bucket)。槽被劃分為塊,塊被劃分為單元格。單元格也可以被稱為箱(bin)。每個(gè)單元格存儲(chǔ)一個(gè)沖突元素;每個(gè)沖突元素存儲(chǔ)針對(duì)相應(yīng)鍵的分組處理信息以及該鍵本身。存儲(chǔ)器124存儲(chǔ)一個(gè)或多個(gè)存根(stub)表126。一個(gè)或多個(gè)存根表126的每一個(gè)都被劃分為槽,每個(gè)槽都被劃分為單元格。根據(jù)一些實(shí)施例,一個(gè)或多個(gè)存根表126中的單元格存儲(chǔ)指向一個(gè)或多個(gè)哈希表122中的塊的指針。(本文中使用的術(shù)語(yǔ)“單元格”指的是槽的一部分。在哈希表122中,一個(gè)單元格存儲(chǔ)一個(gè)沖突元素。在存根表126中,一個(gè)單元格存儲(chǔ)用于指向相應(yīng)哈希表122中的塊的塊編號(hào)。本文中使用的術(shù)語(yǔ)“單元格”因此與“存儲(chǔ)器單元”不是同樣的事物。相反,槽中的每個(gè)單元格將包括多個(gè)存儲(chǔ)器單元。下面關(guān)于圖2A、圖2B和圖3描述一個(gè)或多個(gè)哈希表122和一個(gè)或多個(gè)存根表126的示例。

處理電路104包括鍵構(gòu)造模塊106、哈希模塊108、表訪問(wèn)模塊110、分組處理模塊116和表維護(hù)模塊119。鍵構(gòu)造模塊106構(gòu)造在查找被存儲(chǔ)在一個(gè)或多個(gè)哈希表122中的分組處理信息中使用的鍵。該鍵是根據(jù)鍵構(gòu)造原則,使用與分組相關(guān)聯(lián)的信息(例如,從分組中提取的信息)構(gòu)造的。例如,鍵可以是使用從分組報(bào)頭提取的元數(shù)據(jù)來(lái)構(gòu)造的。在一個(gè)示例中,提取出分組報(bào)頭的目標(biāo)地址并將其用作鍵。在另一個(gè)示例中,提取出分組的整個(gè)分組報(bào)頭(例如,互聯(lián)網(wǎng)協(xié)議(IP)報(bào)頭)并將其用作鍵。

將由鍵構(gòu)造模塊106構(gòu)造的鍵提供給哈希模塊108,哈希模塊108對(duì)該鍵進(jìn)行哈希以生成哈希值。該哈希模塊108可以為相應(yīng)鍵生成多個(gè)哈希值。在一些實(shí)施例中,該哈希模塊108實(shí)現(xiàn)多個(gè)哈希函數(shù)。例如,該哈希模塊108可以將第一哈希函數(shù)h1應(yīng)用于鍵k以生成第一哈希值h1(k)并且將第二哈希函數(shù)h2應(yīng)用于鍵k以生成第二哈希值h2(k)。該哈希模塊108還可以將第三哈希函數(shù)h3應(yīng)用于鍵k以生成第三哈希值h3(k)并且將第四哈希函數(shù)h4應(yīng)用于鍵k以生成第四哈希值h4(k)。對(duì)不同的哈希函數(shù)的使用僅僅是生成哈希值h1(k)、h2(k)、h3(k)和/或h4(k)的一個(gè)示例;其它示例也是可能的。

將由哈希模塊108生成的哈希值與由鍵構(gòu)造模塊106構(gòu)造的鍵一起提供給表訪問(wèn)模塊110。表訪問(wèn)模塊110使用該哈希值訪問(wèn)一個(gè)或多個(gè)存根表126和一個(gè)或多個(gè)哈希表122。下面關(guān)于圖2A和圖3,并且也在圖4A-圖4B的方法400和圖5A-圖5B的方法500中提供了使用哈希值來(lái)訪問(wèn)這些表的示例。在一些實(shí)施例中,表訪問(wèn)模塊110包括用于將從哈希表122中的沖突元素讀取的鍵與由鍵構(gòu)造模塊106提供的鍵進(jìn)行比較的比較邏輯單元112。在一些實(shí)施例中,表訪問(wèn)模塊110包括用于確定從存根表126中的單元格讀取的塊編號(hào)是否為有效塊指針的驗(yàn)證邏輯單元114。

將由表訪問(wèn)模塊110從哈希表122獲取的分組處理信息提供給分組處理模塊116,分組處理模塊116根據(jù)該分組處理信息來(lái)處理分組。在一些實(shí)施例中,分組處理模塊116包括分組轉(zhuǎn)發(fā)引擎118,它將分組路由到由該分組處理信息指定的輸出端口102以用于傳輸。

表維護(hù)模塊119建立并更新該一個(gè)或多個(gè)哈希表122和該一個(gè)或多個(gè)存根表126。例如,表維護(hù)模塊119在一個(gè)或多個(gè)哈希表122中存儲(chǔ)鍵和相應(yīng)的分組處理信息,并且將相應(yīng)的塊編號(hào)存儲(chǔ)在一個(gè)或多個(gè)存根表126中。

在一些實(shí)施例中,存儲(chǔ)器120在處理電路104外部。例如,處理電路104實(shí)現(xiàn)在分組處理芯片中,而存儲(chǔ)器120實(shí)現(xiàn)在一個(gè)或多個(gè)外部存儲(chǔ)芯片中。存儲(chǔ)器124可以嵌入與處理電路104相同的集成電路中(即,相同芯片)(例如,作為緩存存儲(chǔ)器)。替代地,存儲(chǔ)器124可以實(shí)現(xiàn)在包括該處理電路104的集成電路(例如,分組處理芯片)外部的一個(gè)或多個(gè)存儲(chǔ)器芯片中。在一些實(shí)施例中,存儲(chǔ)器120是動(dòng)態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(DRAM),而存儲(chǔ)器124是靜態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(SRAM)。在一些實(shí)施例中,存儲(chǔ)器120是雙倍數(shù)據(jù)速率(DDR)存儲(chǔ)器(例如,DDR DRAM)。

圖2A是根據(jù)一些實(shí)施例的哈希表202和相應(yīng)的存根表210的框圖。哈希表202是存儲(chǔ)器120中的哈希表122(圖1)的示例,而存根表210是存儲(chǔ)器124中的存根表126(圖1)的示例。哈希表202被劃分為m個(gè)槽(即,桶)204,其中,m是大于1的整數(shù),使得哈希表202包括槽204-0到槽204-(m-1)。使用第一哈希值集合h1(k)(例如,使用第一哈希函數(shù)h1(k))來(lái)對(duì)槽204-0到槽204-(m-1)進(jìn)行索引,其中h1(k)的取值范圍在0和(m-1)之間。從而,作為應(yīng)用于特定鍵k的h1(k)的值給出了哈希表202中的槽204的索引。

哈希表202中的每個(gè)槽204被劃分為p個(gè)塊206,其中,p是大于1的整數(shù),使得每個(gè)槽204包括塊206-0到塊206-(p-1)。圖2B示出了根據(jù)一些實(shí)施例的塊206。塊206被劃分為存儲(chǔ)q個(gè)相應(yīng)的沖突元素220的q個(gè)單元格,其中,q是大于1的整數(shù),使得該塊包括沖突元素220-0到?jīng)_突元素220-(q-1)。每個(gè)沖突元素220包括鍵222和分組處理信息224。每個(gè)塊206可以獨(dú)立于相同槽204中的其它塊206被訪問(wèn)。在一些實(shí)施例中,塊206具有的大小為x(例如,以字節(jié)為單位),允許其在單個(gè)存儲(chǔ)器事務(wù)(例如,針對(duì)將存儲(chǔ)器120耦合到處理電路104的數(shù)據(jù)總線的單個(gè)總線請(qǐng)求事務(wù))中被從存儲(chǔ)器120讀取。很多因素可能影響為了提高系統(tǒng)效率(例如,數(shù)據(jù)突發(fā)大小、緩存線大小)而進(jìn)行的對(duì)x的值的選擇。例如(例如,當(dāng)存儲(chǔ)器120是DDR時(shí)),總線請(qǐng)求事務(wù)可以指的是從存儲(chǔ)器120讀取的單個(gè)數(shù)據(jù)突發(fā),使得塊206具有的大小x等于該存儲(chǔ)器120的每一數(shù)據(jù)突發(fā)的字節(jié)數(shù)量。在一個(gè)示例中,該存儲(chǔ)器120是具有每一數(shù)據(jù)突發(fā)128字節(jié)(即,128B)的DRAM,并且塊206是128B的(即,x=128B)。每個(gè)沖突元素220以及因此的每個(gè)單元格是y字節(jié)的,使得q=ceiling(x/y,1)(向上舍入(ceiling),即,x除以y,進(jìn)位到最近的整數(shù))。每個(gè)槽204有n個(gè)沖突元素,以及因此的n個(gè)單元格。每個(gè)槽204因此被劃分為p個(gè)塊206,其中,p=ceiling(n/q,1)

該存根表210被劃分為m個(gè)槽212,使得該存根表包括槽212-0到槽212-(m-1)。與哈希表202中的槽204-0到槽204-(m-1)類似,使用第一哈希值集合h1(k)(例如,使用第一哈希函數(shù)h1(k))來(lái)對(duì)槽212-0到槽212-(m-1)進(jìn)行索引。每個(gè)槽212被劃分為b個(gè)單元格214,其中,b是大于或等于p的整數(shù),使得每個(gè)槽包括單元格214-0到單元格214-(b-1)。在一個(gè)示例中,b等于n。每個(gè)單元格214的大小是ceiling(log2(p),1)(即,哈希表202的每個(gè)槽204中的塊206的數(shù)量的以2為底的對(duì)數(shù),進(jìn)位到最近的整數(shù))。存根表210以比特為單位的大小是ceiling(log2(p),1)*m*b。

使用第二哈希值集合h2(k)(例如,使用第二哈希函數(shù)h2(k))來(lái)對(duì)單元格214-0到單元格214-(b-1)進(jìn)行索引,其中,h2(k)的取值范圍在0到b-1之間。從而,作為應(yīng)用于特定鍵k的h2(k)的值給出了存根表210中的單元格214的索引。槽212中的單元格214-0到單元格214-(b-1)存儲(chǔ)哈希表202中的相應(yīng)槽204中的塊206的塊編號(hào)。在圖2A的示例中,槽212-(m-1)中的單元格214-1存儲(chǔ)‘0’,這是哈希表202的槽204-(m-1)中的塊206-0的塊編號(hào)。槽212-(m-1)中的單元格214-2存儲(chǔ)值‘p-1’,這是哈希表202的槽204-(m-1)中的塊206-(p-1)的塊編號(hào)。槽212-(m-1)中的單元格214-1因此存儲(chǔ)指向槽204-(m-1)中的塊206-0的指針,并且槽212-(m-1)中的單元格214-2因此存儲(chǔ)指向槽204-(m-1)中的塊206-(p-1)的指針。在一些實(shí)施例中,每個(gè)單元格214可以獨(dú)立于相同槽212中的其它單元格214來(lái)被訪問(wèn)。

因此,針對(duì)鍵k的沖突元素220在哈希表202中被存儲(chǔ)在由存根表210中的相應(yīng)單元格214中存儲(chǔ)的塊編號(hào)指定的塊206中。相應(yīng)單元格214由h2(k)來(lái)索引并且處于由h1(k)來(lái)索引的槽212中,而沖突元素220處于由h1(k)來(lái)索引的槽204中。

在一個(gè)示例中,哈希表202實(shí)現(xiàn)在DRAM中,存根表210實(shí)現(xiàn)在SRAM中,其中,m=8k、n=16、x=128B、y=32B并且b=16。因此,p=4并且q=4。該哈希表202的大小因此是8k*16*32B=4兆字節(jié)(MB),并且存根表219的大小因此是2*8k*16比特=256千比特=32千字節(jié)(KB)。該4MB DRAM哈希表202根據(jù)一些應(yīng)用提供高使用率,而增加的用于存儲(chǔ)塊編號(hào)的32KB SRAM存根表210限制了對(duì)DRAM訪問(wèn)的大小,從而帶來(lái)了低時(shí)延。

如果該哈希表202不包括針對(duì)在查找中使用的鍵的沖突元素,則該查找將會(huì)失敗??梢酝ㄟ^(guò)增加系統(tǒng)100的負(fù)載因數(shù)來(lái)降低查找失敗的可能性。負(fù)載因數(shù)被定義為條目數(shù)量除以桶(即,槽)的數(shù)量,其中,條目數(shù)量指的是被成功插入到該表中的條目的數(shù)量。對(duì)于系統(tǒng)100而言期望的是具有高負(fù)載因數(shù)連同低沖突率。為了在提高負(fù)載因數(shù)的同時(shí)達(dá)到低沖突率,可以在系統(tǒng)100中包括第二哈希表122和相應(yīng)的存根表126。

圖3是示出了根據(jù)一些實(shí)施例可以結(jié)合哈希表202和存根表210(圖2A)一起使用的第二哈希表302和第二存根表310的框圖。哈希表302是存儲(chǔ)器120中的哈希表122(圖1)的示例,而存根表310是存儲(chǔ)器124中的存根表126(圖1)的示例。響應(yīng)于確定哈希表202沒(méi)有存儲(chǔ)針對(duì)特定鍵的沖突元素,可以訪問(wèn)哈希表302和存根表310。

哈希表302被劃分為c個(gè)槽(即,桶)304,其中,c是大于1的整數(shù),使得該哈希表302包括槽304-0到槽304-(c-1)。使用第三哈希值集合h3(k)(例如,第三哈希函數(shù)h3(k))來(lái)對(duì)槽304-0到槽304-(c-1)進(jìn)行索引,其中,h3(k)的取值范圍在0和(c-1)之間。每個(gè)槽304被劃分為p個(gè)塊206,使得每個(gè)槽304包括塊206-0到塊206-(p-1)。如針對(duì)哈希表202中的塊206所描述的,每個(gè)槽206可以獨(dú)立于相同槽304中的其它塊206來(lái)被訪問(wèn)。存根表310被劃分為c個(gè)槽312,使得存根表310包括槽312-0到槽312-(c-1)。與槽304-0到槽304-(c-1)類似,使用第三哈希值集合h3(k)(例如,第三哈希函數(shù)h3(k))來(lái)對(duì)槽312-0到槽312-(c-1)進(jìn)行索引。每個(gè)槽312被劃分為b個(gè)單元格214,使得每個(gè)槽312包括單元格214-0到單元格214-(b-1)。使用第四哈希值集合h4(k)(例如,第四哈希函數(shù)h4(k))來(lái)對(duì)單元格214-0到單元格214-(b-1)進(jìn)行索引,其中,h4(k)的取值范圍在0和(b-1)之間。存根表310的每個(gè)槽312中的單元格214-0到單元格214-(b-1)存儲(chǔ)指向哈希表301中的相應(yīng)槽304中的塊206的塊編號(hào)。在一些實(shí)施例中,每個(gè)單元格214可以獨(dú)立于相同槽312中的其它單元格214來(lái)被訪問(wèn)。

因此,針對(duì)鍵k的沖突元素220在哈希表302中被存儲(chǔ)在由存根表310中的相應(yīng)單元格214中存儲(chǔ)的塊編號(hào)指定的塊206中。相應(yīng)單元格214由h4(k)來(lái)索引并且處于由h3(k)來(lái)索引的槽312中,而沖突元素220處于由h3(k)來(lái)索引的槽304中。

在圖3的示例中,哈希表202的每個(gè)槽204中的塊206的數(shù)量被示出為等于哈希表302的每個(gè)槽304中的塊206的數(shù)量。然而,這些數(shù)量可以是不同的。類似的,存根表210的每個(gè)槽212中的單元格214的數(shù)量被示出為等于存根表310的每個(gè)槽312中的單元格214的數(shù)量。然而,這些數(shù)量可以是不同的。

圖4A和4B示出了根據(jù)一些實(shí)施例的處理分組的方法400的流程圖。該方法400,例如在系統(tǒng)100(圖1)中執(zhí)行。

在方法400中,接收到第一分組。根據(jù)與該第一分組相關(guān)聯(lián)的信息(例如,根據(jù)該分組報(bào)頭中的元數(shù)據(jù))來(lái)構(gòu)造第一鍵k1(402,圖4A)。該第一鍵,例如是由鍵構(gòu)造模塊106(圖1)來(lái)構(gòu)造的。

使用第一鍵來(lái)生成(404,406)哈希值h1(k1)和h2(k1)。例如,將第一哈希函數(shù)應(yīng)用于第一鍵以確定哈希值h1(k1),并且將第二哈希函數(shù)應(yīng)用于該第一鍵以確定哈希值h2(k1)。例如由哈希模塊108(圖1)來(lái)執(zhí)行哈希操作404和406。

(例如,由圖1的表訪問(wèn)模塊110)從第一表中的槽中的單元格讀取(408)第一塊編號(hào)(例如,從圖2A的存根表210中的槽212中的單元格214讀取)。該槽由哈希值h1(k1)來(lái)索引,而該單元格由哈希值h2(k1)來(lái)索引。在一些實(shí)施例中,該單元格是在無(wú)需讀取該槽中的其它單元格的情況下被讀取的。在一些實(shí)施例中,該第一塊編號(hào)是在單個(gè)事務(wù)(例如,單個(gè)存儲(chǔ)器訪問(wèn))中從存儲(chǔ)該第一表的存儲(chǔ)器讀取的(例如,在圖1的存儲(chǔ)器124中)。在一些實(shí)施例中,用于存儲(chǔ)該第一表的存儲(chǔ)器是SRAM。

在一些實(shí)施例中,(例如,由圖1的驗(yàn)證邏輯單元114)確定(410)該第一塊編號(hào)是用于第二表的有效塊編號(hào)。

執(zhí)行(412)針對(duì)第二表中的槽中(例如,圖2A的哈希表202中的槽204中)的塊(例如,圖2B的塊206)的存儲(chǔ)器訪問(wèn),以便讀取包括該第一分組的分組處理信息(例如,圖2B的分組處理信息224)的數(shù)據(jù)。例如由圖1的表訪問(wèn)模塊110來(lái)執(zhí)行該存儲(chǔ)器訪問(wèn)。該槽由哈希值h1(k1)來(lái)索引,并且該塊由該第一塊編號(hào)來(lái)索引。在存儲(chǔ)器訪問(wèn)中,該塊是在無(wú)需讀取該槽中的其它塊的情況下被讀取的。在一些實(shí)施例中,分組處理信息包括分組轉(zhuǎn)發(fā)信息(例如,用于指定圖1的輸出端口102)。在一些實(shí)施例中,在單個(gè)存儲(chǔ)器事務(wù)(例如,單總線請(qǐng)求事務(wù),其示例是單個(gè)突發(fā))中從存儲(chǔ)該第二表的存儲(chǔ)器(例如,圖1的存儲(chǔ)器120中)讀取(414)該塊。在一些實(shí)施例中,用于存儲(chǔ)該第二表的存儲(chǔ)器是DRAM。

可以響應(yīng)于確定(410)該第一塊編號(hào)是用于第二表的有效塊編號(hào),來(lái)讀取該塊。替代地,操作410的確定可以被省略。

在一些實(shí)施例中,從該塊讀取(416)多個(gè)沖突元素220-0到220-(q-1)(圖2B)。每個(gè)沖突元素220存儲(chǔ)相應(yīng)的鍵222以及與該相應(yīng)的鍵222相關(guān)聯(lián)的相應(yīng)的分組處理信息224。(例如,使用圖1的比較邏輯單元112)確定沖突元素220-0到220-(q-1)中的一個(gè)沖突元素的相應(yīng)的鍵222與該第一鍵匹配。將該沖突元素220的相應(yīng)的分組處理信息224識(shí)別為該第一分組的分組處理信息。

在一些實(shí)施例中,為了讀取多個(gè)沖突元素220-0到220-(q-1),使用下面的表達(dá)式來(lái)確定用于存儲(chǔ)該第二表的存儲(chǔ)器中(例如,存儲(chǔ)器120中)的存儲(chǔ)器偏移:

(h1(k1)*n+q*(第一塊編號(hào)))*y (1)其中,h1(k1)是在操作404中生成的哈希值,n是第二表的每個(gè)槽中(例如,圖2A的哈希表202的每個(gè)槽204中)的沖突元素220的數(shù)量,q是多個(gè)沖突元素220-0到220-(q-1)中的沖突元素220的數(shù)量,并且y是每個(gè)沖突元素220的大小。然后,從具有該存儲(chǔ)器偏移(例如,針對(duì)存儲(chǔ)器120中的哈希表202的起始位置)的存儲(chǔ)器位置讀取該多個(gè)沖突元素220-0到220-(q-1)。

根據(jù)該第一分組的分組處理信息來(lái)處理(418)該第一分組。在一些實(shí)施例中,該第一分組被提供(420)給由該分組處理信息指定的輸出端口以用于傳輸。例如,分組轉(zhuǎn)發(fā)引擎118將該第一分組路由給指定的端口102(圖1)。

在一些實(shí)施例中,接收(422,圖4B)第二分組。根據(jù)與該第二分組相關(guān)聯(lián)的信息(例如,根據(jù)該分組報(bào)頭中的元數(shù)據(jù))來(lái)構(gòu)造(422)第二鍵k2。例如,由鍵構(gòu)造模塊106(圖1)來(lái)構(gòu)造該第二鍵。

使用第二鍵來(lái)生成(424,426)哈希值h1(k2)和h2(k2)。例如,將第一哈希函數(shù)應(yīng)用于該第二鍵以確定哈希值h1(k2),并且將第二哈希函數(shù)應(yīng)用于第二鍵以確定哈希值h2(k2)。例如可以由哈希模塊108(圖1)來(lái)執(zhí)行哈希操作424和426。

使用哈希值h1(k2)和h2(k2),確定(428)該第二表(例如,圖2A的哈希表202)未存儲(chǔ)該第二分組的分組處理信息。例如,讀取在該第一表中由h1(k2)索引的槽中由h2(k2)索引的單元格(例如,圖2A的存根表210中的槽212中的單元格214),并且做出以下確定:從該單元格讀取的值指示該第二表未存儲(chǔ)該第二分組的分組處理信息。例如,驗(yàn)證邏輯單元114(圖1)確定從該單元格讀取的值不是有效塊編號(hào)。

哈希值h3(k2)和h4(k2)是使用第二鍵來(lái)生成的(430,432)。例如,將第三哈希函數(shù)應(yīng)用于第二鍵以確定哈希值h3(k2),并且將第四哈希函數(shù)應(yīng)用于該第二鍵以確定哈希值h4(k2)。例如,可以由哈希模塊108(圖1)來(lái)執(zhí)行哈希操作430和432。

從第三表中的槽中的單元格(例如,圖3的存根表310中的槽312中的單元格214)讀取(434)第二塊編號(hào)。該槽是由哈希值h3(k2)來(lái)索引的,而該單元格是由哈希值h4(k2)來(lái)索引的。在一些實(shí)施例中,讀取該單元格是在無(wú)需讀取該槽中的其它單元格的情況下進(jìn)行的。在一些實(shí)施例中,在單個(gè)事務(wù)(例如,單個(gè)存儲(chǔ)器訪問(wèn))中從存儲(chǔ)該第三表的存儲(chǔ)器(例如,圖1的存儲(chǔ)器124中)讀取該第二塊編號(hào)。在一些實(shí)施例中,用于存儲(chǔ)該第三表的存儲(chǔ)器是SRAM。

執(zhí)行(436)針對(duì)第四表中的槽中(例如,圖3的哈希表302中的槽304中)的塊(例如,圖2B的塊206)的存儲(chǔ)器訪問(wèn),以讀取包括該第二分組的分組處理信息(例如,圖2B的分組處理信息224)的數(shù)據(jù)。該槽由哈希值h3(k2)來(lái)索引,并且該塊由第二塊編號(hào)來(lái)索引。在存儲(chǔ)器訪問(wèn)中,讀取該塊是在無(wú)需讀取該槽中的其它塊的情況下進(jìn)行的。在一些實(shí)施例中,在單個(gè)存儲(chǔ)器事務(wù)(例如,單總線請(qǐng)求事務(wù),其示例是單個(gè)突發(fā))中從存儲(chǔ)該第四表的存儲(chǔ)器(例如,圖1的存儲(chǔ)器120中)讀取(438)該塊。在一些實(shí)施例中,用于存儲(chǔ)該第四表的存儲(chǔ)器是DRAM。

在操作436中,可以從該塊讀取(440)多個(gè)沖突元素220-0到220-(q-1)(圖2B)。每個(gè)沖突元素220存儲(chǔ)相應(yīng)的鍵222和與該相應(yīng)的鍵222相關(guān)聯(lián)的相應(yīng)的分組處理信息224。(例如,使用圖1的比較邏輯單元112)確定沖突元素220-0到220-(q-1)中的一個(gè)沖突元素的相應(yīng)的鍵222與該第二鍵匹配。將該沖突元素220中的相應(yīng)的分組處理信息224識(shí)別為該第二分組的分組處理信息。

在一些實(shí)施例中,為了在操作440中讀取多個(gè)沖突元素220-0到220-(q-1),使用下面的表達(dá)式來(lái)確定用于存儲(chǔ)該第四表的存儲(chǔ)器中(例如,存儲(chǔ)器120中)的存儲(chǔ)器偏移:

(h3(k2)*n+q*(第二塊編號(hào)))*y(2)其中,h3(k2)是在操作430中生成的哈希值,n是第四表的每個(gè)槽中(例如,圖3的哈希表302的每個(gè)槽304中)的沖突元素220的數(shù)量,q是多個(gè)沖突元素220-0到220-(q-1)中的沖突元素220的數(shù)量,并且y是每個(gè)沖突元素220的大小。然后,從具有該存儲(chǔ)器偏移(例如,針對(duì)存儲(chǔ)器120中的哈希表302的起始)的存儲(chǔ)器位置讀取該多個(gè)沖突元素220-0到220-(q-1)。

例如,由表訪問(wèn)模塊110(圖1)來(lái)執(zhí)行讀取操作434和436。

根據(jù)該第二分組的分組處理信息來(lái)處理(442)該第二分組。在一些實(shí)施例中,該第二分組被提供給由該分組處理信息指定的輸出端口以用于傳輸。例如,分組轉(zhuǎn)發(fā)引擎118將該第二分組路由給指定的端口102(圖1)。

方法400通過(guò)將對(duì)第二表和/或第四表的存儲(chǔ)器訪問(wèn)的大小限于槽內(nèi)的塊而不是整個(gè)槽,來(lái)提供低時(shí)延的表查找。方法400還可以將對(duì)第一表和/或第三表的存儲(chǔ)器訪問(wèn)的大小限于槽內(nèi)的單元格而不是整個(gè)槽。在第一表和/或第三表中存儲(chǔ)塊編號(hào)允許在不增加時(shí)延的情況下增加第二表和/或第三表的每個(gè)槽中的沖突元素的數(shù)量。從而可以實(shí)現(xiàn)具有結(jié)合低沖突率和低時(shí)延的高使用率和高負(fù)載因數(shù)的大型查找表。

盡管方法400包括若干個(gè)看上去以特定順序發(fā)生的操作,然而顯而易見(jiàn)的是,方法400能夠包括更多或更少的操作并且該操作中的一些能夠被連續(xù)或并行地執(zhí)行。兩個(gè)或更多操作的順序可以被改變,兩個(gè)或更多操作的效果可以重疊,并且兩個(gè)或更多操作可以被組合為單個(gè)操作。

圖5A和5B示出了根據(jù)一些實(shí)施例的維護(hù)查找表的方法500的流程圖。該方法500,例如在系統(tǒng)100(圖1)中執(zhí)行,并且可以結(jié)合方法400(圖4A-圖4B)一起執(zhí)行。

在方法500中,創(chuàng)建(502,圖5A)第一表(例如,圖2A的存根表210),其被劃分為第一批多個(gè)槽(例如,槽212-0到槽212-(m-1)),其中,每個(gè)槽被劃分為第一批多個(gè)單元格(例如,單元格214-0到單元格214-(b-1))。例如,該第一表被存儲(chǔ)在存儲(chǔ)器124(圖1)中,在一些實(shí)施例中其是SRAM。在一些實(shí)施例中,每個(gè)單元格在存儲(chǔ)器124中是可以被獨(dú)立訪問(wèn)的(例如,在單個(gè)相應(yīng)的存儲(chǔ)器事務(wù)中)。

創(chuàng)建(504)第二表(例如,圖2A的哈希表202),其被劃分為第二批多個(gè)槽(例如,槽204-0到槽204-(m-1)),其中,每個(gè)槽被劃分為第一批多個(gè)塊(例如,塊206-0到塊206-(p-1))。例如,該第二表存儲(chǔ)在存儲(chǔ)器120中(圖1),在一些實(shí)施例中其是DRAM。在一些實(shí)施例中,每個(gè)塊包括(506)多個(gè)沖突元素(例如,圖2B的沖突元素220-0到?jīng)_突元素220-(q-1))。在一些實(shí)施例中,每個(gè)塊在存儲(chǔ)器120中是可以獨(dú)立地訪問(wèn)的(例如,在單總線請(qǐng)求事務(wù)中,其示例是突發(fā))。例如,每個(gè)塊的大小可以等于針對(duì)該存儲(chǔ)器120的每一數(shù)據(jù)突發(fā)的字節(jié)數(shù)量。

使用第一鍵k1來(lái)生成(508,510)哈希值h1(k1)和h2(k1)。例如,將第一哈希函數(shù)應(yīng)用于第一鍵以確定哈希值h1(k1),并且將第二哈希函數(shù)應(yīng)用于第一鍵以確定哈希值h2(k1)。例如,可以由哈希模塊108(圖1)來(lái)執(zhí)行哈希操作508和510。

第一鍵和與該第一鍵相關(guān)聯(lián)的分組處理信息被存儲(chǔ)(512)在第二表中的相應(yīng)槽中的相應(yīng)塊中。該相應(yīng)槽由哈希值h1(k1)來(lái)索引。該相應(yīng)塊具有第一塊編號(hào)。在一些實(shí)施例中,該第一鍵和與該第一鍵相關(guān)聯(lián)的分組處理信息被存儲(chǔ)(514)在該相應(yīng)塊中的沖突元素220中。

第一塊編號(hào)被存儲(chǔ)(516)在第一表的相應(yīng)槽中的相應(yīng)單元格中。該相應(yīng)槽由哈希值h1(k1)來(lái)索引。該相應(yīng)單元格由哈希值h2(k1)來(lái)索引。

根據(jù)一些實(shí)施例,由表維護(hù)模塊119(圖1)來(lái)執(zhí)行存儲(chǔ)操作512(例如,包括操作514)和516。

在一些實(shí)施例中,創(chuàng)建(圖5B的518)第三表(例如,圖3的存根表312),其被劃分為第三批多個(gè)槽(例如,槽312-0到槽312-(c-1)),其中,每個(gè)槽被劃分為第二批多個(gè)單元格(例如,單元格214-0到單元格214-(b-1))。在一些實(shí)施例中,每個(gè)單元格在存儲(chǔ)器124中是可以被獨(dú)立訪問(wèn)的(例如,在單個(gè)相應(yīng)的存儲(chǔ)器事務(wù)中)。另外,創(chuàng)建(520)第四表(例如,圖3的哈希表302),其被劃分為第四批多個(gè)槽(例如,槽304-0到槽304-(c-1)),其中,每個(gè)槽被劃分為第二批多個(gè)塊(例如,塊206-0到塊206-(p-1))。在一些實(shí)施例中,每個(gè)塊在存儲(chǔ)器120中是可以被獨(dú)立地訪問(wèn)的(例如,在單總線請(qǐng)求事務(wù)中,其示例是突發(fā))。在一些實(shí)施例中,每個(gè)塊包括(522)多個(gè)沖突元素(例如,圖2B的沖突元素220-0到?jīng)_突元素220-(q-1))。

使用第二鍵k2來(lái)生成(524,526)哈希值h3(k2)和h4(k2)。例如,將第三哈希函數(shù)應(yīng)用于第二鍵以確定哈希值h3(k2),并且將第四哈希函數(shù)應(yīng)用于第二鍵以確定哈希值h4(k2)。例如可由哈希模塊108(圖1)來(lái)執(zhí)行哈希操作524和526。

第二鍵和與該第二鍵相關(guān)聯(lián)的分組處理信息被存儲(chǔ)(528)在第四表中的相應(yīng)槽中的相應(yīng)塊中。該相應(yīng)槽由哈希值h3(k2)來(lái)索引。該相應(yīng)塊具有第二塊編號(hào)。在一些實(shí)施例中,該第二鍵和與該第二鍵相關(guān)聯(lián)的分組處理信息被存儲(chǔ)(530)在第四表中的相應(yīng)槽中的相應(yīng)塊中的沖突元素220中。

第二塊編號(hào)被存儲(chǔ)(532)在第三表中的相應(yīng)槽中的相應(yīng)單元格中。該相應(yīng)槽由哈希值h3(k2)來(lái)索引。該相應(yīng)單元格由哈希值h4(k2)來(lái)索引。

根據(jù)一些實(shí)施例,由表維護(hù)模塊119(圖1)來(lái)執(zhí)行存儲(chǔ)操作528(例如,包括操作540)和532。在一些實(shí)施例中,響應(yīng)于確定在第二表中由h1(k2)索引的槽不能存儲(chǔ)該第二鍵及其相關(guān)聯(lián)的分組處理信息(例如,由于該槽是滿的),來(lái)執(zhí)行存儲(chǔ)操作528和532。

該方法500提供了具備高使用率、高負(fù)載因數(shù)、低沖突率和低時(shí)延的查找表。盡管方法500包括若干個(gè)看上去以特定順序發(fā)生的操作,然而顯而易見(jiàn)的是,方法500能夠包括更多或更少的操作并且該操作中的一些能夠被連續(xù)或并行地執(zhí)行。兩個(gè)或更多操作的順序可以被改變,兩個(gè)或更多操作的效果可以重疊,并且兩個(gè)或更多操作可以被組合為單個(gè)操作。

在一些實(shí)施例中,利用硬件來(lái)執(zhí)行方法400和/或500。例如,可以使用處理電路104中對(duì)應(yīng)于鍵構(gòu)造模塊106、哈希模塊108、表訪問(wèn)模塊110、分組處理模塊116和/或表維護(hù)模塊119的一個(gè)或多個(gè)狀態(tài)機(jī)來(lái)執(zhí)行方法400和/或500。替代地,可以利用軟件來(lái)實(shí)現(xiàn)方法400和/或500。例如,該處理電路104可以包括處理器并且可以耦合到非易失性存儲(chǔ)器,該非易失性存儲(chǔ)器用作存儲(chǔ)被配置為由處理器執(zhí)行的一個(gè)或多個(gè)程序的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。一個(gè)或多個(gè)程序可以包括指令,當(dāng)其由處理器執(zhí)行時(shí)使得系統(tǒng)100執(zhí)行方法400和/或500。該一個(gè)或多個(gè)程序因此可以包括指令,當(dāng)其由處理器執(zhí)行時(shí)實(shí)現(xiàn)鍵構(gòu)造模塊106、哈希模塊108、表訪問(wèn)模塊110、分組處理模塊116和/或表維護(hù)模塊119的功能。

在上述的描述中,已經(jīng)參考了其特定示例性實(shí)施例來(lái)描述了本發(fā)明實(shí)施例。然而,顯而易見(jiàn)的是,可以在不脫離如所附權(quán)利要求所闡釋的本公開(kāi)內(nèi)容的廣泛精神和范圍的前提下對(duì)其做出各種修改和變化。因此,應(yīng)以說(shuō)明性而非限制性意義來(lái)考慮本描述和附圖。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
清涧县| 郯城县| 陆川县| 呼伦贝尔市| 大悟县| 周至县| 桐梓县| 柳州市| 荥阳市| 台北市| 潢川县| 海晏县| 伊宁县| 乌鲁木齐县| 奉贤区| 澄城县| 松潘县| 沙坪坝区| 武清区| 收藏| 大名县| 化州市| 灵璧县| 太原市| 纳雍县| 宿松县| 西丰县| 西安市| 张掖市| 嘉荫县| 长丰县| 许昌市| 湘潭市| 麻城市| 太和县| 汉源县| 姚安县| 汉沽区| 靖安县| 综艺| 调兵山市|