第一部分報文數(shù)據(jù)外的多個部分的報文數(shù)據(jù)的第二類緩存空間,從而并行讀取完整的報文數(shù)據(jù),在讀取到完整的報文數(shù)據(jù)后,完成報文的轉(zhuǎn)發(fā),避免了傳統(tǒng)的報文緩存空間鏈表讀取報文時延較長的缺陷,可以使用價格低廉且存儲空間大的雙倍數(shù)據(jù)倍率同步動態(tài)隨機存儲器(英文:Double Data Rate synchronous dynamic random-accessmemory,縮寫:DDR SDRAM)等RAM芯片對報文進(jìn)行緩存并轉(zhuǎn)發(fā),無需使用價格昂貴且存儲空間小的QDR SDRAM對緩存在RAM中的報文進(jìn)行轉(zhuǎn)發(fā),降低了對緩存在RAM中的隊列進(jìn)行管理的成本,并提高了鏈表的存儲空間。
【附圖說明】
[0045]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0046]圖1是本發(fā)明實施例提供的報文轉(zhuǎn)發(fā)方法所涉及的一種實施環(huán)境的結(jié)構(gòu)示意圖;
[0047]圖2是本發(fā)明實施例一提供的報文轉(zhuǎn)發(fā)方法流程圖;
[0048]圖3是本發(fā)明實施例二提供的報文轉(zhuǎn)發(fā)方法流程圖;
[0049]圖4是本發(fā)明實施例三提供的報文轉(zhuǎn)發(fā)方法中緩存空間鏈表和隊列鏈表的嵌套結(jié)構(gòu)示意圖。
[0050]圖5是本發(fā)明實施例三提供的報文轉(zhuǎn)發(fā)裝置結(jié)構(gòu)示意圖;
[0051]圖6是本發(fā)明實施例四提供的報文轉(zhuǎn)發(fā)裝置結(jié)構(gòu)示意圖;
[0052]圖7是本發(fā)明實施例五提供的報文轉(zhuǎn)發(fā)裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0053]為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
[0054]除非另作定義,此處使用的技術(shù)術(shù)語或者科學(xué)術(shù)語應(yīng)當(dāng)為本發(fā)明所屬領(lǐng)域內(nèi)具有一般技能的人士所理解的通常意義。本發(fā)明專利申請說明書以及權(quán)利要求書中使用的“第一”、“第二”以及類似的詞語并不表示任何順序、數(shù)量或者重要性,而只是用來區(qū)分不同的組成部分。
[0055]對各實施例中出現(xiàn)的技術(shù)術(shù)語進(jìn)行如下定義:
[0056]隊列鏈表,用于按照報文的入隊順序記錄各報文的頭指針,先入隊的報文的頭指針只記錄有緊跟它入隊的下一個隊列的報文的頭指針,以此來記錄隊列中報文的轉(zhuǎn)發(fā)順序。
[0057]緩存空間鏈表,用于記錄了緩存報文數(shù)據(jù)的所有緩存空間對應(yīng)的指針。緩存空間鏈表中的每個指針都對應(yīng)一塊緩存空間的物理地址,因此每個指針都與一塊緩存空間對應(yīng)。
[0058]各實施例中所描述的指針,可以是指針本身,也可以是指針的編號。
[0059]參見圖1,其示出了本發(fā)明實施例提供的報文轉(zhuǎn)發(fā)方法所涉及的一種具有報文轉(zhuǎn)發(fā)和流量監(jiān)控的裝置的結(jié)構(gòu)示意圖,該環(huán)境包括:擁塞管理模塊100、包存儲模塊110、數(shù)據(jù)輸出模塊120和內(nèi)存管理模塊130。
[0060]其中,擁塞管理模塊100根據(jù)當(dāng)前RAM的空間是否已滿判斷接收的報文是否需要丟棄;包存儲模塊110根據(jù)報文的大小為該報文分配一定數(shù)量的空閑緩存空間,同時根據(jù)分配的空閑緩存空間對應(yīng)的空閑緩存空間鏈表指針生成該報文的緩存空間鏈表,按照緩存空間鏈表中該報文的頭指針對應(yīng)的緩存空間記錄的指針順序,將報文緩存到所分配的空閑緩存空間中,在該報文的頭指針對應(yīng)的緩存空間中記錄的多個緩存報文其余部分的緩存空間對應(yīng)的指針,然后將該報文的頭指針記錄到該報文所在隊列的隊列鏈表的尾部,完成報文的緩存操作;在需要轉(zhuǎn)發(fā)隊列中的報文時,數(shù)據(jù)輸出模塊120從第一個報文的緩存空間鏈表中獲取報文的頭指針,從第一個報文的頭指針對應(yīng)的緩存空間中獲取預(yù)先記錄的多個緩存報文其余部分的緩存空間對應(yīng)的指針,然后從報文的頭指針對應(yīng)的緩存空間和頭指針中記錄的指針對應(yīng)的緩存空間中,讀取報文的完整數(shù)據(jù),并將該隊列的第一個報文轉(zhuǎn)發(fā),然后根據(jù)第一個報文的頭指針記錄的隊列中第二個需要轉(zhuǎn)發(fā)的報文的頭指針,找到第二個需要轉(zhuǎn)發(fā)的報文的頭指針,再次通過隊列的第一個報文轉(zhuǎn)發(fā)過程對隊列中第二個需要轉(zhuǎn)發(fā)的報文進(jìn)行轉(zhuǎn)發(fā),以此類推,轉(zhuǎn)發(fā)該隊列的所有報文;內(nèi)存管理模塊130為包存儲模塊存儲的報文提供RAM中的空閑緩存空間,且在某個報文轉(zhuǎn)發(fā)后,回收分配給已轉(zhuǎn)發(fā)報文的RAM緩存空間。
[0061]其中,擁塞管理模塊100、包存儲模塊110、隊列調(diào)度模塊120、數(shù)據(jù)輸出模塊130和內(nèi)存管理模塊140都設(shè)置在轉(zhuǎn)發(fā)芯片上,而該轉(zhuǎn)發(fā)芯片一般都設(shè)置在具有報文轉(zhuǎn)發(fā)和流量監(jiān)控的裝置上。其中,轉(zhuǎn)發(fā)芯片是FPGA芯片或網(wǎng)絡(luò)處理器。
[0062]實施例一
[0063]本發(fā)明實施例提供了一種報文轉(zhuǎn)發(fā)方法,參見圖2,方法流程包括:
[0064]步驟200、交換機的轉(zhuǎn)發(fā)芯片獲取對報文的轉(zhuǎn)發(fā)指令,報文有緩存空間鏈表,緩存空間鏈表包括報文的所有指針,報文的所有指針中的頭指針對應(yīng)的第一類緩存空間中記錄有報文的第一部分報文數(shù)據(jù)和多個第二類緩存空間對應(yīng)的多個指針,多個第二類緩存空間分別緩存報文的第一部分報文數(shù)據(jù)外的多個部分的報文數(shù)據(jù)。
[0065]其中,所要轉(zhuǎn)發(fā)的報文,可以是網(wǎng)絡(luò)中需要轉(zhuǎn)發(fā)的任意報文,存儲在隨機存儲器(英文:random-access memory,縮寫:RAM)中。RAM以緩存空間鏈表的形式存儲該報文。
[0066]其中,報文的頭指針是緩存空間鏈表中緩存報文數(shù)據(jù)的第一個緩存空間對應(yīng)的指針;報文的頭指針對應(yīng)的第一類緩存空間中存儲有:隊列指針、報文描述符、多個第二類緩存空間對應(yīng)的指針和報文數(shù)據(jù)。
[0067]其中,隊列指針為隊列中緊鄰該報文進(jìn)入隊列的下一個報文的頭指針。
[0068]步驟201、交換機的轉(zhuǎn)發(fā)芯片從報文的緩存空間鏈表中獲取報文的頭指針。
[0069]具體地,交換機的轉(zhuǎn)發(fā)芯片從報文的緩存空間鏈表中獲取報文的頭指針,根據(jù)獲取的頭指針找到對應(yīng)的第一類緩存空間。
[0070]步驟202、從報文的頭指針對應(yīng)的所第一類緩存空間中,交換機的轉(zhuǎn)發(fā)芯片讀取報文的第一部分報文數(shù)據(jù),并獲取多個指針。
[0071]步驟203、根據(jù)多個指針,交換機的轉(zhuǎn)發(fā)芯片獲取多個第二類緩存空間。
[0072]具體地,通過從報文的頭指針對應(yīng)的第一類緩存空間中獲取第二類緩存空間對應(yīng)的多個指針,根據(jù)獲取的多個指針從緩存空間列表中找到第二類緩存空間所對應(yīng)的指針,根據(jù)指針找到第二類緩存空間。
[0073]步驟204、交換機的轉(zhuǎn)發(fā)芯片從多個第二類緩存空間中,并行讀取第一部分報文數(shù)據(jù)外的多個部分的報文數(shù)據(jù)。
[0074]具體地,由于獲取到了緩存第一部分報文數(shù)據(jù)外的多個部分的報文數(shù)據(jù)的第二類緩存空間,說明已經(jīng)獲取到了緩存報文數(shù)據(jù)的所有緩存空間,那么就可以并行讀取第二類緩存空間中的報文數(shù)據(jù),以獲取完整的報文數(shù)據(jù)。
[0075]其中,對多個第二類緩存空間中的報文數(shù)據(jù)的并行讀取是指讀取這些報文數(shù)據(jù)的操作相互間沒有依賴性,可以在短時間內(nèi),例如幾個時鐘周期內(nèi),先后發(fā)起各個讀取操作,并不要求嚴(yán)格地同時讀取這些報文數(shù)據(jù)。
[0076]步驟205、讀取到完整的報文數(shù)據(jù)后,交換機的轉(zhuǎn)發(fā)芯片轉(zhuǎn)發(fā)報文。
[0077]具體地,在交換機中的轉(zhuǎn)發(fā)芯片并行讀取報文數(shù)據(jù)的過程中,每次只能從緩存空間中獲取報文的一部分?jǐn)?shù)據(jù),而只有在獲取到完整的報文數(shù)據(jù)時,才能對報文進(jìn)行轉(zhuǎn)發(fā)操作,所以轉(zhuǎn)發(fā)芯片就會在并行讀取報文數(shù)據(jù)的過程完成,直到將完整的報文數(shù)據(jù)都讀取出來后轉(zhuǎn)發(fā)報文。
[0078]通過以上描述,通過從報文的緩存空間鏈表中獲取報文的頭指針,報文的頭指針中記錄有緩存報文其余部分的第二類緩存空間對應(yīng)指針,可以使緩存到RAM中的報文被轉(zhuǎn)發(fā)時,可以僅通過讀取報文的頭指針就可以獲取報文的頭指針對應(yīng)的第一類緩存空間和第一類緩存空間中記錄的多個指針對應(yīng)的指針?biāo)鶎?yīng)的分別緩存報文的第一部分報文數(shù)據(jù)外的多個部