基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其設(shè)及一種基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法和裝 置。
【背景技術(shù)】
[0002] 隨著技術(shù)的發(fā)展,目前已普遍使用多核處理器。多核處理器的出現(xiàn),是期待處理能 力可W因?yàn)橹醒胩幚砥?Central Processing化it,CPU)個數(shù)的增加而翻倍。然而,由于多 核之間需要共享資源,互相存在競爭,通常在CPU使用共享資源時會采用加鎖方式,鎖的使 用會導(dǎo)致多核并發(fā)時性能下降。
[0003] 基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)時,需要基于會話表對報文進(jìn)行轉(zhuǎn)發(fā)。會話表資源的設(shè) 計W及查找會話表成為影響多核系統(tǒng)轉(zhuǎn)發(fā)報文的關(guān)鍵。通常是通過查找全局會話哈希表來 查找到會話表,目前在查找全局會話哈希表時采用加鎖方式,而加鎖本身會帶來性能開銷, 影響多核系統(tǒng)的報文轉(zhuǎn)發(fā)性能。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
[0005] 為此,本發(fā)明的一個目的在于提出一種基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法,該方法可 W提高多核系統(tǒng)的報文轉(zhuǎn)發(fā)性能。
[0006] 本發(fā)明的另一個目的在于提出一種基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)裝置。
[0007] 為達(dá)到上述目的,本發(fā)明第一方面實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法, 包括:接收報文,并從所述報文中提取五元組;在全局會話哈希表中,無鎖查找是否存在與 所述五元組對應(yīng)的會話;如果不存在,則在接收到報文的CPU內(nèi)新建會話,根據(jù)新建的會話 轉(zhuǎn)發(fā)所述報文;如果存在,確定所述會話屬于的CPU;如果所述會話屬于的CPU是接收到報文 的CPU,根據(jù)接收到報文的CPU內(nèi)的所述會話轉(zhuǎn)發(fā)所述報文;如果所述會話屬于的CPU不是接 收到報文的CPU,則將所述報文轉(zhuǎn)發(fā)給所述會話屬于的CPU,并由所述會話屬于的CP訴良據(jù)所 述會話轉(zhuǎn)發(fā)所述報文。
[000引本發(fā)明第一方面實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法,通過在查找全局會 話哈希表時,采用無鎖方式,相對于加鎖方式查找,可W避免加鎖本身帶來的性能降低問 題,從而可W提高多核系統(tǒng)轉(zhuǎn)發(fā)報文的性能。進(jìn)一步的,所述會話是每個CPU內(nèi)獨(dú)立的局部 資源,僅能被建立會話的CPU訪問,禁止非建立會話的CPU訪問,且被建立會話的CPU訪問時 采用無鎖訪問方式,從而可W進(jìn)一步降低加鎖帶來的性能下降問題。
[0009]為達(dá)到上述目的,本發(fā)明第二方面實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)裝置, 包括:提取模塊,用于接收報文,并從所述報文中提取五元組;查找模塊,用于在全局會話哈 希表中,無鎖查找是否存在與所述五元組對應(yīng)的會話;新建模塊,用于不存在所述會話時, 則在接收到報文的CPU內(nèi)新建會話,根據(jù)新建的會話轉(zhuǎn)發(fā)所述報文;確定模塊,用于存在所 述會話時,確定所述會話屬于的CPU;第一轉(zhuǎn)發(fā)模塊,用于在所述會話屬于的CPU是接收到報 文的CPU時,根據(jù)接收到報文的CPU內(nèi)的所述會話轉(zhuǎn)發(fā)所述報文;第二轉(zhuǎn)發(fā)模塊,用于在所述 會話屬于的CPU不是接收到報文的CPU時,則將所述報文轉(zhuǎn)發(fā)給所述會話屬于的CPU,并由所 述會話屬于的CP訴良據(jù)所述會話轉(zhuǎn)發(fā)所述報文。
[0010] 本發(fā)明第二方面實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)裝置,通過在查找全局會 話哈希表時,采用無鎖方式,相對于加鎖方式查找,可W避免加鎖本身帶來的性能降低問 題,從而可W提高多核系統(tǒng)轉(zhuǎn)發(fā)報文的性能。進(jìn)一步的,所述會話是每個CPU內(nèi)獨(dú)立的局部 資源,僅能被建立會話的CPU訪問,禁止非建立會話的CPU訪問,且被建立會話的CPU訪問時 采用無鎖訪問方式,從而可W進(jìn)一步降低加鎖帶來的性能下降問題。
[0011] 本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變 得明顯,或通過本發(fā)明的實(shí)踐了解到。
【附圖說明】
[0012] 本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對實(shí)施例的描述中將變得 明顯和容易理解,其中:
[0013] 圖1是本發(fā)明一實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法的流程示意圖;
[0014] 圖2是本發(fā)明另一實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法的流程示意圖;
[0015] 圖3是本發(fā)明實(shí)施例中添加哈希表項(xiàng)的流程示意圖;
[0016] 圖4-7是本發(fā)明實(shí)施例中添加哈希表項(xiàng)時桶鏈表的變化示意圖;
[0017] 圖8是本發(fā)明實(shí)施例中刪除哈希表項(xiàng)的流程示意圖;
[0018] 圖9-12是本發(fā)明實(shí)施例中刪除哈希表項(xiàng)時桶鏈表的變化示意圖;
[0019] 圖13是本發(fā)明實(shí)施例中會話結(jié)構(gòu)體的示意圖;
[0020] 圖14是本發(fā)明實(shí)施例中一種實(shí)驗(yàn)場景示意圖;
[0021] 圖15是本發(fā)明另一實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)裝置的結(jié)構(gòu)示意圖;
[0022] 圖16是本發(fā)明另一實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0023] 下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號表示相同或類似的模塊或具有相同或類似功能的模塊。下面通過參考附 圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。相反,本 發(fā)明的實(shí)施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同 物。
[0024] 圖1是本發(fā)明一實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法的流程示意圖,該方 法包括:
[0025] Sl 1:接收報文,并從所述報文中提取五元組。
[0026] 在多核系統(tǒng)中,會存在多個CPU。當(dāng)一個CPU接收到報文后,可W從報文中提取報文 的五元組。
[0027] 報文的五元組包括:源互聯(lián)網(wǎng)(IP)地址、源端口(port)號、目標(biāo)IP地址、目的端口 號和協(xié)議類型。
[00%] S12:在全局會話哈希表中,無鎖查找是否存在與所述五元組對應(yīng)的會話。
[0029] 區(qū)別于常用的加鎖方式,本實(shí)施例中,在全局會話哈希表中進(jìn)行查找時,采用無鎖 方式。
[0030] 全局會話哈希表包括多個哈希表項(xiàng),通常哈希表項(xiàng)中存儲鍵值對化ey,value),其 中,key值是五元組,value值是會話(session)。
[0031] 因此,根據(jù)哈希表項(xiàng)可W判斷出是否存在與報文中提取的五元組對應(yīng)的會話。
[0032] 進(jìn)一步的,為了降低存儲量,可W對哈希表項(xiàng)進(jìn)行優(yōu)化,具體可W參見后續(xù)相關(guān)描 述。
[0033] S13:如果不存在,則在接收到報文的CPU內(nèi)新建會話,根據(jù)新建的會話轉(zhuǎn)發(fā)所述報 文。
[0034] 例如,CPU_A接收到報文后,如果CPU_A在查找全局會話哈希表后,沒有查找到與報 文的五元組對應(yīng)的會話,則CPU_A在CPU_A內(nèi)新建會話,之后可W根據(jù)新建的會話轉(zhuǎn)發(fā)報文。
[0035] S14:如果存在,確定所述會話屬于的CPU。
[0036] 例如,CPU_A接收到報文后,如果CPU_A在查找全局會話哈希表后,能夠查找到與報 文的五元組對應(yīng)的會話,則CPU_A確定該會話屬于的CPU,假設(shè)該會話屬于的CPU是CPU_B。
[0037] S15:如果所述會話屬于的CPU是接收到報文的CPU,根據(jù)接收到報文的CPU內(nèi)的所 述會話轉(zhuǎn)發(fā)所述報文。
[003引例如,CPU_B與CPU_A相同時,CPU_A可W根據(jù)自身內(nèi)的會話轉(zhuǎn)發(fā)報文。
[0039] 在每個CPU內(nèi),多個會話組成的集合可W稱為會話表,會話表的每一項(xiàng)是一個會話 (或稱為會話表項(xiàng)),報文的轉(zhuǎn)發(fā)是基于會話的。
[0040] 會話是一種結(jié)構(gòu)體,包含了整條會話的基本信息、各種訪問策略、統(tǒng)計信息等,基 本信息例如包括:五元組、媒體接入控制(Media Access Control ,MAC)地址等。每個會話的 大小(size)大概占用450字節(jié)。
[0041] S16:如果所述會話屬于的CPU不是接收到報文的CPU,則將所述報文轉(zhuǎn)發(fā)給所述會 話屬于的CPU,并由所述會話屬于的CP訴良據(jù)所述會話轉(zhuǎn)發(fā)所述報文。
[0042] 例如,CPU_B與CPU_A不同時,CPU_A將報文轉(zhuǎn)發(fā)給CPU_B,CPU_B根據(jù)CPU_B內(nèi)的會話 轉(zhuǎn)發(fā)報文。
[0043] 本實(shí)施例中,會話僅能被建立該會話的CPU訪問,且建立該會話的CPU訪問時采用 無鎖訪問方式。
[0044] 本實(shí)施例中,通過在查找全局會話哈希表時,采用無鎖方式,相對于加鎖方式查 找,可W避免加鎖本身帶來的性能降低問題,從而可W提高多核系統(tǒng)轉(zhuǎn)發(fā)報文的性能。進(jìn)一 步的,所述會話是每個CPU內(nèi)獨(dú)立的局部資源,僅能被建立會話的CPU訪問,禁止非建立會話 的CPU訪問,且被建立會話的CPU訪問時采用無鎖訪問方式,從而可W進(jìn)一步降低加鎖帶來 的性能下降問題。
[0045] 圖2是本發(fā)明另一實(shí)施例提出的基于多核系統(tǒng)的報文轉(zhuǎn)發(fā)方法的流程示意圖,該 方法包括:
[0046] S21:CPU接收網(wǎng)卡發(fā)送的報文,其中,所述網(wǎng)卡采用接收端縮放(Receive Side Scaling,RSS)算法將報文分配給CPU,在采用RSS算法時,采用的私密密鑰滿足如下條件:W 兩個字節(jié)為一組劃分私密密鑰后,相鄰的兩組的數(shù)值相同。
[0047] 同一個會話(或稱為連接)可W分為兩個方向:客戶端-〉服務(wù)端(簡稱為左向)、服 務(wù)端-〉客戶端(簡稱為右向)。
[0048] 本實(shí)施例中將同一個會話的兩個方向分給同一個CPU處理,減少倒核導(dǎo)致高速緩 存缺失(cache miss)與鎖導(dǎo)致的性能開銷。
[0049] 為了保證將同一個會話的兩個方向分為同一個CPU處理,將采用滿足上述條件的 私密密鑰(secret key)。
[(K)加]原理如下:
[0化1 ]首先,分析RSS算法。RSS算法如下:
[0化2] F掃r ha忍h-inpu't 'key[] of length N bytes (SN bits) and a random secre't key. K of 320 bits Result = 0; For each hit b in input keyQ { if 化==I) then. :R白suit - = 白st ;3:2 bits of K); shift K left I bit position; }
[0053] 上述的輸出是result,result決定報文被分到