曾少慧,邱 彬
(汕頭職業技術學院計算機系,廣東 汕頭 515078)
虛擬化技術在提高資源利用率的同時,也帶來運算量不斷的增加,特別虛擬機遷移時大量運算加重了通信負擔,造成性能的巨額開銷.如何改善通信機制減少數據傳輸量、縮短遷移時間成為虛擬機實時遷移中迫切需要解決的問題.
虛擬機的遷移主要涉及存儲、網絡和內存三種信息[1],其中以內存的遷移最為關鍵.由于虛擬機的遷移是一個動態的過程,在此過程中內存始終處于被讀寫狀態,其存放的資源一直在不斷變化,且內存遷移性能對虛擬機遷移時間和停機時間的影響十分突出[2];同時,由于內存遷移無法使用NFS 等技術,只能通過網絡進行,所以合理有效的內存遷移算法能減少虛擬機總遷移時間、停機時間和網絡帶寬,對提高整個遷移性能起明顯作用.
目前虛擬機內存遷移應用得最廣泛的是預拷貝(Pre-Copy)算法[3].它的機制是:首先進入迭代拷貝階段,首輪迭代必須傳遞所有內存頁到目的虛擬機,之后每輪迭代只傳遞有變化的內存頁,每次迭代完成后,判斷是否滿足執行停機拷貝的條件,當迭代次數到達一定量或傳遞頁面小于一定量時,就進入停機拷貝階段,停機拷貝階段將剩余的臟頁和未被拷貝但已經更改的內存頁傳遞到目的虛擬機,同時檢測源虛擬機和目的虛擬機內存頁面是否同步,若是,則源虛擬機停止工作,進入等待狀態,最后啟動目的虛擬機并銷毀源虛擬機.虛擬機動態遷移機制如圖1 所示.

圖1 虛擬機動態遷移機制
近年來,許多專家學者對基于預拷貝的虛擬機內存遷移機制進行了詳細的分析和研究,取得了若干研究成果[4-8].文獻[4]中對臟頁拷貝策略進行改進,將頻繁修改的臟頁在停機拷貝階段進行傳輸,從而有效地縮短總遷移時間.文獻[5]中,作者根據局部性原理提出了一種基于臟頁率預測的預拷貝機制,對虛擬機內存頁的臟頁率做出預測,優先傳輸臟頁率低的內存頁,避免高臟頁的重傳.在保證遷移過程中可接受范圍內QoS,同時減少迭代拷貝階段的持續時間,文獻[6]提出一種針對網絡負載型虛擬機的智能停機預拷貝遷移策略.文獻[7]提出了虛擬機的實時遷移對未來網絡中海量計算和存儲的有效性.文獻[8]研究了無線網絡環境下虛擬機在線遷移過程中的傳輸性能具有較低的延遲性.雖然上述研究成果對縮短虛擬機遷移總時間和減少總傳輸數據量起到一定作用,但對遷移過程中臟頁的判斷不足,傳輸策略的優化不明顯,同時沒有考慮虛擬機內存變化對停機時間的影響等因素.
本文利用馬爾科夫模型保存臟頁當前的修改狀態,通過當前的數據預測臟頁下次變臟的概率,同時兼顧了預測概率時臟頁的變化情況,得到有效的變臟率,由此實現對高臟頁傳送的有效控制,節省了總遷移時間.
內存預拷貝算法在中、低負載環境下表現不錯,但在高負載環境中,也就是面向內存密集型業務時可能會失效[9],隨著迭代輪數的增加,傳送的內存頁反而增加,造成更大的開銷.針對以上問題,本文對判斷臟頁的算法進行優化,當內存頁在進行迭代拷貝時無需拷貝所有臟頁,因為當臟頁率比較高時,在后面的迭代拷貝過程中,臟頁很可能再次被修改,這樣就會提高臟頁重復傳輸的概率.另外,原工作集測定算法只關心臟頁上一次傳送的修改情況,判定周期短,無法較準確測定臟頁的變臟率.預測內存頁變臟率優化算法的思路是收集臟頁最近n 次的修改情況,對這n 個數據進行分析,計算出該臟頁下次傳送時再次變臟的概率,選擇概率低的即比較穩定的臟頁進行傳送.對概率高的即高臟頁則不予傳送,從而降低內存頁遷移數量.
高臟頁的反復傳送增加了遷移數據量,降低了遷移性能[10].如果每次傳送前都能判斷哪些頁屬于高臟頁,并且在下次傳送可能又會發生變化,則可以跳過本輪傳送,使遷移數據量降低,提高遷移性能.為了更準確地測定工作集,本文將內存頁分為幾類,見表1.

