專利名稱:一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法,具體是指計算 機(jī)硬件虛擬化技術(shù)和單一系統(tǒng)映像技術(shù),通過虛擬化技術(shù)將計算任務(wù)合理分配 到不同的處理器,從而提高機(jī)群系統(tǒng)的資源利用率。屬于計算機(jī)領(lǐng)域。
(二)
背景技術(shù):
1.當(dāng)前機(jī)群系統(tǒng)的負(fù)載平衡技術(shù)
機(jī)群系統(tǒng)就是將一組相互獨立的計算機(jī)通過高速通信網(wǎng)絡(luò)互連而組成的一 個單一的計算機(jī)系統(tǒng)。它的優(yōu)點在于其系統(tǒng)資源可用性、規(guī)模可擴(kuò)展性以及可 并行性,因此在并行處理領(lǐng)域中得到了廣泛應(yīng)用。
機(jī)群系統(tǒng)作為一種可擴(kuò)展性能良好的服務(wù)器結(jié)構(gòu),具有良好的性價比,然 而由于機(jī)群低耦合的特點,使得節(jié)點間的負(fù)載經(jīng)常不平衡,致使個別節(jié)點負(fù)載 很重,而其他節(jié)點卻空閑著,從而造成資源的浪費。如何提高資源利用率一直 是一個熱門話題,而能夠自動實現(xiàn)負(fù)載平衡則是資源利用率問題的一個解決方 案。
通常, 一個機(jī)群系統(tǒng)要同時處理多個用戶作業(yè),而每個結(jié)點需要同時處理 多個進(jìn)程,就要通過對作業(yè)和任務(wù)的調(diào)度、分配算法來實現(xiàn)對作業(yè)或任務(wù)的優(yōu) 化分配,有效地減小平均響應(yīng)時間,減少執(zhí)行時的額外開銷等。于是,負(fù)載平 衡就成為改善機(jī)群系統(tǒng)性能的重要手段。目前,機(jī)群系統(tǒng)中采用的負(fù)載平衡策 略多是在作業(yè)、進(jìn)程和線程中的任一級實現(xiàn),其原因是為了減少在實現(xiàn)負(fù)載平
衡的過程中引入大量的通信開銷。例如,IBM的LoadLeveler,它只提供作業(yè)級 的負(fù)載平衡,但一個并行作業(yè)提交以后就完全由PVM或MPI接口來負(fù)責(zé)執(zhí)行任 務(wù),系統(tǒng)本身并不管理這些任務(wù)的分配。而在實際應(yīng)用中,當(dāng)一個大型的并行 作業(yè)提交以后,會產(chǎn)生多個子任務(wù),它們的分配和執(zhí)行完全可能破壞己有的負(fù) 載平衡。由此可見,只有作業(yè)級的管理并不滿足整個機(jī)群系統(tǒng)的負(fù)載平衡要求。另外,也有采用作業(yè)級和進(jìn)程級相結(jié)合的多級負(fù)載平衡方法,這種方法在作業(yè) 分配到后臺的執(zhí)行節(jié)點之后,在任務(wù)調(diào)度時再引入進(jìn)程級的負(fù)載平衡策略,實 現(xiàn)起來比較復(fù)雜,當(dāng)后臺執(zhí)行節(jié)點增多的時候,節(jié)點之間進(jìn)程的通信和頻繁遷 移會消耗大量的網(wǎng)絡(luò)資源,成為制約機(jī)群系統(tǒng)的瓶頸。在實現(xiàn)單一系統(tǒng)映像的 機(jī)群系統(tǒng)中,這種作業(yè)級或進(jìn)程級的負(fù)載平衡方法對操作系統(tǒng)和上層的應(yīng)用程 序并不是透明的,有時甚至需要用戶顯式地干預(yù),這不利于機(jī)群系統(tǒng)的使用和 管理。
目前,機(jī)群系統(tǒng)負(fù)載平衡技術(shù)的實現(xiàn)可以在系統(tǒng)軟件層、中間件層和應(yīng)用
層。目前,在系統(tǒng)軟件層的實現(xiàn)方案較少,有M0SIX等,在該層實現(xiàn)負(fù)載平衡, 對用戶透明性較好,但實現(xiàn)難度較大,有的實現(xiàn)方案還會帶來其他方面的問題, 如M0SIX通過動態(tài)遷移進(jìn)程的機(jī)制在一定程度上提高了系統(tǒng)的資源利用率,但 是進(jìn)程遷移后的控制結(jié)構(gòu)仍存留在宿主結(jié)點,I/O操作仍在宿主結(jié)點完成,帶 來了大量的網(wǎng)絡(luò)通信,降低了系統(tǒng)性能。在中間件層實現(xiàn)負(fù)載平衡策略的方案 已有很多,實現(xiàn)方法各不相同,其都是從不同的方面支持分布式應(yīng)用負(fù)載平衡 的需求,所采用的方法依賴于具體的應(yīng)用環(huán)境,通用性較差。例如,需要平衡 工作負(fù)載的無狀態(tài)的分布式應(yīng)用往往采用和名字服務(wù)集成在一起的負(fù)載平衡服 務(wù)機(jī)制,這種負(fù)載平衡機(jī)制只支持靜態(tài)非自適應(yīng)的負(fù)載平衡,不能滿足復(fù)雜負(fù) 載平衡應(yīng)用的需要。另外,隨著分布式應(yīng)用的拓?fù)浣Y(jié)構(gòu)日益復(fù)雜,應(yīng)用規(guī)模日 益增大,現(xiàn)有中間件層的負(fù)載平衡功能已不能完全滿足復(fù)雜分布式應(yīng)用的可擴(kuò) 展需求,在可擴(kuò)展性方面,中間件層的負(fù)載平衡機(jī)制不具有優(yōu)勢。在應(yīng)用層, 最典型的有通過Linux虛擬服務(wù)器(Linux Virtual Servers, LVS)作為機(jī)群 系統(tǒng)負(fù)載平衡的解決方案,在該層實現(xiàn)負(fù)載平衡與具體應(yīng)用結(jié)合過于緊密,因 此,類似的解決方案不具有通用性。 2.分布式虛擬機(jī)監(jiān)控器
虛擬化在計算機(jī)方面通常是指計算和處理在虛擬的基礎(chǔ)上而不是真實的基 礎(chǔ)上運行。計算機(jī)虛擬化技術(shù)是指對計算機(jī)系統(tǒng)的物理資源進(jìn)行抽象的技術(shù)。 計算機(jī)虛擬化技術(shù)可在計算機(jī)硬件和操作系統(tǒng)之間構(gòu)建一個虛擬平臺,實現(xiàn)在 同一個硬件平臺上構(gòu)建相互隔離的多個運行域,每一個運行域中都可以分別運
9行自己的操作系統(tǒng)和應(yīng)用軟件。.
分布式虛擬機(jī)監(jiān)控器(以下簡稱DV匿)是針對機(jī)群系統(tǒng)所提出的虛擬化解 決方案,主要目的是解決機(jī)群系統(tǒng)的整體效能及資源利用率問題。其主要技術(shù)
手段是基于硬件虛擬化技術(shù),在機(jī)群硬件之上構(gòu)建一層系統(tǒng)軟件DVMM,將分散 的物理計算資源進(jìn)行整合抽象。整個DV麗由分布于各節(jié)點之上的V應(yīng)組成, 各VMM完全對稱;在DVMM之上運行操作系統(tǒng)(以下簡稱OS),通過DV畫感知 機(jī)群的物理資源并分類整合生成全局物理資源信息,虛擬化全局物理資源,構(gòu) 建全局虛擬資源信息并呈現(xiàn)給上層OS; OS基于所感知的虛擬資源集,調(diào)度、執(zhí) 行進(jìn)程,管理、分配資源,對底層的DV醒透明;DVMM截獲并代理0S執(zhí)行訪 問資源的操作,實現(xiàn)虛擬資源到物理資源的映射,操縱物理資源。這樣,保證 了 0S既能夠感知到機(jī)群所擁有的資源,又能夠管理和使用所感知的資源,從 而隱藏了硬件的分布式特性,實現(xiàn)了機(jī)群系統(tǒng)的單一系統(tǒng)映像。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法。它利用 虛擬化技術(shù),通過VMM中的虛擬處理器在物理服務(wù)器上的遷移,從而實現(xiàn)機(jī)群 系統(tǒng)節(jié)點之間負(fù)載的平衡,在操作系統(tǒng)及其之上的應(yīng)用程序毫無覺察的情況下, 使得計算資源得到合理的分配和利用,提高了資源的利用率。
本發(fā)明的一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法,其總體設(shè)計方案為 包括以下幾個關(guān)鍵點
1. 在平衡負(fù)載之前驅(qū)動虛擬處理器遷移;
2. 平衡遷移驅(qū)動;
3. 向目標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商;
4. 虛擬處理器狀態(tài)的保存和恢復(fù)。
5. 通信
本發(fā)明所述的方法的主要功能是在V醒中實現(xiàn)的,見附圖1。其中主要包
括
負(fù)載平衡模塊該模塊負(fù)責(zé)計算節(jié)點負(fù)載,與其他節(jié)點交換負(fù)載信息,選擇被遷移的虛擬處理器和目標(biāo)節(jié)點等工作。
處理器遷移模塊該模塊負(fù)責(zé)讀取被遷移虛擬處理器的執(zhí)行環(huán)境,并將其 進(jìn)行封裝后傳送到目標(biāo)節(jié)點,然后再恢復(fù)其運行狀態(tài)。
通信模塊在整個系統(tǒng)中,通信模塊起著非常重要的作用。分布在各個節(jié) 點上的VMM系統(tǒng)是通過通信機(jī)制將其組合起來,從而對上呈現(xiàn)單一系統(tǒng)映像。
虛擬處理器執(zhí)行環(huán)境的遷移和通信模塊緊密相連,其狀態(tài)能否被準(zhǔn)確無誤并且 高效的傳送到目標(biāo)節(jié)點由通信模塊來保證。
本發(fā)明所述的方法的具體方案為 步驟一、驅(qū)動虛擬處理器遷移
該機(jī)制中有三種算法可以決定被遷移的虛擬處理器以及目標(biāo)節(jié)點。它們分 別是負(fù)載均衡自適應(yīng)算法,缺頁引導(dǎo)算法和1/0操作引導(dǎo)算法。
1 )、負(fù)載均衡自適應(yīng)算法的主要思想是通過計算各節(jié)點內(nèi)的虛擬處理器負(fù) 載信息,統(tǒng)計所有節(jié)點的負(fù)載情況,然后決定哪些虛擬處理器將被遷移以及遷
移的目標(biāo)節(jié)點。該算法主要有三個部分組成負(fù)載計算算法,用來計算每個節(jié) 點上各個虛擬處理器當(dāng)前的負(fù)載情況,其負(fù)載包括處理器在一段時間內(nèi)的忙閑 狀況,執(zhí)行操作的類型等;負(fù)載信息交換算法,用來與其他節(jié)點交換負(fù)載信息, 生成并維護(hù)各節(jié)點的負(fù)載向量表;遷移選擇算法根據(jù)負(fù)載向量表決定需要將
哪些虛擬處理器向哪些節(jié)點遷移。
該負(fù)載均衡自適應(yīng)算法的具體歩驟如下
步驟l:利用DVMM中虛擬處理器的調(diào)度器,計算每個節(jié)點上各個虛擬處理
器當(dāng)前執(zhí)行的任務(wù)負(fù)載,包括執(zhí)行的任務(wù)類型,執(zhí)行用戶程序的時間,處理 器空閑時間,處理器處理中斷的時間等。最后生成本節(jié)點的負(fù)載向量,如(節(jié) 點號,全局VCPU號,執(zhí)行用戶程序時間,空閑時間,處理中斷時間);
步驟2:向其他節(jié)點廣播本節(jié)點的負(fù)載向量,同時接收其他節(jié)點發(fā)送的負(fù) 載向量; '
步驟3:統(tǒng)計各個節(jié)點的負(fù)載向量,生成全局負(fù)載向量表; 步驟4:根據(jù)全局負(fù)載向量表,選中當(dāng)前負(fù)載最重的處理器作為待遷移的 處理器,選中當(dāng)前負(fù)載最輕的節(jié)點作為目標(biāo)遷移節(jié)點;步驟5:
if (待遷移處理器不屬于本節(jié)點且本節(jié)點是遷移目標(biāo)節(jié)點) 等待其他節(jié)點的遷移請求;
else if (若待遷移處理器在本節(jié)點且本節(jié)點不是目標(biāo)節(jié)點)
調(diào)用平衡遷移驅(qū)動算法確定最終的遷移處理器和目標(biāo)節(jié)
點;
Sls6
gOtO步驟1; 2)、缺頁引導(dǎo)算法
在硬件虛擬化的環(huán)境下,為了對上層操作系統(tǒng)實現(xiàn)單一系統(tǒng)映像,需要實
現(xiàn)分布式共享存儲(Distributed. Shared Memory, DSM)子系統(tǒng)。DSM對下屏 蔽了實際的內(nèi)存分布,對上提供統(tǒng)的存儲空間,虛擬處理器通過訪問DSM達(dá) 到訪問真實內(nèi)存的目的。這一算法通過統(tǒng)計每個節(jié)點內(nèi)各虛擬處理器在調(diào)用 DSM時產(chǎn)生缺頁(真實內(nèi)存頁面不在本地)的次數(shù),從而決定被遷移的處理器。 該算法也包含三個部分缺頁計算算法,計算節(jié)點內(nèi)各虛擬處理器在一段時間 內(nèi)產(chǎn)生缺頁的次數(shù);缺頁信息交換算法,該算法和其他節(jié)點交換缺頁次數(shù)信息, 同時生成各節(jié)點的缺頁向量表;遷移選擇算法,根據(jù)缺頁向量表選擇被遷移的 處理器以及目標(biāo)節(jié)點。
該缺頁引導(dǎo)算法的具體步驟如下
歩驟l:當(dāng)處理器執(zhí)行環(huán)境陷入到DV羅時,各節(jié)點利用DSM模塊計算單位 時間內(nèi)本節(jié)點處理器產(chǎn)生缺頁的次數(shù)和原因,包括指令缺頁次數(shù)和數(shù)據(jù)缺頁 次數(shù),生成缺頁向量,如(節(jié)點號,全局VCPU號,指令缺頁次數(shù),數(shù)據(jù)缺頁 次數(shù));
步驟2:向其他節(jié)點廣播本節(jié)點的缺頁向量,同時接收其他節(jié)點發(fā)送的缺 頁向量;
步驟3:統(tǒng)計各個節(jié)點的缺頁向量,生成全局缺頁向量表;
步驟4:根掮全局缺頁向量表,選中缺頁次數(shù)最多的處理器作為待遷移的處理器,選中缺頁次數(shù)最少的處理器所在的節(jié)點作為目標(biāo)遷移節(jié)點;步驟5: if (待遷移處理器不屬于本節(jié)點且本節(jié)點是遷移目標(biāo)節(jié)點)
等待其他節(jié)點的遷移請求; else if (若待遷移處理器在本節(jié)點且本節(jié)點不是目標(biāo)節(jié)點)
調(diào)用平衡遷移驅(qū)動算法確定最終的遷移處理器和目標(biāo)節(jié)
點;
6ls6
gOtO步驟1; 3)、 1/0操作引導(dǎo)算法
在部署了 DVMM的機(jī)群環(huán)境中,操作系統(tǒng)具有統(tǒng)一的I/O空間,而真實的 I/O設(shè)備可能分布在不同的節(jié)點上。該算法記錄了所有虛擬處理器在執(zhí)行過程 中訪問的真實設(shè)備所在的節(jié)點以及訪問次數(shù),并且該記錄隨著1/0訪問的變化 而更新。該算法包含三個部分I/O操作計算算法,計算節(jié)點內(nèi)各虛擬處理器 一段時間內(nèi)訪問各個I/0設(shè)備的次數(shù),生成本節(jié)點的1/0操作向量表,例如, (訪問的設(shè)備號,設(shè)備所在節(jié)點號,訪問次數(shù));1/0信息交換算法,和其他節(jié) 點交換I/0操作向量表,同時生成全局I/0操作向量表,例如,(設(shè)備號,設(shè)備 所在節(jié)點號,訪問該設(shè)備的VCPU號,該VCPU所在節(jié)點號,訪問次數(shù)),該表每 個節(jié)點保留一份;遷移選擇算法,根據(jù)全局1/0操作向量表選擇被遷移的處理 器和目標(biāo)節(jié)點。
該1/0操作引導(dǎo)算法的具體步驟如下
歩驟1:當(dāng)處理器執(zhí)行環(huán)境陷入到DV醒時,各節(jié)點利用DSM模塊計算單位
時間內(nèi)本節(jié)點處理器產(chǎn)生I/0操作的情況,包括訪問的設(shè)備號,設(shè)備所在節(jié) 點號和訪問次數(shù),生成I/0操作向量,如(節(jié)點號,全局VCPU號,訪問的設(shè) 備號,設(shè)備所在節(jié)點號,訪問次數(shù));
步驟2:向其他節(jié)點廣播本節(jié)點的I/O操作向量,同時接收其他節(jié)點發(fā)送 的1/0操作向量;
步驟3:統(tǒng)計各個節(jié)點的I/0操作向量,生成全局I/0操作向量表;
步驟4:根據(jù)全局I/O操作向量表,選中I/O操作次數(shù)最多的處理器作為
13待遷移的處理器; 步驟5:
if (待遷移處理器不屬于本節(jié)點)
if (待遷移處理器訪問的I/0設(shè)備在本節(jié)點) 等待其他節(jié)點的遷移請求;
else if
goto步驟1;
else if (待遷移處理器訪問的1/0設(shè)備不在本節(jié)點) 選擇該設(shè)備所在節(jié)點作為遷移目標(biāo)節(jié)點; 調(diào)用平衡遷移驅(qū)動算法確定最終的遷移處理器和目標(biāo)節(jié)
點;
61S6
goto步驟1。 整個驅(qū)動處理器遷移的過程如下'
步驟l:操作系統(tǒng)啟動后,在源節(jié)點中,DVffll中的負(fù)載平衡模塊利用遷移 驅(qū)動算法自動檢測當(dāng)前的系統(tǒng)負(fù)載狀況,并與其他節(jié)點交換信息;
步驟2:當(dāng)發(fā)現(xiàn)需要進(jìn)行負(fù)載平衡干預(yù)時,選中待遷移的處理器并確定遷 移的目標(biāo)節(jié)點,此時還需判定待遷移處理器和目標(biāo)節(jié)點是否有沖突;
步驟3:若有沖突,則需要運用平衡遷移驅(qū)動算法來解決沖突(見下述步 驟2,算法見圖3),最終確定待遷移的處理器,如圖2中最后選中VCPU3作 為待遷移的處理器。
步驟二、平衡遷移驅(qū)動
這里設(shè)定三種驅(qū)動算法的優(yōu)先級,§卩負(fù)載均衡算法具有最高的優(yōu)先級, 缺頁引導(dǎo)算法次之,1/0引導(dǎo)算法優(yōu)先級最低,在產(chǎn)生沖突時,根據(jù)各算法的 優(yōu)先級決定遷移的目標(biāo)節(jié)點。具體的平衡方案如下
步驟1:選擇由較高優(yōu)先級算法判定的運行最高優(yōu)先級任務(wù)的處理器作為待遷移處理器,若該處理器不具有最高優(yōu)先級任務(wù),則執(zhí)行步驟2;
步驟2:忽略處理器執(zhí)行任務(wù)的優(yōu)先級,任然選擇較高優(yōu)先級判定的處理 器作為待遷移處理器,若此時存在多個待遷移處理器的競爭時,執(zhí)行步驟3;
步驟3:根據(jù)當(dāng)時各處理器上任務(wù)的優(yōu)先級,選擇級別較高的任務(wù)所在的 處理器作為待遷移處理器。
本發(fā)明優(yōu)先考慮機(jī)群系統(tǒng)的負(fù)載平衡,當(dāng)計算任務(wù)優(yōu)先級和算法優(yōu)先級沖 突時,優(yōu)先考慮算法優(yōu)先級,當(dāng)算法之間產(chǎn)生遷移沖突時,優(yōu)先滿足負(fù)載均衡 算法的需求。
步驟三、向目標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商
當(dāng)算法選擇好被遷移的虛擬處理器和目標(biāo)節(jié)點后,便開始遷移,此時遷移 工作主要內(nèi)容是向貝標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商。
步驟1:負(fù)載平衡模塊通告處理器遷移模塊,當(dāng)待遷移處理器被調(diào)度器調(diào) 度后,遷移模塊檢測待遷移處理器的遷移標(biāo)志位和其運行狀態(tài)(見圖3),若不 符合遷移要求則重新調(diào)用遷移驅(qū)動算法;
步驟2:檢測無誤后源節(jié)點VMM遷移模塊開始向目標(biāo)節(jié)點V應(yīng)發(fā)送遷移請 求,等待回應(yīng);
步驟3:此時目標(biāo)節(jié)點的守護(hù)線程負(fù)責(zé)和源節(jié)點通信,守護(hù)線程創(chuàng)建新線 程接管遷移工作;
步驟4:新的線程詢問本地每載平衡模塊是否同意此次遷移請求,若同意 則回應(yīng)源節(jié)點;
步驟5:在和目標(biāo)節(jié)點協(xié)商成功后,源節(jié)點的VMM斷開VCPU3與本地物理 處理器CPU1的映射(圖2中用虛線表示),處理器遷移模塊開始準(zhǔn)備待遷移處 理器的執(zhí)行環(huán)境數(shù)據(jù),如圖2中源節(jié)點保存VCPU3的運行環(huán)境,此時,目標(biāo) 節(jié)點的新線程準(zhǔn)備從源節(jié)點接收處理器的狀態(tài);
步驟6:若協(xié)商未成功,新線程告知源節(jié)點,守護(hù)線程重新接管,等待下 次遷移請求(見圖3),而源節(jié)點則重新進(jìn)入負(fù)載平衡模塊計算當(dāng)前系統(tǒng)負(fù)載。步驟四、虛擬處理器狀態(tài)的保存和恢復(fù)
步驟l:當(dāng)虛擬處理器陷入到DV麗環(huán)境中執(zhí)行時,判斷被遷移的虛擬處理 器的運行狀態(tài)。若處于Idle或僵死狀態(tài),則重新進(jìn)入負(fù)載平衡模塊;若處于 I/O操作狀態(tài),則等待這次操作完成;若處于正常的運行狀態(tài),則保存該虛擬 處理器的執(zhí)行環(huán)境,包括所有通用寄存器的值、棧指針、打開的文件指針等;
步驟2:在DV醒執(zhí)行環(huán)境中,等待VCPU調(diào)度器將其從物理處理器調(diào)出時,
停止該虛擬處理器的執(zhí)行,源節(jié)點遷移模塊將之前保存的執(zhí)行環(huán)境封裝后傳遞 給通信模塊;
步驟3:經(jīng)過通信模塊封裝數(shù)據(jù)和通過動態(tài)配置文件査找目標(biāo)節(jié)點的IP地 址后,開始向目標(biāo)節(jié)點傳送VCPU的運行環(huán)境(如圖2中所示的VCPU3,其中虛 線箭頭是遷移的邏輯路徑,實線箭頭表示真實遷移路徑)。
歩驟4:目標(biāo)節(jié)點的通信模塊接收到數(shù)據(jù)(如圖2中,目標(biāo)節(jié)點VMM接收 到VCPU3的運行環(huán)境數(shù)據(jù))后,負(fù)責(zé)接管遷移工作的線程初始化新的VCPU結(jié)構(gòu) vcpu—struct,并用接收到的數(shù)據(jù)創(chuàng)建其執(zhí)行環(huán)境,并建立VCPU和本地CPU的 映射(如圖2中的VCPU3),最后將其狀態(tài)標(biāo)記為可運行,放入等待隊列,等待 VCPU調(diào)度器將其調(diào)度到物理處理器上執(zhí)行。
至此, 一次負(fù)載平衡的遷移操作完成,通過vcra的遷移,使得目標(biāo)節(jié)點較
空閑的計算資源再次得到利用,達(dá)到了負(fù)載平衡的目的。從遷移的全過程來看,
虛擬處理器的管理和遷移的控制都由VMM負(fù)責(zé),整個過程對上層的操作系統(tǒng)來 說是完全透明的,0S無法感知下層物理計算資源的重新調(diào)配。
步驟五、通信
這里為每個節(jié)點都被分配一個唯一的節(jié)點號,節(jié)點號是一個整型值,從1 開始連續(xù)分配的。o表示的是當(dāng)前節(jié)點。通過節(jié)點號抽象,可以很方便的定位
某個節(jié)點。但是通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù),都是以IP地址來尋找節(jié)點的。因此, 這里采用了動態(tài)配置文件的方式,.建立了整個集群系統(tǒng)節(jié)點號和IP地址之間的 對應(yīng)關(guān)系。當(dāng)某節(jié)點的IP地址發(fā)生變化時,配置文件將被即時更新,從而得到
新的對應(yīng)關(guān)系。當(dāng)機(jī)群系統(tǒng)的VMi之間需要通信時,會首先查詢該配置文件,
16得到目標(biāo)節(jié)點的IP地址,之后再向目標(biāo)節(jié)點發(fā)出通信請求。
處理器的執(zhí)行環(huán)境從源節(jié)點遷移到目標(biāo)節(jié)點之后,通信雙方即可斷開鏈接, 釋放通信資源,這時只需各自維護(hù)對方的節(jié)點號(全局靜態(tài)的)。當(dāng)目標(biāo)節(jié)點不 同意此次遷移請求時,可以通過節(jié)點號和配置文件再次請求和源節(jié)點通信,而 當(dāng)遷移成功后,雙方針對上次遷移就沒有了任何通信的需求,不占用任何的通 信資源。
本發(fā)明一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法,其優(yōu)點及功效在于
(1) 本發(fā)明基于硬件虛擬化技術(shù)和單一系統(tǒng)映像技術(shù),提出了一種適用于 機(jī)群系統(tǒng)的負(fù)載平衡方法,在對上層客戶操作系統(tǒng)和用戶程序透明的情況下, 實現(xiàn)了機(jī)群系統(tǒng)的負(fù)載平衡策略,提高了系統(tǒng)資源的利用率。這種方法對客戶
操作系統(tǒng)透明,基于x86體系結(jié)構(gòu),在軟件上需要部署虛擬機(jī)監(jiān)控器V麗,在
硬件上,除了需要支持硬件虛擬化的處理器外(支持硬件虛擬化的處理器是未 來處理器的主流),不需要任何特殊的硬件支持,具有較好的通用性。
(2) 本方法在實施過程中,都是由VMM中的內(nèi)核級線程完成的,并且在通 過高速互連網(wǎng)絡(luò)遷移處理器的過程中,有較少的通信次數(shù)和較低的通信時延, 比傳統(tǒng)的中間件層和應(yīng)用層負(fù)載平衡解決方案具有更高的效率;當(dāng)處理器遷移 成功后,源節(jié)點不需保留任何和遷移相關(guān)的信息,比傳統(tǒng)的系統(tǒng)軟件層負(fù)載平 衡解決方案具有更少的網(wǎng)絡(luò)通信量。當(dāng)機(jī)群的節(jié)點規(guī)模隨著需求的增加而擴(kuò)充 時,只需要在相應(yīng)的節(jié)點中部署包含本發(fā)明的V麗就可實現(xiàn)整個系統(tǒng)的負(fù)載平 衡策略,具有較好的可擴(kuò)展性。
(3) 因此,本發(fā)明所提出的負(fù)載平衡解決方案,實現(xiàn)了對上層操作系統(tǒng)的 透明性,使得上層操作系統(tǒng)透明地利用下層更加合理的資源配置,同時整個負(fù) 載平衡過程具有較短的時延和較低的網(wǎng)絡(luò)通信量,與目前存在的解決方案相比, 具有一定的優(yōu)越性。
(4) 機(jī)群系統(tǒng)作為一種服務(wù)器結(jié)構(gòu),具有可擴(kuò)展性好,易部署,性價比較 高等特點,已經(jīng)成為目前主流的服務(wù)器結(jié)構(gòu),目前在全球前500的高性能服務(wù) 器排名當(dāng)中,釆用機(jī)群結(jié)構(gòu)的服務(wù)器占了 80%多。然而,由于機(jī)群低耦合的特 點,使得節(jié)點間的負(fù)載經(jīng)常不平衡,致使個別節(jié)點負(fù)載很重,而其他節(jié)點卻空閑著,從而造成資源的浪費。如何提高資源利用率一直是機(jī)群系統(tǒng)的熱門話題, 而能夠自動實現(xiàn)負(fù)載平衡則是資源利用率問題的一個解決方案。
綜上所述,在當(dāng)前,隨著硬件虛擬化技術(shù)的不斷發(fā)展,利用硬件虛擬化技 術(shù)部署機(jī)群系統(tǒng)己經(jīng)顯示出了很多優(yōu)勢。通過在物理節(jié)點上部署V麗,各V醒 之間相互協(xié)作,為上層的操作系統(tǒng)呈現(xiàn)并協(xié)助操作系統(tǒng)管理全局的計算資源, 實現(xiàn)了機(jī)群系統(tǒng)的單一系統(tǒng)映像。在這種背景下,本發(fā)明提出了在VMd內(nèi)部實 施負(fù)載平衡的方法,對上層操作系統(tǒng)透明,并且具有較好的通用性以及較高的 效率,較好地解決了機(jī)群系統(tǒng)資源利用率低的問題??梢灶A(yù)見,未來隨著機(jī)群 系統(tǒng)的更加普及和硬件虛擬化技術(shù)的不斷發(fā)展,本發(fā)明將成為很好的機(jī)群系統(tǒng) 資源利用率低的解決方案,因此,.具有良好的應(yīng)用前景。
圖1為系統(tǒng)模塊示意圖
圖2為虛擬處理器遷移示意圖 圖3為負(fù)載平衡算法流程圖
具體實施例方式
本發(fā)明的一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法,其總體設(shè)計方案為
1. 在平衡負(fù)載之前.驅(qū)動虛擬處理器遷移;
2. 平衡遷移驅(qū)動;
3. 向目標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商;
4. 虛擬處理器狀態(tài)的保存和恢復(fù)。
本方法的主要功能是在DVMM中實現(xiàn)的。如圖1所示,在機(jī)群系統(tǒng)的各節(jié)點 上部署包含本發(fā)明方法的DVMM。該方法可以在N(N^2)臺機(jī)群節(jié)點機(jī)上實施。
部署后的整個系統(tǒng)結(jié)構(gòu)如下在最底層的是機(jī)群系統(tǒng)的各個物理節(jié)點(為了示
意方便,圖l中只畫出兩個節(jié)點),每個節(jié)點都有獨立的CPU、存儲系統(tǒng)和I/0 設(shè)備,之間通過高速互連網(wǎng)絡(luò)連接;之上是本發(fā)明各模塊所在的DV畫,其中包 括負(fù)載平衡模塊,處理器遷移模塊,通信模塊。另外,DV薩中還有本發(fā)明所依
18賴的機(jī)群系統(tǒng)的DSM子系統(tǒng);DV麗之上是各個虛擬機(jī)的具體實現(xiàn),其中每個機(jī)
群節(jié)點上有VM控制臺,其本身也是虛擬機(jī),為整個機(jī)群系統(tǒng)提供管理界面和設(shè) 備模型等。機(jī)群系統(tǒng)所服務(wù)的是跨節(jié)點的VM虛擬機(jī),其中包括操作系統(tǒng)(OS) 和用戶應(yīng)用程序(App),機(jī)群系統(tǒng)為整個VM提供單一系統(tǒng)映像,本發(fā)明的實現(xiàn) 對上層的VM來說是完全透明的。
圖2中所示的是本發(fā)明所述方法中一次虛擬處理器遷移的全過程。位于圖 中左側(cè)的是遷移的源節(jié)點,右側(cè)的是目標(biāo)節(jié)點,每個節(jié)點都有自己獨立的CPU 和內(nèi)存。圖中DV麗給操作系統(tǒng)分配了3個處理器,VCPU2、 VCPU3和VCPU4。
本發(fā)明所述方法的具體方案為-
步驟一驅(qū)動虛擬處理器遷移
本發(fā)明提出了三種算法,可以決定被遷移的虛擬處理器以及目標(biāo)節(jié)點。它 們分別是負(fù)載均衡自適應(yīng)算法,缺頁引導(dǎo)算法和1/0操作引導(dǎo)算法。
1) 負(fù)載均衡自適應(yīng)算法
負(fù)載均衡自適應(yīng)算法的主要思想是通過計算各節(jié)點內(nèi)的虛擬處理器負(fù)載信 息,統(tǒng)計所有節(jié)點的負(fù)載情況,然后決定哪些虛擬處理器將被遷移以及遷移的 目標(biāo)節(jié)點。該算法主耍有三個部分組成負(fù)載計算算法,用來計算每個節(jié)點上 各個虛擬處理器當(dāng)前的負(fù)載情況,其負(fù)載包括處理器在一段時間內(nèi)的忙閑狀況, 執(zhí)行操作的類型等;負(fù)載信息交換算法,用來與其他節(jié)點交換負(fù)載信息,生成 并維護(hù)各節(jié)點的負(fù)載向量表;遷移選擇算法根據(jù)負(fù)載向量表決定需要將哪些 虛擬處理器向哪些節(jié)點遷移。
該負(fù)載均衡自適應(yīng)算法的具體步驟如下
步驟l:利用DV^1中虛擬處理器的調(diào)度器,計算每個節(jié)點上各個虛擬處理 器當(dāng)前執(zhí)行的任務(wù)負(fù)載,包括執(zhí)行的任務(wù)類型,執(zhí)行用戶程序的時間,處理 器空閑時間,處理器處理中斷的時間等。最后生成本節(jié)點的負(fù)載向量,如(節(jié) 點號,全局VCPU號,執(zhí)行用戶程序時間,空閑時間,處理中斷時間);
步驟2:向其他節(jié)點廣播本節(jié)點的負(fù)載向量,同時接收其他節(jié)點發(fā)送的負(fù) 載向量;
步驟3:統(tǒng)計各個節(jié)點的負(fù)載向量,生成全局負(fù)載向量表;步驟4:根據(jù)全局負(fù)載向量表,選中當(dāng)前負(fù)載最重的處理器作為待遷移的 處理器,選中當(dāng)前負(fù)載最輕的節(jié)點作為目標(biāo)遷移節(jié)點; 步驟5:
if (待遷移處理器不屬于本節(jié)點且本節(jié)點是遷移目標(biāo)節(jié)點)
等待其他節(jié)點的遷移請求; else if (若待遷移處理器在本節(jié)點且本節(jié)點不是目標(biāo)節(jié)點)
調(diào)用平衡遷移驅(qū)動算法確定最終的遷移處理器和目標(biāo)節(jié)
點;
61S6'
gOtO步驟1; 2) 缺頁引導(dǎo)算法
在硬件虛擬化的環(huán)境下,為/對上層操作系統(tǒng)實現(xiàn)單一系統(tǒng)映像,需要實
現(xiàn)分布式共享存儲(Distributed Shared Memory, DSM)子系統(tǒng)。DSM對下屏 蔽了實際的內(nèi)存分布,對上提供統(tǒng)的存儲空間,虛擬處理器通過訪問DSM達(dá) 到訪問真實內(nèi)存的目的。這一算法通過統(tǒng)計每個節(jié)點內(nèi)各虛擬處理器在調(diào)用 DSM時產(chǎn)生缺頁(真實內(nèi)存頁面不在本地)的次數(shù),從而決定被遷移的處理器。 該算法也包含三個部分缺頁計算算法,計算節(jié)點內(nèi)各虛擬處理器在一段時間 內(nèi)產(chǎn)生缺頁的次數(shù);缺頁信息交換算法,該算法和其他節(jié)點交換缺頁次數(shù)信息, 同時生成各節(jié)點的缺頁向量表;遷移選擇算法,根據(jù)缺頁向量表選擇被遷移的 處理器以及目標(biāo)節(jié)點。
該缺頁引導(dǎo)算法的具體步驟如下
步驟l:當(dāng)處理器執(zhí)行環(huán)境陷入到DV麗時,各節(jié)點利用DSM模塊計算單位 時間內(nèi)本節(jié)點處理器產(chǎn)生缺頁的次數(shù)和原因,包括指令缺頁次數(shù)和數(shù)據(jù)缺頁 次數(shù),生成缺頁向量,如(節(jié)點號,全局VCPU號,指令缺頁次數(shù),數(shù)據(jù)缺頁 次數(shù));
步驟2:向其他節(jié)點廣播本節(jié)點的缺頁向量,同時接收其他節(jié)點發(fā)送的缺 頁向量;
20步驟3:統(tǒng)計各個節(jié)點的缺頁向量,生成全局缺頁向量表; 步驟4:根據(jù)全局缺頁向量表,選中缺頁次數(shù)最多的處理器作為待遷移的 處理器,選中缺頁次數(shù)最少的處理器所在的節(jié)點作為目標(biāo)遷移節(jié)點; 步驟5:
if (待遷移處理器不屬于本節(jié)點且本節(jié)點是遷移目標(biāo)節(jié)點)
等待其他節(jié)點的遷移請求; else if (若待遷移處理器在本節(jié)點且本節(jié)點不是目標(biāo)節(jié)點)
調(diào)用平衡遷移驅(qū)動算法確定最終的遷移處理器和目標(biāo)節(jié)
點;
Sls6
gOtO步驟1; 3) V0操作引導(dǎo)算法
在部署了 DVMM的機(jī)群環(huán)境中,操作系統(tǒng)具有統(tǒng)一的I/O空間,而真實的 I/O設(shè)備可能分布在不同的節(jié)點上。該算法記錄了所有虛擬處理器在執(zhí)行過程 中訪問的真實設(shè)備所在的節(jié)點以及訪問次數(shù),并且該記錄隨著1/0訪問的變化 而更新。該算法包含三個部分I/O操作計算算法,計算節(jié)點內(nèi)各虛擬處理器
一段時間內(nèi)訪問各個I/0設(shè)備的次數(shù),生成本節(jié)點的1/0操作向量表,例如, (訪問的設(shè)備號,設(shè)備所在節(jié)點號,訪問次數(shù));1/0信息交換算法,和其他節(jié) 點交換I/0操作向量表,同時生成全局I/0操作向量表,例如,(設(shè)備號,設(shè)備 所在節(jié)點號,訪問該設(shè)備的VCPU號,該VCPU所在節(jié)點號,訪問次數(shù)),該表每 個節(jié)點保留一份;遷移選擇算法,根據(jù)全局I/0操作向量表選擇被遷移的處理 器和目標(biāo)節(jié)點。
該1/0操作引導(dǎo)算法的具體步驟如下
步驟1:當(dāng)處理器執(zhí)行環(huán)境陷入到DV麗時,各節(jié)點利用DSM模塊計算單位 時間內(nèi)本節(jié)點處理器產(chǎn)生I/0操作的情況,包括訪問的設(shè)備號,設(shè)備所在節(jié) 點號和訪問次數(shù),生成I/0操作向量,如(節(jié)點號,全局VCPU號,訪問的設(shè) 備號,設(shè)備所在節(jié)點號,訪問次數(shù));
步驟2:向其他節(jié)點廣播本節(jié)點的1/0操作向量,同時接收其他節(jié)點發(fā)送的1/0操作向量;
步驟3:統(tǒng)計各個節(jié)點的I/0操作向量,生成全局I/0操作向量表; 步驟4:根據(jù)全局1/0操作向量表,選中1/0操作次數(shù)最多的處理器作為 待遷移的處理器; 步驟5:
if (待遷移處理器不屬于本節(jié)點>
if (待遷移處理器訪問的I/O設(shè)備在本節(jié)點) 等待其他節(jié)點的遷移請求;
else if
goto步驟1;
else if (待遷移處理器訪問的1/0設(shè)備不在本節(jié)點) 選擇該設(shè)備所在節(jié)點作為遷移目標(biāo)節(jié)點;
調(diào)用平衡遷移驅(qū)動算法確定最終的遷移處理器和目標(biāo)節(jié)
點;
else
goto步驟1;
整個驅(qū)動處理器遷移的過程如下
步驟l:操作系統(tǒng)啟動后,在源節(jié)點中,DVMM中的負(fù)載平衡模塊利用遷移 驅(qū)動算法自動檢測當(dāng)前的系統(tǒng)負(fù)載狀況,并與其他節(jié)點交換信息;
步驟2:當(dāng)發(fā)現(xiàn)需要進(jìn)行負(fù)載平衡干預(yù)時,選中待遷移的處理器并確定遷 移的目標(biāo)節(jié)點,此時還需判定待遷移處理器和目標(biāo)節(jié)點是否有沖突;
步驟3:若有沖突,則需要運用平衡遷移驅(qū)動算法來解決沖突(步驟二, 算法見圖3),最終確定待遷移的處理器,如圖2中最后選中VCPU3作為待遷 移的處理器;
步驟二平衡遷移驅(qū)動
這里設(shè)定三種驅(qū)動算法的優(yōu)先級,S卩負(fù)載均衡算法具有最高的優(yōu)先級, 缺頁引導(dǎo)算法次之,1/0引導(dǎo)算法優(yōu)先級最低,在產(chǎn)生沖突時,根據(jù)各算法的優(yōu)先級決定遷移的目標(biāo)節(jié)點。具體的平衡過程如下
步驟1:選擇由較高優(yōu)先級算法判定的運行最高優(yōu)先級任務(wù)的處理器作為 待遷移處理器,若該處理器不具有最高優(yōu)先級任務(wù),則執(zhí)行步驟2;
步驟2:忽略處理器執(zhí)行任務(wù)的優(yōu)先級,任然選擇較高優(yōu)先級判定的處理 器作為待遷移處理器,若此時存在多個待遷移處理器的競爭時,執(zhí)行步驟3;
步驟3:根據(jù)當(dāng)時各處理器上任務(wù)的優(yōu)先級,選擇級別較高的任務(wù)所在的 處理器作為待遷移處理器。
本發(fā)明優(yōu)先考慮機(jī)群系統(tǒng)的負(fù)載平衡,當(dāng)計算任務(wù)優(yōu)先級和算法優(yōu)先級沖 突時,優(yōu)先考慮算法優(yōu)先級,當(dāng)算法之間產(chǎn)生遷移沖突時,優(yōu)先滿足負(fù)載均衡 算法的需求。 '
步驟三向目標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商
當(dāng)算法選擇好被遷移的虛擬處理器和目標(biāo)節(jié)點后,便開始遷移,此時遷移 工作主要內(nèi)容是向目標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商。
步驟1:負(fù)載平衡模塊通告處理器遷移模塊,當(dāng)待遷移處理器被調(diào)度器調(diào) 度后,遷移模塊檢測待遷移處理器的遷移標(biāo)志位和其運行狀態(tài)(見圖3),若不 符合遷移要求則重新調(diào)用遷移驅(qū)動算法;
步驟2:檢測無誤后源節(jié)點VMM遷移模塊開始向目標(biāo)節(jié)點VMM發(fā)送遷移請 求,等待回應(yīng);
步驟3:此時目標(biāo)節(jié)點的守護(hù)線程負(fù)責(zé)和源節(jié)點通信,守護(hù)線程創(chuàng)建新線 程接管遷移工作;
步驟4:新的線程詢問本地負(fù)載平衡模塊是否同意此次遷移請求,若同意 則回應(yīng)源節(jié)點;
步驟5:在和目標(biāo)節(jié)點協(xié)商成功后,源節(jié)點的VMM斷開VCPU3與本地物理 處理器CPU1的映射(圖2中用虛線表示),處理器遷移模塊開始準(zhǔn)備待遷移處 理器的執(zhí)行環(huán)境數(shù)據(jù),如圖2中源節(jié)點保存VCPU3的運行環(huán)境,此時,目標(biāo) 節(jié)點的新線程準(zhǔn)備從源節(jié)點接收處理器的狀態(tài);
步驟6:若協(xié)商未成功,新線程告知源節(jié)點,守護(hù)線程重新接管,等待下 次遷移請求(見圖3),而源節(jié)點則重新進(jìn)入負(fù)載平衡模塊計算當(dāng)前系統(tǒng)負(fù)載;步驟四虛擬處理器狀態(tài)的保存和恢復(fù)
步驟l:當(dāng)虛擬處理器陷入到DV麗環(huán)境中執(zhí)行時,判斷被遷移的虛擬處理 器的運行狀態(tài)。若處于Idle或僵死狀態(tài),則重新進(jìn)入負(fù)載平衡模塊;若處于 I/O操作狀態(tài),則等待這次操作完成;若處于正常的運行狀態(tài),則保存該虛擬 處理器的執(zhí)行環(huán)境,包括所有通用寄存器的值、棧指針、打開的文件指針等;
步驟2:在DV羅執(zhí)行環(huán)境中,等待VCPU調(diào)度器將其從物理處理器調(diào)出時, 停止該虛擬處理器的執(zhí)行,源節(jié)點遷移模塊將之前保存的執(zhí)行環(huán)境封裝后傳遞 給通信模塊;
.步驟3:經(jīng)過通信模塊封裝數(shù)據(jù)和通過動態(tài)配置文件查找目標(biāo)節(jié)點的IP地 址后,開始向目標(biāo)節(jié)點傳送VCPU的運行環(huán)境(如圖2中所示的VCPU3,其中虛 線箭頭是遷移的邏輯路徑,實線箭頭表示真實遷移路徑)。
步驟4:目標(biāo)節(jié)點的通信模塊接收到數(shù)據(jù)(如圖2中,目標(biāo)節(jié)點V應(yīng)接收 到VCPU3的運行環(huán)境數(shù)據(jù))后,負(fù)責(zé)接管遷移工作的線程初始化新的VCPU結(jié)構(gòu) vcpu—struct,并用接收到的數(shù)據(jù)創(chuàng)建其執(zhí)行環(huán)境,并建立VCPU和本地CPU的 映射(如圖2中的VCPU3),最后將其狀態(tài)標(biāo)記為可運行,放入等待隊列,等待 VCPU調(diào)度器將其調(diào)度到物理處理器上執(zhí)行。
至此, 一次負(fù)載平衡的遷移操作完成,.通過VCPU的遷移,使得目標(biāo)節(jié)點較 空閑的計算資源再次得到利用,達(dá)到了負(fù)載平衡的目的。從遷移的全過程來看, 虛擬處理器的管理和遷移的控制都由VMM負(fù)責(zé),整個過程對上層的操作系統(tǒng)來 說是完全透明的,0S無法感知下層物理計算資源的重新調(diào)配。
2權(quán)利要求
1、一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法,主要功能模塊包括負(fù)載平衡模塊、處理器遷移模塊和通信模塊;其特征在于該方法的步驟如下步驟一、驅(qū)動虛擬處理器遷移該機(jī)制中有三種算法可以決定被遷移的虛擬處理器以及目標(biāo)節(jié)點,它們分別是負(fù)載均衡自適應(yīng)算法,缺頁引導(dǎo)算法和I/O操作引導(dǎo)算法;
全文摘要
本發(fā)明提供了一種對操作系統(tǒng)透明的機(jī)群負(fù)載平衡方法,主要功能模塊包括負(fù)載平衡模塊、處理器遷移模塊和通信模塊;其特征在于該方法的步驟如下步驟一、驅(qū)動虛擬處理器遷移;步驟二、平衡遷移驅(qū)動;步驟三、向目標(biāo)節(jié)點發(fā)送遷移請求并協(xié)商;步驟四、虛擬處理器狀態(tài)的保存和恢復(fù);步驟五、通信。本發(fā)明較好地解決了機(jī)群系統(tǒng)資源利用率低的問題??梢灶A(yù)見,未來隨著機(jī)群系統(tǒng)的更加普及和硬件虛擬化技術(shù)的不斷發(fā)展,本發(fā)明將成為很好的機(jī)群系統(tǒng)資源利用率低的解決方案,具有良好的應(yīng)用前景。
文檔編號G06F9/46GK101452406SQ20081024050
公開日2009年6月10日 申請日期2008年12月23日 優(yōu)先權(quán)日2008年12月23日
發(fā)明者劉忠麟, 彭近兵, 李勝召, 祝明發(fā), 肖利民, 陳思名 申請人:北京航空航天大學(xué)