專利名稱:一種分布式系統(tǒng)中提高多核cpu處理能力的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式系統(tǒng)領(lǐng)域,尤其是涉及使用多核CPU作為處理節(jié)
點(diǎn)的分布式系統(tǒng)領(lǐng)域。
背景技術(shù):
隨著應(yīng)用需求的不斷增加,單個(gè)CPU的處理能力已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足
要求,取而代之,分布式系統(tǒng)由于其強(qiáng)大的處理能力和良好的擴(kuò)展性,正 在發(fā)揮著越來越重要的作用。例如,由于需要同時(shí)支持大量的用戶,電信 領(lǐng)域的核心網(wǎng)設(shè)備和基站設(shè)備都釆用了分布式系統(tǒng)方案來實(shí)現(xiàn)。介紹兩個(gè)
概念分布式系統(tǒng)的CPU節(jié)點(diǎn)和分布式系統(tǒng)的功能節(jié)點(diǎn)。分布式系統(tǒng)的 CPU節(jié)點(diǎn)指的是組成分布式系統(tǒng)的各個(gè)CPU。而分布式系統(tǒng)的功能節(jié)點(diǎn) 指的是一個(gè)軟件實(shí)體,軟件實(shí)體駐留在CPU節(jié)點(diǎn)之上,所有的軟件實(shí)體 通過協(xié)作共同完成分布式系統(tǒng)的功能。
理想情況下,由N個(gè)相同CPU組成的分布式系統(tǒng),其處理能力應(yīng)該 是單個(gè)CPU運(yùn)算能力的N倍。實(shí)際系統(tǒng)中,由于通信等開銷,分布式系 統(tǒng)的處理能力還達(dá)不到單個(gè)CPU運(yùn)算能力的N倍。但是,對(duì)于一個(gè)具有 良好擴(kuò)展性的分布式系統(tǒng),其系統(tǒng)處理能力應(yīng)該與CPU的數(shù)目成線性關(guān) 系。假設(shè)單個(gè)CPU的運(yùn)算能力是C,系統(tǒng)由N個(gè)CPU組成,那么一個(gè)具 有良好擴(kuò)展性的分布式系統(tǒng)的處理能力為Nxkxc,其中k為與系統(tǒng)設(shè) 計(jì)相關(guān)常數(shù), 一般小于1。
顯然,增大N或者提高C,都可以提高具有良好擴(kuò)展性的分布式系統(tǒng) 的處理能力。實(shí)際應(yīng)用中,這兩種方法都經(jīng)常被用來提高系統(tǒng)的處理能力。 在提高CPU運(yùn)算能力方面,由于受到工藝和主頻等限制,提高單個(gè)CPU 核的運(yùn)算能力變得越來越困難。目前各芯片廠商的普遍做法是在一塊芯片
上集成多個(gè)CPU核,即多核CPU,以提高CPU的運(yùn)算能力。多核CPU
是未來的發(fā)展趨勢(shì)。
多核CPU本質(zhì)上屬于對(duì)稱共享存儲(chǔ)器多處理器架構(gòu)(SMP)。支持 SMP架構(gòu)的操作系統(tǒng)如linux、 UNIX等,這些現(xiàn)代操作系統(tǒng)都支持多線 程編程,在SMP架構(gòu)上多個(gè)線程可以被操作系統(tǒng)調(diào)度到不同的處理器或 者CPU核上同時(shí)運(yùn)行,實(shí)現(xiàn)真正的并發(fā)。對(duì)于一個(gè)n核的CPU,其實(shí)際 的處理能力不僅取決于n的大小,更取決于應(yīng)用程序的并行度,即構(gòu)成應(yīng) 用程序的工作線程數(shù)目m。只有線程數(shù)目m足夠多,操作系統(tǒng)才能保持 底層的所有CPU核都處于調(diào)度運(yùn)行狀態(tài),多核CPU的運(yùn)算能力才能充分 發(fā)揮。因此,為了提高多核CPU的處理能力,必須提高應(yīng)用程序的并行 度,即增加應(yīng)用程序的工作線程數(shù)目。
但是,現(xiàn)在的情況經(jīng)常是,即使對(duì)于一個(gè)具有良好擴(kuò)展性的分布式系 統(tǒng)來說,其單個(gè)CPU節(jié)點(diǎn)上運(yùn)行的應(yīng)用程序的并行度可能較低,即真正 工作的線程數(shù)目非常少,因此無法充分挖掘多核CPU節(jié)點(diǎn)的運(yùn)算能力, 即多核CPU的處理能力并不高,從而無法達(dá)到提高整個(gè)分布式系統(tǒng)的處 理能力的目的。那么如何挖掘分布式系統(tǒng)中多核CPU節(jié)點(diǎn)的運(yùn)算能力 呢?或者說如何提高多核CPU的處理能力呢?
顯然,提高單個(gè)CPU節(jié)點(diǎn)上運(yùn)行程序的并行度可以解決這個(gè)問題。 這需要修改現(xiàn)有的應(yīng)用軟件,盡可能使用多線程的方式提高其并行度。對(duì) 于大型的分布式系統(tǒng)軟件,如復(fù)雜的電信設(shè)備軟件,軟件修改量將是巨大 的,而且多線程編程的難度要遠(yuǎn)遠(yuǎn)大于串行編程。因此,對(duì)于現(xiàn)有的大型 的分布式系統(tǒng)軟件來說,這個(gè)方法并不總是可行。
在保持現(xiàn)有分布式系統(tǒng)軟件不作較大改動(dòng)的條件下,如何提高分布式 系統(tǒng)中多核CPU節(jié)點(diǎn)的處理能力呢?有人提出了多核拆分的解決方法, 即^l巴每一個(gè)核當(dāng)作一個(gè)獨(dú)立的CPU節(jié)點(diǎn), 一個(gè)多核CPU節(jié)點(diǎn)-陂拆分成相 互獨(dú)立的多個(gè)CPU節(jié)點(diǎn)。這種方法實(shí)際上變相增加了分布式系統(tǒng)中的節(jié) 點(diǎn)數(shù)N,因而提高了整個(gè)系統(tǒng)的處理能力。此方法要求每個(gè)CPU核運(yùn)行 自己的操作系統(tǒng)。為了實(shí)現(xiàn)這一點(diǎn)需要操作系統(tǒng)做很多特殊處理,也就是
說需要操作系統(tǒng)廠商進(jìn)行定制,或者通過增加一層特殊中間軟件,然后在 中間軟件之上運(yùn)行多個(gè)操作系統(tǒng)。其次,每個(gè)核上都要駐留操作系統(tǒng)映像, 必然會(huì)增加內(nèi)存的開銷。另外,由于底層設(shè)備可能只在某個(gè)核上才能訪問, 因此必然會(huì)影響上層應(yīng)用軟件操作的透明性。
發(fā)明內(nèi)容
本發(fā)明所解決的技術(shù)問題在于提供一種分布式系統(tǒng)中提高多核CPU
處理能力的方法,以解決在保持現(xiàn)有分布式軟件結(jié)構(gòu)基本不變的前提下如
何充分發(fā)揮多核CPU的性能來提高分布式系統(tǒng)處理能力的問題。
為了解決上述問題,本發(fā)明提供了一種分布式系統(tǒng)中提高多核CPU 處理能力的方法,其中,包括以下步驟
(1 )根據(jù)每一個(gè)CPU的節(jié)點(diǎn)確定功能節(jié)點(diǎn)數(shù)目、功能節(jié)點(diǎn)類型和功 能節(jié)點(diǎn)標(biāo)識(shí),并錄入數(shù)據(jù)庫表或者配置文件中;
(2)所述系統(tǒng)的控制模塊根據(jù)上述內(nèi)容創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程,檢 測(cè)退出的應(yīng)用進(jìn)程,并重新創(chuàng)建應(yīng)用進(jìn)程;
(3 )對(duì)所述系統(tǒng)中原有的功能節(jié)點(diǎn)標(biāo)識(shí)的獲取方法修改為在應(yīng)用進(jìn) 程入口直接讀取傳入?yún)?shù)。
本發(fā)明所述的方法,其中,所述步驟(2)包括
(21 )所述系統(tǒng)的控制模塊根據(jù)CPU的物理地址查詢數(shù)據(jù)庫表或者 配置文件獲得需要?jiǎng)?chuàng)建的功能節(jié)點(diǎn)數(shù)目、每一個(gè)功能節(jié)點(diǎn)的類型以及每一 個(gè)功能節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí);
(22 )根據(jù)每一個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)和系統(tǒng)原有的算法確定這每一個(gè)節(jié)點(diǎn) 標(biāo)識(shí)對(duì)應(yīng)的每一個(gè)通訊地址,然后4巴這每一個(gè)通訊地址添加到該CPU節(jié) 點(diǎn)巾;
(23 )創(chuàng)建至少 一個(gè)應(yīng)用進(jìn)程,每個(gè)應(yīng)用進(jìn)程運(yùn)行與功能節(jié)點(diǎn)類型相 應(yīng)的應(yīng)用程序,并4巴每一個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)通過參凄t傳遞分配給對(duì)應(yīng)的每一 個(gè)應(yīng)用進(jìn)程,同時(shí),建立一張進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)
應(yīng)表;
(24)檢測(cè)創(chuàng)建的每個(gè)應(yīng)用進(jìn)程,如發(fā)現(xiàn)某個(gè)應(yīng)用進(jìn)程退出,則查詢 該應(yīng)用進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表以確定退出的應(yīng)用 進(jìn)程的功能節(jié)點(diǎn)標(biāo)識(shí)和功能節(jié)點(diǎn)類型,然后重新創(chuàng)建一個(gè)應(yīng)用進(jìn)程,運(yùn)行 與此功能節(jié)點(diǎn)類型對(duì)應(yīng)的應(yīng)用程序并把此功能節(jié)點(diǎn)標(biāo)識(shí)傳給重新創(chuàng)建的 應(yīng)用進(jìn)程,同時(shí)更新應(yīng)用進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表。
本發(fā)明所述的方法,其中,所述步驟(l)中進(jìn)一步包括
所述某個(gè)CPU節(jié)點(diǎn)上配置的功能節(jié)點(diǎn)數(shù)目可以大于該CPU包含的核 數(shù)目,并且可以在一個(gè)CPU節(jié)點(diǎn)上同時(shí)配置不同類型的功能節(jié)點(diǎn)。
本發(fā)明所述的方法,其中,步驟(2)中所述系統(tǒng)的控制模塊根據(jù)上 述內(nèi)容創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程,為系統(tǒng)的控制模塊根據(jù)上述內(nèi)容利用fork 創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程。
本發(fā)明所述的方法,其中,所述步驟(3)為,對(duì)所述系統(tǒng)中原有的 功能節(jié)點(diǎn)標(biāo)識(shí)的獲取方法修改為在應(yīng)用進(jìn)程入口 main函數(shù)直接讀取傳入 參數(shù),然后把入?yún)⑥D(zhuǎn)化為功能節(jié)點(diǎn)標(biāo)識(shí)。
本發(fā)明所述的方法,其中,所述步驟(3)中進(jìn)一步包括根據(jù)所述 系統(tǒng)原有算法,不同的功能節(jié)點(diǎn)類型相應(yīng)的應(yīng)用程序會(huì)使用與自己的功能 節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的通訊地址和其它功能節(jié)點(diǎn)進(jìn)行通信;
其中,所述步驟(24)中進(jìn)一步包括所述系統(tǒng)的控制模塊重復(fù)執(zhí)行 這一過程。
本發(fā)明所述的方法,其中,所述CPU的節(jié)點(diǎn),為物理CPU的節(jié)點(diǎn)。
本發(fā)明與現(xiàn)有技術(shù)相比,本發(fā)明提高了分布式系統(tǒng)中多核CPU的處 理能力,在幾乎不改變現(xiàn)有分布式系統(tǒng)軟件架構(gòu)的前提下,運(yùn)用本發(fā)明使 得釆用多核CPU節(jié)點(diǎn)替換單核CPU節(jié)點(diǎn)來提升分布式系統(tǒng)處理能力的想 法變得實(shí)際可行;另外,本發(fā)明打破了分布式系統(tǒng)中物理CPU節(jié)點(diǎn)和功
能節(jié)點(diǎn)之間--對(duì)應(yīng)關(guān)系,每個(gè)物理CPU節(jié)點(diǎn)之上可以駐留一個(gè)或多個(gè)
功能節(jié)點(diǎn),這些功能節(jié)點(diǎn)的類型可以相同也可以不同,從而方便了分布式 系統(tǒng)的設(shè)計(jì)。
圖1是本發(fā)明的分布式系統(tǒng)的物理CPU節(jié)點(diǎn)連接示意圖2是本發(fā)明實(shí)施例中數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)示意圖3是本發(fā)明實(shí)施例所述的圖1中A、 B、 C在數(shù)據(jù)庫中配置的數(shù)據(jù) 示意圖4是本發(fā)明實(shí)施例所述步驟中的進(jìn)程pid和節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)關(guān)系示意 圖; —
圖5是本發(fā)明實(shí)施例所述的一種分布式系統(tǒng)中提高多核CPU處理能 力的方法大致流程圖6是本發(fā)明實(shí)施例所述第二步的控制模塊處理流程示意圖。
具體實(shí)施例方式
本發(fā)明的目的是介紹一種分布式系統(tǒng)中提高多核CPU處理能力的方 法,以解決在保持現(xiàn)有分布式軟件結(jié)構(gòu)基本不變的前提下如何充分發(fā)揮多 核CPU的性能來提高分布式系統(tǒng)處理能力的問題。以下對(duì)
具體實(shí)施例方式
進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。
本發(fā)明大致思想在于提出了另外一種解決方法多核CPU之上仍然 運(yùn)行一個(gè)SMP操作系統(tǒng),在操作系統(tǒng)之上創(chuàng)建多個(gè)進(jìn)程,每個(gè)進(jìn)程運(yùn)行 相同或者不同的應(yīng)用程序,每個(gè)應(yīng)用進(jìn)程對(duì)外都表現(xiàn)為分布式系統(tǒng)中的一 個(gè)功能節(jié)點(diǎn),相當(dāng)于增加了分布式系統(tǒng)中的功能節(jié)點(diǎn)數(shù)目。對(duì)操作系統(tǒng)來 說,多個(gè)應(yīng)用進(jìn)程的并發(fā)運(yùn)行,意味著工作線程數(shù)目的增多,因而提高了 多核CPU的處理能力。而對(duì)于該分布式系統(tǒng)來說,本發(fā)明增加了系統(tǒng)中 的功能節(jié)點(diǎn)數(shù)目,因而提高整個(gè)分布式系統(tǒng)的處理能力。
本發(fā)明通過在SMP操作系統(tǒng)之上創(chuàng)建多個(gè)運(yùn)行相同或者不同應(yīng)用程 序的進(jìn)程,每個(gè)進(jìn)程對(duì)外都表現(xiàn)為分布式系統(tǒng)中的一個(gè)功能節(jié)點(diǎn),增加了 分布式系統(tǒng)中的功能節(jié)點(diǎn)數(shù)目,提高了分布式系統(tǒng)的處理能力。本質(zhì)上, 本發(fā)明是把多核CPU強(qiáng)大的處理能力轉(zhuǎn)化為分布式系統(tǒng)中功能節(jié)點(diǎn)的增
加,而CPU節(jié)點(diǎn)數(shù)目保持不變。而背景技術(shù)中的多核拆分方法是把多核
CPU拆分成多個(gè)CPU節(jié)點(diǎn),增加了 CPU節(jié)點(diǎn)的數(shù)目,功能節(jié)點(diǎn)數(shù)目隨之
增加。但是本發(fā)明克服了多核拆分方法的缺點(diǎn),首先本發(fā)明不需要操作系
統(tǒng)廠商的定制或者附加額外的中間軟件,因?yàn)槿魏我豢钔ㄓ枚嗪薈PU的 推出,基本上會(huì)支持主流的操作系統(tǒng);其次,多核CPU之上只運(yùn)行一個(gè) SMP操作系統(tǒng)映像,減少了內(nèi)存開銷;另外,由于只運(yùn)行一個(gè)SMP操作 系統(tǒng)映像,因此不再存在上層軟件訪問設(shè)備的透明性問題。
對(duì)于一個(gè)分布式系統(tǒng),每個(gè)功能節(jié)點(diǎn)都有自己唯一的標(biāo)志,系統(tǒng)需要 使用 一種方法能夠知道系統(tǒng)內(nèi)到底配置了哪些功能節(jié)點(diǎn);系統(tǒng)內(nèi)的各功能 節(jié)點(diǎn)之間可以相互通訊,對(duì)于上層軟件來說,能夠把消息發(fā)送到目的節(jié)點(diǎn) 的唯一條件就是給出目的功能節(jié)點(diǎn)的標(biāo)志。為此,系統(tǒng)必須建立一張功能 節(jié)點(diǎn)標(biāo)識(shí)和通訊地址對(duì)應(yīng)表,常見的通訊地址包括IP地址、以太網(wǎng)地址 等。
商用的分布式系統(tǒng)設(shè)備,如電信設(shè)備, 一般都是由多個(gè)機(jī)框組成,每 個(gè)機(jī)框包括很多插槽,各CPU節(jié)點(diǎn)以單板形式插入不同槽位并和機(jī)框背
面的背板相連,背板提供電源、以太網(wǎng)連接和其它一些信號(hào)線。另外,一
塊單板上可以存在多個(gè)物理CPU節(jié)點(diǎn),不同CPU使用物理CPU號(hào)區(qū)分。 因此,每個(gè)CPU節(jié)點(diǎn)都有自己的物理地址框號(hào)、槽位號(hào)和物理CPU號(hào), 為了描述方便,只取槽位號(hào)和物理CPU號(hào)作為物理地址。很多分布式系 統(tǒng)直接使用CPU的物理地址作為功能節(jié)點(diǎn)的標(biāo)識(shí),這是因?yàn)檫@些分布式 系統(tǒng)的一個(gè)CPU節(jié)點(diǎn)上只駐留一個(gè)功能節(jié)點(diǎn)。
分布式系統(tǒng)中各CPU節(jié)點(diǎn)之間一般通過局域網(wǎng)進(jìn)行連接。附圖l給 出了 一個(gè)分布式系統(tǒng)的物理CPU節(jié)點(diǎn)連接示意圖。CPU節(jié)點(diǎn)A的物理地 址為1槽位的1號(hào)CPU,即(l, 1); CPU節(jié)點(diǎn)B的物理地址為l槽 位的2號(hào)CPU,即(1, 2 ); CPU節(jié)點(diǎn)C的物理地址為2槽位的1號(hào)CPU, 即(2, 1); CPU節(jié)點(diǎn)A和CPU節(jié)點(diǎn)B位于相同槽位的一塊單寺反上。
本發(fā)明申請(qǐng)的主要特征包括以下處理步驟
步驟501,初始的數(shù)據(jù)配置過程;
步驟502,控制模塊的處理過程;
步驟503,原有系統(tǒng)中獲取本功能節(jié)點(diǎn)標(biāo)識(shí)的方法需要修改。
所述的步驟501中,需要把系統(tǒng)中所有的功能節(jié)點(diǎn)都配置到數(shù)據(jù)庫中 或者一個(gè)配置文件中,通過配置系統(tǒng)才能夠知道存在哪些功能節(jié)點(diǎn);
每一個(gè)物理CPU節(jié)點(diǎn),首先需要確定實(shí)際駐留的功能節(jié)點(diǎn)數(shù)目n(n 大于等于1 )和每一個(gè)功能節(jié)點(diǎn)的類型,每一個(gè)功能節(jié)點(diǎn)由運(yùn)行在該CPU 節(jié)點(diǎn)上一個(gè)應(yīng)用進(jìn)程來表示;其中,功能節(jié)點(diǎn)的類型決定了應(yīng)用進(jìn)程運(yùn)行 的應(yīng)用程序。然后需要為每一個(gè)功能節(jié)點(diǎn)分配節(jié)點(diǎn)標(biāo)識(shí)。最后把功能節(jié)點(diǎn) 數(shù)目、功能節(jié)點(diǎn)類型和功能節(jié)點(diǎn)標(biāo)識(shí)錄入數(shù)據(jù)庫表中或者配置文件中;
實(shí)際應(yīng)用中,對(duì)于單核CPU節(jié)點(diǎn), 一般n等于l,即一個(gè)單核CPU 節(jié)點(diǎn)上一般只駐留一個(gè)功能節(jié)點(diǎn);對(duì)于多核CPU節(jié)點(diǎn),為了提高多核CPU 的處理能力,n—般大于l,即一個(gè)多核CPU節(jié)點(diǎn)對(duì)外表現(xiàn)為多個(gè)功能節(jié) 點(diǎn)。但是,允許在一個(gè)CPU節(jié)點(diǎn)上配置的功能節(jié)點(diǎn)數(shù)目大于該CPU包含 的核數(shù)目,并且允許在一個(gè)CPU節(jié)點(diǎn)上同時(shí)配置不同類型的功能節(jié)點(diǎn)。
所述的步驟502中,各CPU節(jié)點(diǎn)的操作系統(tǒng)首先以管理員身份運(yùn)行 控制模塊進(jìn)程,控制模塊進(jìn)程以CPU的物理地址查詢數(shù)據(jù)庫或者配置文 件獲得需要?jiǎng)?chuàng)建的功能節(jié)點(diǎn)數(shù)目n、每一個(gè)功能節(jié)點(diǎn)的類型以及n個(gè)功能 節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí);
根據(jù)n個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)和系統(tǒng)原有的算法確定這n個(gè)節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的 n個(gè)通訊地址,然后4巴這n個(gè)通訊地址添加到該CPU節(jié)點(diǎn)中;
創(chuàng)建n個(gè)應(yīng)用進(jìn)程,每個(gè)應(yīng)用進(jìn)程運(yùn)行與功能節(jié)點(diǎn)類型相應(yīng)的應(yīng)用程 序(此應(yīng)用程序須經(jīng)過步驟3做少量修改),并把n個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)通過 參數(shù)傳遞分配給對(duì)應(yīng)的每一個(gè)應(yīng)用進(jìn)程;同時(shí),建立一張進(jìn)程ID和功能 節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表;每個(gè)進(jìn)程運(yùn)行的應(yīng)用程序由其代表的功 能節(jié)點(diǎn)類型決定,代表相同類型功能節(jié)點(diǎn)的應(yīng)用進(jìn)程運(yùn)行相同的應(yīng)用程 序,代表不同類型功能節(jié)點(diǎn)的應(yīng)用進(jìn)程運(yùn)行不同的應(yīng)用程序;
檢測(cè)創(chuàng)建的n個(gè)應(yīng)用進(jìn)程,如果發(fā)現(xiàn)某個(gè)應(yīng)用進(jìn)程退出,則查詢進(jìn)程 ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表以確定退出進(jìn)程的功能節(jié)點(diǎn)標(biāo)
識(shí)和功能節(jié)點(diǎn)類型,然后重新創(chuàng)建一個(gè)應(yīng)用進(jìn)程運(yùn)行與此功能節(jié)點(diǎn)類型對(duì) 應(yīng)的應(yīng)用程序并把此功能節(jié)點(diǎn)標(biāo)識(shí)傳給它,同時(shí)更新進(jìn)程ID和功能節(jié)點(diǎn) 標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表。重復(fù)執(zhí)行這一過程。
所述步驟503中,原有應(yīng)用軟件獲取本功能節(jié)點(diǎn)標(biāo)識(shí)的方法需要修 改。上述步驟2中,控制模塊在創(chuàng)建功能節(jié)點(diǎn)時(shí)已經(jīng)把功能節(jié)點(diǎn)標(biāo)識(shí)以參 數(shù)形式傳入,因此本功能節(jié)點(diǎn)標(biāo)識(shí)的獲取改為在應(yīng)用進(jìn)程入口直接讀取傳 入?yún)?shù)。根據(jù)系統(tǒng)原有算法,不同的功能節(jié)點(diǎn)(應(yīng)用進(jìn)程)會(huì)使用與自己 的節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的通訊地址和其它功能節(jié)點(diǎn)進(jìn)行通信。
經(jīng)過上述步驟的處理,多核CPU上的每一個(gè)應(yīng)用進(jìn)程對(duì)外都完全表 現(xiàn)為分布式系統(tǒng)中的一個(gè)功能節(jié)點(diǎn)。
上面是本發(fā)明的基本原理,在不同的操作系統(tǒng)和不同的分布式系統(tǒng)上 的實(shí)現(xiàn)可能有些細(xì)節(jié)差異,但基本原理、基本思想是一致的。為了描迷方便,下面的實(shí)施例里給出一些約定。 一是假設(shè)分布式系統(tǒng) 中所有功能節(jié)點(diǎn)的類型都是相同的,即代表功能節(jié)點(diǎn)的應(yīng)用進(jìn)程運(yùn)行相同 的應(yīng)用程序,因此進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表就簡化 為進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)表;二是數(shù)據(jù)配置是通過數(shù)據(jù)庫表進(jìn)行配 置的,并且數(shù)據(jù)庫表的設(shè)計(jì)如圖2所示,其中物理的槽位號(hào)和物理的CPU 號(hào)為關(guān)鍵字,對(duì)于每個(gè)物理CPU,需要配置有效的功能節(jié)點(diǎn)數(shù)目n和每 個(gè)功能節(jié)點(diǎn)的邏輯CPU號(hào),另外,圖2中約定最多可配置6個(gè)功能節(jié)點(diǎn); 三是功能節(jié)點(diǎn)標(biāo)識(shí)由槽位號(hào)和邏輯CPU號(hào)構(gòu)成;四是功能節(jié)點(diǎn)之間使用 IP地址進(jìn)行通訊。需要說明的是這些約定僅僅是為了更加清楚的描述實(shí)施 步驟,發(fā)明內(nèi)容本身并不需要強(qiáng)加這些約定。
以下結(jié)合附圖,在linux搡作系統(tǒng)上對(duì)本發(fā)明的具體實(shí)施進(jìn)行詳細(xì)說明。
下面的描述中僅包括與本發(fā)明相關(guān)的實(shí)施步驟,對(duì)于實(shí)現(xiàn)一個(gè)分布式 系統(tǒng)的其它必不可少的步驟,由于與本發(fā)明無關(guān),說明中沒有介紹。
第一步,初始的數(shù)據(jù)配置過程的實(shí)施步驟如下
結(jié)合附圖1,下面描述物理CPU節(jié)點(diǎn)A、 B和C在數(shù)據(jù)庫表中中是
如何配置的。假設(shè)圖l中,CPU節(jié)點(diǎn)A是具有4個(gè)核的CPU, CPU節(jié)點(diǎn) B是具有2個(gè)核的CPU, CPU節(jié)點(diǎn)C是單核CPU。
對(duì)于CPU節(jié)點(diǎn)A,假設(shè)需要駐留3個(gè)功能節(jié)點(diǎn),即有效的功能節(jié)點(diǎn) 數(shù)目為3個(gè)。同時(shí)為這3個(gè)功能節(jié)點(diǎn)分配邏輯CPU號(hào),分別為1、 2、 3。 按照上述約定,這些功能節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)分別為(1,1)、 ( 1, 2) 、 (1,3)。
對(duì)于CPU節(jié)點(diǎn)B,假設(shè)需要駐留2個(gè)功能節(jié)點(diǎn),即有效的功能節(jié)點(diǎn) 數(shù)目為2個(gè)。同時(shí)為這2個(gè)功能節(jié)點(diǎn)分配邏輯CPU號(hào),分別為4、 5。按 照上述約定,這些功能節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)分別為(1, 4) 、 (1, 5)。
對(duì)于CPU節(jié)點(diǎn)C,是一個(gè)單核CPU,假設(shè)只需要駐留1個(gè)功能節(jié)點(diǎn), 即有效的功能節(jié)點(diǎn)數(shù)目為l個(gè)。同時(shí)為這1個(gè)功能節(jié)點(diǎn)分配邏輯CPU號(hào), 為1。按照上述約定,此功能節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)為(2, 1)。
針對(duì)圖1中的A、 B、 C三個(gè)物理CPU節(jié)點(diǎn),最終數(shù)據(jù)庫表中錄入的 數(shù)據(jù),如圖3所示。
第二步,控制模塊的處理過程的實(shí)施步驟如下 結(jié)合附圖6,下面描述控制模塊的具體實(shí)施步驟。
見附圖6的步驟601,修改操作系統(tǒng)的啟動(dòng)配置文件,使得各CPU 節(jié)點(diǎn)的操作系統(tǒng)起來后能夠自動(dòng)運(yùn)行控制模塊進(jìn)程。比如控制模塊的可執(zhí) 4亍文^f牛4立于/home/user/MainContro1,那么在/etc/rc.local文j牛最后添力口一 行/home/user/MainContro1。
見圖6的步驟602,控制模塊進(jìn)程調(diào)用系統(tǒng)接口獲取本CPU節(jié)點(diǎn)的物
理地址。
見圖6的步驟603,控制模塊進(jìn)程以CPU的物理地址查詢數(shù)據(jù)庫獲得 需要?jiǎng)?chuàng)建的功能節(jié)點(diǎn)數(shù)目n以及n個(gè)功能節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)。以物理CPU 節(jié)點(diǎn)A為例,控制模塊進(jìn)程用物理地址(1, 1)查詢數(shù)據(jù)庫,查詢結(jié)果 為有效功能節(jié)點(diǎn)數(shù)目為3個(gè),3個(gè)功能節(jié)點(diǎn)的邏輯CPU號(hào)為1、 2、 3, 即要?jiǎng)?chuàng)建的功能節(jié)點(diǎn)數(shù)目為3個(gè),3個(gè)功能節(jié)點(diǎn)的標(biāo)識(shí)為(1, 1) 、 (1,
2) 、 (1, 3)。
見圖6的步驟604,控制模塊進(jìn)程根據(jù)n個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)和系統(tǒng)計(jì)算 IP地址的算法計(jì)算出n個(gè)IP地址,然后把這n個(gè)IP地址添加到物理CPU 節(jié)點(diǎn)中。
見圖6的步驟605,控制模塊進(jìn)程用fork創(chuàng)建n個(gè)子進(jìn)程,每個(gè)子進(jìn) 程execl功能節(jié)點(diǎn)應(yīng)用程序,并把節(jié)點(diǎn)標(biāo)識(shí)以execl的參數(shù)形式傳入每一 個(gè)子進(jìn)程。同時(shí)需要本地創(chuàng)建一張表來保存各子進(jìn)程pid和功能節(jié)點(diǎn)標(biāo)識(shí) 的對(duì)應(yīng)關(guān)系。以CPU節(jié)點(diǎn)A為例,3個(gè)子進(jìn)程pid和3個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)的 對(duì)應(yīng)關(guān)系,如圖4所示。
見圖6的步驟606,控制模塊進(jìn)程通過wait系統(tǒng)調(diào)用來監(jiān)測(cè)各子進(jìn)程 (正常退出或者異常退出),wait返回的是退出子進(jìn)程的pid。
見圖6的步驟607,用退出子進(jìn)程的pid查詢子進(jìn)程pid和功能節(jié)點(diǎn) 標(biāo)識(shí)對(duì)應(yīng)關(guān)系表,得到退出子進(jìn)程的功能節(jié)點(diǎn)標(biāo)識(shí)。
見圖6的步驟608,重新fork—個(gè)子進(jìn)程,該子進(jìn)程execl功能節(jié)點(diǎn) 應(yīng)用程序,并把此功能節(jié)點(diǎn)標(biāo)識(shí)以參數(shù)形式傳入該子進(jìn)程,同時(shí)更新子進(jìn) 程pid和功能節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)關(guān)系表。
跳轉(zhuǎn)到圖6的步驟606。
第三步,原有系統(tǒng)中功能節(jié)點(diǎn)應(yīng)用程序的修改步驟如下
原有應(yīng)用軟件獲取本功能節(jié)點(diǎn)標(biāo)識(shí)的方法需要修改。在控制模塊進(jìn)程 創(chuàng)建子進(jìn)程時(shí)已經(jīng)把功能節(jié)點(diǎn)標(biāo)識(shí)以參數(shù)形式傳入,因此本功能節(jié)點(diǎn)標(biāo)識(shí) 的獲取改為在應(yīng)用進(jìn)程入口 main函數(shù)直接讀取傳入?yún)?shù),然后把入?yún)⑥D(zhuǎn) 化為功能節(jié)點(diǎn)標(biāo)識(shí)。原有系統(tǒng)中功能節(jié)點(diǎn)應(yīng)用程序不再需要做其它任何改 動(dòng)。
本發(fā)明專利通過在一個(gè)多核CPU上運(yùn)行多個(gè)應(yīng)用進(jìn)程的方式,提高 了多核CPU的處理能力,增加了分布式系統(tǒng)中的功能節(jié)點(diǎn)數(shù)目,因而提 高了分布式系統(tǒng)的處理能力。
本發(fā)明的實(shí)施例所述的內(nèi)容4^高了分布式系統(tǒng)中多核CPU的處理能
力。在幾乎不改變現(xiàn)有分布式系統(tǒng)軟件架構(gòu)的前提下,運(yùn)用本發(fā)明使得采
用多核CPU節(jié)點(diǎn)替換單核CPU節(jié)點(diǎn)來提升分布式系統(tǒng)處理能力的想法變 得實(shí)際可行;另外,本發(fā)明打破了分布式系統(tǒng)中物理CPU節(jié)點(diǎn)和功能節(jié) 點(diǎn)之間——對(duì)應(yīng)關(guān)系,每個(gè)物理CPU節(jié)點(diǎn)之上可以駐留一個(gè)或多個(gè)功能 節(jié)點(diǎn),這些功能節(jié)點(diǎn)的類型可以相同也可以不同,從而方便了分布式系統(tǒng) 的設(shè)計(jì)。
當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)
形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1、一種分布式系統(tǒng)中提高多核CPU處理能力的方法,其特征在于,包括以下步驟(1)根據(jù)每一個(gè)CPU的節(jié)點(diǎn)確定功能節(jié)點(diǎn)數(shù)目、功能節(jié)點(diǎn)類型和功能節(jié)點(diǎn)標(biāo)識(shí),并錄入數(shù)據(jù)庫表或者配置文件中;(2)所述系統(tǒng)的控制模塊根據(jù)上述內(nèi)容創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程,檢測(cè)退出的應(yīng)用進(jìn)程,并重新創(chuàng)建應(yīng)用進(jìn)程;(3)對(duì)所述系統(tǒng)中原有的功能節(jié)點(diǎn)標(biāo)識(shí)的獲取方法修改為在應(yīng)用進(jìn)程入口直接讀取傳入?yún)?shù)。
2、 如權(quán)利要求l所述的方法,其特征在于,所述步驟(2)包括(21 )所述系統(tǒng)的控制模塊根據(jù)CPU的物理地址查詢數(shù)據(jù)庫表或者 配置文件獲得需要?jiǎng)?chuàng)建的功能節(jié)點(diǎn)數(shù)目、每一個(gè)功能節(jié)點(diǎn)的類型以及每一 個(gè)功能節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí);(22 )根據(jù)每一個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)和系統(tǒng)原有的算法確定這每一個(gè)節(jié)點(diǎn) 標(biāo)識(shí)對(duì)應(yīng)的每一個(gè)通訊地址,然后4巴這每一個(gè)通訊地址添加到該CPU節(jié) 點(diǎn)中 ,(23 )創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程,每個(gè)應(yīng)用進(jìn)程運(yùn)行與功能節(jié)點(diǎn)類型相 應(yīng)的應(yīng)用程序,并4巴每一個(gè)功能節(jié)點(diǎn)標(biāo)識(shí)通過參數(shù)傳遞分配給對(duì)應(yīng)的每一 個(gè)應(yīng)用進(jìn)程,同時(shí),建立一張進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表;(24)檢測(cè)創(chuàng)建的每個(gè)應(yīng)用進(jìn)程,如發(fā)現(xiàn)某個(gè)應(yīng)用進(jìn)程退出,則查詢 該應(yīng)用進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表以確定退出的應(yīng)用 進(jìn)程的功能節(jié)點(diǎn)標(biāo)識(shí)和功能節(jié)點(diǎn)類型,然后重新創(chuàng)建一個(gè)應(yīng)用進(jìn)程,運(yùn)行 與此功能節(jié)點(diǎn)類型對(duì)應(yīng)的應(yīng)用程序并把此功能節(jié)點(diǎn)標(biāo)識(shí)傳給重新創(chuàng)建的 應(yīng)用進(jìn)程,同時(shí)更新應(yīng)用進(jìn)程ID和功能節(jié)點(diǎn)標(biāo)識(shí)與功能節(jié)點(diǎn)類型對(duì)應(yīng)表。
3、 如權(quán)利要求l所述的方法,其特征在于,所述步驟(l)中進(jìn)一步包括所述某個(gè)CPU節(jié)點(diǎn)上配置的功能節(jié)點(diǎn)數(shù)目可以大于該CPU包含的核 數(shù)目,并且可以在一個(gè)CPU節(jié)點(diǎn)上同時(shí)配置不同類型的功能節(jié)點(diǎn)。
4、 如權(quán)利要求l所述的方法,其特征在于,步驟(2)中所述系統(tǒng)的 控制模塊根據(jù)上述內(nèi)容創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程,為系統(tǒng)的控制模塊根據(jù)上 述內(nèi)容利用fork創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程。
5、 如權(quán)利要求l所述的方法,其特征在于,所述步驟(3)為,對(duì)所 述系統(tǒng)中原有的功能節(jié)點(diǎn)標(biāo)識(shí)的獲取方法修改為在應(yīng)用進(jìn)程入口 main函 數(shù)直接讀取傳入?yún)?shù),然后把入?yún)⑥D(zhuǎn)化為功能節(jié)點(diǎn)標(biāo)識(shí)。
6、 如權(quán)利要求l所述的方法,其特征在于,所述步驟(3)中進(jìn)一步 包括根據(jù)所述系統(tǒng)原有算法,不同的功能節(jié)點(diǎn)類型相應(yīng)的應(yīng)用程序會(huì)使 用與自己的功能節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的通訊地址和其它功能節(jié)點(diǎn)進(jìn)行通信。
7、 如權(quán)利要求2所述的方法,其特征在于,所述步驟(24)中進(jìn)一 步包括所述系統(tǒng)的控制模塊重復(fù)執(zhí)行這一過程。
8、 如權(quán)利要求l所述的方法,其特征在于,所述CPU的節(jié)點(diǎn),為物 理CPU的節(jié)點(diǎn)。
全文摘要
本發(fā)明公開了一種分布式系統(tǒng)中提高多核CPU處理能力的方法,其特征在于,包括步驟(1)根據(jù)每一個(gè)CPU的節(jié)點(diǎn)確定功能節(jié)點(diǎn)數(shù)目、功能節(jié)點(diǎn)類型和功能節(jié)點(diǎn)標(biāo)識(shí),并錄入數(shù)據(jù)庫表或者配置文件中;(2)所述系統(tǒng)的控制模塊根據(jù)上述內(nèi)容創(chuàng)建至少一個(gè)應(yīng)用進(jìn)程,檢測(cè)退出的應(yīng)用進(jìn)程,并重新創(chuàng)建應(yīng)用進(jìn)程;(3)對(duì)所述系統(tǒng)中原有的功能節(jié)點(diǎn)標(biāo)識(shí)的獲取方法修改為在應(yīng)用進(jìn)程入口直接讀取傳入?yún)?shù)。本發(fā)明解決了在保持現(xiàn)有分布式軟件結(jié)構(gòu)基本不變的前提下如何充分發(fā)揮多核CPU的性能來提高分布式系統(tǒng)處理能力的問題。
文檔編號(hào)G06F9/46GK101349974SQ200710130560
公開日2009年1月21日 申請(qǐng)日期2007年7月16日 優(yōu)先權(quán)日2007年7月16日
發(fā)明者忱 劉, 周海山, 騏 楊, 童小九 申請(qǐng)人:中興通訊股份有限公司