服務器虛擬化技術要追述到IBM大型機的虛擬化 z/VM,在z系列大型機(非虛擬化操作系統是z/OS)上實現服務器虛擬化。基于z/VM可以運行上百個虛擬機。后來在Power上的KVM技術是PowerKVM;以及AIX虛擬化PowerVM,支持vSCSI和NPIV兩種技術(虛擬出系統叫VIOS)。今天的內容覆蓋了CPU虛擬化、內存虛擬化、Intel硬件輔助技術、IO虛擬化和GPU虛擬化等,技術深度科普文章;請老司機們讓車,忽略今天的內容。
很多讀者可能認為服務器虛擬化技術遭到了容器技術的沖擊,可能已經過時了,事實上在很多場景下,虛擬化技術并非容器所能夠替代的。所以作為要踏入云計算領域的初學者們,還是有必要深入了解服務器虛擬化。下面我們看看虛擬化發展歷程和外在因素和推動力。
分區技術使得虛擬化層為多個虛擬機劃分服務器資源的能力;使您能夠在一臺服務器上運行多個應用程序,每個操作系統只能看到虛擬化層為其提供的虛擬硬件。
虛擬機隔離讓虛擬機是互相隔離,一個虛擬機的崩潰或故障(例如,操作系統故障、應用程序崩潰、驅動程序故障等等)不會影響同一服務器上的其它虛擬機。
封裝意味著將整個虛擬機(硬件配置、BIOS 配置、內存狀態、磁盤狀態、CPU 狀態)儲存在獨立于物理硬件的一小組文件中。這樣,您只需復制幾個文件就可以隨時隨地根據需要復制、保存和移動虛擬機。
CPU虛擬化發展
服務器虛擬化按照虛擬化程度可分為全虛擬化、半虛擬化、硬件輔助虛擬化。
CPU虛擬化的條件和技術難點,CPU本身有不同運行級別,這些級別對應不同權限。虛擬機執行到這些敏感指令的時候,很有可能出現錯誤,將會影響到整個機器的穩定,所以不允許VM直接執行。那就需要虛擬化平臺解決這個問題。
全虛擬化: VMM在軟件堆棧中的位置是傳統意義上操作系統所處的位置,而操作系統的位置是傳統意義上應用程序所處的位置。每個Guest OS對特殊指令訪問通信需要進行二進制轉換,以便提供到物理資源(如處理器、內存、存儲、顯卡和網卡等)的接口,模擬硬件環境。
半虛擬化: Guest OS的部分代碼被改變,從而使Guest OS會將和特權指令相關的操作都轉換為發給VMM的Hypercall(超級調用),由VMM繼續進行處理并返回結果。
硬件輔助虛擬化: 引入新的指令和運行模式,使VMM和Guest OS分別運行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS運行在Ring 0下運行。使得Guest OS的核心指令可以直接下達到計算機系統硬件執行,而不需要經過VMM。