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