專利名稱:多核多線程的報(bào)文轉(zhuǎn)發(fā)方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,特別涉及一種多核多線程的報(bào)文轉(zhuǎn)發(fā)方法及系統(tǒng)。
背景技術(shù):
在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫做“多線程處理”。多線程處理一個(gè)常見(jiàn)的例子就是用戶界面。利用線程,用戶可按下一個(gè)按鈕,然后程序會(huì)立即做出響應(yīng),而不是讓用戶等待程序完成了當(dāng)前任務(wù)以后才開(kāi) 始響應(yīng)。當(dāng)前高端網(wǎng)絡(luò)設(shè)備大多采用多核CPU的硬件架構(gòu)來(lái)提高報(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)的中國(guó)專利中,記載了一種將hash隊(duì)列(即文中的hash表所劃分的區(qū)域)與線程相綁定的方法,實(shí)現(xiàn)了共享資源的免鎖設(shè)計(jì),但在網(wǎng)絡(luò)設(shè)備出現(xiàn)幾條數(shù)據(jù)流的報(bào)文,通過(guò)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)。
發(fā)明內(nèi)容
(一 )要解決的技術(shù)問(wèn)題本發(fā)明要解決的技術(shù)問(wèn)題是如何提高多核CPU在報(bào)文轉(zhuǎn)發(fā)時(shí)的使用效率,避免資源的浪費(fèi)。( 二 )技術(shù)方案為解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種多核多線程的報(bào)文轉(zhuǎn)發(fā)方法,所述方法包括以下步驟SI :創(chuàng)建一個(gè)預(yù)設(shè)大小的hash表,并將所述hash表劃分為預(yù)設(shè)個(gè)數(shù)的區(qū)域,設(shè)每個(gè)區(qū)域均為一個(gè)hash隊(duì)列,所述預(yù)設(shè)個(gè)數(shù)為大于等于2的整數(shù);S2 :接收物理接口的報(bào)文,并根據(jù)所述報(bào)文的IP五元組進(jìn)行hash計(jì)算,根據(jù)計(jì)算結(jié)果將所述報(bào)文放入對(duì)應(yīng)的hash隊(duì)列中;S3 :當(dāng)前線程判斷當(dāng)前hash隊(duì)列是否被其它線程獲取權(quán)限,若是,則將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,并重復(fù)執(zhí)行步驟S3,否則執(zhí)行步驟S4 ;S4 :獲取所述當(dāng)前hash隊(duì)列的權(quán)限,判斷所述當(dāng)前hash隊(duì)列中是否具有報(bào)文,若是,則對(duì)所述當(dāng)前hash隊(duì)列中的報(bào)文進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,將其它線程作為當(dāng)前線程,并返回步驟S3,否則舍棄所述當(dāng)前線程的權(quán)限,并將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,返回步驟S3。優(yōu)選地,步驟SI之前還包括以下步驟SO :多核CPU分別對(duì)應(yīng)生成與所述多核CPU數(shù)量相同的線程。
優(yōu)選地,所述預(yù)設(shè)大小為65536。本發(fā)明還公開(kāi)了一種多核多線程的報(bào)文轉(zhuǎn)發(fā)系統(tǒng),所述系統(tǒng)包括創(chuàng)建劃分模塊,用于創(chuàng)建一個(gè)預(yù)設(shè)大小的hash表,并將所述hash表劃分為預(yù)設(shè)個(gè)數(shù)的區(qū)域,設(shè)每個(gè)區(qū)域均為一個(gè)hash隊(duì)列,所述預(yù)設(shè)個(gè)數(shù)為大于等于2的整數(shù);計(jì)算模塊,用于接收物理接口的報(bào)文,并根據(jù)所述報(bào)文的IP五元組進(jìn)行hash計(jì)算,根據(jù)計(jì)算結(jié)果將所述報(bào)文放入對(duì)應(yīng)的hash隊(duì)列中;判斷模塊,用于當(dāng)前線程判斷當(dāng)前hash隊(duì)列是否被其它線程獲取權(quán)限,若是,則將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,并重復(fù)執(zhí)行判斷模塊,否則執(zhí)行權(quán)限獲取模塊;權(quán)限獲取模塊,用于獲取所述當(dāng)前hash隊(duì)列的權(quán)限,判斷所述當(dāng)前hash隊(duì)列中是 否具有報(bào)文,若是,則對(duì)所述當(dāng)前hash隊(duì)列中的報(bào)文進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,將其它線程作為當(dāng)前線程,并返回判斷模塊,否則舍棄所述當(dāng)前線程的權(quán)限,并將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,返回判斷模塊。(三)有益效果本發(fā)明通過(guò)多核CPU對(duì)應(yīng)的線程浮動(dòng)獲取hash隊(duì)列的方式,在實(shí)現(xiàn)了資源共享的免鎖的同時(shí),還可使用與hash隊(duì)列的數(shù)量相同或更少的線程進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,提高了多核CPU在報(bào)文轉(zhuǎn)發(fā)時(shí)的使用效率,避免了資源的浪費(fèi)。
圖I是按照本發(fā)明一種實(shí)施方式的多核多線程的報(bào)文轉(zhuǎn)發(fā)方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說(shuō)明本發(fā)明,但不用來(lái)限制本發(fā)明的范圍。圖I是按照本發(fā)明一種實(shí)施方式的多核多線程的報(bào)文轉(zhuǎn)發(fā)方法的流程圖;參照?qǐng)D1,本實(shí)施方式的方法包括以下步驟SI :創(chuàng)建一個(gè)預(yù)設(shè)大小的hash表,并將所述hash表劃分為預(yù)設(shè)個(gè)數(shù)的區(qū)域,設(shè)每個(gè)區(qū)域均為一個(gè)hash隊(duì)列,所述預(yù)設(shè)個(gè)數(shù)為大于等于2的整數(shù),本實(shí)施方式中,所述預(yù)設(shè)大小為65536 ; S2 :接收物理接口的報(bào)文,并根據(jù)所述報(bào)文的IP五元組進(jìn)行hash計(jì)算(哈希計(jì)算),根據(jù)計(jì)算結(jié)果將所述報(bào)文放入對(duì)應(yīng)的hash隊(duì)列中;S3 :當(dāng)前線程判斷當(dāng)前hash隊(duì)列是否被其它線程獲取權(quán)限,若是,則將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,并重復(fù)執(zhí)行步驟S3,否則執(zhí)行步驟S4 ;S4 :獲取所述當(dāng)前hash隊(duì)列的權(quán)限,判斷所述當(dāng)前hash隊(duì)列中是否具有報(bào)文,若是,則對(duì)所述當(dāng)前hash隊(duì)列中的報(bào)文進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理(直至將當(dāng)前hash隊(duì)列中的報(bào)文處理完后,舍棄所述當(dāng)前hash隊(duì)列的權(quán)限),將其它線程作為當(dāng)前線程,并返回步驟S3,否則舍棄所述當(dāng)前線程的權(quán)限,并將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,返回步驟S3。優(yōu)選地,步驟SI之前還包括以下步驟S0:多核CPU分別對(duì)應(yīng)生成與所述多核CPU數(shù)量相同的線程,,本實(shí)施方式中,所述多核CPU數(shù)量為4或8,但并不限定本發(fā)明的保護(hù)范圍。
本發(fā)明還公開(kāi)了一種多核多線程的報(bào)文轉(zhuǎn)發(fā)系統(tǒng),所述系統(tǒng)包括創(chuàng)建劃分模塊,用于創(chuàng)建一個(gè)預(yù)設(shè)大小的hash表,并將所述hash表劃分為預(yù)設(shè)個(gè)數(shù)的區(qū)域,設(shè)每個(gè)區(qū)域均為一個(gè)hash隊(duì)列,所述預(yù)設(shè)個(gè)數(shù)為大于等于2的整數(shù);計(jì)算模塊,用于接收物理接口的報(bào)文,并根據(jù)所述報(bào)文的IP五元組進(jìn)行hash計(jì)算,根據(jù)計(jì)算結(jié)果將所述報(bào)文放入對(duì)應(yīng)的hash隊(duì)列中;判斷模塊,用于當(dāng)前線程判斷當(dāng)前hash隊(duì)列是否被其它線程獲取權(quán)限,若是,則 將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,并重復(fù)執(zhí)行判斷模塊,否則執(zhí)行權(quán)限獲取模塊;權(quán)限獲取模塊,用于獲取所述當(dāng)前hash隊(duì)列的權(quán)限,判斷所述當(dāng)前hash隊(duì)列中是否具有報(bào)文,若是,則對(duì)所述當(dāng)前hash隊(duì)列中的報(bào)文進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,將其它線程作為當(dāng)前線程,并返回判斷模塊,否則舍棄所述當(dāng)前線程的權(quán)限,并將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,返回判斷模塊。以上實(shí)施方式僅用于說(shuō)明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)技術(shù)領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
權(quán)利要求
1.一種多核多線程的報(bào)文轉(zhuǎn)發(fā)方法,其特征在于,所述方法包括以下步驟 51:創(chuàng)建一個(gè)預(yù)設(shè)大小的hash表,并將所述hash表劃分為預(yù)設(shè)個(gè)數(shù)的區(qū)域,設(shè)每個(gè)區(qū)域均為一個(gè)hash隊(duì)列,所述預(yù)設(shè)個(gè)數(shù)為大于等于2的整數(shù); 52:接收物理接口的報(bào)文,并根據(jù)所述報(bào)文的IP五元組進(jìn)行hash計(jì)算,根據(jù)計(jì)算結(jié)果將所述報(bào)文放入對(duì)應(yīng)的hash隊(duì)列中; 53:當(dāng)前線程判斷當(dāng)前hash隊(duì)列是否被其它線程獲取權(quán)限,若是,則將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,并重復(fù)執(zhí)行步驟S3,否則執(zhí)行步驟S4 ; S4:獲取所述當(dāng)前hash隊(duì)列的權(quán)限,判斷所述當(dāng)前hash隊(duì)列中是否具有報(bào)文,若是,則對(duì)所述當(dāng)前hash隊(duì)列中的報(bào)文進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,將其它線程作為當(dāng)前線程,并返回步驟S3,否則舍棄所述當(dāng)前線程的權(quán)限,并將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,返回步驟S3。
2.如權(quán)利要求I所述的方法,其特征在于,步驟SI之前還包括以下步驟 SO :多核CPU分別對(duì)應(yīng)生成與所述多核CPU數(shù)量相同的線程。
3.如權(quán)利要求I或2所述的方法,其特征在于,所述預(yù)設(shè)大小為65536。
4.一種多核多線程的報(bào)文轉(zhuǎn)發(fā)系統(tǒng),其特征在于,所述系統(tǒng)包括 創(chuàng)建劃分模塊,用于創(chuàng)建一個(gè)預(yù)設(shè)大小的hash表,并將所述hash表劃分為預(yù)設(shè)個(gè)數(shù)的區(qū)域,設(shè)每個(gè)區(qū)域均為一個(gè)hash隊(duì)列,所述預(yù)設(shè)個(gè)數(shù)為大于等于2的整數(shù); 計(jì)算模塊,用于接收物理接口的報(bào)文,并根據(jù)所述報(bào)文的IP五元組進(jìn)行hash計(jì)算,根據(jù)計(jì)算結(jié)果將所述報(bào)文放入對(duì)應(yīng)的hash隊(duì)列中; 判斷模塊,用于當(dāng)前線程判斷當(dāng)前hash隊(duì)列是否被其它線程獲取權(quán)限,若是,則將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,并返回判斷模塊,否則執(zhí)行權(quán)限獲取模塊; 權(quán)限獲取模塊,用于獲取所述當(dāng)前hash隊(duì)列的權(quán)限,判斷所述當(dāng)前hash隊(duì)列中是否具有報(bào)文,若是,則對(duì)所述當(dāng)前hash隊(duì)列中的報(bào)文進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,將其它線程作為當(dāng)前線程,并重復(fù)執(zhí)行判斷模塊,否則舍棄所述當(dāng)前線程的權(quán)限,并將其它hash隊(duì)列作為當(dāng)前hash隊(duì)列,返回判斷模塊。
全文摘要
本發(fā)明公開(kāi)了一種多核多線程的報(bào)文轉(zhuǎn)發(fā)方法及系統(tǒng),涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,本發(fā)明通過(guò)多核CPU對(duì)應(yīng)的線程浮動(dòng)獲取hash隊(duì)列的方式,在實(shí)現(xiàn)了資源共享的免鎖的同時(shí),還可使用與hash隊(duì)列的數(shù)量相同或更少的線程進(jìn)行報(bào)文轉(zhuǎn)發(fā)處理,提高了多核CPU在報(bào)文轉(zhuǎn)發(fā)時(shí)的使用效率,避免了資源的浪費(fèi)。
文檔編號(hào)H04L29/06GK102685002SQ20121012598
公開(kāi)日2012年9月19日 申請(qǐng)日期2012年4月26日 優(yōu)先權(quán)日2012年4月26日
發(fā)明者陳海濱 申請(qǐng)人:漢柏科技有限公司