分的報文數(shù)據(jù)的第二類緩存空間,從而并行讀取完整的報文數(shù)據(jù),在讀取到完整的報文數(shù)據(jù)后,完成報文的轉(zhuǎn)發(fā),避免了傳統(tǒng)的報文緩存空間鏈表讀取報文時延較長的缺陷。
[0079]實施例二
[0080]本發(fā)明實施例提供了一種報文轉(zhuǎn)發(fā)方法,參見圖3,方法流程包括:
[0081]步驟300、交換機(jī)接收報文。
[0082]其中,隊列中的報文,是交換機(jī)接收的等待轉(zhuǎn)發(fā)的一批報文,而隊列中報文的排列順序由報文進(jìn)入隊列的順序確定。
[0083]進(jìn)一步地,本發(fā)明實施例的執(zhí)行主體不限于是交換機(jī),也可以是其他具有報文轉(zhuǎn)發(fā)和流量監(jiān)控的裝置,如路由器等。
[0084]步驟301、交換機(jī)確定用于緩存報文的RAM的空間是否已滿。
[0085]如果確定RAM的空間未滿,則執(zhí)行步驟302。
[0086]如果確定RAM的空間已滿,則執(zhí)行步驟303。
[0087]具體地,交換機(jī)在接收到隊列中的報文數(shù)據(jù)后,會判斷用于緩存隊列中的報文數(shù)據(jù)的RAM的空間是否已經(jīng)緩沖滿了需要轉(zhuǎn)發(fā)的報文。
[0088]其中,用于緩存隊列中的報文數(shù)據(jù)的RAM設(shè)置在交換機(jī)中。
[0089]可選的,交換機(jī)判斷RAM中緩存的報文占用的緩存空間數(shù)量是否大于等于預(yù)先設(shè)定的閾值。若確定RAM中緩存的報文數(shù)量小于預(yù)先設(shè)定的閾值,則說明RAM未滿,否則說明RAM已滿。
[0090]其中,預(yù)先設(shè)定的閾值是RAM空間中可以緩存的最大的報文數(shù)量。
[0091]步驟302、若確定RAM的空間未滿,則交換機(jī)從RAM中獲取多個空閑緩存空間對應(yīng)的指針。
[0092]具體地,若確定RAM的空間未滿,那么交換機(jī)根據(jù)獲取到報文大小,從RAM中空閑緩存空間鏈表中獲取多個空閑緩存空間對應(yīng)的指針。
[0093]其中,交換機(jī)設(shè)置的用于緩存需要轉(zhuǎn)發(fā)的報文的RAM是專門用來緩存報文的,獨(dú)立于交換機(jī)的用于加載運(yùn)行程序的內(nèi)存。
[0094]其中,若報文數(shù)據(jù)的大小大于單位緩存空間的大小,那么說明一個緩存空間是裝不下報文的全部數(shù)據(jù)的,那么需要將報文分成多個部分并分別緩存到多個RAM的緩存空間中,所以可以通過報文數(shù)據(jù)大小和單位緩存空間的大小對報文進(jìn)行分塊處理,然后將分塊后的報文分別存儲到多個緩存空間中。
[0095]其中,單位緩存空間是指預(yù)先設(shè)置的RAM中每個緩存空間的大小。
[0096]其中,獲取的空閑緩存空間鏈表的指針數(shù)量等于獲取的空閑緩存空間的數(shù)量。
[0097]步驟303、若確定RAM的空間已滿,則交換機(jī)丟棄報文。
[0098]具體地,若確定RAM的空間已滿,說明RAM已經(jīng)沒有空間緩存報文了,那么交換機(jī)丟棄該報文。
[0099]步驟304、根據(jù)多個空閑緩存空間對應(yīng)的指針,交換機(jī)生成報文的緩存空間鏈表。
[0100]具體地,根據(jù)多個空閑緩存空間對應(yīng)的指針,交換機(jī)先確定報文數(shù)據(jù)在這些獲取的緩存空間的緩存順序,使第一個從空閑緩存空間鏈表中獲取的指針作為緩存空間鏈表中報文的頭指針,第二個從空閑緩存空間鏈表中獲取的指針作為緩存空間鏈表中報文的第二個指針,……,最后一個從空閑緩存空間鏈表中獲取的指針作為緩存空間鏈表中報文的尾指針,那么緩存空間鏈表的頭指針對應(yīng)的緩存空間存儲報文的第一部分?jǐn)?shù)據(jù)、緊鄰頭指針的下一個指針對應(yīng)的緩存空間存儲報文的第二部分?jǐn)?shù)據(jù),……,尾指針對應(yīng)的緩存空間存儲報文的最后一部分?jǐn)?shù)據(jù),確定報文在所取出的緩存空間中的存儲順序,然后將緩存報文其余部分的緩存空間對應(yīng)的指針存儲到該緩存空間鏈表的頭指針對應(yīng)的緩存空間中,使得該報文的頭指針可以指向存儲報文其余部分的緩存空間對應(yīng)的指針,以此生成報文的緩存空間鏈表。
[0101]其中,在多個緩存同一報文的緩存空間中,緩存報文最后一部分?jǐn)?shù)據(jù)的緩存空間對應(yīng)的指針被稱作報文的尾指針。
[0102]比如:交換機(jī)中緩存報文的RAM的空間按照預(yù)先設(shè)置的單位緩存空間的大小被成了 N+1份緩存空間,RAM中第一份緩存空間對應(yīng)的指針是0,那么RAM中最后一份緩存空間對應(yīng)的指針是N。假設(shè)從這些緩存空間中取指針是:0、3、5、6的指針對應(yīng)的4個緩存空間來對報文進(jìn)行緩存,那么以指針O為緩存空間鏈表中報文頭指針,以指針6為緩存空間鏈表中報文尾指針;則確定指針O對應(yīng)的緩存空間緩存報文的第一部分、確定指針3對應(yīng)的緩存空間緩存報文的第二部分、確定指針5對應(yīng)的緩存空間緩存報文的第三部分、確定指針6對應(yīng)的緩存空間緩存報文的第四部分,而且指針O對應(yīng)的緩存空間中記錄有指針3、5和6,那么指針O指向指針3、5和6對應(yīng)的指針,到此,生成了報文的緩存空間列表。
[0103]步驟305、根據(jù)生成的緩存空間鏈表,交換機(jī)將接收到的報文緩存到多個空閑緩存空間中,其中,多個空閑緩存空間包括第一類緩存空間和多個第二類緩存空間。
[0104]具體地,根據(jù)緩存空間鏈表中各指針確定的報文各個部分的緩存空間,交換機(jī)將報文的各部分分別存儲到對應(yīng)的指針對應(yīng)的緩存空間中。
[0105]其中,報文頭指針對應(yīng)的第一類緩存空間中記錄有報文的第一部分報文數(shù)據(jù)和多個第二類緩存空間對應(yīng)的多個指針,多個第二類緩存空間分別緩存報文的第一部分報文數(shù)據(jù)外的多個部分的報文數(shù)據(jù)。
[0106]比如:緩存空間鏈表中的各指針已經(jīng)確定指針O對應(yīng)的緩存空間緩存報文的第一部分、指針3對應(yīng)的緩存空間緩存報文的第二部分、指針5對應(yīng)的緩存空間緩存報文的第三部分、指針6對應(yīng)的緩存空間緩存報文的第四部分,那么交換機(jī)將報文的第一部分緩存到指針O對應(yīng)的緩存空間中,將報文的第二部分緩存到指針3對應(yīng)的緩存空間中,將報文的第三部分緩存到指針5對應(yīng)的緩存空間中,將報文的第四部分緩存到指針6對應(yīng)的緩存空間中,完成報文的緩存操作。
[0107]步驟306、交換機(jī)將報文的緩存空間鏈表的頭指針連接到報文所在隊列的隊列鏈表中。
[0108]其中,交換機(jī)將報文的緩存空間鏈表的頭指針連接到報文所在隊列的隊列鏈表的末尾,作為隊列鏈表的尾指針,并將隊列鏈表中的尾指針與隊列鏈表中緊挨尾指針的上一指針進(jìn)行關(guān)聯(lián)。
[0109]其中,隊列鏈表和緩存空間鏈表存儲在RAM中,隊列鏈表和緩存空間鏈表的存儲位置與空閑緩存空間鏈表存儲在RAM中的存儲位置不同。
[0110]比如:RAM中隊列鏈表和緩存空間鏈表的嵌套結(jié)構(gòu)如圖4所示:指針為0、3、5、6的指針對應(yīng)的4個緩存空間來對隊列的第一個報文進(jìn)行緩存,所以指針0、3、5、6組成隊列第一個報文的緩存空間鏈表,指針O為隊列第一個報文的頭指針,而隊列第一個報文的頭指針對應(yīng)的緩存空間中記錄有指針3、5、6,還記錄有第二個進(jìn)入隊列的報文的頭指針2,以及報文描述符,而緩存空間的剩余部分還緩存有報文的第一部分?jǐn)?shù)據(jù);而隊列鏈表是按照報文的入隊順序記錄各報文的頭指針,從圖4中可以看出,指針0、2、4、7分別是第一個進(jìn)入隊列的報文的頭指針、第二個進(jìn)入隊列的報文的頭指針,第三個進(jìn)入隊列的報文的頭指針、和第四個進(jìn)入隊列的報文的頭指針,指針7是當(dāng)前隊列鏈表的尾指針。
[0111]通過以上描述,將隊列鏈表和緩存空間鏈表設(shè)置在隊列鏈表和緩存空間鏈表管理的RAM緩存空間中,無需另外設(shè)置單獨(dú)的隊列轉(zhuǎn)發(fā)管理RAM芯片,而且在讀取報文的緩存空間鏈表中頭指針對應(yīng)的緩存空間時,不僅可以讀取指針等信息,還可以讀取緩存在頭指針對應(yīng)的緩存空間中的報文數(shù)據(jù),減小了指針占用的網(wǎng)絡(luò)帶寬,進(jìn)一步提高網(wǎng)絡(luò)帶寬的利用效率。
[0112]步驟307、交換機(jī)獲取對報文的轉(zhuǎn)發(fā)指令,報文有緩存空間鏈表,緩存空間鏈表包括報文的所有指針,報文的所有指針中的頭指針對應(yīng)的第一類緩存空間中記錄有報文的第一部分報文數(shù)據(jù)和多個第二類緩存空間對應(yīng)的多個指針,多個第二類緩存空間分別緩存報文的第一部分報文數(shù)據(jù)外的多個部分的報文數(shù)據(jù)。
[0113]步驟308、交換機(jī)從報文的緩存空間鏈表中獲取報文的頭指針。
[0114]步驟309、從報文頭指針對應(yīng)的第一類緩存空間中,交換機(jī)讀取報文的第一部分報文數(shù)據(jù),并獲取多個指針。
[0115]其中,多個指針對應(yīng)的第二類緩存空間是指除了報文頭指針外,分別緩存報文的第一部分