服務器虛擬化技術要追述到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。
虛擬化軟件架構分類
服務器虛擬化是云計算非常關鍵的技術之一,虛擬化的含義很廣泛,包括服務器、存儲、網絡以及數據中心虛擬化。其宗旨就是將任何一種形式的資源抽象成另一種形式的技術都是虛擬化。今天我們討論一下服務器虛擬化架構的分類。
寄居虛擬化: 虛擬化管理軟件作為底層操作系統(Windows或Linux等)上的一個普通應用程序,然后通過其創建相應的虛擬機,共享底層服務器資源。
裸金屬虛擬化: Hypervisor是指直接運行于物理硬件之上的虛擬機監控程序。它主要實現兩個基本功能:首先是識別、捕獲和響應虛擬機所發出的CPU特權指令或保護指令;其次,它負責處理虛擬機隊列和調度,并將物理硬件的處理結果返回給相應的虛擬機。
操作系統虛擬化: 沒有獨立的hypervisor層。相反,主機操作系統本身就負責在多個虛擬服務器之間分配硬件資源,并且讓這些服務器彼此獨立。一個明顯的區別是,如果使用操作系統層虛擬化,所有虛擬服務器必須運行同一操作系統(不過每個實例有各自的應用程序和用戶賬戶),Virtuozzo/OpenVZ/Docker等等。
混合虛擬化: 混合虛擬化模型同寄居虛擬化一樣使用主機操作系統,但不是將管理程序放在主機操作系統之上,而是將一個內核級驅動器插入到主機操作系統內核。這個驅動器作為虛擬硬件管理器(VHM)協調虛擬機和主機操作系統之間的硬件訪問。可以看到,混合虛擬化模型依賴于內存管理器和現有內核的CPU調度工具。就像裸金屬虛擬化和操作系統虛擬化架構,沒有冗余的內存管理器和CPU調度工具使這個模式的性能大大提高。
各種架構對比
裸金屬虛擬化架構與混合虛擬化架構將是未來虛擬化架構發展的趨勢,配合硬件輔助虛擬化可以達到接近物理機的運行性能。KVM、Hyper-V、VMware等主流服務器虛擬化都支持硬件輔助虛擬化。
內存虛擬化
在虛擬環境里,虛擬化管理程序就要模擬使得虛擬出來的內存仍符合客戶機OS對內存的假定和認識。在虛擬機看來,物理內存要被多個客戶OS同時使用;解決物理內存分給多個系統使用,客戶機OS內存連續性問題。
要解決以上問題引入了一層新的客戶機物理地址空間來讓虛擬機OS看到一個虛擬的物理地址,并由虛擬化管理程序負責轉化成物理地址給物理處理器執行。即給定一個虛擬機,維護客戶機物理地址到宿主機物理地址之間的映射關系;截獲虛擬機對客戶機物理地址的訪問,將其轉化為物理地址。
內存全虛擬化: 虛擬化管理程序為每個Guest都維護一個影子頁表,影子頁表維護虛擬地址(VA)到機器地址(MA)的映射關系。
內存半虛擬化技術: 當Guest OS創建一個新的頁表時,其會向VMM注冊該頁表,之后在Guest運行的時候,VMM將不斷地管理和維護這個表,使Guest上面的程序能直接訪問到合適的地址。
硬件輔助內存虛擬化: 在原有的頁表的基礎上,增加了一個EPT(擴展頁表)頁表,通過這個頁表能夠將Guest的物理地址直接翻譯為主機的物理地址。
I/O虛擬化技術
當虛擬化后,服務器的以太網端口被分割為多個后,網絡、存儲以及服務器之間的流量可能就不夠用了。當遇到I/O瓶頸時,CPU會空閑下來等待數據,計算效率會大大降低。所以虛擬化也必須擴展至I/O系統,在工作負載、存儲以及服務器之間動態共享帶寬,能夠***化地利用網絡接口。
I/O虛擬化的目標是不僅讓虛擬機訪問到它們所需要的I/O資源,而且要做好它們之間的隔離工作,更重要的是,減輕由于虛擬化所帶來的開銷。
全虛擬化: 通過模擬I/O設備(磁盤和網卡等)來實現虛擬化。對Guest OS而言,它所能看到就是一組統一的I/O設備,VMM截獲Guest OS對I/O設備的訪問請求,然后通過軟件模擬真實的硬件。這種方式對Guest而言非常透明,無需考慮底層硬件的情況。比如Guest操作的是磁盤類型、物理接口等等。
半虛擬化: 通過前端、后端架構,將Guest的I/O請求通過一個環狀隊列傳遞到特權域(也被稱為Domain0)。因為這種方式的相關細節較多,所以會在后文進行深入分析。
硬件輔助虛擬化: ***代表性莫過于Intel的VT-d/VT-c,AMD的IOMMU和PCI-SIG的IOV等。這種技術也需要相應網卡配合實現,目前常見的網卡分為普通網卡、VMDq直通和SR-IOV。
普通網卡采用Domin0網橋隊列。
VMDq通過VMM在服務器的物理網卡中為每個虛機分配一個獨立的隊列,虛機出來的流量可直接經過軟件交換機發送到指定隊列上,軟件交換機無需進行排序和路由操作,Hyper-V就是采用這種模式。
SR-IOV通過創建不同虛擬功能(VF)的方式,給虛擬機使用物理獨立網卡,實現虛擬機直接跟硬件網卡通信,不再經過軟件交換機,減少了虛擬化管理程序層的地址轉換。
Intel硬件對虛擬化支持
VT-x技術 為IA 32 處理器增加了VMX root operation 和 VMX non-root operation兩種操作模式。VMM自己運行在 VMX root operation 模式,GuestOS運行在VMXnon-root operation 模式。兩種操作模式都支持 Ring0-Ring 3特權運行級別,因此 VMM和 Guest OS 都可以自由選擇它們所期望的運行級別。允許虛擬機直接執行某些指令,減少VMM負擔。VT-x指至強處理器的VT技術,VT-i指安騰處理器的VT技術。
VT-d(VT for Direct I/O)主要在芯片組中實現,允許虛擬機直接訪問I/O設備,以減少VMM和CPU的負擔。其核心思想就是讓虛擬機能直接使用物理設備,但是這會牽涉到I/O地址訪問和DMA的問題,而VT-d通過采用DMA重映射和I/O頁表來解決這兩個問題,從而讓虛擬機能直接訪問物理設備。
VT-c(VTfor Connectivity)主要在網卡上實現,包括兩個核心技術VMDq和VMDc。VMDq通過網卡上的特定硬件將不同虛擬機的數據包預先分類,然后通過VMM分發給各虛擬機,以此減少由VMM進行數據包分類的CPU開銷。VMDc允許虛擬機直接訪問網卡設備,Single Root I/O Virtualization(SR-IOV)是PCI-SIG規范,可以將一個PCIe設備分配給多個虛擬機來直接訪問。
可信執行技術(TXT)通過使用高級的模塊芯片,可以有效確保用戶計算機免受各種安全威脅。主要是通過硬件內核和子系統來控制被訪問的計算機資源。使得計算機病毒、惡意代碼、間諜軟件和其他安全威脅將不復存在。
GPU及GPU虛擬化技術
GPU直通將GPU設備直通給虛擬機;GPU共享則將GPU設備直通給GPU server虛擬機,GPU server可與GPU client共享其 GPU設備;GPU虛擬化是指將GPU設備可虛擬化為n個vGPU,對應的n個虛擬機可同時直接使用該GPU設備,支持虛擬化的GPU設備可配置為直通或虛擬化類型。
GPU虛擬化通過VGX GPU硬件虛擬化功能,把一個物理GPU設備虛擬為多個虛擬GPU設備供虛擬機使用,每個虛擬機通過綁定的vGPU可以直接訪問物理GPU的部分硬件資源,所有vGPU都能夠分時共享訪問物理GPU的3D圖形引擎和視頻編解碼引擎,并擁有獨立的顯存。
GPU虛擬化功能支持將一個物理GPU設備可同時供多個虛擬機使用,而GPU直通中一個GPU設備只能給一個虛擬機使用。GPU虛擬化使同時使用同一GPU物理設備的虛擬機間互不影響,系統自動分配物理GPU設備的處理能力給多個虛擬機,而GPU共享是通過GPU server掛載GPU設備,在主機上建立GPU Server與GPU client的高速通訊機制,使得GPU client可以共享GPU server的GPU設備,GPU client是否享有GPU功能完全依賴于GPU server。