服務器虛拟化技術要追述到IBM大型機的虛拟化 z/VM,在z系列大型機(非虛拟化操作系統是z/OS)上實現服務器虛拟化。基于z/VM可以運行上百個虛拟機。後來在Power上的KVM技術是PowerKVM;以及AIX虛拟化PowerVM,支持vSCSI和NPIV兩種技術(虛拟出系統叫VIOS)。今天的内容覆蓋了CPU虛拟化、内存虛拟化、Intel硬件輔助技術、IO虛拟化和GPU虛拟化等,技術深度科普文章;請老司機們讓車,忽略今天的内容。
請搜索“ICT_Architect”關注微信公衆号,獲取更多精彩内容。
很多讀者可能認為服務器虛拟化技術遭到了容器技術的沖擊,可能已經過時了,事實上在很多場景下,虛拟化技術并非容器所能夠替代的。所以作為要踏入雲計算領域的初學者們,還是有必要深入了解服務器虛拟化。下面我們看看虛拟化發展曆程和外在因素和推動力。
分區技術使得虛拟化層為多個虛拟機劃分服務器資源的能力;使您能夠在一台服務器上運行多個應用程序,每個操作系統隻能看到虛拟化層為其提供的虛拟硬件。
虛拟機隔離讓虛拟機是互相隔離,一個虛拟機的崩潰或故障(例如,操作系統故障、應用程序崩潰、驅動程序故障等等)不會影響同一服務器上的其它虛拟機。
封裝意味着将整個虛拟機(硬件配置、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。請搜索“ICT_Architect”關注微信公衆号,獲取更多精彩内容。
,