表1 內存頁類別
原虛擬機內存預拷貝只有兩種內存頁狀態,本文算法增加為3 種狀態,見表2.

表2 內存頁狀態
增加了臟頁預測后,對工作集的測定實現流程如圖2 所示.
具體步驟如下:
(1)預遷移階段,當虛擬機接收到遷移信號后,開始對所有內存頁的修改情況進行監控,并把數據記錄到C-table 中;
(2)當遷移正式開始后,先對C-table 進行更新,判斷該內存頁是否屬于第一次傳送,若是,則計算C-table 中所有內存頁變臟的概率;
(3)對D-table 進行更新,把當前再次變臟的內存頁信息傳送給Pro-table0,同時清空D-table 的數據;
(4)根據C-table 的狀態,計算Pro-table0 的臟頁再次變臟的概率;
(5)把上述臟頁和變臟率等信息存放在Pro-table 中,將變臟率大于等于預定概率閥值Pmax的臟頁設定為工作集;小于Pmax的臟頁設定為準備傳送的內存頁,存放在Se-table里,同時清空Pro-table 的數據;
(6)再次更新D-table 的數據,并將其臟頁信息復制到Sk-table 中;
(7)跳過Se-table 和Sk-table 中相同的內存頁,將Se-table 剩下的內存頁進行遷移,并清空Sk-table 的數據;
(8)最后,判斷是否滿足結束迭代傳送的條件.若滿足,則凍結源虛擬機,復制剩下的內存頁以及上次迭代產生的臟頁;若不滿足,則返回步驟(2)繼續判斷.

圖2 優化后的工作集預測流程圖
上述變臟率的計算依據為臟頁現在的修改情況和貝葉斯條件概率.設定S1 表示內存頁沒有被讀寫,S2 表示內存頁只讀,S3 表示內存頁被修改.默認遷移開始前內存頁狀態為S1.使用的公式是:
(1)狀態轉移概率矩陣[11]:假定內存頁有n 種可能的狀態,即S1,S2,…,Sn,本文中設定了3 種狀態,即n=3.Pij 表示內存頁狀態從Si 變成Sj 的狀態轉移概率.狀態轉移概率矩陣為:

(2)狀態概率[12]:表示內存頁初始狀態己知,轉移了k 次后變為狀態Sj 的概率,且:

由馬爾科夫(Markov)假設和貝葉斯的條件概率公式,有以下狀態概率的公式:


