專利名稱:一種報(bào)文快速轉(zhuǎn)發(fā)方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,尤其涉及一種報(bào)文快速轉(zhuǎn)發(fā)方法及裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,一方面對(duì)交換機(jī)、防火墻等網(wǎng)絡(luò)設(shè)備的處理性能要求越來越高,另一方面音頻/視頻、P2P、云計(jì)算等各種新應(yīng)用、新業(yè)務(wù)層出不窮,迫使網(wǎng)絡(luò)設(shè)備集成的安全防護(hù)業(yè)務(wù)越來越復(fù)雜,造成整機(jī)的處理性能急劇下降。經(jīng)過大量的實(shí)際測(cè)試,申請(qǐng)人發(fā)現(xiàn)目前硬件的處理能力、驅(qū)動(dòng)底層的收發(fā)效率都是有保證的,網(wǎng)絡(luò)設(shè)備轉(zhuǎn)發(fā)性能的瓶頸主要在協(xié)議棧上層處理。上層處理對(duì)業(yè)務(wù)本身關(guān)注較多,導(dǎo)致處理效率低下,整機(jī)的轉(zhuǎn)發(fā)性能無法得到有效的提升。當(dāng)前的網(wǎng)絡(luò)設(shè)備基本都是驅(qū)動(dòng)收到報(bào)文后直接上送操作系統(tǒng)(如Linux)協(xié)議棧做業(yè)務(wù)和轉(zhuǎn)發(fā)處理。協(xié)議棧在報(bào)文轉(zhuǎn)發(fā)過程中會(huì)查二層轉(zhuǎn)發(fā)表、路由表、ARP表等一系列表項(xiàng),如果報(bào)文還需做其他業(yè)務(wù)(如報(bào)文審計(jì)、NAT轉(zhuǎn)發(fā)、IPsec等),則還需要查找對(duì)應(yīng)的各種表項(xiàng),做相應(yīng)的業(yè)務(wù)處理。網(wǎng)絡(luò)設(shè)備在轉(zhuǎn)發(fā)過程的各個(gè)階段,不但要查詢各種轉(zhuǎn)發(fā)表項(xiàng),為了滿足業(yè)務(wù)需要,往往又會(huì)嵌入很多業(yè)務(wù)處理流程,業(yè)務(wù)處理也需要查詢一系列表項(xiàng),而且?guī)缀跛械谋眄?xiàng)都是相互獨(dú)立的。過多的表項(xiàng)查詢次數(shù)和業(yè)務(wù)處理,不但提高了代碼復(fù)雜度,更重要的是大大的降低了對(duì)報(bào)文的轉(zhuǎn)發(fā)性能。請(qǐng)參考圖1,目前可以使用快速轉(zhuǎn)發(fā)技術(shù)(簡(jiǎn)稱快轉(zhuǎn))來解決轉(zhuǎn)發(fā)性能低下的問題??燹D(zhuǎn)的目的是簡(jiǎn)化和優(yōu)化報(bào)文的處理流程,將設(shè)備的主要流量在驅(qū)動(dòng)層面使用快轉(zhuǎn)模塊進(jìn)行轉(zhuǎn)發(fā),少數(shù)快轉(zhuǎn)模塊無法處理的報(bào)文經(jīng)過傳統(tǒng)流程上送協(xié)議棧處理。快轉(zhuǎn)原理利用同一個(gè)會(huì)話的報(bào)文轉(zhuǎn)發(fā)策略相同來實(shí)現(xiàn)的。會(huì)話的定義標(biāo)準(zhǔn)有很多,其中最流行的是采用五元組的方式來定義,所謂五元組通常包括源IP地址、目的IP地址、源端口號(hào)、目的端口號(hào)以及協(xié)議類型??燹D(zhuǎn)技術(shù)整體設(shè)計(jì)思路是當(dāng)一個(gè)會(huì)話的首報(bào)文到達(dá)設(shè)備時(shí),正常上送協(xié)議棧做轉(zhuǎn)發(fā)及業(yè)務(wù)處理,同時(shí)將相關(guān)處理結(jié)果信息收集好下刷到驅(qū)動(dòng)的快轉(zhuǎn)表項(xiàng)中,后續(xù)當(dāng)同一五元組的后續(xù)報(bào)文再次到達(dá)設(shè)備時(shí),只需在驅(qū)動(dòng)進(jìn)行一次快轉(zhuǎn)表查找操作即可完成對(duì)報(bào)文的處理和轉(zhuǎn)發(fā)??焖俎D(zhuǎn)發(fā)技術(shù)大大提高了設(shè)備整體的轉(zhuǎn)發(fā)效率。然而快速轉(zhuǎn)發(fā)技術(shù)也有其缺陷??燹D(zhuǎn)模塊通常包括有轉(zhuǎn)發(fā)表。轉(zhuǎn)發(fā)表的表項(xiàng)內(nèi)容由協(xié)議棧收集好下刷給驅(qū)動(dòng),表項(xiàng)大小根據(jù)內(nèi)存定制,原則是在不影響其它流程的基礎(chǔ)上,建立盡可能多的轉(zhuǎn)發(fā)表,讓大部分報(bào)文都能走快轉(zhuǎn)。但這樣一來轉(zhuǎn)發(fā)表可能會(huì)很大,如果使用數(shù)組存儲(chǔ),在查找的時(shí)候就需要遍歷整個(gè)數(shù)組,效率太差。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種快速轉(zhuǎn)發(fā)裝置,應(yīng)用于網(wǎng)絡(luò)設(shè)備上,用于基于會(huì)話對(duì)報(bào)文進(jìn)行轉(zhuǎn)發(fā);該裝置包括快轉(zhuǎn)執(zhí)行模塊以及表項(xiàng)處理模塊,其中快轉(zhuǎn)執(zhí)行模塊,用于根據(jù)報(bào)文的會(huì)話特征計(jì)算Hash值,根據(jù)該Hash值確定索引表中對(duì)應(yīng)的Hash桶;其中所述索引表包括N個(gè)Hash桶,N為大于等于2的自然數(shù),每個(gè)Hash桶包括M個(gè)索引表項(xiàng),M為大于等于2的自然數(shù);其中每個(gè)索引表項(xiàng)保存有指向轉(zhuǎn)發(fā)表中一條轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針;所述快轉(zhuǎn)執(zhí)行模塊進(jìn)一步用于遍歷該Hash桶中的M個(gè)索引表項(xiàng),并且在遍歷過程中查找到與會(huì)話特征對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)時(shí)根據(jù)轉(zhuǎn)發(fā)表項(xiàng)保存的處理結(jié)果信息執(zhí)行報(bào)文轉(zhuǎn)發(fā),而在遍歷過程未查找到對(duì)應(yīng)轉(zhuǎn)發(fā)表項(xiàng)時(shí)提交上層轉(zhuǎn)發(fā)模塊處理;表項(xiàng)處理模塊,用于將上層轉(zhuǎn)發(fā)模塊對(duì)報(bào)文的處理結(jié)果信息保存在轉(zhuǎn)發(fā)表項(xiàng)中,并根據(jù)會(huì)話特征計(jì)算出Ha sh值,根據(jù)Hash值確定對(duì)應(yīng)的Hash桶,將指向該轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針保存在Hash桶中未被占用的索引表項(xiàng)中。本發(fā)明還提供一種快速轉(zhuǎn)發(fā)方法,應(yīng)用于網(wǎng)絡(luò)設(shè)備上,用于基于會(huì)話對(duì)報(bào)文進(jìn)行轉(zhuǎn)發(fā);該方法包括以下步驟步驟A、根據(jù)報(bào)文的會(huì)話特征計(jì)算Hash值,根據(jù)該Hash值確定索引表中對(duì)應(yīng)的Hash桶;其中所述索引表包括N個(gè)Hash桶,N為大于等于2的自然數(shù),每個(gè)Hash桶包括M個(gè)索引表項(xiàng),M為大于等于2的自然數(shù);其中每個(gè)索引表項(xiàng)保存有指向轉(zhuǎn)發(fā)表中一條轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針;步驟B、遍歷該Hash桶中的M個(gè)索引表項(xiàng),并且在遍歷過程中查找到與會(huì)話特征對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)時(shí)根據(jù)轉(zhuǎn)發(fā)表項(xiàng)保存的處理結(jié)果信息執(zhí)行報(bào)文轉(zhuǎn)發(fā),而在遍歷過程未查找到對(duì)應(yīng)轉(zhuǎn)發(fā)表項(xiàng)時(shí)提交上層轉(zhuǎn)發(fā)模塊處理;步驟C、將上層轉(zhuǎn)發(fā)模塊對(duì)報(bào)文的處理結(jié)果信息保存在轉(zhuǎn)發(fā)表項(xiàng)中,并根據(jù)會(huì)話特征計(jì)算出Hash值,根據(jù)Hash值確定對(duì)應(yīng)的Hash桶,將指向該轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針保存在Hash桶中未被占用的索引表項(xiàng)中。本發(fā)明采用新的表項(xiàng)結(jié)構(gòu)和查詢?cè)O(shè)計(jì)方式,可以從容應(yīng)對(duì)Hash沖突的問題,并且提供擴(kuò)展機(jī)制應(yīng)對(duì)嚴(yán)重Hash沖突的能力。
圖I是快速轉(zhuǎn)發(fā)技術(shù)的原理圖。圖2是本發(fā)明一種實(shí)施方式中MSTP切換流程圖。圖3是本發(fā)明一種實(shí)施方式中預(yù)留表項(xiàng)機(jī)制的實(shí)現(xiàn)原理圖。
具體實(shí)施例方式本發(fā)明將表項(xiàng)設(shè)計(jì)為哈希(Hash)結(jié)構(gòu),對(duì)于Hash結(jié)構(gòu)來說一個(gè)重要問題就是解決Hash沖突。然而考慮到轉(zhuǎn)發(fā)表項(xiàng)本身比較大,直接使用轉(zhuǎn)發(fā)表項(xiàng)處理沖突,內(nèi)存開銷太大,因此本發(fā)明還引入一個(gè)索引表。轉(zhuǎn)發(fā)表中表項(xiàng)數(shù)目個(gè)數(shù)為N時(shí),索引表設(shè)計(jì)成N*M,其中N為索引表中Hash桶數(shù)量,M為桶深,即一個(gè)Hash桶中索引表項(xiàng)數(shù)量。索引表項(xiàng)包括兩個(gè)字段key和轉(zhuǎn)發(fā)指針,共X個(gè)字節(jié)。以下介紹本發(fā)明一個(gè)較佳實(shí)施方式的實(shí)現(xiàn)過程。本發(fā)明一種實(shí)施方式中提供一種快速轉(zhuǎn)發(fā)裝置,該裝置包括快轉(zhuǎn)執(zhí)行模塊、表項(xiàng)處理模塊以及臨界處理模塊。首先介紹表項(xiàng)的添加過程,表項(xiàng)處理模塊在初始化時(shí)申請(qǐng)好兩段連續(xù)的內(nèi)存空間用來分別存放轉(zhuǎn)發(fā)表以及索引表。由于表項(xiàng)使用連續(xù)內(nèi)存使得緩存預(yù)取時(shí)可以將多個(gè)表項(xiàng)一次取出,提高緩存命中可以大大提高緩存命中,縮小內(nèi)存存取速度與CPU指令處理速度的不匹配,充分利用CPU使用率;而且內(nèi)存一次申請(qǐng)出來,快轉(zhuǎn)模塊自己負(fù)責(zé)內(nèi)存管理,避免頻繁的向內(nèi)核申請(qǐng)釋放內(nèi)存,提高了內(nèi)存管理效率。在優(yōu)選的實(shí)施方式中,轉(zhuǎn)發(fā)表使用兩個(gè)鏈表使用鏈表以及空閑鏈表。其中使用鏈表存儲(chǔ)已經(jīng)添加的正在使用的轉(zhuǎn)發(fā)表項(xiàng),空閑鏈表存儲(chǔ)空閑的表項(xiàng),初始化的時(shí)候表項(xiàng)處理模塊將所有轉(zhuǎn)發(fā)表項(xiàng)都串接在空閑鏈表上。所謂空閑鏈表相當(dāng)于內(nèi)核中的空閑內(nèi)存池,初始化時(shí)將所有轉(zhuǎn)發(fā)表項(xiàng)串接在空閑鏈表是指將轉(zhuǎn)發(fā)表項(xiàng)要占用的內(nèi)存串接在空閑鏈表,此時(shí)轉(zhuǎn)發(fā)表項(xiàng)的內(nèi)容都是無效的。只有在添加轉(zhuǎn)發(fā)表項(xiàng)后,才將轉(zhuǎn)發(fā)表項(xiàng)從空閑鏈表刪除并串接到使用鏈表,此時(shí)轉(zhuǎn)發(fā)表項(xiàng)才是有效的。此處相當(dāng)于維護(hù)一套內(nèi)存管理機(jī)制,空閑鏈表相當(dāng)于內(nèi)核中沒有使用的內(nèi)存,使用鏈表相當(dāng)于正在使用的內(nèi)存。對(duì)于會(huì)話的首個(gè)報(bào)文來說,由于查不到對(duì)應(yīng)轉(zhuǎn)發(fā)表項(xiàng)會(huì)被快轉(zhuǎn)執(zhí)行模塊上送上層轉(zhuǎn)發(fā)模塊處理(通常也稱為協(xié)議棧處理),協(xié)議棧做完業(yè)務(wù)處理收集好處理結(jié)果信息后,將處理結(jié)果信息交給表項(xiàng)處理模塊。表項(xiàng)處理模塊首先根據(jù)報(bào)文五元組計(jì)算Hash值(Hash算法通常是預(yù)定的),根據(jù)Hash值選定對(duì)應(yīng)Hash桶,在Hash桶內(nèi)找到可用的索引表項(xiàng),然后再?gòu)目臻e鏈表頭部獲取一個(gè)轉(zhuǎn)發(fā)表項(xiàng),將該轉(zhuǎn)發(fā)表項(xiàng)串接到使用鏈表的尾指針上并更新使 用鏈表的尾指針,最后把收集好的處理結(jié)果信息下刷至轉(zhuǎn)發(fā)表項(xiàng)中,并設(shè)置索引表項(xiàng)中的轉(zhuǎn)發(fā)指針指向該轉(zhuǎn)發(fā)表項(xiàng)。一旦某個(gè)會(huì)話對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)以及索引表項(xiàng)建立之后,快轉(zhuǎn)執(zhí)行模塊就可以利用索引表以及轉(zhuǎn)發(fā)表項(xiàng)來對(duì)該會(huì)話的后續(xù)報(bào)文執(zhí)行快轉(zhuǎn)了。快轉(zhuǎn)執(zhí)行模塊首先根據(jù)會(huì)話標(biāo)識(shí)(比如五元組)計(jì)算出Hash值,在索引表找到對(duì)應(yīng)的Hash桶,如果所述宏定義為M,那只需要遍歷當(dāng)前Hash桶就可以了。由于Hash桶深為M,那么快轉(zhuǎn)執(zhí)行模塊最多可能需要執(zhí)行M次查找,快轉(zhuǎn)執(zhí)行模塊查表包括以下步驟步驟10,確定是否已經(jīng)完成Hash桶中的索引表項(xiàng)遍歷,如果是轉(zhuǎn)步驟11,否則轉(zhuǎn)步驟12 ;步驟11,將報(bào)文上送協(xié)議棧進(jìn)行處理;步驟12,在Hash桶中選定下一個(gè)表項(xiàng)(初始為零),根據(jù)該表項(xiàng)內(nèi)存放的指針找到對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng);步驟13,比較該轉(zhuǎn)發(fā)表項(xiàng)保存的五元組是否與報(bào)文的五元組匹配,如果是轉(zhuǎn)步驟14,否則返回步驟10 ;步驟14,提取轉(zhuǎn)發(fā)表項(xiàng)中的處理結(jié)果信息執(zhí)行快轉(zhuǎn)。在優(yōu)選的實(shí)施方式中,假設(shè)索引表的Hash桶深M為6,當(dāng)某個(gè)特定Hash桶內(nèi)的6個(gè)表項(xiàng)都被占用時(shí),表項(xiàng)處理模塊將往相鄰的下一個(gè)Hash桶中存儲(chǔ)數(shù)據(jù)。此時(shí)表項(xiàng)處理模塊需要做特別處理,在實(shí)現(xiàn)上需要在添加與查找表項(xiàng)時(shí)遍歷兩個(gè)Hash桶,也就是Hash值對(duì)應(yīng)的Hash桶以及下一個(gè)相鄰的Hash桶,也就是要遍歷12個(gè)表項(xiàng)。請(qǐng)參考表I的示例,在正常情況下,每個(gè)Hash桶內(nèi)的Hash值都是相同的,假設(shè)一個(gè)報(bào)文的五元組Hash值=HVl。HVl所在Hash桶X內(nèi)6個(gè)表項(xiàng)都已經(jīng)被占用,此時(shí)HV1+1所在下一個(gè)Hash桶Y的第一個(gè)表項(xiàng)也被占用,此時(shí)HVl被寫入Hash桶Y的第二個(gè)表項(xiàng)或者其他空閑的表項(xiàng)中。
權(quán)利要求
1.一種快速轉(zhuǎn)發(fā)裝置,應(yīng)用于網(wǎng)絡(luò)設(shè)備上,用于基于會(huì)話對(duì)報(bào)文進(jìn)行轉(zhuǎn)發(fā);該裝置包括快轉(zhuǎn)執(zhí)行模塊以及表項(xiàng)處理模塊,其特征在于 快轉(zhuǎn)執(zhí)行模塊,用于根據(jù)報(bào)文的會(huì)話特征計(jì)算Hash值,根據(jù)該Hash值確定索引表中對(duì)應(yīng)的Hash桶;其中所述索引表包括N個(gè)Hash桶,N為大于等于2的自然數(shù),每個(gè)Hash桶包括M個(gè)索引表項(xiàng),M為大于等于2的自然數(shù);其中每個(gè)索引表項(xiàng)保存有指向轉(zhuǎn)發(fā)表中一條轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針;所述快轉(zhuǎn)執(zhí)行模塊進(jìn)一步用于遍歷該Hash桶中的M個(gè)索引表項(xiàng),并且在遍歷過程中查找到與會(huì)話特征對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)時(shí)根據(jù)轉(zhuǎn)發(fā)表項(xiàng)保存的處理結(jié)果信息執(zhí)行報(bào)文轉(zhuǎn)發(fā),而在遍歷過程未查找到對(duì)應(yīng)轉(zhuǎn)發(fā)表項(xiàng)時(shí)提交上層轉(zhuǎn)發(fā)模塊處理; 表項(xiàng)處理模塊,用于將上層轉(zhuǎn)發(fā)模塊對(duì)報(bào)文的處理結(jié)果信息保存在轉(zhuǎn)發(fā)表項(xiàng)中,并根據(jù)會(huì)話特征計(jì)算出Hash值,根據(jù)Hash值確定對(duì)應(yīng)的Hash桶,將指向該轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針保存在Hash桶中未被占用的索引表項(xiàng)中。
2.如權(quán)利要求I所述的裝置,其特征在于,所述表項(xiàng)處理模塊進(jìn)一步用于在Hash桶中M個(gè)索引表項(xiàng)均被占用時(shí)從下一個(gè)相鄰Hash桶中獲取未被占用的索引表項(xiàng)來保存所述轉(zhuǎn)發(fā)指針;所述快轉(zhuǎn)執(zhí)行模塊進(jìn)一步用于遍歷該Hash桶以及該Hash桶下一個(gè)相鄰的Hash桶。
3.如權(quán)利要求I所述的裝置,其特征在于,所述表項(xiàng)處理模塊進(jìn)一步用于在會(huì)話超時(shí)時(shí)將該會(huì)話對(duì)應(yīng)的索引表項(xiàng)以及轉(zhuǎn)發(fā)表項(xiàng)標(biāo)記為無效,所述快轉(zhuǎn)執(zhí)行模塊進(jìn)一步用于在遍歷Hash桶時(shí)忽略無效的索引表項(xiàng)。
4.如權(quán)利要求3所述的裝置,其特征在于,該裝置運(yùn)行于多核系統(tǒng)時(shí)還包括共享處理模塊,運(yùn)行于獨(dú)立的CPU內(nèi)核線程上,用于將被標(biāo)記為無效的索引表項(xiàng)以及轉(zhuǎn)發(fā)表項(xiàng)刪除。
5.如權(quán)利要求I所述的裝置,其特征在于,轉(zhuǎn)發(fā)表包括空閑鏈表以及使用鏈表,其中表項(xiàng)處理單元進(jìn)一步用于將被刪除的轉(zhuǎn)發(fā)表項(xiàng)串接到空閑鏈表的尾部,并用于從空閑鏈表的頭部獲得轉(zhuǎn)發(fā)表項(xiàng)以保存新會(huì)話對(duì)應(yīng)的處理結(jié)果信息。
6.如權(quán)利要求5所述的裝置,其特征在于,該裝置運(yùn)行于多核系統(tǒng)時(shí),所述表項(xiàng)處理模塊進(jìn)一步根據(jù)預(yù)設(shè)的預(yù)留表項(xiàng)數(shù)量執(zhí)行處理信息保存到轉(zhuǎn)發(fā)表項(xiàng)的操作,當(dāng)剩余空閑表項(xiàng)數(shù)量等于預(yù)留表項(xiàng)數(shù)量時(shí),停止當(dāng)前轉(zhuǎn)發(fā)表項(xiàng)的保存操作以確保預(yù)留表項(xiàng)數(shù)量始終不變。
7.一種快速轉(zhuǎn)發(fā)方法,應(yīng)用于網(wǎng)絡(luò)設(shè)備上,用于基于會(huì)話對(duì)報(bào)文進(jìn)行轉(zhuǎn)發(fā);其特征在于,該方法包括以下步驟 步驟A、根據(jù)報(bào)文的會(huì)話特征計(jì)算Hash值,根據(jù)該Hash值確定索引表中對(duì)應(yīng)的Hash桶;其中所述索引表包括N個(gè)Hash桶,N為大于等于2的自然數(shù),每個(gè)Hash桶包括M個(gè)索引表項(xiàng),M為大于等于2的自然數(shù);其中每個(gè)索引表項(xiàng)保存有指向轉(zhuǎn)發(fā)表中一條轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針; 步驟B、遍歷該Hash桶中的M個(gè)索引表項(xiàng),并且在遍歷過程中查找到與會(huì)話特征對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)時(shí)根據(jù)轉(zhuǎn)發(fā)表項(xiàng)保存的處理結(jié)果信息執(zhí)行報(bào)文轉(zhuǎn)發(fā),而在遍歷過程未查找到對(duì)應(yīng)轉(zhuǎn)發(fā)表項(xiàng)時(shí)提交上層轉(zhuǎn)發(fā)模塊處理; 步驟C、將上層轉(zhuǎn)發(fā)模塊對(duì)報(bào)文的處理結(jié)果信息保存在轉(zhuǎn)發(fā)表項(xiàng)中,并根據(jù)會(huì)話特征計(jì)算出Hash值,根據(jù)Hash值確定對(duì)應(yīng)的Hash桶,將指向該轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針保存在Hash桶中未被占用的索引表項(xiàng)中。
8.如權(quán)利要求7所述的方法,其特征在于,所述步驟B進(jìn)一步包括在Hash桶中M個(gè)索引表項(xiàng)均被占用時(shí)從下一個(gè)相鄰Hash桶中獲取未被占用的索引表項(xiàng)來保存所述轉(zhuǎn)發(fā)指 針;所述步驟A的遍歷步驟進(jìn)一步包括遍歷該Hash桶以及該Hash桶下一個(gè)相鄰的Hash 桶。
9.如權(quán)利要求7所述的方法,其特征在于,所述步驟B進(jìn)一步包括在會(huì)話超時(shí)時(shí)將該會(huì)話對(duì)應(yīng)的索引表項(xiàng)以及轉(zhuǎn)發(fā)表項(xiàng)標(biāo)記為無效,所述步驟A進(jìn)一步包括在遍歷Hash桶時(shí)忽略無效的索引表項(xiàng)。
10.如權(quán)利要求9所述的方法,其特征在于,該方法運(yùn)行于多核系統(tǒng)時(shí)還包括步驟D,利用獨(dú)立的CPU內(nèi)核線程將被標(biāo)記為無效的索引表項(xiàng)以及轉(zhuǎn)發(fā)表項(xiàng)刪除。
11.如權(quán)利要求7所述的方法,其特征在于,轉(zhuǎn)發(fā)表包括空閑鏈表以及使用鏈表,其中所述步驟B進(jìn)一步包括將被刪除的轉(zhuǎn)發(fā)表項(xiàng)串接到空閑鏈表的尾部,并用于從空閑鏈表的頭部獲得轉(zhuǎn)發(fā)表項(xiàng)以保存新會(huì)話對(duì)應(yīng)的處理結(jié)果信息。
12.如權(quán)利要求11所述的方法,其特征在于,該裝置運(yùn)行于多核系統(tǒng)時(shí),所述步驟B進(jìn)一步包括根據(jù)預(yù)設(shè)的預(yù)留表項(xiàng)數(shù)量執(zhí)行處理信息保存到轉(zhuǎn)發(fā)表項(xiàng)的操作,當(dāng)剩余空閑表項(xiàng)數(shù)量等于預(yù)留表項(xiàng)數(shù)量時(shí),停止當(dāng)前轉(zhuǎn)發(fā)表項(xiàng)的保存操作以確保預(yù)留表項(xiàng)數(shù)量始終不變。
全文摘要
本發(fā)明提供一種快速轉(zhuǎn)發(fā)方法及對(duì)應(yīng)的裝置,該方法包括根據(jù)報(bào)文的會(huì)話特征計(jì)算Hash值,根據(jù)該Hash值確定索引表中對(duì)應(yīng)的Hash桶;其中所述索引表包括N個(gè)Hash桶;其中每個(gè)索引表項(xiàng)保存有指向轉(zhuǎn)發(fā)表中一條轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針;遍歷該Hash桶,在查找到與會(huì)話特征對(duì)應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)時(shí)執(zhí)行快轉(zhuǎn),而在遍歷過程未查找到對(duì)應(yīng)轉(zhuǎn)發(fā)表項(xiàng)時(shí)提交上層轉(zhuǎn)發(fā)模塊處理;將上層轉(zhuǎn)發(fā)模塊的處理結(jié)果信息保存在轉(zhuǎn)發(fā)表項(xiàng)中,根據(jù)會(huì)話特征計(jì)算出Hash值并確定對(duì)應(yīng)的Hash桶,將指向該轉(zhuǎn)發(fā)表項(xiàng)的轉(zhuǎn)發(fā)指針保存在Hash桶中。本發(fā)明采用新的表項(xiàng)結(jié)構(gòu)和查詢?cè)O(shè)計(jì)方式,可以從容應(yīng)對(duì)Hash沖突的問題,并且提供擴(kuò)展機(jī)制應(yīng)對(duì)嚴(yán)重Hash沖突的能力。
文檔編號(hào)H04L12/741GK102882810SQ20121041929
公開日2013年1月16日 申請(qǐng)日期2012年10月26日 優(yōu)先權(quán)日2012年10月26日
發(fā)明者陳子康, 秦永樂, 王偉威, 任紅軍 申請(qǐng)人:杭州迪普科技有限公司