一種處理報(bào)文的方法和裝置制造方法
【專利摘要】本發(fā)明提供一種處理報(bào)文的方法及裝置,該方法包括:在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息;提取所述報(bào)文的描述符信息;將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。通過本發(fā)明可以實(shí)現(xiàn)單、多播報(bào)文的統(tǒng)一存儲(chǔ),描述符鏈表與包實(shí)體緩存資源相對(duì)應(yīng),顯著降低單、多播報(bào)文的管理開銷,以提高節(jié)點(diǎn)匯聚能力。
【專利說明】一種處理報(bào)文的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信【技術(shù)領(lǐng)域】,特別是涉及一種處理報(bào)文的方法和裝置。
【背景技術(shù)】
[0002]目前的分組交換網(wǎng)絡(luò)中,由于業(yè)務(wù)處理的需求,系統(tǒng)首先需要識(shí)別報(bào)文的單、多播屬性,然后在內(nèi)部針對(duì)多播報(bào)文進(jìn)行復(fù)制,單、多播報(bào)文進(jìn)行管理,按照用戶設(shè)定的規(guī)則進(jìn)行調(diào)度出隊(duì),最終在系統(tǒng)的出口體現(xiàn)出報(bào)文所有的編輯情況。在繼續(xù)進(jìn)行分析之前,有必要提及一下在可變長(zhǎng)的分組交換網(wǎng)絡(luò)中,數(shù)據(jù)包分片技術(shù)能夠有效降低數(shù)據(jù)的時(shí)延和抖動(dòng),提高緩存利用率,是目前包交換網(wǎng)絡(luò)處理設(shè)備中針對(duì)報(bào)文進(jìn)行緩存管理的一個(gè)重要機(jī)制。其實(shí)現(xiàn)機(jī)理就是將整個(gè)緩存空間按照固定大小劃分出η個(gè)存儲(chǔ)單元,每當(dāng)有報(bào)文輸入時(shí),根據(jù)報(bào)文大小進(jìn)行緩存空間的分配,對(duì)于小于等于一個(gè)存儲(chǔ)單元的報(bào)文,直接分配一個(gè)空間,而對(duì)于較長(zhǎng)的報(bào)文來說,可能需要分配多個(gè)存儲(chǔ)單元,同時(shí)需要記錄這么多個(gè)存儲(chǔ)單元屬于同一個(gè)報(bào)文,設(shè)計(jì)上一般采用鏈表來管理。這樣對(duì)于整個(gè)緩存空間,包輸入時(shí)采用鏈表進(jìn)行緩存空間的分配,包輸出時(shí)采用鏈表進(jìn)行緩存空間的回收。
[0003]相應(yīng)的對(duì)于報(bào)文輸出的調(diào)度管理有一套與緩存管理相對(duì)應(yīng)的機(jī)制一描述符的管理。其作用是將每個(gè)已經(jīng)存儲(chǔ)在緩存里的報(bào)文生成一個(gè)描述符,描述符里記錄該報(bào)文在緩存空間的指針。對(duì)應(yīng)于包實(shí)體的緩存空間,描述符存儲(chǔ)于節(jié)點(diǎn)空間,同樣是采用鏈表管理。每個(gè)描述符占據(jù)一個(gè)節(jié)點(diǎn),入隊(duì)時(shí)分配一個(gè)節(jié)點(diǎn)并按照用戶定義的規(guī)則將存儲(chǔ)于相應(yīng)的隊(duì)列,出隊(duì)時(shí)回收該節(jié)點(diǎn),同時(shí)將描述符送至緩存空間管理,通過緩存空間的指針提取包實(shí)體。
[0004]其實(shí)我們可以分析下,假設(shè)系統(tǒng)只支持單播報(bào)文業(yè)務(wù)的話,包實(shí)體的存儲(chǔ)空間可以和描述符的節(jié)點(diǎn)空間一一對(duì)應(yīng),這樣就可以將兩套管理機(jī)制合并為一套,但目前的矛盾是對(duì)于多播包的處理。由于多播是對(duì)報(bào)文的描述符進(jìn)行了多次的復(fù)制,并最終映射到不同的隊(duì)列,那么一個(gè)多播報(bào)文就占據(jù)了多個(gè)節(jié)點(diǎn),而包實(shí)體只有一份,所以就有了圖1所示的處理流程。對(duì)于同一個(gè)多播報(bào)文的多個(gè)節(jié)點(diǎn),其描述符的存儲(chǔ)空間指針都指向包鏈表的存儲(chǔ)地址,就實(shí)現(xiàn)了多播報(bào)文的存儲(chǔ)轉(zhuǎn)發(fā)。也可以看出現(xiàn)有的技術(shù)方案中存在兩套管理機(jī)制,包和隊(duì)列兩套鏈表的開銷和管理,規(guī)模龐大,環(huán)節(jié)復(fù)雜,明顯增加維護(hù)和管理的成本。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問題是提供一種處理報(bào)文的方法及裝置,可以實(shí)現(xiàn)單、多播報(bào)文的統(tǒng)一存儲(chǔ),描述符鏈表與包實(shí)體緩存資源相對(duì)應(yīng),顯著降低單、多播報(bào)文的管理開銷,以提高節(jié)點(diǎn)匯聚能力。
[0006]為了解決上述技術(shù)問題,本發(fā)明提供了一種處理報(bào)文的方法,包括:
[0007]在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息;
[0008]提取所述報(bào)文的描述符信息;[0009]將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。
[0010]進(jìn)一步地,上述方法還具有下面特點(diǎn):所述在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文包括:
[0011]向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn),維護(hù)對(duì)應(yīng)的鏈表指針;
[0012]將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。
[0013]進(jìn)一步地,上述方法還具有下面特點(diǎn):所述向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn)后,包括:
[0014]對(duì)所述節(jié)點(diǎn)進(jìn)行入隊(duì)存儲(chǔ),如同一隊(duì)列相鄰的節(jié)點(diǎn)為多播屬性,則在該相鄰的節(jié)點(diǎn)之間插入一空節(jié)點(diǎn),前一節(jié)點(diǎn)的多播指針指向所述空節(jié)點(diǎn)的地址,所述空節(jié)點(diǎn)的多播指針指向后一節(jié)點(diǎn)。
[0015]進(jìn)一步地,上述方法還具有下面特點(diǎn):所述將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元之后,還包括:
[0016]接收到出隊(duì)命令后,根據(jù)出隊(duì)命令獲取所述節(jié)點(diǎn)的鏈表指針,根據(jù)所述鏈表指針與外部存儲(chǔ)單元的映射關(guān)系,讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)。
[0017]進(jìn)一步地,上述方法還具有下面特點(diǎn):描述符信息包括以下信息中的一種或多種:
[0018]報(bào)文的單播信息、報(bào)文的多播信息、索引信息、當(dāng)前節(jié)點(diǎn)的報(bào)文尾屬性、有效字節(jié)數(shù)和隊(duì)列號(hào)。
[0019]為了解決上述問題,本發(fā)明還提供了一種處理報(bào)文的裝置,包括:
[0020]第一模塊,用于在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息;
[0021]第二模塊,用于提取所述報(bào)文的描述符信息;
[0022]第三模塊,用于將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。
[0023]進(jìn)一步地,上述裝置還具有下面特點(diǎn):所述第一模塊,包括:
[0024]第一單元,用于向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn),維護(hù)對(duì)應(yīng)的鏈表指針;
[0025]第二單元,用于將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。
[0026]進(jìn)一步地,上述裝置還具有下面特點(diǎn):
[0027]所述第一單元,向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn)后還用于,對(duì)所述節(jié)點(diǎn)進(jìn)行入隊(duì)存儲(chǔ),如同一隊(duì)列相鄰的節(jié)點(diǎn)為多播屬性,則在該相鄰的節(jié)點(diǎn)之間插入一空節(jié)點(diǎn),前一節(jié)點(diǎn)的多播指針指向所述空節(jié)點(diǎn)的地址,所述空節(jié)點(diǎn)的多播指針指向后一節(jié)點(diǎn)。
[0028]進(jìn)一步地,上述裝置還具有下面特點(diǎn):所述裝置還包括:
[0029]第四模塊,用于接收到出隊(duì)命令后,根據(jù)出隊(duì)命令獲取所述節(jié)點(diǎn)的鏈表指針,根據(jù)所述鏈表指針與外部存儲(chǔ)單元的映射關(guān)系,讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)。
[0030]進(jìn)一步地,上述裝置還具有下面特點(diǎn):所述描述符信息包括以下信息中的一種或多種:
[0031]報(bào)文的單播信息、報(bào)文的多播信息、索引信息、當(dāng)前節(jié)點(diǎn)的報(bào)文尾屬性、有效字節(jié)數(shù)和隊(duì)列號(hào)。[0032]綜上,本發(fā)明提供一種處理報(bào)文的方法及裝置,不再由于多播節(jié)點(diǎn)復(fù)制的原因,分開兩套的管理機(jī)制,在一個(gè)節(jié)點(diǎn)信息中將單多播屬性及對(duì)應(yīng)的鏈表指針進(jìn)行管理和維護(hù),保證了隊(duì)列節(jié)點(diǎn)與緩存空間能夠一一對(duì)應(yīng),整個(gè)管理只需維護(hù)一套鏈表分配與回收的機(jī)制。在系統(tǒng)輸入側(cè)不可預(yù)知的單、多播報(bào)文場(chǎng)景下,利用一個(gè)節(jié)點(diǎn)分別維護(hù)單播和多播兩個(gè)維度的描述符鏈表,從而實(shí)現(xiàn)單、多播報(bào)文的統(tǒng)一存儲(chǔ),描述符鏈表與包實(shí)體緩存資源相對(duì)應(yīng),顯著降低單、多播報(bào)文的管理開銷,且通用性更好。
【專利附圖】
【附圖說明】
[0033]圖1現(xiàn)有技術(shù)普遍采用的單、多播統(tǒng)一緩存的結(jié)構(gòu)圖;
[0034]圖2為本發(fā)明實(shí)施例的處理報(bào)文的方法的流程圖;
[0035]圖3為本發(fā)明實(shí)施例的處理報(bào)文的裝置示意圖;
[0036]圖4為本發(fā)明實(shí)施例的單播與多播的節(jié)點(diǎn)匯聚操作的示意圖;
[0037]圖5為本發(fā)明實(shí)施例的多播鏈接多播的節(jié)點(diǎn)匯聚操作的示意圖;
[0038]圖6為本發(fā)明實(shí)施例的各種節(jié)點(diǎn)匯聚操作示意圖;
[0039]圖7為本發(fā)明實(shí)施例的隊(duì)列鏈表的指針操作示意圖;
[0040]圖8為本發(fā)明實(shí)施例的鏈表的節(jié)點(diǎn)信息操作示意圖。
【具體實(shí)施方式】
[0041]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
[0042]在目前的分組交換網(wǎng)絡(luò)設(shè)備中,對(duì)于支持單、多播業(yè)務(wù)報(bào)文的統(tǒng)一處理,比較普遍采用的做法是劃分為包實(shí)體管理和描述符管理兩個(gè)部分,包實(shí)體管理用于分配和回收固定大小的緩存空間,存儲(chǔ)報(bào)文實(shí)體,維護(hù)報(bào)文的完整信息等。描述符管理用于多播打開后與單播的統(tǒng)一入隊(duì),分配,出隊(duì)調(diào)度和回收節(jié)點(diǎn)空間,最終指示包實(shí)體管理將報(bào)文輸出。
[0043]盡管這兩套處理機(jī)制能夠正確進(jìn)行單、多播報(bào)文的統(tǒng)一管理,但是會(huì)帶來系統(tǒng)的處理流程復(fù)雜,實(shí)現(xiàn)開銷較大等問題。根據(jù)之前的討論,系統(tǒng)采用兩套的管理機(jī)制是為了單、多播處理上的兼容設(shè)計(jì),那么能不能研究出一種方法使用一套管理機(jī)制來兼容上述設(shè)計(jì)需求。僅僅淺顯的分析是不行的,因?yàn)槲覀儠?huì)發(fā)現(xiàn)一個(gè)多播包入不同的隊(duì)列會(huì)有不同的下指針,如果簡(jiǎn)單的將包實(shí)體空間與描述符空間一一對(duì)應(yīng),實(shí)現(xiàn)上的開銷將不能承受。但是如果能夠?qū)鼘?shí)體空間與描述符空間進(jìn)行節(jié)點(diǎn)匯聚,將原來兩個(gè)空間的存儲(chǔ)信息進(jìn)行整合,這樣就能夠采用一套管理機(jī)制,不僅流程上簡(jiǎn)單,且結(jié)構(gòu)也更為通用。
[0044]本發(fā)明設(shè)計(jì)了一種處理報(bào)文的方法,以提高節(jié)點(diǎn)匯聚能力,首先對(duì)輸入報(bào)文進(jìn)行緩存空間的分配、報(bào)文存儲(chǔ),然后將該緩存空間對(duì)應(yīng)的位置作為描述符的索引信息參與到報(bào)文的入隊(duì),入隊(duì)過程中根據(jù)報(bào)文的單、多播屬性,報(bào)文結(jié)束標(biāo)記,隊(duì)列成員的連接信息等屬性進(jìn)行節(jié)點(diǎn)的匯聚,將報(bào)文的存儲(chǔ)空間和描述符空間匯聚為一套管理信息,對(duì)應(yīng)一個(gè)訪問空間,這樣就將單、多播的報(bào)文采用了一種具有高匯聚能力的節(jié)點(diǎn)維護(hù)機(jī)制進(jìn)行管理。
[0045]圖2為本發(fā)明實(shí)施例的處理報(bào)文的方法的流程圖,如圖2所示,本實(shí)施例的方法包括:[0046]S11、在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息;
[0047]S12、提取所述報(bào)文的描述符信息;
[0048]S13、將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。
[0049]其中,步驟Sll中在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文包括:
[0050]向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn),維護(hù)對(duì)應(yīng)的鏈表指針;
[0051]將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。
[0052]其中,向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn)后,包括:
[0053]對(duì)所述節(jié)點(diǎn)進(jìn)行入隊(duì)存儲(chǔ),如同一隊(duì)列相鄰的節(jié)點(diǎn)為多播屬性,則在該相鄰的節(jié)點(diǎn)之間插入一空節(jié)點(diǎn),前一節(jié)點(diǎn)的多播指針指向所述空節(jié)點(diǎn)的地址,所述空節(jié)點(diǎn)的多播指針指向后一節(jié)點(diǎn)。
[0054]其中,將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元之后,還包括:
[0055]接收到出隊(duì)命令后,根據(jù)出隊(duì)命令獲取所述節(jié)點(diǎn)的鏈表指針,根據(jù)所述鏈表指針與外部存儲(chǔ)單元的映射關(guān)系,讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)。
[0056]圖3為本發(fā)明實(shí)施例的處理報(bào)文的裝置的示意圖,如圖3所示,本實(shí)施例的裝置包括:
[0057]緩存空間分配模塊(相當(dāng)于第一模塊),用于在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息;
[0058]描述符提取模塊(相當(dāng)于第二模塊),用于提取所述報(bào)文的描述符信息;
[0059]節(jié)點(diǎn)信息匯聚模塊(相當(dāng)于第三模塊),用于將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。
[0060]其中,所述第一模塊,包括:
[0061]第一單元,用于向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn),維護(hù)對(duì)應(yīng)的鏈表指針;
[0062]第二單元,用于將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。
[0063]其中,所述第一單元,向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn)后還用于,對(duì)所述節(jié)點(diǎn)進(jìn)行入隊(duì)存儲(chǔ),如同一隊(duì)列相鄰的節(jié)點(diǎn)為多播屬性,則在該相鄰的節(jié)點(diǎn)之間插入一空節(jié)點(diǎn),前一節(jié)點(diǎn)的多播指針指向所述空節(jié)點(diǎn)的地址,所述空節(jié)點(diǎn)的多播指針指向后一節(jié)點(diǎn)。
[0064]在一優(yōu)選實(shí)施例中,還可以包括:
[0065]隊(duì)列出包管理模塊(相當(dāng)于第四模塊),用于接收到出隊(duì)命令后,根據(jù)出隊(duì)命令獲取所述節(jié)點(diǎn)的鏈表指針,根據(jù)所述鏈表指針與外部存儲(chǔ)單元的映射關(guān)系,讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)。
[0066]其中,描述符信息包括以下信息中的一種或多種:
[0067]報(bào)文的單播信息、報(bào)文的多播信息、索引信息、當(dāng)前節(jié)點(diǎn)的報(bào)文尾屬性、有效字節(jié)數(shù)和隊(duì)列號(hào)。
[0068]本發(fā)明實(shí)施例所述的處理報(bào)文的裝置主要包括以下四個(gè)部分:緩存空間分配模塊,描述符的提取模塊,節(jié)點(diǎn)的信息匯聚模塊和隊(duì)列出包管理模塊。這四個(gè)部分共同完成了報(bào)文的存儲(chǔ)、解析、標(biāo)記、提取等,保證了對(duì)于單、多播報(bào)文的處理使用非常精簡(jiǎn)的處理流程。其中,
[0069]緩存空間分配模塊,負(fù)責(zé)在報(bào)文輸入時(shí),首先去基于緩存的空閑鏈表申請(qǐng)節(jié)點(diǎn),然后維護(hù)對(duì)應(yīng)的鏈表指針,同時(shí)將報(bào)文按照節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。每完成一個(gè)節(jié)點(diǎn)對(duì)應(yīng)外部存儲(chǔ)單元的存儲(chǔ)操作,就向描述符提取模塊發(fā)送該外部存儲(chǔ)單元的節(jié)點(diǎn)索引,同時(shí)攜帶該外部存儲(chǔ)單元所代表的報(bào)文的單、多播信息,當(dāng)前節(jié)點(diǎn)的報(bào)文尾屬性,以及有效字節(jié)數(shù),和隊(duì)列號(hào)等描述符信息,對(duì)于同一個(gè)報(bào)文的多個(gè)節(jié)點(diǎn)需要確保單、多播信息—致。
[0070]描述符的提取模塊,負(fù)責(zé)接收緩存空間分配模塊過來的描述符信息,完成對(duì)應(yīng)節(jié)點(diǎn)的信息存儲(chǔ)。當(dāng)接收到分配節(jié)點(diǎn)信息有效時(shí),同時(shí)將對(duì)齊過來的隊(duì)列號(hào),報(bào)文屬性等描述符信息按照設(shè)定好的位域進(jìn)行組裝,然后驅(qū)動(dòng)有效信號(hào)送至節(jié)點(diǎn)的信息匯聚模塊。
[0071]節(jié)點(diǎn)的信息匯聚模塊,負(fù)責(zé)節(jié)點(diǎn)匯聚的鏈表處理,包括節(jié)點(diǎn)的入鏈處理和節(jié)點(diǎn)的出鏈處理。當(dāng)收到描述符提取模塊的信息有效指示時(shí),采樣存儲(chǔ)對(duì)齊的描述符,同時(shí)提取該報(bào)文在緩存空間分配的節(jié)點(diǎn)信息,然后將上述信息打包、組幀,存儲(chǔ)于節(jié)點(diǎn)入鏈f ifo (先進(jìn)先出)。對(duì)應(yīng)節(jié)點(diǎn)入鏈存儲(chǔ),隊(duì)列出包管理模塊過來的出隊(duì)命令存儲(chǔ)于節(jié)點(diǎn)出鏈fifo。入隊(duì)與出隊(duì)fifo在固定時(shí)隙的輪詢的機(jī)制下調(diào)度,讀取fifo,解析命令,提取隊(duì)列號(hào)和描述符,維護(hù)首尾指針,進(jìn)行入鏈與出鏈操作的讀寫保護(hù)等,直到最后維護(hù)鏈表節(jié)點(diǎn)空間的成員信息。其中,節(jié)點(diǎn)的匯聚能力的提升主要體現(xiàn)在隊(duì)列鏈表指針和節(jié)點(diǎn)信息的維護(hù),通過分析描述符的屬性維護(hù)鏈表指針和節(jié)點(diǎn)單、多播鏈接信息,將原來包鏈表和節(jié)點(diǎn)鏈表大幅度的壓縮和簡(jiǎn)化。
[0072]隊(duì)列出包管理模塊,負(fù)責(zé)按照用戶的規(guī)則進(jìn)行出隊(duì)調(diào)度,控制每個(gè)隊(duì)列的節(jié)點(diǎn)出鏈和該節(jié)點(diǎn)對(duì)應(yīng)數(shù)據(jù)的輸出控制。在一次出隊(duì)請(qǐng)求操作中,該隊(duì)列出包管理模塊向節(jié)點(diǎn)信息匯聚模塊發(fā)送出隊(duì)使能和隊(duì)列號(hào),經(jīng)過操作命令的選擇、處理,最終收到節(jié)點(diǎn)匯聚模塊發(fā)送過來的節(jié)點(diǎn)出包指針信息。根據(jù)節(jié)點(diǎn)指針與數(shù)據(jù)存儲(chǔ)單元的映射關(guān)系,驅(qū)動(dòng)外部memory_controller (存儲(chǔ)控制器),讀取并輸出該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù),完成存儲(chǔ)轉(zhuǎn)發(fā)。
[0073]本實(shí)施例的緩存管理方式采用節(jié)點(diǎn)與存儲(chǔ)單元一一對(duì)應(yīng)的方式,對(duì)于單播包或者單播節(jié)點(diǎn),該處理方式不難理解,就是按照分配存儲(chǔ)單元的方式分配對(duì)應(yīng)節(jié)點(diǎn)即可。但是對(duì)于需要支持單、多播統(tǒng)一管理的話就需要考慮其它的三種情況:單播節(jié)點(diǎn)之后是多播,多播節(jié)點(diǎn)之后是多播,多播節(jié)點(diǎn)之后是單播。如果基于節(jié)點(diǎn)的管理能夠?qū)崿F(xiàn)這四種組合方式,就完成了單、多播的統(tǒng)一管理,其實(shí)質(zhì)也就是要解決隊(duì)列之間對(duì)于同一個(gè)多播包或者多播片的鏈表管理問題。接下來分別針對(duì)這幾種情況進(jìn)行說明。
[0074]假設(shè)以圖4中的隊(duì)列X為例,圖中隊(duì)列所占據(jù)的節(jié)點(diǎn)與緩存空間一一對(duì)應(yīng),采取為每個(gè)節(jié)點(diǎn)維護(hù)單播鏈接信息和多播鏈接信息的處理方式。該隊(duì)列的前兩個(gè)節(jié)點(diǎn)為單播節(jié)點(diǎn),對(duì)于第一個(gè)節(jié)點(diǎn)只需要維護(hù)其單播鏈接信息,包括下指針,包尾屬性等。對(duì)于第二個(gè)節(jié)點(diǎn),其下個(gè)節(jié)點(diǎn)為多播屬性,所以需要首先維護(hù)其多播鏈接信息,直到一個(gè)完整的多播包尾節(jié)點(diǎn),其間所有的多播節(jié)點(diǎn)都只維護(hù)多播鏈接信息。然后再回頭在第二個(gè)節(jié)點(diǎn)的單播鏈接信息位域維護(hù)該隊(duì)列多播包后的單播節(jié)點(diǎn)的指針信息。這樣的話對(duì)于任意一個(gè)單播節(jié)點(diǎn)如果其下一節(jié)點(diǎn)為多播,那么在其多播信息位域維護(hù),如果多播包尾的下一節(jié)點(diǎn)為單播,就在其維護(hù)其多播包首的單播位域維護(hù)。如果該多播包向隊(duì)列I也復(fù)制了一份,如圖4節(jié)點(diǎn)標(biāo)識(shí),那么同樣采用上述的方式維護(hù),隸屬于兩個(gè)隊(duì)列的節(jié)點(diǎn)的nextjn都指向同一個(gè)多播包首節(jié)點(diǎn),該多播包的尾節(jié)點(diǎn)指示多播包的結(jié)束,在通過源節(jié)點(diǎn)的next_u找到各自隊(duì)列的下一個(gè)節(jié)點(diǎn)。
[0075]那么如果情況再?gòu)?fù)雜一點(diǎn),多播包后面仍然是多播包,該如何處理?首先我們來分析下兩個(gè)多播包相連的情況,通過剛才的分析我們得知一個(gè)多播包的鏈接操作完成后,需要通過指向其包首的節(jié)點(diǎn)的信息尋找下指針,對(duì)于現(xiàn)在要討論的情況,如果下指針仍然是個(gè)多播節(jié)點(diǎn),那么勢(shì)必要增加一個(gè)多播的位域,如果有連續(xù)的幾個(gè)多播包,那么指向第一個(gè)多播包首的節(jié)點(diǎn)就要增加多個(gè)多播的位域,如果按照這種方式設(shè)計(jì),存儲(chǔ)的開銷將不能承受且利用率極低,所以當(dāng)有同一隊(duì)列有兩個(gè)相鄰的多播包時(shí)需要插入空節(jié)點(diǎn),具體操作示意圖如圖5所示。相比于圖4,在隊(duì)列X和隊(duì)列y的多播包后面不是單播包了,而是多播包,那么現(xiàn)在就需要分別插入一個(gè)空節(jié)點(diǎn),前一個(gè)多播包的next_u指向這個(gè)空節(jié)點(diǎn)的地址,即空節(jié)點(diǎn)的索引,而空節(jié)點(diǎn)的多播指針next_m就是下一個(gè)多播包,空節(jié)點(diǎn)的單播指針next_u為下一跳。如果下一跳為單播,那么next_u指向的一個(gè)實(shí)際存在的單播節(jié)點(diǎn)地址,如果下一跳仍為多播,那么指向的仍然是個(gè)空節(jié)點(diǎn),操作同上。
[0076]采用了本發(fā)明實(shí)施例所述的方法,將原來方案采用的兩套管理機(jī)制合并為一套,通過提升節(jié)點(diǎn)匯聚能力的方式,顯著的簡(jiǎn)化了處理流程,降低了資源開銷,能夠更好的適應(yīng)系統(tǒng)實(shí)時(shí)運(yùn)行過程中單、多播所占節(jié)點(diǎn)比例的各種情況。且經(jīng)過節(jié)點(diǎn)匯聚后,被調(diào)度隊(duì)列成員的最小顆粒度由一個(gè)包變?yōu)橐粋€(gè)節(jié)點(diǎn)大小,這對(duì)于可變長(zhǎng)包的分組交換網(wǎng)絡(luò)來說,對(duì)降低抖動(dòng)的性能改善非常有效。
[0077]為了更清楚地說明本發(fā)明的技術(shù)方案,下面結(jié)合圖6、圖7、圖8和具體實(shí)施例作進(jìn)一步說明,但不作為對(duì)本發(fā)明的限定。
[0078]假設(shè)當(dāng)前擁有一塊存儲(chǔ)區(qū)域如圖6虛線網(wǎng)格所示,采用節(jié)點(diǎn)匯聚的方式管理,每個(gè)節(jié)點(diǎn)和外部存儲(chǔ)地址——對(duì)應(yīng)。系統(tǒng)依次輸入單播短包存儲(chǔ)在B00、B10、B20,映射到隊(duì)列
I。依次輸入單播包存儲(chǔ)在B08、B18、B28,映射到隊(duì)列2。然后,輸入多播長(zhǎng)包存儲(chǔ)在B31、B32,該包多播后分別映射到隊(duì)列I和隊(duì)列2,然后輸入單播短包存儲(chǔ)在B40,映射到隊(duì)列1,之后再輸入多播短包存儲(chǔ)在B51,映射到隊(duì)列I和隊(duì)列2,此時(shí)隊(duì)列2由于連續(xù)的兩個(gè)多播包,所以申請(qǐng)了一個(gè)空節(jié)點(diǎn)B46進(jìn)行節(jié)點(diǎn)匯聚的鏈表維護(hù)。之后又來了一個(gè)多播長(zhǎng)包分別映射到隊(duì)列I和隊(duì)列2,包首占用B82,此時(shí)對(duì)于隊(duì)列I和2都需要各自申請(qǐng)一個(gè)空節(jié)點(diǎn)B71和B65,直到后來的單播B90映射到隊(duì)列1,B98映射到隊(duì)列2。
[0079]上述情況遍歷了單播包與多播包相互連接的各種方式,下面以隊(duì)列I為例,分步說明該隊(duì)列每個(gè)節(jié)點(diǎn)的單、多播信息的匯聚操作和隊(duì)列首尾指針操作,隊(duì)列2具有相同的操作步驟。對(duì)于存儲(chǔ)鏈表節(jié)點(diǎn)信息的存儲(chǔ)器,可以根據(jù)需求選擇片內(nèi)或者片外,不同之處在于片外存儲(chǔ)器由于位寬和帶寬的限制可能要進(jìn)行字節(jié)掩碼操作。
[0080]隊(duì)列I的入隊(duì)操作如圖7所示,鏈表節(jié)點(diǎn)的操作如圖8所示,初始狀態(tài)下,隊(duì)列為空。
[0081]單播節(jié)點(diǎn)BOO入隊(duì):置單播包首指針(HU)、單播包尾指針(TU)為節(jié)點(diǎn)索引00,置首尾指針有效標(biāo)記HPOS、TPOS為0,標(biāo)識(shí)當(dāng)前首尾指針為單播位域有效。
[0082]單播節(jié)點(diǎn)BlO入隊(duì):首指針不變,更新尾指針TU為10,指針有效標(biāo)記不變。維護(hù)節(jié)點(diǎn)存儲(chǔ)單元單播域的指針,eopu(單播包的尾標(biāo)記)和描述符信息等。
[0083]單播節(jié)點(diǎn)B20入隊(duì):首指針不變,更新尾指針(TU)為20,指針有效標(biāo)記不變。維護(hù)節(jié)點(diǎn)存儲(chǔ)單元單播域信息。
[0084]多播節(jié)點(diǎn)B31入隊(duì):尾指針域TU為20不變,TM(多播包尾指針)更新為31,尾指針有效標(biāo)記(TPOS)更新為1,指示當(dāng)前隊(duì)列的尾為多播節(jié)點(diǎn),同時(shí)維護(hù)節(jié)點(diǎn)存儲(chǔ)單元多播域的指針和描述符信息等。但是當(dāng)前節(jié)點(diǎn)不是多播尾,表示一個(gè)多播包沒有結(jié)束。
[0085]多播節(jié)點(diǎn)B32入隊(duì):TM更新為32,尾指針有效標(biāo)記TPOS仍為1,當(dāng)前為尾節(jié)點(diǎn),表示一個(gè)多播包結(jié)束,同時(shí)維護(hù)節(jié)點(diǎn)存儲(chǔ)單元多播域的指針,eopm(多播包的尾標(biāo)記)和描述符信息等。
[0086]單播節(jié)點(diǎn)B40入隊(duì):尾指針域TM不變,TU更新為40,更新TPOS仍為0,需要維護(hù)指向多播節(jié)點(diǎn)B31的單播域信息,如圖7的地址20所示的位域表示該地址需要第二次操作的單播位域。
[0087]多播節(jié)點(diǎn)B51入隊(duì):尾指針域TU為40不變,TM更新為51,尾指針有效標(biāo)記TPOS更新為I,同時(shí)維護(hù)節(jié)點(diǎn)存儲(chǔ)單元多播域的指針,eopm和描述符信息等。
[0088]多播節(jié)點(diǎn)B82入隊(duì):此時(shí)由于連續(xù)的兩個(gè)多播包,需要插入一個(gè)空節(jié)點(diǎn)B71,置空標(biāo)記TM更新為82,保持尾指針有效標(biāo)記TPOS為1,維護(hù)節(jié)點(diǎn)存儲(chǔ)單元多播域的指針,描述
符信息等。
[0089]多播節(jié)點(diǎn)B83入隊(duì):上一個(gè)多播節(jié)點(diǎn)不是尾節(jié)點(diǎn),TM更新為83,保持尾指針有效標(biāo)記TPOS為I。
[0090]多播節(jié)點(diǎn)B84入隊(duì):上一個(gè)多播節(jié)點(diǎn)不是尾節(jié)點(diǎn),TM更新為84,保持尾指針有效標(biāo)記TPOS為I。當(dāng)前節(jié)點(diǎn)為尾節(jié)點(diǎn),維護(hù)節(jié)點(diǎn)存儲(chǔ)單元多播域的指針,eopm和描述符信息等。
[0091]單播節(jié)點(diǎn)B90入隊(duì):尾指針域TM不變,TU更新為90,更新TPOS仍為0,需要維護(hù)指向多播節(jié)點(diǎn)B82的單播域信息,同時(shí)維護(hù)節(jié)點(diǎn)存儲(chǔ)單元多播域的指針,eopu和描述符信息等。
[0092]以上說明了在入隊(duì)情況下的單、多播節(jié)點(diǎn)匯聚操作,接下來我們?cè)倏聪略撽?duì)列的出隊(duì),隊(duì)列的指針操作如圖7所示,鏈表節(jié)點(diǎn)的操作如圖8所示。
[0093]節(jié)點(diǎn)BOO出隊(duì):尾指針域不變,HU更新為10,HPOS指針為O不變。
[0094]節(jié)點(diǎn)BlO出隊(duì):尾指針域不變,HU更新為20,HPOS指針為O不變。
[0095]節(jié)點(diǎn)B20出隊(duì):尾指針域不變,讀取鏈表節(jié)點(diǎn)信息,HU更新為40,HM更新為31,HPOS指針更新為I。
[0096]節(jié)點(diǎn)B31出隊(duì):尾指針域不變,讀取鏈表節(jié)點(diǎn)信息,HU不變,HM更新為32,HPOS指針保持不變。
[0097]節(jié)點(diǎn)B32出隊(duì):尾指針域不變,讀取鏈表節(jié)點(diǎn)信息,該節(jié)點(diǎn)是多播尾片,HU不變,HM保持不變,HPOS指針更新為O。
[0098]節(jié)點(diǎn)B40出隊(duì):讀取鏈表節(jié)點(diǎn)信息,HU更新為71,HM更新為51,HPOS指針更新為
1
[0099]節(jié)點(diǎn)B51出隊(duì):分析描述符的ept (空節(jié)點(diǎn)標(biāo)記)域有效表明該節(jié)點(diǎn)為空節(jié)點(diǎn),eopm有效,表明下一節(jié)點(diǎn)仍是多播包,HPOS指針更新為O。
[0100]節(jié)點(diǎn)B82出隊(duì):讀取鏈表節(jié)點(diǎn)信息,HU更新為90,HM更新為83,HPOS指針更新為1,當(dāng)前節(jié)點(diǎn)非包尾。
[0101]節(jié)點(diǎn)B83出隊(duì):讀取鏈表節(jié)點(diǎn)信息,HU更新為90,HM更新為84,當(dāng)前節(jié)點(diǎn)為包尾,HPOS指針更新為O。
[0102]節(jié)點(diǎn)B90出隊(duì):比較當(dāng)前首尾指針?biāo)形挥蛲耆嗟?,代表該?duì)列出空。隊(duì)列單、多播報(bào)文的入隊(duì)和出隊(duì)操作完成。
[0103]本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤或光盤等??蛇x地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來實(shí)現(xiàn)。相應(yīng)地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。
[0104]以上僅為本發(fā)明的優(yōu)選實(shí)施例,當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種處理報(bào)文的方法,包括: 在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息; 提取所述報(bào)文的描述符信息; 將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。
2.如權(quán)利要求1所述的方法,其特征在于:所述在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文包括: 向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn),維護(hù)對(duì)應(yīng)的鏈表指針; 將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。
3.如權(quán)利要求2所述的方法,其特征在于:所述向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn)后,包括: 對(duì)所述節(jié)點(diǎn)進(jìn)行入隊(duì)存儲(chǔ),如同一隊(duì)列相鄰的節(jié)點(diǎn)為多播屬性,則在該相鄰的節(jié)點(diǎn)之間插入一空節(jié)點(diǎn),前一節(jié)點(diǎn)的多播指針指向所述空節(jié)點(diǎn)的地址,所述空節(jié)點(diǎn)的多播指針指向后一節(jié)點(diǎn)。
4.如權(quán)利要求2所述的方法,其特征在于:所述將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元之后,還包括: 接收到出隊(duì)命令后,根據(jù)出隊(duì)命令獲取所述節(jié)點(diǎn)的鏈表指針,根據(jù)所述鏈表指針與外部存儲(chǔ)單元的映射關(guān)系,讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)。
5.如權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于:所述描述符信息包括以下信息中的一種或多種: 報(bào)文的單播信息、報(bào)文的多播信息、索引信息、當(dāng)前節(jié)點(diǎn)的報(bào)文尾屬性、有效字節(jié)數(shù)和隊(duì)列號(hào)。
6.一種處理報(bào)文的裝置,包括: 第一模塊,用于在緩存空間為輸入報(bào)文分配一節(jié)點(diǎn),存儲(chǔ)該報(bào)文,將該緩存空間對(duì)應(yīng)的位置作為該報(bào)文的描述符的索引信息; 第二模塊,用于提取所述報(bào)文的描述符信息; 第三模塊,用于將所述報(bào)文的描述符信息和所述報(bào)文的節(jié)點(diǎn)信息進(jìn)行組幀,存儲(chǔ)于一節(jié)點(diǎn)鏈表中。
7.如權(quán)利要求6所述的裝置,其特征在于:所述第一模塊,包括: 第一單元,用于向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn),維護(hù)對(duì)應(yīng)的鏈表指針; 第二單元,用于將所述報(bào)文按照所述節(jié)點(diǎn)對(duì)應(yīng)的緩存地址存入外部存儲(chǔ)單元。
8.如權(quán)利要求7所述的裝置,其特征在于: 所述第一單元,向緩存的空閑鏈表申請(qǐng)一節(jié)點(diǎn)后還用于,對(duì)所述節(jié)點(diǎn)進(jìn)行入隊(duì)存儲(chǔ),如同一隊(duì)列相鄰的節(jié)點(diǎn)為多播屬性,則在該相鄰的節(jié)點(diǎn)之間插入一空節(jié)點(diǎn),前一節(jié)點(diǎn)的多播指針指向所述空節(jié)點(diǎn)的地址,所述空節(jié)點(diǎn)的多播指針指向后一節(jié)點(diǎn)。
9.如權(quán)利要求7所述的裝置,其特征在于:所述裝置還包括: 第四模塊,用于接收到出隊(duì)命令后,根據(jù)出隊(duì)命令獲取所述節(jié)點(diǎn)的鏈表指針,根據(jù)所述鏈表指針與外部存儲(chǔ)單元的映射關(guān)系,讀取該節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)。
10.如權(quán)利要求6-9任一項(xiàng)所述的裝置,其特征在于:所述描述符信息包括以下信息中的一種或多種: 報(bào)文的單播信息、報(bào)文的多播信息、索引信息、當(dāng)前節(jié)點(diǎn)的報(bào)文尾屬性、有效字節(jié)數(shù)和隊(duì)列號(hào)。
【文檔編號(hào)】H04L12/861GK103731368SQ201210387704
【公開日】2014年4月16日 申請(qǐng)日期:2012年10月12日 優(yōu)先權(quán)日:2012年10月12日
【發(fā)明者】高繼偉, 黃煒 申請(qǐng)人:中興通訊股份有限公司