解了多核之間的競爭和資源互鎖,有效提升了多核CPU的處理能力,此外,多核CPU并行執(zhí)行任務(wù)能夠有效提高任務(wù)處理速度并避免處理器資源的浪費(fèi),實(shí)現(xiàn)了 CPU功能卸載。
[0029]參閱圖1所示,為本發(fā)明實(shí)施例中報(bào)文處理系統(tǒng)架構(gòu)示意圖,該報(bào)文處理系統(tǒng)包括前置預(yù)處理器和多核CPU ;其中,前置預(yù)處理器用于根據(jù)物理端口傳輸?shù)拇幚韴?bào)文生成待處理任務(wù),對(duì)待處理任務(wù)進(jìn)行分類和調(diào)度,以及對(duì)多核CPU已處理任務(wù)進(jìn)行保序處理;多核CPU用于對(duì)前置預(yù)處理器傳輸?shù)拇幚砣蝿?wù)進(jìn)行處理。
[0030]該前置預(yù)處理器可以通過可編程處理器,例如,現(xiàn)場可編程門陣列(FPGA)實(shí)現(xiàn),也可以通過網(wǎng)絡(luò)處理器(Network Processor,簡稱NP)或者其他通用特定用途集成電路(Applicat1n Specific Integrated Circuit,簡稱 ASIC)實(shí)現(xiàn)。
[0031]下面結(jié)合說明書附圖,對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)描述。
[0032]參閱圖2所示,本發(fā)明實(shí)施例提供了一種報(bào)文處理方法,包括:
[0033]步驟200:前置預(yù)處理器從物理端口接收待處理報(bào)文,根據(jù)該待處理報(bào)文的報(bào)文信息生成待處理任務(wù)。
[0034]本發(fā)明實(shí)施例中,前置預(yù)處理器和多核CPU之間通過外部部件高速互連(Peripheral Component Interconnect Express, PCI Express,簡稱 PCIE)總線連接。前置預(yù)處理器從物理端口接收待處理報(bào)文,采用PCIE協(xié)議,通過直接存儲(chǔ)器訪問(DirectMemory Access,簡稱DMA)方式,將接收到的待處理報(bào)文寫入多核CPU的內(nèi)存中;并保存該待處理報(bào)文在多核CPU內(nèi)存中的存儲(chǔ)地址。其中,上述物理端口為高速率以太網(wǎng)端口,例如,I吉比特每秒(Gbit/s), 10Gbit/s,或者40Gbit/s等速率的以太網(wǎng)端口。
[0035]上述待處理報(bào)文在多核CPU內(nèi)存中的存儲(chǔ)地址可以采用環(huán)向地址的方式獲得,該環(huán)向地址由多核CPU管理,即多核CPU接收到前置預(yù)處理器寫入的待處理報(bào)文時(shí),實(shí)時(shí)在內(nèi)存中為需要寫入的待處理報(bào)文分配存儲(chǔ)空間,并將存儲(chǔ)空間的存儲(chǔ)地址通知給前置預(yù)處理器。其中,上述環(huán)向地址為不連續(xù)的多個(gè)存儲(chǔ)地址,該不連續(xù)的多個(gè)存儲(chǔ)地址組成了首尾相連的環(huán)向地址。
[0036]多核CPU也可以在多核CPU內(nèi)存中預(yù)先分配一塊連續(xù)的存儲(chǔ)空間給前置預(yù)處理器用于存儲(chǔ)待處理報(bào)文,該存儲(chǔ)空間的存儲(chǔ)地址由前置預(yù)處理器管理,當(dāng)前置預(yù)處理器需要將待處理報(bào)文存入多核CPU內(nèi)存中時(shí),該前置預(yù)處理器即將該接收到的待處理報(bào)文存入該存儲(chǔ)空間中,并記錄存儲(chǔ)地址。
[0037]前置預(yù)處理器對(duì)上述待處理報(bào)文進(jìn)行解析,從待處理報(bào)文中提取報(bào)文信息,包括報(bào)文長度、報(bào)文類型、物理端口的標(biāo)識(shí)、報(bào)文在內(nèi)存中的存儲(chǔ)地址、待處理任務(wù)在內(nèi)存中的存儲(chǔ)地址;可選的,該報(bào)文信息還包括互聯(lián)網(wǎng)協(xié)議(Internet Protocol,簡稱IP)地址、媒體接入控制(Medium Access Control,簡稱MAC)地址、優(yōu)先級(jí)等信息。前置預(yù)處理器根據(jù)上述報(bào)文信息生成待處理任務(wù)。生成上述待處理任務(wù)時(shí)所需的報(bào)文信息可以根據(jù)具體應(yīng)用場景預(yù)先設(shè)置,例如,針對(duì)需要多核CPU對(duì)待處理報(bào)文進(jìn)行二層轉(zhuǎn)發(fā)的情況,前置預(yù)處理器從待處理報(bào)文中提取的報(bào)文信息包含MAC地址。若前置預(yù)處理器生成的待處理任務(wù)中的報(bào)文信息中缺少多核CPU處理該待處理任務(wù)時(shí)的必需信息,則多核CPU可以根據(jù)待處理任務(wù)中的存儲(chǔ)地址,直接從該存儲(chǔ)地址中獲取待處理報(bào)文,由該待處理報(bào)文獲取所需的報(bào)文信肩、O
[0038]本實(shí)施例中,每個(gè)待處理任務(wù)均為固定長度,并用預(yù)定義的格式,即該第一預(yù)設(shè)格式來描述,其中,待處理任務(wù)的長度可以根據(jù)具體應(yīng)用場景進(jìn)行設(shè)置,參閱圖3所示為本發(fā)明實(shí)施例中,以待處理任務(wù)長度為4*64bit為例描述待處理任務(wù)所用的第一預(yù)設(shè)格式的示意圖。如圖3所示,在該任務(wù)中,每個(gè)項(xiàng)目表示的含義如下所示:
[0039]任務(wù)標(biāo)志位用于標(biāo)識(shí)任務(wù)的狀態(tài),如任務(wù)的狀態(tài)為新入隊(duì)狀態(tài),或者任務(wù)的狀態(tài)為已調(diào)度狀態(tài)。
[0040]任務(wù)處理類型控制字表示任務(wù)的處理類型,該任務(wù)的處理類型包括如發(fā)送、刪除、接收以及重新加入隊(duì)列等多種處理類型。
[0041]待處理隊(duì)列的保序類型用于標(biāo)識(shí)該待處理隊(duì)列是否為需要進(jìn)行保序的隊(duì)列。
[0042]待處理隊(duì)列的隊(duì)列標(biāo)識(shí)為待處理任務(wù)所在待處理隊(duì)列的隊(duì)列編號(hào)。
[0043]已處理隊(duì)列的保序類型用于標(biāo)識(shí)該已處理隊(duì)列是否為需要進(jìn)行保序的隊(duì)列。
[0044]已處理隊(duì)列的隊(duì)列標(biāo)識(shí)為待處理任務(wù)所在已處理隊(duì)列的隊(duì)列編號(hào)。
[0045]任務(wù)序列碼即為前置預(yù)處理器為待處理任務(wù)分配的序列碼。
[0046]任務(wù)保序類型用于標(biāo)識(shí)該任務(wù)是否是需要進(jìn)行保序的任務(wù)。
[0047]物理端口的標(biāo)識(shí)表示接收待處理報(bào)文的物理端口的標(biāo)識(shí)。
[0048]任務(wù)在內(nèi)存中的存儲(chǔ)地址標(biāo)識(shí)任務(wù)在內(nèi)存中的存儲(chǔ)位置。
[0049]任務(wù)對(duì)應(yīng)報(bào)文在內(nèi)存中的存儲(chǔ)地址表示任務(wù)對(duì)應(yīng)的報(bào)文在內(nèi)存中的存儲(chǔ)位置。
[0050]報(bào)文長度表示該報(bào)文占用的字節(jié)數(shù)目。
[0051]在實(shí)際應(yīng)用中,上述任務(wù)序列碼、物理端口標(biāo)識(shí)、報(bào)文長度、任務(wù)對(duì)應(yīng)的報(bào)文在內(nèi)存中的存儲(chǔ)地址,以及任務(wù)在內(nèi)存中的存儲(chǔ)地址為必選項(xiàng)目,其他項(xiàng)目根據(jù)具體應(yīng)用場景選取。此外,上述任務(wù)中包含的每一個(gè)項(xiàng)目需要占用的比特位數(shù)以及具體占用哪些比特位均可以根據(jù)具體應(yīng)用場景進(jìn)行設(shè)置,例如,在圖3所示任務(wù)中,任務(wù)標(biāo)志位占用lbit,任務(wù)處理類型控制字占用3bit,報(bào)文優(yōu)先級(jí)占用4bit,待處理隊(duì)列的保序類型占用2bit,待處理隊(duì)列的隊(duì)列標(biāo)識(shí)lObit,已處理隊(duì)列的保序類型占用2bit,已處理隊(duì)列的隊(duì)列標(biāo)識(shí)占用1bit,任務(wù)序列碼占用32bit,任務(wù)保序類型占用16bit,物理端口的標(biāo)識(shí)16bit,任務(wù)在內(nèi)存中的存儲(chǔ)地址占用16bit,報(bào)文長度占用16bit,任務(wù)對(duì)應(yīng)報(bào)文在內(nèi)存中的存儲(chǔ)地址占用32bito
[0052]前置預(yù)處理器對(duì)待處理報(bào)文進(jìn)行解析之后,提取報(bào)文信息,并根據(jù)上述報(bào)文信息生成圖3所示的第一預(yù)設(shè)格式的待處理任務(wù)。
[0053]采用上述技術(shù)方案,根據(jù)具體應(yīng)用場景提取待處理報(bào)文的報(bào)文信息,并根據(jù)該報(bào)文信息生成固定長度的待處理任務(wù),由于待處理任務(wù)僅包含了根據(jù)接收到的報(bào)文提取得到的報(bào)文信息,因此,待處理任務(wù)的長度小于接收到的待處理報(bào)文的長度,且長度固定,使得多核CPU無須處理長度很長且不固定的待處理報(bào)文,從而降低了多核CPU處理待處理任務(wù)的復(fù)雜度以及處理量。
[0054]上述待處理任務(wù)中除包括報(bào)文信息外,還包括序列碼,該序列碼是由前置預(yù)處理器根據(jù)待處理報(bào)文的物理端口的標(biāo)識(shí)以及接收順序,為待處理任務(wù)分配所得,且該序列碼為標(biāo)識(shí)待處理任務(wù)的唯一標(biāo)識(shí)。
[0055]參閱圖4所示為本發(fā)明實(shí)施例中為待處理任務(wù)分配序列碼的示意圖,如圖所示,前置預(yù)處理器通過所有的物理端口依次接收到O?N個(gè)待處理報(bào)文,分別提取上述每一個(gè)待處理報(bào)文的報(bào)文信息生成待處理任務(wù)之后,根據(jù)待處理任務(wù)對(duì)應(yīng)的待處理報(bào)文的接收順序,依次為每一個(gè)待處理任務(wù)分配序列碼。
[0056]由于不同物理端口接收的報(bào)文之間無須進(jìn)行保序操作,因此,可選的,前置預(yù)處理器針對(duì)具有相同物理端口的標(biāo)識(shí)的所有待處理任務(wù),根據(jù)每一個(gè)待處理任務(wù)的接收順序依次為上述所有待處理任務(wù)分配序列碼。例如,對(duì)應(yīng)于物理端口 O的待處理任務(wù)有待處理任務(wù)1、待處理任務(wù)2和待處理任務(wù)3,該三個(gè)待處理任務(wù)的接收順序按照時(shí)間排序依次為待處理任務(wù)2、待處理任務(wù)1、待處理任務(wù)3,因此,依次為上述待處理任務(wù)2分配序列碼SN0,為待處理任務(wù)I分配序列碼SNl,為待處理任務(wù)3分配序列碼SN2。
[0057]步驟210:前置預(yù)處理器根據(jù)上述待處理任務(wù)中的報(bào)文信息以及序列碼,將該待處理任務(wù)分配至相應(yīng)的待處理隊(duì)列中。
[0058]本發(fā)明實(shí)施例中,由于待處理任務(wù)是根據(jù)由待處理報(bào)文中提取的報(bào)文信息生成的,因此,前置預(yù)處理器根據(jù)待處理任務(wù)中的報(bào)文信息,將待處理任務(wù)分配至該報(bào)文信息對(duì)應(yīng)的待處理隊(duì)列中。其中,前置預(yù)處理器可以根據(jù)待處理任務(wù)對(duì)應(yīng)的待處理報(bào)文的物理端口的標(biāo)識(shí)為待處理任務(wù)分配待處理隊(duì)列,即物理端口的標(biāo)識(shí)相同的待處理任務(wù)分配至相同的待處理隊(duì)列中;前置預(yù)處理器可以根據(jù)待處理任務(wù)的優(yōu)先級(jí)為待處理任務(wù)分配待處理隊(duì)列,即優(yōu)先級(jí)相同的待處理任務(wù)分配至相同的待處理隊(duì)列中;前置預(yù)處理器還可以根據(jù)待處理任務(wù)的報(bào)文類型為待處理任務(wù)分配待處理隊(duì)列,即報(bào)文類型相同的待處理任務(wù)分配至相同的待處理隊(duì)列中,例如,若待處理任務(wù)I對(duì)應(yīng)的報(bào)文類型為IP報(bào)文,則將待處理任務(wù)I分配至待處理隊(duì)列I中,若待處理任務(wù)2對(duì)應(yīng)的報(bào)文類型為以太報(bào)文,則將待處理任務(wù)2分配至待處理隊(duì)列2中;對(duì)應(yīng)于其他報(bào)文類型的待處理任務(wù)分配至待處理隊(duì)列3中;前置預(yù)處理器還可以根據(jù)待處理任務(wù)的MAC地址為待處理任務(wù)分配待處理隊(duì)列,此時(shí),由于MAC地址較長,因此,可以采用哈希算法對(duì)MAC地址進(jìn)行處理,根據(jù)處理后的結(jié)果為待處理任務(wù)分配隊(duì)列。
[0059]上述待處理隊(duì)列中包含的所有待處理任務(wù)可以按照序列碼由大到小排列,也可以按照序列碼由小到大排列。
[0060]進(jìn)一步的,當(dāng)前置預(yù)處理器根據(jù)除物理端口的標(biāo)識(shí)以外的其他報(bào)文信息為待處理任務(wù)分配待處理隊(duì)列時(shí),前置預(yù)處理器應(yīng)當(dāng)保證在每一個(gè)待處理隊(duì)列中,對(duì)應(yīng)于相同物理端口的標(biāo)識(shí)的任務(wù)的序列碼由大到小排列,或者由小到大排列。
[0061]步驟220:前置預(yù)處理器