1. 程式人生 > >Xen虛擬機器快照技術介紹

Xen虛擬機器快照技術介紹

虛擬機器快照技術概述

虛擬機器快照技術可以將一個執行中虛擬機器的所有狀態儲存起來,並且在以後的某一時刻可以將該虛擬機器恢復到快照時刻的狀態並繼續執行。虛擬機器快照可以應用在虛擬機器遷移中,也可以應用在本地機器上單純的虛擬機器快照中。在本地機器上做虛擬機器快照的目的是以後某一時刻可以恢復到快照時的狀態並繼續執行虛擬機器,目前所用的技術是儲存所有虛擬機器狀態資訊和虛擬機器記憶體空間。該技術有一個固有的缺點就是隨著記憶體空間的擴大其快照檔案也將隨著增大,而現在虛擬機器分配的記憶體空間以GB數量級計的已非常普遍,這種技術對於大量頻繁的快照來說,將會佔用極大的磁碟空間來儲存這些快照檔案。增量快照技術可以彌補這一不足,增量快照技術就是在第一次快照中儲存所有的記憶體內容,在後續的快照中,只儲存上次快照後改變的記憶體頁面,恢復的時候從最新的快照逐步恢復到所需要的快照點。在增量快照中要想恢復到一個較老的快照點時需要恢復該快照點後的所有快照點,並且要保證這些快照點都能正常恢復。

Xen的虛擬機器快照技術

虛擬機器記憶體是影響虛擬機器快照檔案大小、虛擬機器快照時間和虛擬機器快照恢復時間的主要因素。虛擬機器快照可以在處於執行或停止狀態的虛擬機器上進行。對停止狀態的虛擬機器做快照僅需要儲存外部儲存裝置的狀態即可,這種虛擬機器快照實際意義不大,通常意義上的虛擬機器快照主要針對執行中的虛擬機器。Xen現有虛擬機器快照技術主要是為動態遷移設計,同時提供虛擬機器的停止和恢復功能。

一個執行中虛擬機器的快照內容主要包括VCPU的上下文資訊、虛擬機器的虛擬裝置上下文資訊以及分配給虛擬機器的記憶體資訊。

VCPU的上下文資訊主要包括VCPU的基本資訊結構體、VCPU執行所需要的相關暫存器資訊、VCPU排程資訊、Guest OS異常處理堆疊資訊、與VCPU相關的共享資訊等。VCPU暫存器主要包括CR0-CR7控制暫存器、使用者級CPU暫存器(AX,BX,SI,DI等)、DB0-DB7除錯暫存器等。VCPU排程資訊主要包括VCPU時間、VCPU的執行狀態(執行態、可執行態、阻塞態和離線態中的一種)及每個執行狀態上的執行時間等、VCPU切換資訊。

虛擬裝置上下文資訊主要包括虛擬裝置(如網路介面卡、鍵盤、顯示器)的連線狀態,I/O共享頁,中斷資訊,與GuestOS相關的裝置模型資訊等。

虛擬機器記憶體資訊包括分配給該虛擬機器的所有記憶體頁框中的資料。虛擬機器記憶體資訊是虛擬機器快照所要儲存資訊的主要部分,由於其資訊量相對於其它資訊要大很多,因而是影響虛擬機器快照時間和快照檔案大小的主要因素。

Xen同時支援全虛擬機器和半虛擬化方式,全虛擬化和半虛擬化方式的虛擬機器快照技術有不同的實現。在半虛擬化環境下,VMM在對虛擬機器快照前,首先通過Para-API通知Guest OS該虛擬域將要進行虛擬機器快照。Guest OS得到通知後,執行快照前的預處理程式,包括斷開裝置連線,關中斷,標記頁表等。完成快照前的預處理後,Guest OS將控制權交由VMM。VMM停止虛擬機器的執行,通過Dom0將該虛擬機器的記憶體資訊、VCPU上下文資訊和虛擬裝置上下文資訊等儲存到虛擬機器快照檔案中。

