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