專利名稱:多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法及系統(tǒng)。
背景技術(shù):
在一個(gè)程序中 ,這些獨(dú)立運(yùn)行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫做“多線程處理”。多線程處理一個(gè)常見的例子就是用戶界面。利用線程,用戶可按下一個(gè)按鈕,然后程序會(huì)立即做出響應(yīng),而不是讓用戶等待程序完成了當(dāng)前任務(wù)以后才開始響應(yīng)。當(dāng)前高端網(wǎng)絡(luò)設(shè)備大多采用多核CPU的硬件架構(gòu)來提高報(bào)文的處理和轉(zhuǎn)發(fā)性能,對(duì)多核CPU分別創(chuàng)建相應(yīng)的線程與所述多核CPU進(jìn)行一對(duì)一的綁定。申請(qǐng)?zhí)枮?01010289667.x,發(fā)明名稱為一種基于多核構(gòu)架的報(bào)文轉(zhuǎn)發(fā)方法及系統(tǒng)的中國專利中,記載了一種將hash隊(duì)列(即文中的hash表所劃分的區(qū)域)與線程相綁定的方法,實(shí)現(xiàn)了共享資源的免鎖設(shè)計(jì),但在網(wǎng)絡(luò)設(shè)備出現(xiàn)幾條數(shù)據(jù)流的報(bào)文,通過hash計(jì)算后均落在了一個(gè)hash隊(duì)列中時(shí),這樣就會(huì)導(dǎo)致與該hash隊(duì)列對(duì)應(yīng)的線程很繁忙,與其他hash隊(duì)列對(duì)應(yīng)的線程均處于閑置狀態(tài)的情況出現(xiàn),從而多核CPU的使用效率較低,造成資源的浪費(fèi)。為了提高網(wǎng)絡(luò)設(shè)備中多核CPU的使用效率,現(xiàn)有技術(shù)中采用RMI芯片將接收到的報(bào)文平均分配給各個(gè)CPU,由于將報(bào)文平均分配給各個(gè)CPU,而報(bào)文存在大小不同的情況,因此,每個(gè)CPU處理報(bào)文的速度會(huì)有些不同,在報(bào)文處理完成后,會(huì)產(chǎn)生報(bào)文發(fā)送時(shí)的亂序現(xiàn)象(測(cè)試中有千分之三的亂序幾率),對(duì)于一般的需求已經(jīng)足夠,但對(duì)于IPSEC報(bào)文和視頻報(bào)文等,如果出現(xiàn)亂序就會(huì)丟包或者視頻馬賽克,使得網(wǎng)絡(luò)通信受到較為嚴(yán)重的阻滯。
發(fā)明內(nèi)容
(一)要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是提供一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法及系統(tǒng),以防止報(bào)文發(fā)送時(shí)出現(xiàn)亂序現(xiàn)象。(二)技術(shù)方案為解決上述問題,一方面本發(fā)明提供了一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法,包括以下步驟SI :多核CPU的各個(gè)CPU接收當(dāng)前報(bào)文后,獲取所述當(dāng)前報(bào)文的入接口信息,對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組;S2 :當(dāng)前報(bào)文對(duì)應(yīng)的線程對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序,處理所述當(dāng)前報(bào)文;S3:在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。
優(yōu)選地,在所述步驟SI之前還包括創(chuàng)建與每個(gè)入接口對(duì)應(yīng)的入接口循環(huán)鏈表的步驟。優(yōu)選地,所述步驟SI中對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組的步驟具體為根據(jù)當(dāng)前報(bào)文的入接口信息對(duì)當(dāng)前報(bào)文所屬的入接口進(jìn)行判斷,并找到與所述入接口對(duì)應(yīng)的入接口循環(huán)鏈表。優(yōu)選地,所述步驟S2中對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序的步驟具體為在所述找到的入接口循環(huán)鏈表上獲取當(dāng)前節(jié)點(diǎn),將當(dāng)前報(bào)文記錄到所述當(dāng)前節(jié)點(diǎn)中,并將所述當(dāng)前節(jié)點(diǎn)信息記錄到當(dāng)前報(bào)文中,然后將該入接口循環(huán)鏈表的當(dāng)前節(jié)點(diǎn)從新賦值為當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。優(yōu)選地,所述步驟S3具體為在當(dāng)前報(bào)文被處理后,查找此報(bào)文在對(duì)應(yīng)入接口循環(huán)鏈表中對(duì)應(yīng)的節(jié)點(diǎn),查看該節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)中記錄的報(bào)文是否為空
若為空,則直接將當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),并將對(duì)應(yīng)的節(jié)點(diǎn)信息清空;若不為空,則將當(dāng)前報(bào)文的發(fā)送信息存入此節(jié)點(diǎn)中,退出此報(bào)文處理流程,等待上一個(gè)節(jié)點(diǎn)中記錄的報(bào)文為空后再發(fā)送。優(yōu)選地,所述入接口循環(huán)鏈表中每個(gè)節(jié)點(diǎn)均具有狀態(tài)標(biāo)志位,所述狀態(tài)標(biāo)志位用于反映節(jié)點(diǎn)所對(duì)應(yīng)的報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā)的狀態(tài);所述步驟S3中,通過所述狀態(tài)標(biāo)志位來判斷所述入接口循環(huán)鏈表中的前一個(gè)報(bào)文對(duì)應(yīng)的報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā)。另一方面,本發(fā)明還提供了一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序系統(tǒng),所述系統(tǒng)包括報(bào)文按接口分組模塊,用于在多核CPU的各個(gè)CPU接收?qǐng)?bào)文后,獲取報(bào)文的入接口信息,對(duì)報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組;報(bào)文處理模塊,用于通過對(duì)應(yīng)的線程對(duì)同一入接口的報(bào)文進(jìn)行排序,處理所述報(bào)文;轉(zhuǎn)發(fā)模塊,用于在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。(三)有益效果本發(fā)明通過判斷同一入接口接收的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),來實(shí)現(xiàn)同一入接口報(bào)文的保序,防止報(bào)文發(fā)送時(shí)出現(xiàn)亂序現(xiàn)象。本發(fā)明的保序范圍精細(xì),由于不對(duì)不同入接口間的報(bào)文進(jìn)行保序,所以轉(zhuǎn)發(fā)速度相對(duì)更快,適用于高端設(shè)備。
圖I是按照本發(fā)明一種實(shí)施方式報(bào)文保序方法的流程圖;圖2是按照本發(fā)明一種實(shí)施方式報(bào)文保序系統(tǒng)的結(jié)構(gòu)框圖。
具體實(shí)施例方式下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明如下。
實(shí)施例一如圖I所示,本實(shí)施例記載了一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法,包括以下步驟SI :多核CPU的各個(gè)CPU接收當(dāng)前報(bào)文后,獲取所述當(dāng)前報(bào)文的入接口信息,對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組;S2:當(dāng)前報(bào)文對(duì)應(yīng)的線程對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序,處理所述當(dāng)前報(bào)文;S3 :在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。在本實(shí)施例中,步驟SI之前還包括多核CPU分別對(duì)應(yīng)生成與所述多核CPU數(shù)量 相同的線程的步驟。在本實(shí)施例中每個(gè)CPU輪詢處理網(wǎng)卡接收來的報(bào)文。本實(shí)施例中,在所述步驟SI之前還包括創(chuàng)建與每個(gè)入接口對(duì)應(yīng)的入接口循環(huán)鏈表的步驟。在本實(shí)施例中,所述步驟SI中對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組的步驟具體為根據(jù)當(dāng)前報(bào)文的入接口信息對(duì)當(dāng)前報(bào)文所屬的入接口進(jìn)行判斷,并找到與所述入接口對(duì)應(yīng)的入接口循環(huán)鏈表。在本實(shí)施例中,所述步驟S2中對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序的步驟具體為在所述找到的入接口循環(huán)鏈表上獲取當(dāng)前節(jié)點(diǎn),將當(dāng)前報(bào)文記錄到所述當(dāng)前節(jié)點(diǎn)中,并將所述當(dāng)前節(jié)點(diǎn)信息記錄到當(dāng)前報(bào)文中,然后將該入接口循環(huán)鏈表的當(dāng)前節(jié)點(diǎn)從新賦值為當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。即假設(shè)當(dāng)前節(jié)點(diǎn)為節(jié)點(diǎn)n,在當(dāng)前報(bào)文記錄到節(jié)點(diǎn)η中,并且將節(jié)點(diǎn)η的節(jié)點(diǎn)信息記錄到當(dāng)前報(bào)文之后,再將該保序循環(huán)鏈表的當(dāng)前節(jié)點(diǎn)從新賦值為節(jié)點(diǎn)η+1,用于記錄該入接口的下一個(gè)報(bào)文。在本實(shí)施例中,所述步驟S3具體為在當(dāng)前報(bào)文被處理后,查找此報(bào)文在對(duì)應(yīng)入接口循環(huán)鏈表中對(duì)應(yīng)的節(jié)點(diǎn),查看該節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)中記錄的報(bào)文是否為空若為空,則直接將當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),并將對(duì)應(yīng)的節(jié)點(diǎn)信息清空;然后查看入接口循環(huán)鏈表上的下一個(gè)節(jié)點(diǎn),如果下一個(gè)節(jié)點(diǎn)不為空,而且此下一個(gè)節(jié)點(diǎn)中的報(bào)文需要被轉(zhuǎn)發(fā)(下一個(gè)節(jié)點(diǎn)中有記錄的出接口信息),則將所述下一個(gè)節(jié)點(diǎn)中的報(bào)文轉(zhuǎn)發(fā),以此類推,直到獲取的鏈表節(jié)點(diǎn)為空或者報(bào)文不需要被轉(zhuǎn)發(fā)(也就是報(bào)文正在被別的CPU處理),則退出此處理流程若不為空,則將當(dāng)前報(bào)文的發(fā)送信息(此時(shí)報(bào)文已經(jīng)是一個(gè)完整的待發(fā)送報(bào)文,所述發(fā)送信息中主要記錄的是報(bào)文發(fā)送的出接口)存入此節(jié)點(diǎn)中,退出此報(bào)文處理流程,等待上一個(gè)節(jié)點(diǎn)中記錄的報(bào)文為空后再發(fā)送。在本實(shí)施例中,所述入接口循環(huán)鏈表中每個(gè)節(jié)點(diǎn)均具有狀態(tài)標(biāo)志位,所述狀態(tài)標(biāo)志位用于反映節(jié)點(diǎn)所對(duì)應(yīng)的報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā)的狀態(tài);所述步驟S3中,通過所述狀態(tài)標(biāo)志位來判斷所述入接口循環(huán)鏈表中的前一個(gè)報(bào)文對(duì)應(yīng)的報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā)。實(shí)施例二
如圖2所示,本實(shí)施例記載了一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序系統(tǒng),所述系統(tǒng)包括報(bào)文按接口分組模塊201,用于在多核CPU的各個(gè)CPU接收?qǐng)?bào)文后,獲取報(bào)文的入接口信息,對(duì)報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組;報(bào)文處理模塊202,用于通過對(duì)應(yīng)的線程對(duì)同一入接口的報(bào)文進(jìn)行排序,處理所述報(bào)文;
轉(zhuǎn)發(fā)模塊203,用于在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。本發(fā)明通過判斷同一入接口接收的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),來實(shí)現(xiàn)同一入接口報(bào)文的保序,防止報(bào)文發(fā)送時(shí)出現(xiàn)亂序現(xiàn)象。以上實(shí)施方式僅用于說明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)技術(shù)領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
權(quán)利要求
1.一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法,其特征在于,包括以下步驟 SI:多核CPU的各個(gè)CPU接收當(dāng)前報(bào)文后,獲取所述當(dāng)前報(bào)文的入接口信息,對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組; S2:當(dāng)前報(bào)文對(duì)應(yīng)的線程對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序,處理所述當(dāng)前報(bào)文; S3:在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。
2.如權(quán)利要求I所述的方法,其特征在于,在所述步驟SI之前還包括創(chuàng)建與每個(gè)入接口對(duì)應(yīng)的入接口循環(huán)鏈表的步驟。
3.如權(quán)利要求2所述的方法,其特征在于,所述步驟SI中對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組的步驟具體為根據(jù)當(dāng)前報(bào)文的入接口信息對(duì)當(dāng)前報(bào)文所屬的入接口進(jìn)行判斷,并找到與所述入接口對(duì)應(yīng)的入接口循環(huán)鏈表。
4.如權(quán)利要求3所述的方法,其特征在于,所述步驟S2中對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序的步驟具體為在所述找到的入接口循環(huán)鏈表上獲取當(dāng)前節(jié)點(diǎn),將當(dāng)前報(bào)文記錄到所述當(dāng)前節(jié)點(diǎn)中,并將所述當(dāng)前節(jié)點(diǎn)信息記錄到當(dāng)前報(bào)文中,然后將該入接口循環(huán)鏈表的當(dāng)前節(jié)點(diǎn)從新賦值為當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。
5.如權(quán)利要求4所述的方法,其特征在于,所述步驟S3具體為在當(dāng)前報(bào)文被處理后,查找此報(bào)文在對(duì)應(yīng)入接口循環(huán)鏈表中對(duì)應(yīng)的節(jié)點(diǎn),查看該節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)中記錄的報(bào)文是否為空 若為空,則直接將當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),并將對(duì)應(yīng)的節(jié)點(diǎn)信息清空; 若不為空,則將當(dāng)前報(bào)文的發(fā)送信息存入此節(jié)點(diǎn)中,退出此報(bào)文處理流程,等待上一個(gè)節(jié)點(diǎn)中記錄的報(bào)文為空后再發(fā)送。
6.如權(quán)利要求4或5所述的方法,其特征在于,所述入接口循環(huán)鏈表中每個(gè)節(jié)點(diǎn)均具有狀態(tài)標(biāo)志位,所述狀態(tài)標(biāo)志位用于反映節(jié)點(diǎn)所對(duì)應(yīng)的報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā)的狀態(tài); 所述步驟S3中,通過所述狀態(tài)標(biāo)志位來判斷所述入接口循環(huán)鏈表中的前一個(gè)報(bào)文對(duì)應(yīng)的報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā)。
7.一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序系統(tǒng),其特征在于,所述系統(tǒng)包括 報(bào)文按接口分組模塊,用于在多核CPU的各個(gè)CPU接收?qǐng)?bào)文后,獲取報(bào)文的入接口信息,對(duì)報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組; 報(bào)文處理模塊,用于通過對(duì)應(yīng)的線程對(duì)同一入接口的報(bào)文進(jìn)行排序,處理所述報(bào)文; 轉(zhuǎn)發(fā)模塊,用于在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。
全文摘要
本發(fā)明公開了一種多核網(wǎng)絡(luò)設(shè)備報(bào)文按接口保序方法,包括以下步驟S1多核CPU的各個(gè)CPU接收當(dāng)前報(bào)文后,獲取所述當(dāng)前報(bào)文的入接口信息,對(duì)所述當(dāng)前報(bào)文進(jìn)行入接口判斷并按報(bào)文的入接口分組;S2對(duì)應(yīng)的線程對(duì)所述當(dāng)前報(bào)文在對(duì)應(yīng)入接口組內(nèi)進(jìn)行排序,處理所述當(dāng)前報(bào)文;S3在當(dāng)前報(bào)文被處理后,判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),若是,則將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā),否則等待所述前一個(gè)報(bào)文被轉(zhuǎn)發(fā)后,再將所述處理后的當(dāng)前報(bào)文進(jìn)行轉(zhuǎn)發(fā)。此外,本發(fā)明還公開了一種實(shí)現(xiàn)上述按接口保序方法的按接口保序系統(tǒng)。本發(fā)明通過判斷同一入接口的前一個(gè)報(bào)文是否已經(jīng)被轉(zhuǎn)發(fā),來實(shí)現(xiàn)同一入接口報(bào)文的保序,防止了報(bào)文發(fā)送時(shí)所出現(xiàn)的亂序現(xiàn)象。
文檔編號(hào)H04L12/863GK102891809SQ20121036142
公開日2013年1月23日 申請(qǐng)日期2012年9月25日 優(yōu)先權(quán)日2012年9月25日
發(fā)明者陳海濱 申請(qǐng)人:漢柏科技有限公司