OpenStack設計與實現(一)虛擬化

arron劉發表於2016-01-21

雲端計算的一個核心思想就是在伺服器端提供集中的物理計算資源,這些計算資源可以被分解成更小的單位去獨立地服務於不同的使用者,也就是在共享物理資源的同時,為每個使用者提供隔離、安全、可信的虛擬工作環境,而這一切不可避免地要依賴於虛擬化技術。

一、虛擬化技術的概述

虛擬化技術對大家來說都不陌生,比如虛擬記憶體和虛擬伺服器等,為了更好的理解虛擬化我們應該首先來了解一下計算機系統的層次結構。

每一層都向上層提供一個抽象,並且每一層只需要知道下層抽象的介面,而並不需要了解其內部運作機制。例如,作業系統看到的是一個硬體抽象層,它並不知道硬體中佈線和電器特徵。即使硬體層發生變化,只要硬體抽象層不變,那麼作業系統層將察覺不到任何的變化。
這種分層有一定的優點。首先,每一層只需要考慮本層的設計以及相鄰層間的互動介面,從而大大的降低了系統設計的複雜性,提高了軟體的移植性。另外,這樣的設計也是給下一層軟體模組為上一層軟體模組創造“虛擬世界”提供了條件。
所謂的虛擬化就是有位於下層的軟體模組,根據上一層軟體模組的期待,抽象出一個虛擬的軟體或硬體介面,使上一層軟體可以直接執行在與自己所期待的執行環境完全一致的虛擬環境上。
虛擬化可以發生在上圖中的每一個層次上,硬體的虛擬化,作業系統的虛擬化等等,但是對於IaaS(基礎架構即服務)的雲端計算,更關心的是硬體抽象層上的虛擬化。硬體抽象層上的虛擬化是指透過虛擬硬體抽象層來實現虛擬機器,為客戶機作業系統呈現出與物理硬體相同或相近的硬體抽象層。

如上圖所示,系統虛擬化在硬體和作業系統之間引入了一個虛擬化層,虛擬化層提供一個作業系統期望的介面,統一處理作業系統的請求,使得作業系統層感覺不到虛擬化層的存在,任然認為自己在享有整個硬體。每個虛擬計算機系統(虛擬機器)都擁有自己的虛擬硬體,並提供一個獨立的虛擬執行環境,透過虛擬機器監控器(VMM)的模擬,虛擬機器中的作業系統認為自己仍然是獨佔一個系統在執行。

二、虛擬化實現方式

1、按照實現方式分

按照實現方式虛擬化可以分為兩種:

  • VMM直接執行在硬體平臺上,控制所有硬體並管理客戶作業系統。客戶作業系統執行在比VMM更高的級別上,Xen就是採用的這個模型。
  • VMM執行在一個傳統的作業系統裡(第一層軟體),可以看做是第二層軟體,而客戶機作業系統則是第三層了。KVM和VirtualBox就是這種實現。

2、按照VMM所提供的虛擬平臺型別分:

按照VMM所提供的虛擬平臺型別可以分為兩類

(1) 完全虛擬化

VMM虛擬的是現實存在的平臺,並且在客戶機作業系統看來,虛擬平臺和現實平臺是一樣的,客戶機作業系統感覺不到執行在一個虛擬平臺上,現有的作業系統無需進行任何修改就可以在這樣的虛擬平臺上執行,因此這種方式被稱為完全虛擬化。
完全虛擬化中,VMM需要能夠正確處理客戶機作業系統所有可能的行為,或者說正確處理所有可能的指令,完全虛擬化經歷了兩個階段:軟體輔助的完全虛擬化與硬體輔助的完全虛擬化。
在x86虛擬技術的早期,x86體系中沒有在硬體層次對虛擬化提供支援,因此完全虛擬只能靠軟體來實現,典型的做法就是優先順序壓縮和二進位制程式碼翻譯相結合。
優先順序壓縮的原理是:將VMM和客戶機的優先順序放到同一個CPU中來執行,對應於x86架構,通常VMM在ring0,客戶機作業系統核心在ring1,客戶機作業系統應用程式在ring3。當客戶機作業系統核心執行特權指令時,由於處在非特權的ring1,通常會觸發異常,VMM截獲後就可以進行特權指令的虛擬化。但是x86指令體系結構在設計之初並沒有考慮到虛擬化,一小部分特權指令在ring1中沒有觸發異常,VMM也就不能進行截獲進行虛擬化,所以就需要用二進位制程式碼翻譯來處理這些不友好的指令。
二進位制程式碼翻譯的原理:VMM通常會對作業系統的二進位制程式碼進行掃描,一旦發現虛擬化不友好的指令,就將其替換成支援虛擬化的指令塊。
**Intel的VTx技術是硬體輔助虛擬化的代表。**VTx技術在處理器上引入了一個新的執行模式用於執行虛擬機器。當虛擬機器執行在這個特殊模式中時,他仍然面對一套完整的處理器暫存器和執行環境,只是任何特權操作都會被處理器截獲並報告給VMM。VMM本省就執行在正常模式下,在接收到處理器的報告後,透過對目標指令的解碼,找到相應的虛擬化模組進行模擬,並把最終的效果反映在特殊的環境中。

(2) 類虛擬化

類虛擬化虛擬出的平臺在現實中是不存在的,而是經過VMM重新定義的。這樣的虛擬平臺需要對所執行的客戶機作業系統進行或多或少的修改使之能夠適應虛擬環境,客戶機作業系統也就知道自己執行在虛擬平臺上,並且會主動去適應。
類虛擬化是透過在原始碼級別修改指令以迴避虛擬漏洞的方式來使VMM能夠對物理資源實現虛擬化。對於x86中難以虛擬化的指令,類虛擬化採取的方式是修改作業系統核心程式碼,使得作業系統核心完全避免這些難以虛擬化的指令。

三、虛擬機器動態遷移

動態遷移是虛擬化特有的新特性,它將虛擬機器從一個物理機快速遷移到另一個物理機,但是虛擬機器裡面的程式和網路都保持連線。從使用者的角度來看,動態遷移對虛擬機器的可用性沒有任何影響,使用者不會察覺任何的服務被中斷。
動態遷移實現的方法是在目的伺服器上建立一臺同樣配置的新虛擬機器,然後不斷地在兩個虛擬機器之間同步各種內部狀態,比如記憶體、外設、CPU等。等狀態同步完成後,關掉老的虛擬機器,啟動新的虛擬機器。



原文連結: 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26916835/viewspace-1980450/,如需轉載,請註明出處,否則將追究法律責任。

相關文章