在全虛擬化環境下,Guest OS不能像半虛擬化環境下的Guest OS一樣協助VMM完成虛擬機器快照。VMM在接到虛擬機器快照的命令後,首先斷開與該虛擬機器相關的裝置連線,遮蔽與該虛擬域相關的事件通道,收集與該虛擬域相關的虛擬裝置狀態、I/O共享頁資訊以及該虛擬域相關的通道事件,然後停止虛擬機器的執行並通過Dom0將該虛擬機器的記憶體資訊、VCPU上下文資訊和虛擬裝置上下文資訊儲存到虛擬機器快照檔案中。

在虛擬機器快照中,VMM除了將虛擬機器相關的虛擬裝置狀態和VCPU資訊儲存到快照檔案,還需要將虛擬機器的記憶體資訊儲存到快照檔案中。Xen虛擬機器快照技術對虛擬機器記憶體的處理方式是將整個虛擬機器記憶體資料直接儲存到快照檔案中。

Xen虛擬機器快照中將分配給虛擬機器的記憶體中的資料全部儲存到快照檔案中,該快照方法會使快照檔案佔用大量的磁碟空間。隨著虛擬機器記憶體容量的增大,虛擬機器快照檔案也會隨著增大。雖然計算機系統中記憶體容量和磁碟容量相差兩個數量級(如320GB的磁碟,4GB的記憶體)。該方法產生的大量快照檔案同樣會佔用大量的磁碟空間。

虛擬機器快照的恢復是虛擬機器快照流程的反過程。VMM在虛擬機器快照恢復時,首先建立一個虛擬域,VMM給該新建立的虛擬域分配和虛擬機器快照前相同數量的虛擬機器記憶體頁框。同時將分配給虛擬機器的記憶體頁框資訊記錄在虛擬機器域控制結構中,並且在P2M對映表和M2P對映表記錄機器頁框號和物理頁框號的對應關係。然後根據快照檔案中的VCPU上下文資訊建立VCPU,恢復VCPU的狀態,從快照檔案中讀取虛擬機器記憶體資料填充虛擬機器記憶體,根據裝置上下文資訊恢復虛擬裝置狀態。虛擬機器執行的各狀態恢復後,VMM啟動該新虛擬機器的執行。

【備註:P2M對映表和M2P對映表

引入虛擬化技術後,實體記憶體就不再屬於Xen或任何一個Guest OS。對應每一個Guest 0S,在執行過程中只能使用實體記憶體的一部分且不能相互重疊,以達到相互隔離的目的。對於基於X86架構的作業系統來說,其記憶體地址都應該使用從地址0開始的並且連續的記憶體空間。在Xen虛擬化環境中,X86架構的作業系統對記憶體地址的這一要求是不可能是實現的,因為實體地址為0的記憶體地址只有一個,不可能滿足所有Domain中基於X86的作業系統對這一條件的要求。為此,Xen提供了一套記憶體管理機制,能夠將分配給某一個Domain的分散記憶體變成從0地址開始且連續的記憶體。為實現這一功能需要在傳統的虛擬地址和機器地址之間插入一層,即表示從地址0開始的那一層。

Xen在虛擬地址和機器地址之間引入了一層新的地址後,從Guest OS的角度,它將不會直接看到機器地址,其看到的是插入的這一層地址。這樣,記憶體模型由傳統的兩層地址(虛擬地址和機器地址)擴充套件到了三層地址(虛擬地址、實體地址和機器地址)。

引入三層地址的記憶體模型後。Guest OS使用虛擬地址和實體地址,而VMM使用實體地址和機器地址。在大部分情況下,客戶作業系統沒有必要知道實體地址之下還有機器地址的存在。但當客戶作業系統對頁表進行操作時,需要涉及實體地址到機器地址的轉換關係,這兩者的轉換關係記錄在兩張表中,P2M表和M2P表。其中P2M表是實體地址到機器地址的轉換表(Physical—to·Machine Translation Table),M2P表是機器地址到實體地址的轉換表(Machine·to—Physical Translation)。

M2P表是位於Xen記憶體空間的一個全域性表,能夠被系統中所有虛擬機器使用,該表是一個以機器頁框號為索引的結構陣列,與機器頁框號對應相對應的是物理頁框號。對於P2M表,半虛擬化和全虛擬化方式處理不同。在全虛擬化環境下通過影子頁表模式來處理地址轉換,客戶作業系統不參與其中,P2M表位於Xen記憶體空間。而在半虛擬化環境下,P2M表存在於客戶機作業系統中。