專利名稱:業(yè)務(wù)同步處理方法和多核設(shè)備的制作方法
技術(shù)領(lǐng)域:
本申請涉及網(wǎng)絡(luò)通信技術(shù),特別涉及業(yè)務(wù)同步處理方法和多核設(shè)備。
背景技術(shù):
對(duì)基于CPU做報(bào)文轉(zhuǎn)發(fā)的軟轉(zhuǎn)發(fā)系統(tǒng)而言,在CPU主頻提升空間有限的情況下,通過多核來提高處理器整體轉(zhuǎn)發(fā)性能成為一種趨勢。同時(shí),為了減少運(yùn)行操作系統(tǒng)(OS Operation System)的 開銷,目前,處理器的多核一般采用非對(duì)稱多業(yè)務(wù)處理(ASMP:Asymmetric Multiprocessing)結(jié)構(gòu)。該ASMP架構(gòu)下,其中一個(gè)核運(yùn)行OS,作為控制核(controller),負(fù)責(zé)內(nèi)存等CPU資源的分配,在轉(zhuǎn)發(fā)業(yè)務(wù)的處理上,負(fù)責(zé)路由的計(jì)算和生成并下刷路由表項(xiàng)給其它核。而其余的核作為數(shù)據(jù)轉(zhuǎn)發(fā)核(worker),只負(fù)責(zé)從controller接收轉(zhuǎn)發(fā)表項(xiàng),做比較單一的報(bào)文查表轉(zhuǎn)發(fā)處理,具體如圖1所示。在實(shí)際的組網(wǎng)環(huán)境中,存在著各種各樣的報(bào)文:有的報(bào)文處理起來比較簡單,在一個(gè)worker核上即可完成處理;有的報(bào)文比較復(fù)雜,需要多個(gè)worker核相互協(xié)作才能完成處理。所以,對(duì)于worker,又細(xì)分成兩種:一種是處理簡單業(yè)務(wù),稱之為Simple worker (簡稱S worker),彼此之間并行處理。一種是處理復(fù)雜業(yè)務(wù),稱之為Complicated worker (簡稱C worker)。當(dāng)一個(gè)需要復(fù)雜業(yè)務(wù)處理的報(bào)文到達(dá)S worker后,該S worker會(huì)先對(duì)該報(bào)文進(jìn)行簡單的初期處理,將處理后的“半成品”報(bào)文發(fā)送至C worker,由C worker進(jìn)行“再加工”,這個(gè)時(shí)候,S worker和C worker之間就存在著一種同步的關(guān)系,不能并行處理。如圖2所示,當(dāng)S worker3通過業(yè)務(wù)接口接收報(bào)文時(shí),識(shí)別該報(bào)文的處理是屬于簡單業(yè)務(wù)的處還是復(fù)雜業(yè)務(wù)的處理,如果是簡單業(yè)務(wù)處理,則直接對(duì)該報(bào)文進(jìn)行簡單業(yè)務(wù)處理并查找相關(guān)轉(zhuǎn)發(fā)表項(xiàng)進(jìn)行轉(zhuǎn)發(fā)即可,如果是復(fù)雜業(yè)務(wù)處理,則先對(duì)該報(bào)文進(jìn)行簡單的業(yè)務(wù)處理(該處理稱為前期處理),將經(jīng)過簡單處理的報(bào)文遞交給特定的負(fù)責(zé)復(fù)雜業(yè)務(wù)處理的C worker, C worker完成復(fù)雜業(yè)務(wù)處理后再把報(bào)文返回給S worker3,由該S worker3繼續(xù)對(duì)該報(bào)文簡單的業(yè)務(wù)處理(該處理稱為后期處理),如圖2所示S worker3與C worker之間的雙向箭頭所示。需要說明的是,實(shí)際應(yīng)用中,圖2中所有S worker都與C worker之間存在雙向箭頭,只不過這里以S worker3為例所以僅在圖2中明顯示出S worker3與C worker之間的雙向箭頭,而其他S worker與C worker之間的雙向箭頭未示出而已。另外,在實(shí)際應(yīng)用中,在多核處理器之外還可能存在著專門處理某種特定復(fù)雜業(yè)務(wù)的硬件加速單元,比如專門處理報(bào)文加解密的ASIC芯片或者FPGA。如圖3所示,多核處理器與處理特定業(yè)務(wù)的硬件加速單元通過高速數(shù)據(jù)總線相連。這個(gè)硬件加速單元可以是一個(gè)ASIC芯片(比如專門處理報(bào)文加解密的加密引擎),也可以是一個(gè)FPGA。當(dāng)S worker通過業(yè)務(wù)接口接收報(bào)文時(shí),發(fā)現(xiàn)該報(bào)文涉及到可以硬件加速的業(yè)務(wù),則先對(duì)該報(bào)文進(jìn)行簡單的初期處理,之后通過高速數(shù)據(jù)總線把報(bào)文遞交給硬件加速單元處理。等到硬件加速單元完成對(duì)該報(bào)文的處理并通過高速數(shù)據(jù)總線返回后,該S worker再繼續(xù)對(duì)該報(bào)文的后期處理。從圖2、圖3可以看出,S worker與C worker或者硬件加速單元之間存在復(fù)雜業(yè)務(wù)的同步關(guān)系,對(duì)這種有同步關(guān)系的復(fù)雜業(yè)務(wù),S worker在把報(bào)文遞交給C worker或者外掛的硬件加速單元處理的時(shí)候,本身只能處于等待狀態(tài),等到C worker或者硬件加速單元對(duì)該報(bào)文的復(fù)雜處理返回,并對(duì)該報(bào)文的復(fù)雜業(yè)務(wù)處理完成后才能再繼續(xù)對(duì)報(bào)文進(jìn)行處理,具體如圖4所示。如果復(fù)雜業(yè)務(wù)處理的時(shí)間比較長,則S worker等待的時(shí)間就比較長,這對(duì)S worker的CPU浪費(fèi)是相當(dāng)可觀的。
發(fā)明內(nèi)容
本申請?zhí)峁┝藰I(yè)務(wù)同步處理方法和多核設(shè)備,以避免S worker的資源浪費(fèi),提高S worker的資源利用效率。一種業(yè)務(wù)同步處理方法,該方法應(yīng)用于多核處理器中的數(shù)據(jù)轉(zhuǎn)發(fā)核,其中,將所述數(shù)據(jù)轉(zhuǎn)發(fā)核虛擬化為N個(gè)不同的VCPU,該N個(gè)VCPU對(duì)應(yīng)不同的??臻g、且同一時(shí)刻只有一個(gè)VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源處于工作狀態(tài),而其它VCPU處于非工作狀態(tài);該方法包括:A,任一 VCPU在處于工作狀態(tài)時(shí),如果識(shí)別出當(dāng)前待處理的報(bào)文所涉及的業(yè)務(wù)為本VCPU不能獨(dú)自執(zhí)行的復(fù)雜業(yè)務(wù),則對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài),同時(shí)將本VCPU的狀態(tài)切換為非工作狀態(tài)。
一種多核設(shè)備,其關(guān)鍵在于,所述多核設(shè)備包括至少一數(shù)據(jù)轉(zhuǎn)發(fā)核,所述數(shù)據(jù)轉(zhuǎn)發(fā)核包括:通過采用虛擬化技術(shù)從所述數(shù)據(jù)轉(zhuǎn)發(fā)核虛擬化出的N個(gè)VCPU ;其中,N個(gè)VCPU對(duì)應(yīng)不同的??臻g、且同一時(shí)刻只有一個(gè)VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源處于工作狀態(tài),而其它VCPU處于非工作狀態(tài);每一VCPU 包括:識(shí)別單元,用于在自身VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核資源處于工作狀態(tài)時(shí)識(shí)別出當(dāng)前處理的報(bào)文涉及的業(yè)務(wù)是否為自身VCPU不能獨(dú)自執(zhí)行的業(yè)務(wù);傳遞單元,用于在所述識(shí)別單元的識(shí)別結(jié)果為是時(shí),對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,并發(fā)送處理通知給處理單元;處理單元,用于接收所述處理通知后,保存自身VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至自身VCPU對(duì)應(yīng)的棧空間,釋放自身VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài),同時(shí)將自身VCPU的狀態(tài)切換為非工作狀態(tài)。由以上技術(shù)方案可以看出,本發(fā)明中,VCPU在識(shí)別出當(dāng)前報(bào)文涉及的業(yè)務(wù)為本VCPU不能獨(dú)自執(zhí)行的業(yè)務(wù),則先對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,也即,此時(shí)VCPU和業(yè)務(wù)處理模塊之間存在同步的業(yè)務(wù),為避免VCPU占用的數(shù)據(jù)轉(zhuǎn)發(fā)核S worker的資源在該同步的業(yè)務(wù)等待時(shí)間內(nèi)被閑置,則釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài),同時(shí)將本VCPU的狀態(tài)切換為非工作狀態(tài)。這樣,該被選擇處于工作狀態(tài)的VCPU可以繼續(xù)占用S worker的資源執(zhí)行報(bào)文的處理,避免了數(shù)據(jù)轉(zhuǎn)發(fā)核資源的資源浪費(fèi),提高數(shù)據(jù)轉(zhuǎn)發(fā)核資源的利用效率。
圖1為ASMP架構(gòu)下的多核處理器結(jié)構(gòu)示意圖;圖2為S worker與C worker之間的交互示意圖;圖3為S worker與硬件加速單元之間的交互示意圖;圖4為具有同步關(guān)系的復(fù)雜業(yè)務(wù)的處理不意圖;圖5為本發(fā)明實(shí)施例提供的方法流程圖;圖6為本發(fā)明實(shí)施例提供的數(shù)據(jù)核結(jié)構(gòu)示意圖;圖7為本發(fā)明實(shí)施例提供的詳細(xì)方法流程圖;圖8為本發(fā)明實(shí)施例提供的具有同步關(guān)系的復(fù)雜業(yè)務(wù)的處理示意圖;圖9為本發(fā)明實(shí)施 例提供的VCPU結(jié)構(gòu)圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明中,通過對(duì)S worker進(jìn)行軟件虛擬化,使得S worker在與C worker或者硬件加速單元同步等待的時(shí)間繼續(xù)處理后需的報(bào)文,提高報(bào)文處理效率,也避免數(shù)據(jù)轉(zhuǎn)發(fā)核的資源浪費(fèi)。下面對(duì)本發(fā)明提供的方法進(jìn)行描述:圖5示出了本發(fā)明提供的方法流程圖。如圖5所示,該流程可包括以下步驟:步驟501,將S worker虛擬化為N個(gè)不同的VCPU。本步驟501中,可采用虛擬化技術(shù)將S worker虛擬化為N個(gè)不同的VCPU。其中,N可根據(jù)經(jīng)驗(yàn)設(shè)置。本發(fā)明中,N個(gè)VCPU具有不同的標(biāo)識(shí),且分別對(duì)應(yīng)不同的??臻g。另外,為便于描述該N個(gè)VCPU,本發(fā)明還從設(shè)定值比如I開始按照遞增順對(duì)這N個(gè)VCPU進(jìn)行編號(hào)。圖6示出了從I開始按照遞增順對(duì)這N個(gè)VCPU進(jìn)行編號(hào)的實(shí)例。在本發(fā)明中,N個(gè)VCPU在同一時(shí)刻只有一個(gè)VCPU完全占用S worker的資源處于工作狀態(tài),而其他VCPU處于非工作狀態(tài),不可同時(shí)出現(xiàn)兩個(gè)以上的VCPU共享占用S worker的資源處于工作狀態(tài)。在初始,可預(yù)先假設(shè)編號(hào)為I的VCPU (比如VCPU1)被默認(rèn)為處于工作狀態(tài)進(jìn)行報(bào)文的處理,而其他VCPU處于非工作狀態(tài)。步驟502,處于工作狀態(tài)的VCPU在識(shí)別出當(dāng)前待處理的報(bào)文所涉及的業(yè)務(wù)為本VCPU不能獨(dú)自執(zhí)行的復(fù)雜業(yè)務(wù),則先對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,保存本VCPU當(dāng)前在S worker的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用S worker資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的S worker資源進(jìn)入工作狀態(tài),同時(shí)將本VCPU的狀態(tài)切換為非工作狀態(tài)。以VCPUl處于工作狀態(tài)為例,則VCPUl在處理發(fā)往S worker的報(bào)文時(shí),識(shí)別當(dāng)前報(bào)文涉及的業(yè)務(wù),如果該識(shí)別出的業(yè)務(wù)為本VCPUl不能獨(dú)自執(zhí)行的復(fù)雜業(yè)務(wù),則先對(duì)所述報(bào)文進(jìn)行簡單業(yè)務(wù)處理,這里,該簡單業(yè)務(wù)處理實(shí)質(zhì)為該報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的前期處理。之后,將處理后的報(bào)文傳遞給用于執(zhí)行所述業(yè)務(wù)的業(yè)務(wù)處理模塊。這樣,VCPUl和業(yè)務(wù)處理模塊之間就存在同步的業(yè)務(wù),為避免VCPUl占用的Sworker的資源在該同步業(yè)務(wù)時(shí)間內(nèi)被閑置,貝U VCPUl保存本VCPUl當(dāng)前在S worker的運(yùn)行軌跡至本VCPUl對(duì)應(yīng)的??臻g,釋放本VCPUl占用的S worker資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU (以VCPU2為例)占用該被釋放的S worker資源處于工作狀態(tài),同時(shí)將本VCPUl的狀態(tài)切換為非工作狀態(tài)。這樣,該被選擇處于工作狀態(tài)的VCPU2可以在VCPUl和業(yè)務(wù)處理模塊之間存在業(yè)務(wù)同步期間繼續(xù)占用S worker資源執(zhí)行報(bào)文的處理,避免了 Sworker的資源浪費(fèi),提高S worker的資源利用效率。作為本發(fā)明的一個(gè)實(shí)施例,VCPUl當(dāng)前在S worker的運(yùn)行軌跡可包括:S worker的CPU的寄存器信息、VCPUl當(dāng)前運(yùn)行的最后一條指令地址等。這里VCPUl之所以保存當(dāng)前在S worker的運(yùn)行軌跡,目的是便于在后續(xù)收到業(yè)務(wù)處理模塊返回的報(bào)文(其具體為本VCPUl之前傳遞的報(bào)文執(zhí)行完復(fù)雜業(yè)務(wù)處理后的報(bào)文)時(shí),直接按照該記錄的運(yùn)行軌跡恢復(fù)對(duì)應(yīng)的狀態(tài),以便在該恢復(fù)的狀態(tài)下處理該收到的報(bào)文,實(shí)現(xiàn)業(yè)務(wù)的同步。作為本發(fā)明的一個(gè)實(shí)施例,上述的業(yè)務(wù)處理模塊可為執(zhí)行復(fù)雜業(yè)務(wù)處理的Cworker或者硬件加速單元。 下面以一個(gè)具體實(shí)施例對(duì)圖5所示流程進(jìn)行詳細(xì)描述:參見圖7,圖7為本發(fā)明實(shí)施例提供的方法流程圖。如圖7所示,該流程可包括以下步驟:步驟701,將S worker虛擬化為N個(gè)VCPU。步驟702,在初始,默認(rèn)VCPUl完全占用S worker的資源處于工作狀態(tài),而其他VCPU處于非工作狀態(tài)。步驟703,VCPUl從S worker的緩存中獲取一報(bào)文。本發(fā)明中,當(dāng)S worker通過業(yè)務(wù)口接收到報(bào)文時(shí),其會(huì)先暫時(shí)存放該接收的報(bào)文至緩存中,以便處于工作狀態(tài)的VCPU來獲取。步驟704,VCPUl識(shí)別該報(bào)文所涉及的業(yè)務(wù),如果該業(yè)務(wù)為本VCPUl獨(dú)自執(zhí)行的業(yè)務(wù),則執(zhí)行步驟705,如果該業(yè)務(wù)為本VCPUl不能獨(dú)自執(zhí)行的業(yè)務(wù),則執(zhí)行步驟706。為便于識(shí)別報(bào)文所涉及的業(yè)務(wù),本發(fā)明會(huì)預(yù)先建立一個(gè)訪問控制列表(ACL),該ACL會(huì)記載三層IP地址和業(yè)務(wù)之間的對(duì)應(yīng)關(guān)系,基于此,當(dāng)VCPUl獲取到報(bào)文時(shí),其會(huì)依據(jù)該報(bào)文的三層IP地址在ACL中查找該三層IP地址對(duì)應(yīng)的業(yè)務(wù),將該查找到的業(yè)務(wù)確定為該報(bào)文所涉及的業(yè)務(wù)。本發(fā)明實(shí)施例中,本VCPUl不能獨(dú)自執(zhí)行的業(yè)務(wù),意味著該業(yè)務(wù)比較復(fù)雜,其需要借助復(fù)雜的業(yè)務(wù)處理模塊比如c worker或者硬件加速單元執(zhí)行,而如果該業(yè)務(wù)為本VCPUl能獨(dú)自執(zhí)行的業(yè)務(wù),則意味著該業(yè)務(wù)比較簡單,本VCPUl可按照現(xiàn)有業(yè)務(wù)處理方式處理該報(bào)文比如轉(zhuǎn)發(fā)報(bào)文,具體見步驟705。步驟705,VCPUl按照現(xiàn)有業(yè)務(wù)處理方式處理該報(bào)文,在完成處理后,繼續(xù)從Sworker的緩存中獲取下一個(gè)報(bào)文,返回步驟704。本步驟705是在S worker起始工作時(shí)的步驟,此時(shí)VCPUl還未與其他VCPU發(fā)生工作狀態(tài)切換,基于下文對(duì)復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)的描述,可以知道此時(shí)VCPUl不會(huì)與業(yè)務(wù)處理模塊比如C worker或者硬件加速單元存在同步關(guān)系的業(yè)務(wù),只能是繼續(xù)對(duì)報(bào)文處理,以使得在S worker只有簡單的業(yè)務(wù)、且VCPUl還未與其他VCPU進(jìn)行工作狀態(tài)的切換之前,始終是由VCPUl完全占用CPU進(jìn)行報(bào)文的處理。步驟706,VCPUl對(duì)該報(bào)文進(jìn)行對(duì)應(yīng)的簡單處理,將本VCPUl的標(biāo)識(shí)攜帶該處理后的報(bào)文中并傳遞給業(yè)務(wù)處理模塊執(zhí)行復(fù)雜業(yè)務(wù)處理,設(shè)置本VCPUl的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表示未完成的第一值比如0,保存本VCPUl當(dāng)前在S worker的運(yùn)行軌跡至本VCPUl對(duì)應(yīng)的??臻g,釋放本VCPUl占用的所述S worker的資源,由處于非工作狀態(tài)的其中一個(gè)VCPU(記為VCPUm)占用所述S worker的資源并切換為工作狀態(tài),而將本VCPUl的狀態(tài)切換為非工作狀態(tài)。之后執(zhí)行步驟707。 這里,VCPUl將報(bào)文傳遞給業(yè)務(wù)處理模塊比如C worker或者硬件加速單元執(zhí)行復(fù)雜業(yè)務(wù)處理,則意味著該VCPUl與業(yè)務(wù)處理模塊比如C worker或者硬件加速單元存在同步關(guān)系的業(yè)務(wù)。為了保證該同步關(guān)系的業(yè)務(wù)順利執(zhí)行,則VCPUl釋放本VCPUl占用的所述Sworker的資源,由處于非工作狀態(tài)的VCPUm占用所述S worker的資源并切換為工作狀態(tài),而將本VCPUl的狀態(tài)切換為非工作狀態(tài),以由VCPUm繼續(xù)執(zhí)行工作,具體見步驟707。這相比于現(xiàn)有S worker盲目等待業(yè)務(wù)處理模塊返回的處理結(jié)果,大大節(jié)約了 S worker資源的浪費(fèi)時(shí)間,提高S worker的資源利用效率。本發(fā)明中,當(dāng)業(yè)務(wù)處理模塊比如C worker或者硬件加速單元接收到來自S worker中任一 VCPU發(fā)送的報(bào)文時(shí),其會(huì)識(shí)別出該報(bào)文攜帶的VCPU標(biāo)識(shí),并對(duì)該報(bào)文進(jìn)行相應(yīng)的業(yè)務(wù)處理,在完成處理后,將處理后的報(bào)文發(fā)送至具有該VCPU標(biāo)識(shí)的VCPU中,而當(dāng)S worker檢測到其一 VCPU收到業(yè)務(wù)處理模塊比如C worker或者硬件加速單元返回的報(bào)文時(shí),則意味著該VCPU傳遞至業(yè)務(wù)處理模塊的報(bào)文被業(yè)務(wù)處理模塊處理完成,該S worker就會(huì)將該VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)設(shè)置為表示復(fù)雜業(yè)務(wù)處理完成的第二值比如I。本發(fā)明中,S worker的任一 VCPU與復(fù)雜業(yè)務(wù)處理模塊比如C worker或者硬件加速單元之間報(bào)文的傳遞可通過共享內(nèi)存、中斷、消息或者特有的高速數(shù)據(jù)總線等執(zhí)行,本發(fā)明并不具體限定。上述步驟702至步驟706為在S worker起始工作時(shí)該S worker上被默認(rèn)處于工作狀態(tài)的VCPUl執(zhí)行的操作。而此時(shí)其他VCPU還未處于工作狀態(tài)過,基于此,本發(fā)明中,在N個(gè)VCPU從I開始編號(hào)的前提下,m可為2。步驟707,VCPUm的狀態(tài)被切換為工作狀態(tài)后,從S worker的緩存獲取報(bào)文。本步驟707在VCPUm首次處于工作狀態(tài)的前提下執(zhí)行,類似步驟703。步驟708,VCPUm識(shí)別該報(bào)文所涉及的業(yè)務(wù),如果該業(yè)務(wù)為本VCPUm能獨(dú)自執(zhí)行的業(yè)務(wù),則執(zhí)行步驟709,如果該業(yè)務(wù)為本VCPUm不能獨(dú)自執(zhí)行的業(yè)務(wù),則執(zhí)行步驟713。本步驟708與上面描述的步驟704類似,這里不再贅述。步驟709,VCPUm按照現(xiàn)有業(yè)務(wù)處理方式處理該報(bào)文,在完成處理后,執(zhí)行步驟710。本步驟709之所以不與上述步驟705類似,原因是:VCPUm不為S worker初始開始工作后首個(gè)處于工作狀態(tài)的VCPU,在VCPUm處于工作狀態(tài)之前,已經(jīng)有至少一個(gè)VCPU曾處于工作狀態(tài)過,并且,該曾經(jīng)處于工作狀態(tài)過的至少一個(gè)VCPU可能已經(jīng)收到業(yè)務(wù)處理模塊比如C worker或者硬件加速單元返回的處理后的報(bào)文,為保證這些VCPU及時(shí)處理來自業(yè)務(wù)處理模塊的報(bào)文,本發(fā)明需要執(zhí)行下述步驟710。步驟710,VCPUm檢測處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí),當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表示業(yè)務(wù)完成的第二值時(shí),執(zhí)行步驟711,而當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)從S worker的緩存中獲取下一個(gè)報(bào)文,返回執(zhí)行步驟708。步驟711,保存本VCPUm當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPUm對(duì)應(yīng)的棧空間,釋放本VCPUm占用的所述S worker的資源,切換本VCPUm的狀態(tài)為非工作狀態(tài),觸使復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用所述S worker的資源并切換為工作狀態(tài)。之后執(zhí)行步驟712。
步驟712,復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值、且被切換為工作狀態(tài)的VCPU依據(jù)本VCPU對(duì)應(yīng)的??臻g所記錄的運(yùn)行軌跡處理所述業(yè)務(wù)處理模塊返回的報(bào)文,在完成報(bào)文的處理后刪除本VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)、以及刪除本VCPU對(duì)應(yīng)的??臻g記錄的所述運(yùn)行軌跡,之后本VCPU按照步驟710中VCPUm的操作執(zhí)行。步驟713,VCPUm對(duì)該報(bào)文進(jìn)行對(duì)應(yīng)的簡單處理,將本VCPUm的標(biāo)識(shí)攜帶該處理后的報(bào)文中傳遞給業(yè)務(wù)處理模塊比如C worker或者硬件加速單元執(zhí)行復(fù)雜業(yè)務(wù)處理,設(shè)置本VCPUm對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表示未完成的第一值比如0,并檢測各個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí),當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表示業(yè)務(wù)完成的第二值時(shí),執(zhí)行步驟711,當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU、且有至少一個(gè)VCPU不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)時(shí),執(zhí)行步驟714,當(dāng)檢測到每個(gè)處于非工作狀態(tài)的VCPU存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)、且該復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第一值時(shí),執(zhí)行步驟716。步驟714,保存本VCPUm當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPUm對(duì)應(yīng)的棧空間,釋放本VCPUm占用的所述S worker的資源,并切換本VCPUm的狀態(tài)為非工作狀態(tài),按照設(shè)定的VCPU執(zhí)行順序選擇下一個(gè)不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)的VCPU (記為VCPUn)占用所述S worker的資源進(jìn)入工作狀態(tài),之后執(zhí)行步驟715。步驟715,VCPUn被切換為工作狀態(tài)后,依據(jù)本VCPUn對(duì)應(yīng)的??臻g所記錄的運(yùn)行軌跡從S worker的緩存獲取報(bào)文,并按照步驟708中VCPUm的操作執(zhí)行本VCPU的操作。步驟716,執(zhí)行同步等待,直至至少一個(gè)處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPUm當(dāng)前在所述S worker的運(yùn)行軌跡至本VCPUm對(duì)應(yīng)的棧空間,釋放本VCPUm占用的所述S worker的資源,并切換本VCPUm的狀態(tài)為非工作狀態(tài),觸使復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用所述S worker的資源切換為工作狀態(tài)并按照步驟712執(zhí)行操作。至此,完成圖7所示的流程。通過圖7所示流程可以看出,本發(fā)明中,當(dāng)任一處于工作狀態(tài)的VCPU識(shí)別出本VCPU能獨(dú)自處理當(dāng)前報(bào)文涉及的業(yè)務(wù)(即該業(yè)務(wù)為簡單業(yè)務(wù)),則處理該報(bào)文,而當(dāng)識(shí)別出本VCPU能獨(dú)自處理當(dāng)前報(bào)文(記為報(bào)文I)涉及的復(fù)雜業(yè)務(wù),則僅對(duì)該報(bào)文I進(jìn)行簡單的處理,并傳遞該處理后的報(bào)文I給業(yè)務(wù)處理模塊,同時(shí),主動(dòng)釋放本VCPU占用的S worker的資源,以由其他VCPU重新切換為工作狀態(tài)繼續(xù)處理報(bào)文,如此切換N次(假如N個(gè)簡單業(yè)務(wù)的處理時(shí)間至少等于I個(gè)復(fù)雜業(yè)務(wù)的處理時(shí)間),這樣,當(dāng)報(bào)文I的復(fù)雜業(yè)務(wù)已經(jīng)處理完畢返回給之前處理該報(bào)文I的VCPU后,再由之前處理該報(bào)文I的VCPU切換回工作狀態(tài),繼續(xù)處理該報(bào)文1,具體如圖8示出。這能夠避免現(xiàn)有技術(shù)中S worker等待同步業(yè)務(wù)所浪費(fèi)的CPU,提高了 Sworker的資源利用效率,也能有效提升復(fù)雜業(yè)務(wù)的系統(tǒng)轉(zhuǎn)發(fā)能力。以上對(duì)本發(fā)明提供的方法進(jìn)行了描述,下面對(duì)本發(fā)明提供的多核設(shè)備進(jìn)行描述:本發(fā)明實(shí)施例提供了多核設(shè)備的結(jié)構(gòu)。其中,所述多核設(shè)備包括至少一數(shù)據(jù)轉(zhuǎn)發(fā)核,而所述數(shù)據(jù)轉(zhuǎn)發(fā)核包括:通過采用虛擬化技術(shù)從所述數(shù)據(jù)轉(zhuǎn)發(fā)核虛擬化出的N個(gè)VCPU ;其中,N個(gè)VCPU對(duì)應(yīng)不同的棧空間、且同一時(shí)刻只有一個(gè)VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源處于工作狀態(tài),而其它VCPU處于非工作狀態(tài)。圖9示出了每一 VCPU的結(jié)構(gòu)。如圖9所示,每一 VCPU包括:識(shí)別單元,用于在自身VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核資源處于工作狀態(tài)時(shí)識(shí)別出當(dāng)前處理的報(bào)文涉及的業(yè)務(wù)是否為自身VCPU不能獨(dú)自執(zhí)行的業(yè)務(wù);傳遞單元,用 于在所述識(shí)別單元的識(shí)別結(jié)果為是時(shí),對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,并發(fā)送處理通知給處理單元;處理單元,用于接收所述處理通知后,保存自身VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至自身VCPU對(duì)應(yīng)的??臻g,釋放自身VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài),同時(shí)將自身VCPU的狀態(tài)切換為非工作狀態(tài)。優(yōu)選地,所述處理單元進(jìn)一步設(shè)置所述VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表示業(yè)務(wù)未完成的第一值;基于此,所述處理單元從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài)包括:檢測每一處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí);當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài),其中,任一 VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值,是指該VCPU傳遞至所述業(yè)務(wù)處理模塊的報(bào)文已被所述業(yè)務(wù)處理模塊進(jìn)行復(fù)雜業(yè)務(wù)處理且返回至該VCPU ;當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU、且有至少一個(gè)VCPU不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)時(shí),按照設(shè)定的VCPU執(zhí)行順序選擇下一個(gè)不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)的VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài);當(dāng)檢測到每一處于非工作狀態(tài)的VCPU存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)、且該復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第一值時(shí),執(zhí)行同步等待,直至檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值,選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài)。優(yōu)選地,所述處理單元進(jìn)一步在所述識(shí)別單元的識(shí)別結(jié)果為否時(shí),對(duì)所述報(bào)文進(jìn)行對(duì)應(yīng)的業(yè)務(wù)處理,在完成處理后,檢測每一處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí);
當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,將本VCPU的狀態(tài)從當(dāng)前的工作狀態(tài)切換為非工作狀態(tài),并選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài);當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)執(zhí)行下一個(gè)報(bào)文的處理。優(yōu)選地,本發(fā)明中,每一 VCPU進(jìn)一步包括:業(yè)務(wù)單元和獲取單元。
其中,所述業(yè)務(wù)單元用于在自身VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值且被選擇進(jìn)入工作狀態(tài)時(shí),執(zhí)行以下操作:獲取所述業(yè)務(wù)處理模塊返回的經(jīng)過復(fù)雜業(yè)務(wù)處理的報(bào)文;依據(jù)本VCPU對(duì)應(yīng)的??臻g記錄的運(yùn)行軌跡處理所述業(yè)務(wù)處理模塊返回的報(bào)文;在完成報(bào)文的處理后刪除本VCPU對(duì)應(yīng)的??臻g記錄的所述運(yùn)行軌跡、以及刪除VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí),并檢測每一處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí),當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,將本VCPU的狀態(tài)從當(dāng)前的工作狀態(tài)切換為非工作狀態(tài),并選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài);當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)執(zhí)行下一個(gè)報(bào)文的處理。所述獲取單元用于在自身VCPU不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)且被選擇進(jìn)入工作狀態(tài)時(shí),執(zhí)行以下操作:從所述數(shù)據(jù)轉(zhuǎn)發(fā)核的緩存中獲取當(dāng)前待處理的報(bào)文,并依據(jù)本VCPU對(duì)應(yīng)的棧空間記錄的運(yùn)行軌跡處理獲取的報(bào)文。至此,完成圖9所示的VCPU結(jié)構(gòu)描述。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍 之內(nèi)。
權(quán)利要求
1.一種業(yè)務(wù)同步處理方法,該方法應(yīng)用于多核處理器中的數(shù)據(jù)轉(zhuǎn)發(fā)核,其特征在于,將所述數(shù)據(jù)轉(zhuǎn)發(fā)核虛擬化為N個(gè)不同的VCPU,該N個(gè)VCPU對(duì)應(yīng)不同的棧空間、且同一時(shí)刻只有一個(gè)VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源處于工作狀態(tài),而其它VCPU處于非工作狀態(tài);該方法包括: A,任一 VCPU在處于工作狀態(tài)時(shí),如果識(shí)別出當(dāng)前待處理的報(bào)文所涉及的業(yè)務(wù)為本VCPU不能獨(dú)自執(zhí)行的復(fù)雜業(yè)務(wù),則對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài),同時(shí)將本VCPU的狀態(tài)切換為非工作狀態(tài)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A進(jìn)一步包括:設(shè)置本VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表不業(yè)務(wù)未完成的第一值; 步驟A中,所述從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài)包括: 檢測每一處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí); 當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài),其中,任一 VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值,是指該VCPU傳遞至所述業(yè)務(wù)處理模塊的報(bào)文已被所述業(yè)務(wù)處理模塊進(jìn)行復(fù)雜業(yè)務(wù)處理且返回至該VCPU ; 當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU、且有至少一個(gè)VCPU不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)時(shí),按照設(shè)定的VCPU執(zhí)行順序選擇下一個(gè)不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)的VCPU占 用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài); 當(dāng)檢測到每一處于非工作狀態(tài)的VCPU存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)、且該復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第一值時(shí),執(zhí)行同步等待,直至檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值,選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A中,如果VCPU識(shí)別出當(dāng)前待處理的報(bào)文所涉及的業(yè)務(wù)為本VCPU獨(dú)自執(zhí)行的業(yè)務(wù),則進(jìn)一步包括: 對(duì)所述報(bào)文進(jìn)行對(duì)應(yīng)的業(yè)務(wù)處理; 在完成所述報(bào)文的處理后,檢測每一處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí); 當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,將本VCPU的狀態(tài)從當(dāng)前的工作狀態(tài)切換為非工作狀態(tài),并選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài); 當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)執(zhí)行下一個(gè)報(bào)文的處理。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU在被選擇進(jìn)入工作狀態(tài)時(shí),進(jìn)一步包括:獲取所述業(yè)務(wù)處理模塊返回的經(jīng)過復(fù)雜業(yè)務(wù)處理的報(bào)文; 依據(jù)本VCPU對(duì)應(yīng)的棧空間記錄的運(yùn)行軌跡處理所述業(yè)務(wù)處理模塊返回的報(bào)文; 在完成報(bào)文的處理后刪除本VCPU對(duì)應(yīng)的棧空間記錄的所述運(yùn)行軌跡、以及刪除VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí),并檢測每一處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí), 當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的棧空間,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,將本VCPU的狀態(tài)從當(dāng)前的工作狀態(tài)切換為非工作狀態(tài),并選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài); 當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)執(zhí)行下一個(gè)報(bào)文的處理。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)的VCPU在被選擇進(jìn)入工作狀態(tài)時(shí),進(jìn)一步包括: 從所述數(shù)據(jù)轉(zhuǎn)發(fā)核的緩存中獲取當(dāng)前待處理的報(bào)文,依據(jù)本VCPU對(duì)應(yīng)的棧空間記錄的運(yùn)行軌跡處理獲取的報(bào)文。
6.一種多核設(shè)備,其特征在于,所述多核設(shè)備包括至少一數(shù)據(jù)轉(zhuǎn)發(fā)核,所述數(shù)據(jù)轉(zhuǎn)發(fā)核包括:通過采用虛擬化技術(shù)從所述數(shù)據(jù)轉(zhuǎn)發(fā)核虛擬化出的N個(gè)VCPU ;其中,N個(gè)VCPU對(duì)應(yīng)不同的??臻g、且同一時(shí)刻只有一個(gè)VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源處于工作狀態(tài),而其它VCPU處于非工作狀態(tài);每一 VCPU包括: 識(shí)別單元,用于在自身VCPU占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核資源處于工作狀態(tài)時(shí)識(shí)別出當(dāng)前處理的報(bào)文涉及的業(yè)務(wù)是否為自身VCPU不能獨(dú)自執(zhí)行的業(yè)務(wù); 傳遞單元,用于在所述識(shí)別單元的識(shí)別結(jié)果為是時(shí),對(duì)所述報(bào)文進(jìn)行復(fù)雜業(yè)務(wù)之前的簡單業(yè)務(wù)處理,將處理后的報(bào)文傳遞給用于執(zhí)行所述復(fù)雜業(yè)務(wù)的業(yè)務(wù)處理模塊,并發(fā)送處理通知給處理單元; 處理單元,用于接收所述處理通知后,保存自身VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至自身VCPU對(duì)應(yīng)的??臻g,釋放自身VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài),同時(shí)將自身VCPU的狀態(tài)切換為非工作狀態(tài)。
7.根據(jù)權(quán)利要求6所述的多核設(shè)備,其特征在于,所述處理單元進(jìn)一步設(shè)置自身VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為表不業(yè)務(wù)未完成的第一值; 所述處理單元從處于非工作狀態(tài)的VCPU中選擇一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài)包括: 檢測每一處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí); 當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài),其中,任一 VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值,是指該VCPU傳遞至所述業(yè)務(wù)處理模塊的報(bào)文已被所述業(yè)務(wù)處理模塊進(jìn)行復(fù)雜業(yè)務(wù)處理且返回至該VCPU ; 當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU、且有至少一個(gè)VCPU不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)時(shí),按照設(shè)定的VCPU執(zhí)行順序選擇下一個(gè)不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)的VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài); 當(dāng)檢測到每一處于非工作狀態(tài)的VCPU存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)、且該復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第一值時(shí),執(zhí)行同步等待,直至檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值,選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài)。
8.根據(jù)權(quán)利要求6所述的多核設(shè)備,其特征在于,所述處理單元進(jìn)一步在所述識(shí)別單元的識(shí)別結(jié)果為否時(shí),對(duì)所述報(bào)文進(jìn)行對(duì)應(yīng)的業(yè)務(wù)處理,在完成處理后,檢測每一處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí); 當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,將本VCPU的狀態(tài)從當(dāng)前的工作狀態(tài)切換為非工作狀態(tài),并選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源進(jìn)入工作狀態(tài); 當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)執(zhí)行下一個(gè)報(bào)文的處理。
9.根據(jù)權(quán)利要求7或8所述的多核設(shè)備,其特征在于,每一VCPU進(jìn)一步包括:業(yè)務(wù)單元, 所述業(yè)務(wù)單元用于在自身VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值且被選擇進(jìn)入工作狀態(tài)時(shí),執(zhí)行以下操作: 獲取所述業(yè)務(wù)處理模塊返回的經(jīng)過復(fù)雜業(yè)務(wù)處理的報(bào)文; 依據(jù)本VCPU對(duì)應(yīng)的棧空間記錄的運(yùn)行軌跡處理所述業(yè)務(wù)處理模塊返回的報(bào)文;在完成報(bào)文的處理后刪除本VCPU對(duì)應(yīng)的??臻g記錄的所述運(yùn)行軌跡、以及刪除VCPU的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí),并檢測每一處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí), 當(dāng)檢測到至少一個(gè)處于非工作狀態(tài)的VCPU對(duì)應(yīng)的復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值時(shí),保存本VCPU當(dāng)前在所述數(shù)據(jù)轉(zhuǎn)發(fā)核的運(yùn)行軌跡至本VCPU對(duì)應(yīng)的??臻g,釋放本VCPU當(dāng)前占用的數(shù)據(jù)轉(zhuǎn)發(fā)核資源,將本VCPU的狀態(tài)從當(dāng)前的工作狀態(tài)切換為非工作狀態(tài),并選擇復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的其中一個(gè)VCPU占用該被釋放的數(shù)據(jù)轉(zhuǎn)發(fā)核資源并進(jìn)入工作狀態(tài); 當(dāng)檢測到處于非工作狀態(tài)的VCPU中不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)為第二值的VCPU時(shí),繼續(xù)執(zhí)行下一個(gè)報(bào)文的處理。
10.根據(jù)權(quán)利要求7所述的多核設(shè)備,其特征在于,每一VCPU進(jìn)一步包括:獲取單元; 所述獲取單元用于在自身VCPU不存在復(fù)雜業(yè)務(wù)處理標(biāo)識(shí)且被選擇進(jìn)入工作狀態(tài)時(shí),從所述數(shù)據(jù)轉(zhuǎn)發(fā)核的緩存中獲取當(dāng)前待處理的報(bào)文,并依據(jù)本VCPU對(duì)應(yīng)的??臻g記錄的運(yùn)行軌跡處理獲取的報(bào)文。
全文摘要
本申請?zhí)峁┝藰I(yè)務(wù)同步處理方法和多核設(shè)備。本方法中,通過將數(shù)據(jù)轉(zhuǎn)發(fā)核的虛擬化為N個(gè)不同的VCPU,N個(gè)VCPU對(duì)應(yīng)不同的??臻g、且同一時(shí)刻只有一個(gè)VCPU完全占用所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源處于工作狀態(tài),而其他多個(gè)VCPU處于非工作狀態(tài),處于工作狀態(tài)的VCPU在當(dāng)前待處理的報(bào)文所涉及的業(yè)務(wù)為本VCPU不能獨(dú)自執(zhí)行的復(fù)雜業(yè)務(wù),則將該報(bào)文傳遞給用于執(zhí)行所述報(bào)文所涉及的業(yè)務(wù)的業(yè)務(wù)處理模塊,釋放本VCPU占用的所述數(shù)據(jù)轉(zhuǎn)發(fā)核的資源,選取處于非工作狀態(tài)的VCPU繼續(xù)執(zhí)行報(bào)文的處理,這能提高S worker的資源利用效率,避免S worker因?yàn)榈却龢I(yè)務(wù)處理模塊返回的處理結(jié)果而導(dǎo)致的資源浪費(fèi)。
文檔編號(hào)G06F9/52GK103226496SQ201310082439
公開日2013年7月31日 申請日期2013年3月15日 優(yōu)先權(quán)日2013年3月15日
發(fā)明者楊逸 申請人:杭州華三通信技術(shù)有限公司