理機(jī)中選出一臺目標(biāo)物理機(jī),例如,可隨機(jī)選中,也可以選中資源利用率最高的一臺物理機(jī)作為目標(biāo)物理機(jī),該策略可最大可能的利用一部分物理機(jī)的資源,從而節(jié)省出一部分物理機(jī)的資源,達(dá)到節(jié)約成本的目的;或者,從資源利用率小于預(yù)定闕值的具備親和性的物理機(jī)中選出一臺目標(biāo)物理機(jī),例如,可隨機(jī)選中,也可以選中資源利用率最低的一臺物理機(jī)作為目標(biāo)物理機(jī),該策略可防止資源競爭,避免物理機(jī)過載。其中,所述預(yù)定闕值由用戶設(shè)定,例如可設(shè)定為50%。對于本發(fā)明提供的上述選擇方式,可根據(jù)用戶的需要和目的進(jìn)行選擇。
[0028]所述虛擬機(jī)將啟動到根據(jù)上述資源調(diào)度策略選出的目標(biāo)物理機(jī)上,當(dāng)有多臺虛擬機(jī)同時(shí)啟動時(shí),不再是隨機(jī)選擇物理機(jī)進(jìn)行寄宿啟動,而是有目標(biāo)地啟動到最合適的目標(biāo)物理機(jī)上,這不僅杜絕了大量的隨機(jī)10,可將虛擬機(jī)啟動到與其操作系統(tǒng)類型一致的目標(biāo)物理機(jī)環(huán)境中,大大提高了虛擬機(jī)的啟動速度。
[0029]步驟102,將所述虛擬機(jī)的鏡像文件緩存至所述目標(biāo)物理機(jī)的內(nèi)存并鎖定。
[0030]啟動虛擬機(jī)之前,將所述虛擬機(jī)的鏡像文件預(yù)緩存在所述目標(biāo)物理機(jī)的內(nèi)存中,此后所有對所述鏡像文件的讀寫操作都在所述目標(biāo)物理機(jī)的內(nèi)存中進(jìn)行,這可大大提高虛擬機(jī)1的讀寫速度。預(yù)緩存的過程如下:
[0031]預(yù)判斷所述目標(biāo)物理機(jī)的內(nèi)存中是否已經(jīng)緩存有所述虛擬機(jī)的鏡像文件,如果未緩存,則將所述虛擬機(jī)的鏡像文件緩存到所述目標(biāo)物理機(jī)的內(nèi)存中。
[0032]具體地,首先,判斷所述目標(biāo)物理機(jī)中是否存在所述鏡像文件,例如可能存儲在目標(biāo)物理機(jī)的物理硬盤中,當(dāng)然本發(fā)明的實(shí)現(xiàn)方式并不限于硬盤這一種形態(tài),如果不存在,則從管理平臺中下載所述鏡像文件;然后,設(shè)定所述目標(biāo)物理機(jī)中用于緩存所述鏡像文件的緩存空間,并獲取所述鏡像文件的文件路徑,將所述鏡像文件緩存至所述目標(biāo)物理機(jī)上設(shè)定的所述緩存空間中。其中,所述緩存空間的大小可根據(jù)目標(biāo)物理機(jī)內(nèi)存的大小、所述鏡像文件的大小來決定,本發(fā)明中所述緩存空間的大小是動態(tài)調(diào)整的,因此,初始設(shè)定的所述緩存空間可稍大一些,虛擬機(jī)啟動后,緩存空間會被釋放,不會一直占用目標(biāo)物理機(jī)的內(nèi)存。
[0033]預(yù)緩存過程完成后,將所述虛擬機(jī)的鏡像文件鎖定在所述目標(biāo)物理機(jī)的內(nèi)存中,使得所述鏡像文件在所述虛擬機(jī)啟動過程中駐留在所述緩存空間中,保證虛擬機(jī)的快速啟動。
[0034]步驟103,在接收到所述虛擬機(jī)的啟動請求時(shí),讀取所述目標(biāo)物理機(jī)的內(nèi)存中的所述鏡像文件以在所述目標(biāo)物理機(jī)上啟動所述虛擬機(jī),其中,所述鏡像文件至少包括所述虛擬機(jī)的操作系統(tǒng)文件。
[0035]所述虛擬機(jī)啟動所需的鏡像文件已預(yù)緩存在所述目標(biāo)物理機(jī)的內(nèi)存中,當(dāng)接收到所述虛擬機(jī)的啟動請求時(shí),可直接讀取所述目標(biāo)物理機(jī)內(nèi)存中的所述鏡像文件,從而完成所述虛擬機(jī)的快速啟動。虛擬機(jī)的鏡像文件包括操作系統(tǒng)文件和其它數(shù)據(jù)文件,操作系統(tǒng)文件相當(dāng)于虛擬機(jī)的系統(tǒng)盤,因此為保證虛擬機(jī)的正常啟動必須將其預(yù)緩存在目標(biāo)物理機(jī)中,而其它數(shù)據(jù)文件則相當(dāng)于虛擬機(jī)的數(shù)據(jù)盤,對虛擬機(jī)的啟動無影響,但為了提高虛擬機(jī)的數(shù)據(jù)訪問速度,也可將其預(yù)緩存在物理機(jī)內(nèi)存中,這可根據(jù)目標(biāo)物理機(jī)的資源利用量決定。
[0036]參考圖2,圖2是本發(fā)明第一實(shí)施例的加速虛擬機(jī)1的方法流程圖,在第一實(shí)施例步驟101?103的基礎(chǔ)上,還包括:
[0037]步驟104,捕捉對所述鏡像文件的讀操作,并在所述讀操作完成后更新目標(biāo)物理機(jī)的內(nèi)存中緩存的所述鏡像文件的查詢時(shí)間和熱度。
[0038]多臺虛擬機(jī)可能對應(yīng)同一臺目標(biāo)物理機(jī),所述多臺虛擬機(jī)啟動時(shí)都需要讀取所述目標(biāo)物理機(jī)的內(nèi)存中的所述鏡像文件,也就是所述鏡像文件可能要被讀取多次;而也有可能所述目標(biāo)物理機(jī)在親和性上僅對應(yīng)一臺虛擬機(jī),而這臺虛擬啟動后就不會再有其它虛擬機(jī)啟動到所述目標(biāo)物理機(jī)上了。因此,可通過捕捉虛擬機(jī)啟動時(shí)對所述鏡像文件的讀操作,來實(shí)時(shí)地更新所述目標(biāo)物理機(jī)的內(nèi)存中的所述鏡像文件的查詢時(shí)間和熱度。
[0039]當(dāng)虛擬機(jī)發(fā)起對所述鏡像文件的讀操作請求時(shí),首先查詢所述鏡像文件是否緩存在所述目標(biāo)物理機(jī)的內(nèi)存中,如果已緩存,所述虛擬機(jī)可直接讀取所述鏡像文件并在讀取完成后生成回調(diào)函數(shù),回調(diào)函數(shù)更新所述鏡像文件的查詢時(shí)間和熱度;如果未緩存,所述虛擬機(jī)會繼續(xù)訪問目標(biāo)物理機(jī)的物理硬盤或者網(wǎng)絡(luò)獲取所述鏡像文件,并生包含未命中信息的回調(diào)函數(shù),回調(diào)函數(shù)會自動將所述鏡像文件緩存至物理機(jī)的內(nèi)存中設(shè)定的緩存空間內(nèi),并更新所述鏡像文件的查詢時(shí)間和熱度。之所以要進(jìn)行所述鏡像文件是否已緩存在所述目標(biāo)物理機(jī)的內(nèi)存中的查詢動作,是因?yàn)?,本發(fā)明中會根據(jù)所述鏡像文件的查詢時(shí)間和熱度對所述鏡像文件中的舊數(shù)據(jù)進(jìn)行刪除(后文步驟105會詳細(xì)說明),因此,可能出現(xiàn),所述鏡像文件被刪除后,某臺虛擬機(jī)啟動卻需要讀取所述鏡像文件,這種情況下就需要進(jìn)行所述鏡像文件的再次緩存。
[0040]步驟105,根據(jù)所述鏡像文件的查詢時(shí)間和熱度釋放所述目標(biāo)物理機(jī)的內(nèi)存中用于加載所述鏡像文件的緩存空間。具體的釋放過程為:
[0041]檢測所述目標(biāo)物理機(jī)中所述緩存空間內(nèi)的所有鏡像文件,當(dāng)所有鏡像文件的查詢時(shí)間和熱度均為O時(shí),則完全釋放所述緩存空間,對所述鏡像文件的查詢時(shí)間和熱度的更新是實(shí)時(shí)的,當(dāng)所有虛擬機(jī)都啟動后,即不會再有虛擬機(jī)對所述緩存空間內(nèi)的所述鏡像文件進(jìn)行讀操作時(shí),則所有鏡像文件的查詢時(shí)間和熱度都被更新為O,所有鏡像文件可被刪除以將所述緩存空間釋放;
[0042]當(dāng)查詢時(shí)間和熱度不為O的鏡像文件數(shù)量小于預(yù)定門限時(shí),則將與查詢時(shí)間和熱度不為O的所述鏡像文件相關(guān)的虛擬機(jī)迀移到其它物理機(jī)上啟動,并完全釋放所述緩存空間。其中所述查詢時(shí)間和熱度不為O的鏡像文件是指近期、被頻繁訪問的鏡像文件,預(yù)定門限是指所述緩存空間中多數(shù)鏡像文件的查詢時(shí)間和熱度為0,只有少數(shù)鏡像文件的查詢時(shí)間和熱度不為0,當(dāng)這些少數(shù)鏡像文件的數(shù)量小于預(yù)定值時(shí),例如可以是1,也會進(jìn)行緩存空間的釋放,釋放的方式是將與這些查詢時(shí)間和熱度不為O的鏡像文件相關(guān)的虛擬機(jī)迀移到其它物理機(jī)上啟動,其它物理機(jī)必然不包括當(dāng)前的所述目標(biāo)物理機(jī)。迀移的過程是對上述步驟101?103的循環(huán)操作,即需要根據(jù)親合度重新選出新的目標(biāo)物理機(jī)。迀移的目的是節(jié)省資源,例如,隨著大量虛擬機(jī)的啟停,最后兩臺虛擬機(jī)分別被匹配到兩臺物理機(jī)上啟動,而兩臺物理機(jī)的資源利用率都不高,這時(shí)可根據(jù)上述迀移過程將兩臺虛擬機(jī)啟動到其中一臺物理機(jī)上,而將另一臺物理機(jī)關(guān)機(jī)。
[0043]下面以一臺Linux操作系統(tǒng)的虛擬機(jī)(以下簡稱Iinux虛擬機(jī))為例,進(jìn)行實(shí)施例的詳細(xì)說明。
[0044]根據(jù)用戶操作,管理平臺根據(jù)親和性判斷策略選出4臺與所述Iinux虛擬機(jī)具有相同LINUX操作系統(tǒng)的物理機(jī),然后檢測這些物理機(jī)的資源利用率,命中其中一臺負(fù)載最少、內(nèi)存和CPU占用量最小的物理機(jī)為目標(biāo)物理機(jī);
[0045]將所述Iinux虛擬機(jī)啟動所需的操作系統(tǒng)文件預(yù)緩存到所述目標(biāo)物理機(jī)的內(nèi)存中并鎖定,
[0046]具體的預(yù)緩存過程為:預(yù)判斷所述目標(biāo)物理機(jī)的內(nèi)存中是否已經(jīng)緩存有所述操作系統(tǒng)文件,如果未緩存,則從管理平臺中下載所述操作系統(tǒng)文件;獲取到所述操作系統(tǒng)文件后,根據(jù)Linux操作系統(tǒng)的cache管理機(jī)制,在目標(biāo)物理機(jī)的內(nèi)存中設(shè)定用于預(yù)緩存所述操作系統(tǒng)文件的cache空間,將所述操作系統(tǒng)文件緩存至所述目標(biāo)物理機(jī)上設(shè)定的所述cache空間中;
[0047]在接收到所述Iinux虛擬機(jī)的啟動請求時(shí),直接讀取所述cache空間中的所述鏡像文件以在所述目標(biāo)