馬爾科夫預測模型首先記錄了臟頁最近N 次的修改狀態,然后依據這N 次的數據預測臟頁下次變臟的概率,并且還兼顧了預測概率時臟頁的變化情況,對這些數據進行統計分析,從而比較可信地得到變臟率.該模型簡易且參數少,不會造成太大的網絡開銷,容易實現并有重要的應用價值,因此,在虛擬機動態遷移過程中,提前對臟頁的狀態轉移狀況進行預測是非常有必要的,降低了臟頁的反復傳送,節省了總傳送時間.
本文構建一個小型局域網作為實驗環境,且在這個局域網中配置了一個同構的測試環境.硬件配置上,使用三臺2.4 GHz 雙核Intel 處理器,2 GB 內存的PC,分別做為虛擬機遷移的源主機和目的主機,以及NFS 服務器,并通過一臺100 M 的交換機連接起來.軟件配置上,所有PC 機上裝的操作系統為Linux 的版本Ubuntu 14.04.虛擬平臺為Xen 4.4.2.
實驗環境的構建由以下幾部分組成:
(1)在Host A、Host B 上安裝修改過源碼的Xen 4.4.2.實驗過程中,可用vi 編輯Xen的源文件,然后通過編寫make file 重新編譯并安裝Xen;
(2)開啟Xen 的動態遷移功能,并設置虛擬機動態遷移的遷移端口,通過更改目錄/etc/xen/下面的配置文件xend-config,設置后重啟該進程;
(3)Host C 無需安裝和編譯Xen 4.4.2 源碼,將它作為NFS 服務器,存儲虛擬機的img鏡像.采用virt-install 命令在NFS 服務器上創建虛擬機,開啟NFS 服務,并把Host A、Host B 掛載到NFS 目錄下,目錄輸出到/mnt/images 上;
(4)在Host A 上編寫mount 安裝的虛擬機配置文件,并將鏡像文件存放到/mnt/images 下.通過配置文件可以修改虛擬機環境包括磁盤、網卡、內存大小、CPU 個數等信息.
分別在低臟頁率和高臟頁率環境下[13],對比原算法和優化算法前后的實驗數據.低負載環境中進行低臟頁率實驗,做法是不運行任何程序,在空負載下做實驗;高負載環境中進行高臟頁率實驗,做法是選擇在內核編譯時進行.設置的內存大小分別是256 MB,512 MB,1 024 MB 和2 048 MB.在系統目錄下的日志文件中,讀取每次遷移的數據記錄,主要包括迭代次數、停機時間和總遷移時間.每個實驗經過反復20 次的測試,取其平均值作為實驗結果,對于本文中提出的Pmax值,為表示判斷內存頁是否傳送的預定概率閥值,其值隨著迭代次數n 而線性增加.本文實驗中預定概率閥值Pmax選取n的線性函數,即Pmax=P0/2+nP0/N.其中P0表示內存頁被改寫時變臟率的增量,N 表示臟頁最近修改情況的次數,結果如表3 和表4 所示.

表3 原算法與優化算法在低負載環境下的遷移性能比較

表4 原算法與優化算法在高負載環境下的遷移性能比較
根據原算法和優化算法的實驗結果,得出算法優化前后的IN 指標、DT 指標和TMT 指標比對情況,如圖3、圖4、圖5 所示.

圖3 優化前后的IN 指標對比

圖4 優化前后的DT 指標對比

圖5 優化前后的TMT 指標對比
圖3 顯示了不同負載環境下優化前后的迭代次數的比較,可以看到,低負載的IN很少,優化后IN 甚至比原算法略增,這是因為低負載中要傳送的內存頁本來就少,而優化算法本身也要消耗一定的CPU 資源,但在高負載下就不存在這個問題,高負載下臟頁量多,優化算法的優勢就體現出來了.圖4 顯示了不同負載環境下優化前后的停機時間的比較,隨著內存增大,DT 的值并沒有跟著改變,而不同負載環境下,DT 的值有明顯增長,說明DT 主要受高臟頁數量的影響,與虛擬機的內存沒有明顯關系.低負載下,優化前后的DT 值沒有明顯變化;高負載下,優化后的DT 略有減少.圖5 顯示了不同負載環境下優化前后的總遷移時間的比較,TMT 隨著虛擬機內存的增大而增大,低負載下,TMT 變化不明顯,因為TMT 受IN 和DT 影響,某種情況下,IN 和DT 兩者成反比.高負載下,TMT 有明顯減少,從表4 中數據可以看出,不同內存環境下虛擬機遷移時間降低的百分比都在10%左右.盡管優化算法會消耗一定的CPU 資源,但足以抵消高臟頁反復傳送帶來的損耗,達到了優化遷移性能的目的.
內存遷移的合理性對虛擬機的總遷移時間和停機時間有很大影響,是當前研究虛擬機動態遷移的重點.高臟頁的反復傳送增加了遷移數據量,降低了遷移性能.針對內存遷移機制中傳統算法對臟頁判斷的不足,本文提出臟頁率預測優化算法,計算臟頁下次傳輸時再次變臟的概率,將概率高的臟頁留在停機階段進行拷貝,這樣可以避免在迭代階段頻繁重傳高臟頁.實驗表明,本文算法在高負載環境下能使高臟頁的無效傳送次數明顯減少,同時縮短了10%的虛擬機遷移時間,優化了遷移性能.