專利名稱:一種建立多核運(yùn)行環(huán)境的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù),特別涉及一種建立多核運(yùn)行環(huán)境的方法。
背景技術(shù):
X86平臺(tái)從2006年雙核概念的興起,不到三年的時(shí)間,多核已經(jīng)深入人心,現(xiàn)在 4核的處理器已經(jīng)量產(chǎn),6核的處理器也即將面世。多核化的趨勢(shì)不僅促使芯片廠商帶來 了更新的系統(tǒng)架構(gòu)、更高的性能、更低的功耗和更多樣化的功能,而且對(duì)軟件設(shè)計(jì)也帶來 了許多新價(jià)值和新挑戰(zhàn)。操作系統(tǒng)在多核處理器硬件平臺(tái)上一般有兩種構(gòu)架,一種是對(duì) 稱多處理器架構(gòu)(SymmetricMulti—Processor, SMP)方式,另 一禾中為AMP (Asynchronous Multi-Processor)方式。如圖1所示,為以4核為例的SMP架構(gòu)示意圖。
SMP方式就是將多個(gè)內(nèi)核平等看待,每個(gè)內(nèi)核運(yùn)行的操作系統(tǒng)相同,這種架構(gòu)雖然 比較簡潔,但也有其固有缺陷 1)這種全并發(fā)的架構(gòu)對(duì)軟件的要求很高,目前很多系統(tǒng)都是非并發(fā)安全的,如果 全部轉(zhuǎn)為并發(fā),工作量很大,不是在短時(shí)間內(nèi)可以完成的。 2)為了解決對(duì)共享資源(內(nèi)存數(shù)據(jù)、1/0等)的爭用問題,需要使用大量的鎖機(jī)
制,而這些鎖的操作又影響了性能發(fā)揮,還有CPU之間的通信開銷也會(huì)隨著CPU數(shù)量的增加
也急劇上升,當(dāng)內(nèi)核數(shù)量的增加到一定的量級(jí),這時(shí)性能就不再增長甚至開始下降。 鑒于SMP的上述缺點(diǎn),與之相對(duì)的AMP架構(gòu)就備受關(guān)注,特別是在內(nèi)容安全領(lǐng)域,
本身網(wǎng)絡(luò)轉(zhuǎn)發(fā)和內(nèi)容過濾就是分層的,例如對(duì)于IPS產(chǎn)品可以采用四核處理器的AMP架構(gòu),
一個(gè)核專門處理網(wǎng)絡(luò)數(shù)據(jù)的接收和發(fā)送,對(duì)于需要進(jìn)行內(nèi)容匹配的數(shù)據(jù)流分類交給另外三
個(gè)核處理,這三個(gè)核只負(fù)責(zé)IPS內(nèi)容的匹配,因?yàn)閿?shù)據(jù)是分類處理的,很少會(huì)涉及到共享資
源的競爭。通過這個(gè)方式可以充分利用多核的資源,而卻很小程度上涉及并發(fā)操作,對(duì)內(nèi)存
總線的爭用也減少到最低,可以解決現(xiàn)有代碼無法利用多核資源的問題。 現(xiàn)有多核系統(tǒng)常見的AMP架構(gòu)方案如下 AMP方式就是將多個(gè)內(nèi)核區(qū)別看待,可以運(yùn)行不同的操作系統(tǒng)也可以在相同的操 作系統(tǒng)上運(yùn)行不同的任務(wù),各個(gè)處理器內(nèi)核按照任務(wù)劃分,各負(fù)其責(zé),規(guī)避共享資源的競爭。 1)拿出幾個(gè)物理內(nèi)核,在其上建立一種簡易的系統(tǒng)環(huán)境(有時(shí)候直接叫做"裸核" 環(huán)境),在這個(gè)"潔凈的空間"內(nèi)運(yùn)行單一任務(wù)(比如收發(fā)數(shù)據(jù)、模式匹配等)往往可以獲得 極高的性能,這是AMP方式的特點(diǎn),也是其優(yōu)勢(shì)。 2)在相同的操作系統(tǒng)上運(yùn)行不同的任務(wù)也是同樣的機(jī)理,只不過更容易實(shí)現(xiàn)一
些,相應(yīng)的性能提升的效果也遜色一些。 但是,現(xiàn)有AMP架構(gòu)技術(shù)存在下列缺點(diǎn) 在運(yùn)行不同操作系統(tǒng)的架構(gòu)模式下,允許異構(gòu)的操作系統(tǒng)運(yùn)行在單一的處理器體 系中,例如RMI提供的Virtual MIPS mode。但是因?yàn)檐浖h(huán)境的不同,cpu的初始化以及 內(nèi)存的管理等需要額外的代碼維護(hù)。
在運(yùn)行相同的操作系統(tǒng)架構(gòu)模式下,由于這些cpu都在一個(gè)操作系統(tǒng)中調(diào)度,cpu 之間的通信和同步開銷不可避免,cpu數(shù)量越多,這個(gè)開銷越大。 另外,在X86平臺(tái)上,每一個(gè)網(wǎng)卡在初始化時(shí)都會(huì)分配一個(gè)irq號(hào),可以利用中斷 親和力技術(shù),把中斷號(hào)irq號(hào)定向到指定的cpu上,這樣就能實(shí)現(xiàn)所有網(wǎng)絡(luò)流量都由一個(gè) cpu處理,然后由這個(gè)cpu根據(jù)流量的特征分流給另外的cpu處理,雖然也可以實(shí)現(xiàn)本方案 的目的,但因?yàn)檫@個(gè)cpu還是工作在Linux環(huán)境中,進(jìn)程調(diào)度的發(fā)生會(huì)導(dǎo)致cache失效,還 有與其它c(diǎn)pu之間的一些開銷不能避免,例如IPI中斷;而且在擴(kuò)展性方面也不如本方案, 如果有更多的可用cpu資源,使用中斷親和力技術(shù)實(shí)現(xiàn)起來很復(fù)雜。
發(fā)明內(nèi)容
本發(fā)明的目的在于,提供一種建立多核運(yùn)行環(huán)境的方法。 本發(fā)明的建立多核運(yùn)行環(huán)境的方法,預(yù)先將多個(gè)cpu分為兩組,一組是在線cpu, 運(yùn)行標(biāo)準(zhǔn)的Li皿x操作系統(tǒng),用于對(duì)報(bào)文的內(nèi)容進(jìn)行檢查;另一組為下線cpu,用于運(yùn)行指 定任務(wù)代碼,當(dāng)所有cpu的相關(guān)資源完成初始化后,使部分在線cpu成為下線cpu,下線的 cpu運(yùn)行一個(gè)死循環(huán)函數(shù)cpujdle,將指定任務(wù)的代碼入口函數(shù)嵌入到所述死循環(huán)函數(shù) cpujdle中,所述下線cpu運(yùn)行指定任務(wù)代碼,對(duì)接收到的網(wǎng)絡(luò)報(bào)文按數(shù)據(jù)流進(jìn)行分類分 配給相應(yīng)的在線cpu。 其中,所述使部分在線cpu成為下線cpu,是通過proc接口觸發(fā)讓所述部分在線 cpu執(zhí)行cpu熱插拔的一個(gè)接口 cpu_down操作。 其中,所述下線cpu運(yùn)行的指定任務(wù)代碼中指定任務(wù)包括接收/發(fā)送報(bào)文、或者對(duì) 網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行處理。 其中,已經(jīng)執(zhí)行了 cpu_d0Wn操作的cpu使用Linux初始化的數(shù)據(jù)結(jié)構(gòu)和變量以及 cpu相關(guān)的高速內(nèi)存緩存cache。 其中,編譯Linux內(nèi)核時(shí)打開SMP和H0TPLUG編譯選項(xiàng)。 其中,運(yùn)行環(huán)境包括X86多核架構(gòu)下的Li皿x系統(tǒng)以及基于無內(nèi)部互鎖流水級(jí)的 微處理器MIPS架構(gòu)的XLR多核平臺(tái)。 本發(fā)明的有益效果是依照本發(fā)明的建立多核運(yùn)行環(huán)境的方法,通過使用cpu_ down的方式把cpu從li皿x調(diào)度環(huán)境中分離出來去執(zhí)行特定的任務(wù),充分利用了 Li皿x的 架構(gòu)資源,花費(fèi)了很小的代價(jià)實(shí)現(xiàn)對(duì)多核資源的利用;解決了Li皿x環(huán)境下多cpu之間的開 銷隨著cpu數(shù)量的增多而急劇上升的問題,為多核架構(gòu)的發(fā)展提供了一個(gè)新的高效的途徑。
圖1為以4核為例的SMP架構(gòu)示意圖; 圖2為以4核為例的AMP架構(gòu)示意圖; 圖3為本發(fā)明以4核為例的Li皿x操作系統(tǒng)架構(gòu)示意圖; 圖4為本發(fā)明的建立多核運(yùn)行環(huán)境的方法流程圖。
具體實(shí)施例方式
以下,參考附圖1 4詳細(xì)描述本發(fā)明的建立多核運(yùn)行環(huán)境的方法。
本發(fā)明的核心思想是AMP架構(gòu)通過把數(shù)據(jù)流程分解多個(gè)獨(dú)立的任務(wù),分別由不 同的cpu執(zhí)行,可以減少由于cpu數(shù)量的增多造成的對(duì)共享資源競爭的影響,達(dá)到提高系統(tǒng) 效率的目的。 需要說明的是,本發(fā)明以運(yùn)行在X86多核架構(gòu)下的Li皿x系統(tǒng)為例進(jìn)行說明,但同 樣也適用于其它架構(gòu)的Li皿x操作系統(tǒng),例如RMI公司的基于無內(nèi)部互鎖流水級(jí)的微處理 器(Microprocessor without Interlocked Piped Stages, MIPS)架構(gòu)的XLR多核平臺(tái)。
如圖3所示,為本發(fā)明的多核架構(gòu)示意圖,將多個(gè)cpu被分為兩組, 一組是在線 online的cpus,運(yùn)行標(biāo)準(zhǔn)的Linux操作系統(tǒng),主要對(duì)報(bào)文的內(nèi)容進(jìn)行檢查;另外一組為下線 offline的cpu,運(yùn)行指定任務(wù)代碼,其中,指定任務(wù)可以包括接收/發(fā)送報(bào)文、或者對(duì)網(wǎng)絡(luò) 數(shù)據(jù)進(jìn)行處理。編譯Li皿x內(nèi)核必須打開SMP和熱插拔H0TPLUG編譯選項(xiàng)。
采用SMP的Li皿x內(nèi)核,由Linux初始化所有cpu,為所有cpu建立必要的運(yùn)行環(huán) 境,例如內(nèi)存cache、cpu變量資源、中斷等。當(dāng)所有cpu有關(guān)的資源都初始化完成后,通過特 定的指令(例如可以通過proc接口觸發(fā))讓指定的cpu執(zhí)行cpu_down操作。cpu_down是 li皿x支持cpu熱插拔的一個(gè)接口,通過觸發(fā)cpu執(zhí)行cpu—down,可以把當(dāng)前cpu從li皿x 操作系統(tǒng)中分離出來,down掉的cpu不再參與調(diào)度,運(yùn)行一個(gè)死循環(huán)函數(shù)cpujdle??梢?通過改寫cpujdle這個(gè)函數(shù)的實(shí)現(xiàn),把任務(wù)代碼入口函數(shù)嵌入到cpu_idle函數(shù)中,這樣 down掉的cpu就會(huì)運(yùn)行指定的函數(shù)代碼,從而實(shí)現(xiàn)不同任務(wù)的分配。如圖4所示,為本發(fā)明 的建立多核運(yùn)行環(huán)境的方法流程圖。 另外,需要說明的是,已經(jīng)down掉的cpu還可以使用Linux初始化的數(shù)據(jù)結(jié)構(gòu)和 變量以及cpu相關(guān)的高速內(nèi)存緩存cache等,例如內(nèi)存對(duì)象的cache,特別是報(bào)文對(duì)象skb 的cache。由于已經(jīng)脫離Linux的調(diào)度環(huán)境,down掉的cpu之間以及與online的cpu之間 就沒有了處理器間中斷(Inter Processor Interrupt, IPI)通信的開銷,也沒有任務(wù)調(diào)度 和中斷,這個(gè)cpu可以采用輪詢這種高效的方式進(jìn)行數(shù)據(jù)接收和發(fā)送。這個(gè)方案具有很好 的擴(kuò)展性,如果系統(tǒng)需要提高轉(zhuǎn)發(fā)行能,可以把更多的cpu從Li皿x的調(diào)度中脫離出來執(zhí)行 特定的任務(wù)。通過這種方式,可以在不重新編譯代碼的情況下,動(dòng)態(tài)分配cpu資源,具有高 度的靈活性。 另外,需要說明的是,在執(zhí)行l(wèi)i皿x操作系統(tǒng)的cpu down操作后,會(huì)觸發(fā)一些資源 的刪除,例如cache的注銷,那么已經(jīng)down掉的cpu就不能使用li皿x提供的很多資源了 , 本發(fā)明修改了 cpu_doWn的標(biāo)準(zhǔn)過程,取消了 cache等資源的注銷過程,這樣做后,已經(jīng)down 掉的cpu也可以使用cache資源。 綜上所述,依照本發(fā)明的建立多核運(yùn)行環(huán)境的方法,通過使用Cpu_d0Wn的方式把
cpu從li皿x調(diào)度環(huán)境中分離出來去執(zhí)行特定的任務(wù),充分利用了 Li皿x的架構(gòu)資源,花費(fèi)
了很小的代價(jià)實(shí)現(xiàn)對(duì)多核資源的利用;解決了 Li皿x環(huán)境下多cpu之間的開銷隨著cpu數(shù)
量的增多而急劇上升的問題,為多核架構(gòu)的發(fā)展提供了一個(gè)新的高效的途徑。 以上是為了使本領(lǐng)域普通技術(shù)人員理解本發(fā)明,而對(duì)本發(fā)明所進(jìn)行的詳細(xì)描述,
但可以想到,在不脫離本發(fā)明的權(quán)利要求所涵蓋的范圍內(nèi)還可以做出其它的變化和修改,
這些變化和修改均在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
一種建立多核運(yùn)行環(huán)境的方法,其特征在于,預(yù)先將多個(gè)cpu分為兩組,一組是在線cpu,運(yùn)行標(biāo)準(zhǔn)的Linux操作系統(tǒng),用于對(duì)報(bào)文的內(nèi)容進(jìn)行檢查;另一組為下線cpu,用于運(yùn)行指定任務(wù)代碼,當(dāng)所有cpu的相關(guān)資源完成初始化后,使部分在線cpu成為下線cpu,下線的cpu運(yùn)行一個(gè)死循環(huán)函數(shù)cpu_idle,將指定任務(wù)的代碼入口函數(shù)嵌入到所述死循環(huán)函數(shù)cpu_idle中,所述下線cpu運(yùn)行指定任務(wù)代碼,對(duì)接收到的網(wǎng)絡(luò)報(bào)文按數(shù)據(jù)流進(jìn)行分類分配給相應(yīng)的在線cpu。
2. 如權(quán)利要求1所述的建立多核運(yùn)行環(huán)境的方法,其特征在于,所述使部分在線cpu 成為下線cpu,是通過proc接口觸發(fā)讓所述部分在線cpu執(zhí)行cpu熱插拔的一個(gè)接口 cpu_ down操作。
3. 如權(quán)利要求2所述的建立多核運(yùn)行環(huán)境的方法,其特征在于,所述下線cpu運(yùn)行的指 定任務(wù)代碼中指定任務(wù)包括接收/發(fā)送報(bào)文、或者對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行處理。
4. 如權(quán)利要求3所述的建立多核運(yùn)行環(huán)境的方法,其特征在于,已經(jīng)執(zhí)行了 cpu_d0Wn 操作的cpu使用Li皿x初始化的數(shù)據(jù)結(jié)構(gòu)和變量以及cpu相關(guān)的高速內(nèi)存緩存cache。
5. 如權(quán)利要求3所述的建立多核運(yùn)行環(huán)境的方法,其特征在于,編譯Li皿x內(nèi)核時(shí)打開 SMP和HOTPLUG編譯選項(xiàng)。
6. 如權(quán)利要求3所述的建立多核運(yùn)行環(huán)境的方法,其特征在于,運(yùn)行環(huán)境包括X86多核 架構(gòu)下的Li皿x系統(tǒng)以及基于無內(nèi)部互鎖流水級(jí)的微處理器MIPS架構(gòu)的XLR多核平臺(tái)。
全文摘要
本發(fā)明提供一種建立多核運(yùn)行環(huán)境的方法,其特征在于,預(yù)先將多個(gè)cpu分為兩組,一組是在線cpu,運(yùn)行標(biāo)準(zhǔn)的Linux操作系統(tǒng),用于對(duì)報(bào)文的內(nèi)容進(jìn)行檢查;另一組為下線cpu,用于運(yùn)行指定任務(wù)代碼,當(dāng)所有cpu的相關(guān)資源完成初始化后,使部分在線cpu成為下線cpu,下線的cpu運(yùn)行一個(gè)死循環(huán)函數(shù)cpu_idle,將指定任務(wù)的代碼入口函數(shù)嵌入到所述死循環(huán)函數(shù)cpu_idle中,所述下線cpu運(yùn)行指定任務(wù)代碼,對(duì)接收到的網(wǎng)絡(luò)報(bào)文按數(shù)據(jù)流進(jìn)行分類分配給相應(yīng)的在線cpu。本發(fā)明能夠解決Linux環(huán)境下多cpu之間的開銷隨著cpu數(shù)量的增多而急劇上升的問題,為多核架構(gòu)的發(fā)展提供了一個(gè)新的高效的途徑。
文檔編號(hào)H04L12/56GK101770401SQ20081024112
公開日2010年7月7日 申請(qǐng)日期2008年12月30日 優(yōu)先權(quán)日2008年12月30日
發(fā)明者吳亞飚, 張宏君 申請(qǐng)人:北京天融信網(wǎng)絡(luò)安全技術(shù)有限公司