虛擬存儲技術 虛擬存儲

虛擬存儲(虛擬存儲技術)
云和虛擬化
云計算是一種通過互聯網服務提供動態、可擴展資源的計算模式 。經過多年的發展,已經成為企業IT技術的重要支撐 。虛擬化是云計算的核心技術之一 。一臺計算機抽象成多臺邏輯計算機,即虛擬機 。每個虛擬機都是一個獨立的安全環境,可以運行不同的操作系統,而不會相互影響 。
虛擬化技術給資源的使用和調度帶來了極大的便利 。云計算系統可以根據負載情況及時調度資源,提高資源利用率,保證應用和服務不會因為資源不足而影響服務質量 。但是,虛擬化也是有代價的,資源的抽象帶來了性能的損失,這也是虛擬化一直試圖解決的問題 。
虛擬化的資源抽象可以簡單分為三個部分:CPU虛擬化、內存虛擬化和設備虛擬化 。其中,設備虛擬化已經能夠實現網絡、存儲等設備直通到虛擬機而不損失性能;在硬件特性的支持下,CPU虛擬化擁有和裸機一樣的執行普通指令的性能 。但是內存虛擬化和裸機相比還是有很大的區別,這是目前值得關注的問題 。
內存虛擬化
虛擬內存:說到內存虛擬化,就不得不提到虛擬內存的概念 。在早期的操作系統中,只有一個物理地址,并且空之間的空間有限,因此進程在使用內存時必須小心避免覆蓋其他進程的內存 。為了避免這個問題,抽象出了虛擬內存的概念,保證每個進程都有一個連續獨立的虛擬內存空 。進程直接通過VA(虛擬地址)使用內存 。CPU訪問內存時發送的VA被硬件MMU(內存管理單元)截獲,轉換成PA(物理地址) 。VA和PA之間的映射由頁表管理 。轉換時MMU會自動查詢頁表 。
虛擬化:類似于虛擬內存的概念,一臺主機上的每個虛擬機都認為自己占據了整個物理地址空空間,所以需要再次對內存進行抽象,即虛擬化內存,保證每個虛擬機都有獨立的地址空空間 。這樣,虛擬機和物理機都有VA和PA的概念,即GVA(來賓虛擬地址)和GPA(來賓物理地址),HVA(主機虛擬地址)和HPA(主機物理地址) 。虛擬機中的程序使用GVA,最終需要轉換為HPA 。兩個VA到PA( GVA到GPA,HVA到HPA)的映射也是頁表管理,GPA到HVA的映射一般是幾個連續的線性映射,由虛擬機的VMM(Virtual Machine Monitor)管理 。
【虛擬存儲技術 虛擬存儲】
進程內存訪問需要從VA轉換為PA 。引入內存虛擬化后,轉換路徑發生了很大的變化 。本來我們只需要把VA轉換成PA,虛擬化之后,轉換過程就變成了GVA -> GPA -> HVA -> HPA 。路徑變得更長更復雜后,給內存訪問的安全性和性能帶來挑戰,這也是內存虛擬化需要達到的目標:1)安全性,即地址轉換的合法性,虛擬機不能訪問不屬于自己的內存;2)性能,即地址翻譯的高效率,包括建立翻譯關系的低成本和翻譯過程本身的低成本 。
經典方案
為了實現內存虛擬化的目標,人們提出了許多虛擬化方案 。SPT(影子頁表)和EPT(擴展頁表)是兩種典型的方案,也是最常見的方案 。讓我們以此為起點,看看它們是如何工作的,然后討論其他虛擬化方案 。
SPT:由于原硬件只支持一層頁表轉換,在虛擬機或物理機上直接將VA轉換為PA無法完成GVA到HPA的轉換 。因此,SPT建立了一個快捷方式,即影子頁表,來直接管理GVA到HPA的映射,如下圖所示 。每個影子頁表實例對應于虛擬機中的一個進程 。影子頁表的建立需要VMM查詢虛擬機中進程的頁表 。
由于影子頁表管理GVA到HPA的直接映射,所以SPT地址翻譯路徑相當于物理機路徑,直接查詢一層頁表就可以完成地址翻譯 。使用4級頁表時,轉換過程如下圖所示 。

優點:SPT地址翻譯過程成本低,與物理機相當 。
缺點:
1)地址轉換關系的建立是非常昂貴的 。為了保證地址轉換的合法性,所有的轉換關系的建立,也就是虛擬機進程的頁表修改,都會被攔截,困在特權VMM中執行 。
2)影子頁表本身需要占用內存,一個影子頁表只對應虛擬機中的一個進程,整體會占用更多的內存資源 。
EPT:后來的硬件增加了對虛擬化的嵌套頁表的支持,使得硬件可以自動完成兩層頁表的轉換 。EPT是基于硬件支持的解決方案 。在管理GVA到GPA的虛擬機頁表的基礎上,增加了一個擴展頁表來管理GPA到HPA的映射,如下圖所示 。這兩層頁表相互獨立,兩層映射關系的轉換由硬件自動完成 。
因為虛擬機中各級頁表(gL4,gL3,gL2,gL1)的內容只有GPA,所以查詢下一級時,必須先將頁表(nL4,nL3,nL2,nL1)轉換成HPA,這使得整個轉換路徑非常長 。當兩層頁表為四級時,轉換過程如下圖所示 。

推薦閱讀