一種云計算主機(jī)節(jié)點間物理內(nèi)存共享方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及計算機(jī)操作系統(tǒng)內(nèi)核中內(nèi)存管理,具體是一種云集群環(huán)境中主機(jī)間物 理內(nèi)存共享的方法。
【背景技術(shù)】
[0002] 云計算、分布式等相關(guān)技術(shù)在近幾年來得到迅猛發(fā)展,改變了用戶使用計算機(jī)的 方式和信息處理的計算模式。云計算技術(shù)使得用戶無需像從前一樣購買計算機(jī)硬件資源, 而只需購買硬件的存儲、計算能力即可;分布式技術(shù)實現(xiàn)了大數(shù)據(jù)的并行處理,提升了處理 效率,節(jié)約了處理時間。
[0003] 這些技術(shù)的實現(xiàn)與應(yīng)用都需要相應(yīng)的軟件硬件環(huán)境的支持,由于單個計算機(jī)的性 能有限,計算機(jī)的組織形式不再是分散式的,而是以集群的形式出現(xiàn)。集群環(huán)境通過對計算 機(jī)軟件硬件資源實行集中化管理、按需分配,提升了服務(wù)性能、任務(wù)吞吐量和軟件硬件資源 的利用率。但集群環(huán)境并不是完全理想化的,集群在物理上仍然由是多個物理主機(jī)組成,各 計算機(jī)擁有自己的操作系統(tǒng)和獨立的硬件資源。邏輯上是通過在操作系統(tǒng)層面之上的安裝 中間件,中間件之間相互通信實現(xiàn)主機(jī)資源的集中使用的。這樣的結(jié)構(gòu)帶來了很多問題,如 中間件需要針對應(yīng)用進(jìn)行特定的開發(fā),增加了集群的管理難度,增加了開發(fā)人員的開發(fā)難 度等。
[0004] 內(nèi)存是計算機(jī)運行當(dāng)中使用量非常大的物理資源之一,由于成本、硬件環(huán)境等因 素限制,單臺主機(jī)內(nèi)存資源有限且容量固定,會造成內(nèi)存資源不足或浪費。為解決此問題, 設(shè)計一種主機(jī)間內(nèi)存共用的方式,實現(xiàn)內(nèi)存的高效利用成為一項熱門研究內(nèi)容。公開號 CN102609305A,公開日2012 - 07 - 25,名稱為"一種服務(wù)器集群中內(nèi)存共享方法"的中國專 利文獻(xiàn),提出了一種集群中服務(wù)器間內(nèi)存共享方法,但該方案中需要應(yīng)用程序參與內(nèi)存的 共享過程,沒有實現(xiàn)對應(yīng)用程序的透明處理。公開號CN1972215A,公開日2007 - 05 - 30, 名稱為"一種遠(yuǎn)程內(nèi)存共享系統(tǒng)及其實現(xiàn)方法"的中國專利文獻(xiàn),提出的內(nèi)存共享系統(tǒng) 由多個計算結(jié)點、一個管理器和一個內(nèi)存服務(wù)器組成,當(dāng)計算結(jié)點不能滿足應(yīng)用的內(nèi) 存需求時結(jié)點才會向管理器申請內(nèi)存從其他結(jié)點分配內(nèi)存塊;內(nèi)存塊以應(yīng)用為單位分 配,并通過多個列表進(jìn)行管理,造成了尋址困難,運行開銷大。文獻(xiàn)(Niswar Muh, Sabri A. Auliaj ffarni Elly, Musa Muh Nur. Memory sharing management on virtual private server [C]. 2013International Conference on ICT for Smart Society (ICISS), 2013.) 公開為提升虛擬服務(wù)器性能,提出一種內(nèi)存資源共享方法,虛擬服務(wù)器可以將自己的內(nèi)存 借給其他內(nèi)存資源趨于用盡的虛擬服務(wù)器。提出的共享內(nèi)存方法在一定程度上均提升了虛 擬機(jī)或主機(jī)的性能,因此設(shè)計一種主機(jī)間動態(tài)借用內(nèi)存裝置實現(xiàn)內(nèi)存在主機(jī)之間的借用有 助于提升主機(jī)性能。
[0005] 現(xiàn)有應(yīng)用技術(shù)已經(jīng)在某種程度上實現(xiàn)了內(nèi)存共享。文獻(xiàn)(MemoryCached [DB/0L]. http://memcached. org/about. 2009 - 4 - 20/2015 - 4 - 25.)中提到的 MemCached 實現(xiàn)了 一種分布式內(nèi)存緩存系統(tǒng),該系統(tǒng)中存在一個服務(wù)器結(jié)點和多個客戶端結(jié)點,服務(wù)器結(jié)點 將客戶端節(jié)點的空閑緩存在邏輯上集中起來,并統(tǒng)一向外提供服務(wù)。該系統(tǒng)通過在系統(tǒng)中 安裝中間件的方式實現(xiàn)服務(wù)器節(jié)點和客戶端節(jié)點的功能,并提供了用于操作的API接口。 這種"一個服務(wù)節(jié)點+多個客戶節(jié)點"的模式被廣泛應(yīng)用在資源共享的解決方案當(dāng)中,如 Hadoop、HBase 等。
[0006] 隨著計算機(jī)軟硬件技術(shù)的成熟,通過網(wǎng)絡(luò)共享物理設(shè)備已經(jīng)有一些成熟的技術(shù)。 常見的商業(yè)版操作系統(tǒng)(如Windows、Ubuntu等)當(dāng)中均包含打印機(jī)共享功能,該功能使得 多臺計算機(jī)可以使用同一臺打印機(jī),而不必為每一臺計算機(jī)都配備打印機(jī),節(jié)約了硬件成 本。該技術(shù)使用最為廣泛,常見于辦公環(huán)境或家庭環(huán)境當(dāng)中。此外,KVM虛擬化技術(shù)實現(xiàn)的 VMffare和VirtualBox,Xen虛擬化技術(shù)實現(xiàn)的XenServer等虛擬化平臺已經(jīng)日趨成熟并得 到了廣泛的應(yīng)用,在這些平臺上,用戶可以根據(jù)自己需要調(diào)整虛擬機(jī)的性能,如內(nèi)存大小, 硬盤大小等。虛擬機(jī)中的設(shè)備全部都是通過虛擬化技術(shù)虛擬出來的,用戶使用過程中不會 感覺到與使用實際的硬件設(shè)備有任何差別。這些實例及平臺的成功實現(xiàn)表明,將內(nèi)存虛擬 化并通過網(wǎng)絡(luò)共享是存在理論基礎(chǔ)和實現(xiàn)的可行性的。
[0007] 現(xiàn)有技術(shù)內(nèi)存共享方法主要針對的是特定體系結(jié)構(gòu)的主機(jī)而設(shè)計的。需要為每個 節(jié)點設(shè)置信息收集處理模塊、內(nèi)存申請模塊、遠(yuǎn)端鏈接管理模塊和通信模塊等,當(dāng)某一節(jié)點 內(nèi)存不足時,收集節(jié)點信息,并向其他空閑節(jié)點發(fā)送內(nèi)存申請,以此來平衡空閑內(nèi)存在各個 內(nèi)存節(jié)點的分布,提升主機(jī)性能。該方法針對的是主機(jī)內(nèi)存節(jié)點之間內(nèi)存共享的問題,而不 是針對云計算集群主機(jī)間內(nèi)存共享的。
[0008] 節(jié)點分為多種角色,節(jié)點間不是完全對等關(guān)系。在節(jié)點有實現(xiàn)內(nèi)存共享和管理內(nèi) 存塊的內(nèi)存池驅(qū)動模塊;所有計算結(jié)點的內(nèi)存池驅(qū)動模塊為遠(yuǎn)程內(nèi)存共享系統(tǒng)提供的物理 內(nèi)存和內(nèi)存服務(wù)器所提供的內(nèi)存組成一個內(nèi)存池,內(nèi)存池中的內(nèi)存供各計算節(jié)點共享。由 于存在一個管理節(jié)點和多個內(nèi)存服務(wù)器,內(nèi)存的共享過程需要管理節(jié)點進(jìn)行處理;當(dāng)管理 節(jié)點失效時,整個系統(tǒng)就無法運行。如果將主機(jī)節(jié)點之間的關(guān)系看作是完全對等關(guān)系,則當(dāng) 前存在的方法在節(jié)點之間內(nèi)存共享上是無法實現(xiàn)的。內(nèi)存共享不透明。內(nèi)存服務(wù)器的虛擬 內(nèi)存管理器為應(yīng)用程序分配虛擬內(nèi)存后,根據(jù)虛擬內(nèi)存的地址構(gòu)造重定向文件讀寫代碼; 執(zhí)行讀寫代碼前,在代碼緩沖區(qū)指令前增加間接跳轉(zhuǎn)指令,使緩沖區(qū)指令被執(zhí)行時,可以從 虛擬內(nèi)存獲取數(shù)據(jù)。該方法需要修改應(yīng)用程序中的指令調(diào)用方式才可以使用共享的內(nèi)存, 某種程度上開發(fā)人員需要重新考慮軟件設(shè)計與實現(xiàn)的問題。根據(jù)物理機(jī)上的各個虛擬機(jī)所 屬的用戶,將所述物理機(jī)上的虛擬機(jī)劃分為至少兩個用戶組,每個用戶組內(nèi)的虛擬機(jī)共享 一個進(jìn)程,不同的用戶組對應(yīng)不同的進(jìn)程;通過進(jìn)程掃描對應(yīng)的用戶組內(nèi)的虛擬機(jī)所占用 的存儲重復(fù)數(shù)據(jù)的內(nèi)存頁面;對存儲重復(fù)數(shù)據(jù)的內(nèi)存頁面進(jìn)行刪除冗余數(shù)據(jù)處理。該方法 在一定程度上降低了物理內(nèi)存的重復(fù)率,但沒有提供單臺物理主機(jī)內(nèi)存不足時解決方法。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明針對現(xiàn)有技術(shù)存在的上述問題,提出一種云集群主機(jī)節(jié)點間物理內(nèi)存共享 方法,該方法采用一種臨時借用策略。設(shè)置兩種角色的物理主機(jī):服務(wù)主機(jī)和客戶主機(jī)。客 戶主機(jī)可申請向服務(wù)主機(jī)臨時借用內(nèi)存資源,服務(wù)主機(jī)可將自身空閑內(nèi)存資源臨時借用給 客戶主機(jī),兩者均處于集群環(huán)境中,通過高速網(wǎng)絡(luò)相互連接。某一臺物理主機(jī)既可以是服務(wù) 主機(jī)也可以是客戶主機(jī),兩種角色是通過在操作系統(tǒng)中安裝服務(wù)模塊或客戶模塊實現(xiàn)的。 模塊在內(nèi)核模式下實現(xiàn),在客戶主機(jī)內(nèi)存不足時,客戶模塊自動向服務(wù)主機(jī)借用內(nèi)存資源, 而不需要應(yīng)用程序的參與,保證了對現(xiàn)有應(yīng)用程序的兼容性。客戶模塊將借用的內(nèi)存映射 到虛擬內(nèi)存對象當(dāng)中,操作虛擬內(nèi)存對象的方式與操作物理內(nèi)存對象的方式相同,模塊屏 蔽了實現(xiàn)細(xì)節(jié)的不同,實現(xiàn)了向上的透明性。
[0010] 本發(fā)明提供一種主機(jī)間物理內(nèi)存借用的方法,內(nèi)存借出方主機(jī)和內(nèi)存借入方主機(jī) 的操作系統(tǒng)分別安裝相應(yīng)的內(nèi)核模塊,內(nèi)核模塊工作于操作系統(tǒng)內(nèi)核中,用戶空間程序無 法對其直接操作,需使用用戶空間管理程序,通過模塊提供的用戶空間接口實現(xiàn)屬性配置、 信息獲取等。內(nèi)存借出方主機(jī)簡稱服務(wù)主機(jī),內(nèi)存借入方主機(jī)簡稱客戶主機(jī)。具體步驟包 括:服務(wù)主機(jī)內(nèi)核模塊響應(yīng)客戶主機(jī)的借用請求,并注冊一個內(nèi)存池對象,維護(hù)一個內(nèi)存池 信息表MemPoolTable ;客戶主機(jī)內(nèi)核模塊創(chuàng)建一個虛擬內(nèi)存對象,維護(hù)一個記錄了遠(yuǎn)端內(nèi) 存在虛擬內(nèi)存對象中映射情況列表MemMapTable,以及一個服務(wù)主機(jī)列表ServerList ;當(dāng) 客戶主機(jī)本地內(nèi)存不足,需要擴(kuò)展系統(tǒng)內(nèi)存時,系統(tǒng)自動開啟遠(yuǎn)程內(nèi)存擴(kuò)展機(jī)制;客戶主機(jī) 從ServerList中選擇一個服務(wù)主機(jī)發(fā)送服務(wù)請求,如滿足借用條件,服務(wù)主機(jī)從本地內(nèi)存 池信息表MemPoolTable中選擇一塊大小為MemSize的物理內(nèi)存,將這塊物理內(nèi)存的基本信 息返回至客戶主機(jī);客戶主機(jī)將借來的內(nèi)存資源映射到虛擬內(nèi)存對象中,將基本信息記錄 在映射情況列表MemMapTable中,與服務(wù)主機(jī)建立必要的數(shù)據(jù)通信連接與內(nèi)存映射,并將 本機(jī)虛擬內(nèi)存對象容量CVMT和虛擬內(nèi)存對象空閑量CVMF的值分別增加 MemSize,完成遠(yuǎn)端 內(nèi)存的借用和映射。
[0011] 本發(fā)明的其中一個實施例進(jìn)一步包括,客戶主機(jī)內(nèi)核模塊檢測系統(tǒng)當(dāng)前狀態(tài),當(dāng) 滿足條f
λ為當(dāng)前客戶主機(jī)內(nèi)存使用率過高,需要擴(kuò)展系統(tǒng)內(nèi)存,其 中,CPMT為客戶主機(jī)本地物理內(nèi)存容量,CPMF為本地物理內(nèi)存空閑量,CVMT為虛擬內(nèi)存對 象容量,CVMF為虛擬內(nèi)存對象空閑量,PL為系統(tǒng)空閑內(nèi)存百分比下限值。
[0012] 本發(fā)明的其中一個實施例進(jìn)一步包括,客戶主機(jī)進(jìn)程模塊申請內(nèi)存分配時,如 果本地物理內(nèi)存對象有空閑內(nèi)存時,直接從本地物理內(nèi)存分配內(nèi)存資源給進(jìn)程,如果本 地物理內(nèi)存不足,客戶主機(jī)操作系統(tǒng)從虛擬內(nèi)存對象中分配內(nèi)存資源給進(jìn)程,并映射到 進(jìn)程的地址空間中。當(dāng)客戶主機(jī)內(nèi)核模塊連續(xù)三次檢測到操作系統(tǒng)當(dāng)前狀態(tài)滿足條件:
PHV時,開啟遠(yuǎn)程內(nèi)存歸還機(jī)制:選擇虛擬內(nèi)存對象中最后 一塊遠(yuǎn)端內(nèi)存作為需要歸還的內(nèi)存塊,刪除該內(nèi)存塊在虛擬內(nèi)存對象當(dāng)中的映射,向該內(nèi) 存塊所對應(yīng)的服務(wù)主機(jī)發(fā)送歸還通知,從MemMapTable刪除對應(yīng)的表項,并將本機(jī)虛擬內(nèi) 存對象容量CVMT和虛擬內(nèi)存對象空閑量CVMF的值分別減去該塊的大小。其中,PH為客戶 主機(jī)系統(tǒng)空閑內(nèi)存百分比上限值,PHV為虛擬內(nèi)存對象空閑內(nèi)存百分比。
[0013] 本發(fā)明進(jìn)一步提供一種主機(jī)間物理內(nèi)存借用的裝置,包括:客戶主機(jī)和服務(wù)主機(jī), 客戶主機(jī)內(nèi)核模塊用于客戶主機(jī)操作系統(tǒng)在本地內(nèi)存不足時向服務(wù)主機(jī)申請借用內(nèi)存、建 立網(wǎng)絡(luò)通信連接、維護(hù)遠(yuǎn)端內(nèi)存在本地虛擬內(nèi)存對象上的映射,當(dāng)前空閑內(nèi)存率過高時,將 映射到虛擬內(nèi)存對象中的遠(yuǎn)端內(nèi)存歸還給相應(yīng)的服務(wù)主機(jī),向用戶層提供信息查詢、配置 修改的接口