歡迎光臨
每天分享高質量文章

服務器虛擬化技術深度科普

 

       服務器虛擬化技術要追述到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。

赞(0)

分享創造快樂