• <blockquote id="s4gyg"></blockquote>
  • <blockquote id="s4gyg"><samp id="s4gyg"></samp></blockquote>
    <blockquote id="s4gyg"></blockquote>
  • <blockquote id="s4gyg"></blockquote>

    C114通信網  |  通信人家園

    技術
    2021/6/16 10:20

    NFV關鍵技術:計算虛擬化概述

    移動Labs  李冰

    Labs 導讀

    所謂計算虛擬化,從狹義角度可理解為對單個物理服務器的虛擬化,主要包括對服務器上的CPU、內存、I/O設備進行虛擬化,目的就是實現多個虛擬機能各自獨立、相互隔離地運行于一個服務器之上。從廣義角度還可延伸到云資源池下,各類資源池組網場景下的CPU、內存、I/O設備等資源進行整合、抽象和虛擬化。

    1

    服務器虛擬化平臺概念回顧

    在上一篇文章《虛擬化基礎》中,我們介紹虛擬化基礎的一些基本概念,這里我們按照服務器平臺虛擬化后的一個分層結構來簡單回顧下。如下:

    一個完整的服務器虛擬化平臺從下到上包括以下幾個部分:

    底層物理資源:包括網卡、CPU、內存、存儲設備等硬件資源,一般將包含物理資源的物理機稱為宿主機(Host)。

    虛擬機監控器(Virtual Machine Monitor,VMM):VMM是位于虛擬機與底層硬件設備之間的虛擬層,直接運行于硬件設備之上,負責對硬件資源進行抽象,為上層虛擬機提供運行環境所需資源,并使每個虛擬機都能夠互不干擾、相互獨立地運行于同一個系統中。

    抽象化的虛擬機硬件:即虛擬層呈現的虛擬化的硬件設備。虛擬機能夠發現哪種硬件設施,完全由VMM決定。虛擬設備可以是模擬的真實設備,也可以是現實中并不存在的虛擬設備,如VMware的vmxnet網卡。

    虛擬機:相對于底層提物理機,也稱為客戶機(Guest)。運行在其上的操作系統則稱為客戶機操作系統(Guest OS)。每個虛擬機操作系統都擁有自己的虛擬硬件,并在一個獨立的虛擬環境中執行。通過VMM的隔離機制,每個虛擬機都認為自己作為一個獨立的系統在運行。

    同時,在上一篇文章《虛擬化基礎》中,我們提到過Hypervisor就是VMM。其實,這個說法并不準確,至少在VMware的虛擬化解決方案中不準確,在VMware的ESX產品架構中,VMM和Hypervisor還是有一定區別的,如下圖所示。

    Hypervisor是位于虛擬機和底層物理硬件之間的虛擬層,包括boot loader、x86 平臺硬件的抽象層,以及內存與CPU調度器,負責對運行在其上的多個虛擬機進行資源調度。而VMM則是與上層的虛機一一對應的進程,負責對指令集、內存、中斷與基本的I/O設備進行虛擬化。當運行一個虛擬機時,Hypervisor中的vmkernel會裝載VMM,虛擬機直接運行于VMM之上,并通過VMM的接口與Hypervisor進行通信。而在KVM和Xen架構中,虛擬層都稱為Hypervisor,也就是VMM=Hypervisor。

    判斷一個VMM能否有效確保服務器系統實現虛擬化功能,必須具備以下三個基本特征:

    等價性(Equivalence Property):一個運行于VMM控制之下的程序(虛擬機),除了時序和資源可用性可能不一致外,其行為應該與相同條件下運行在物理服務器上的行為一致。

    資源可控性(Resource Control Property):VMM必須能夠完全控制虛擬化的資源。

    效率性(Efficiency Property):除了特權指令,絕大部分機器指令都可以直接由硬件執行,而無需VMM干涉控制。

    上述三個基本特征也是服務器虛擬化實現方案的指導思想。

    2

    x86平臺虛擬化面臨的問題與挑戰

    基于x86的操作系統在一開始就被設計為能夠直接運行在裸機硬件環境之上,所以自然擁有整個機器硬件的控制權限。為確保操作系統能夠安全地操作底層硬件,x86平臺使用了特權模式和用戶模式的概念對內核程序與用戶應用程序進行隔離。在這個模型下,CPU提供了4個特權級別,分別是Ring0、1、2和3。如下圖所示:

    Ring 0是最高特權級別,擁有對內存和硬件的直接訪問控制權。Ring 1、2和3權限依次降低, 無法執行操作訥河系統級別的指令集合。相應的,運行于Ring 0的指令稱為“特權指令”;運行于其他級別的稱為“非特權指令”。常見的操作系統如Linux與Windows都運行于Ring 0,而用戶級應用程序運行于Ring 3。如果低特權級別的程序執行了特權指令,會引起“ 陷入”(Trap)內核態,并拋出一個異常。

    當這種分層隔離機制應用于虛擬化平臺,為了滿足VMM的“資源可控” 特征,VMM必須處于Ring 0級別控制所有的硬件資源,并且執行最高特權系統調用。而虛擬機操作系統Guest OS則要被降級運行在Ring 1級別,故Guest OS在執行特權指令時都會引起”陷入“。如果VMM能夠正常捕獲異常,模擬Guest OS發出的指令并執行,就達到了目的。這就是IBM的Power系列所采用的特權解除和陷入模擬的機制,支持這種特性的指令集合通常被認為是“可虛擬化的”。

    但是...但是...但是...x86平臺的指令集是不虛擬化的。為什么這么說?首先我們來看下x86平臺指令集分類,x86平臺的指令集大致分為以下4類:

    訪問或修改機器狀態的指令。

    訪問或修改敏感寄存器或存儲單元的指令, 比如訪問時鐘寄存器和中斷寄存器。

    訪問存儲保護系統或內存、地址分配系統的指令(段頁之類)。

    所有I/O指令。

    其中,1~4在x86平臺都屬于敏感指令,第1、4類指令屬于敏感指令中的特權指令,由操作系統內核執行,Guest OS在執行兩類指令時,因為不處于Ring 0級別,所以會陷入,并拋出異常,這個異常會被VMM捕獲,然后模擬Gust OS去執行,并將執行結果返回給Guest OS。到此為止,一切都OK。但是,第2、3類指令屬于非特權指令,可以由應用程序調用,也就是可以在Ring 3級別執行,并調用Guest OS內核進程來完成。當應用程序調用這些指令時,由于要修改內存和內部寄存器,這些狀態修改需要由Guest OS完成,而Guse OS此時運行在Ring 1級別,雖然也會發生陷入,但是不會拋出異常,這樣VMM就捕獲不到,也就無法模擬完成。因此,當Guest OS執行這些指令就會導致虛擬機狀態異常,甚至影響服務器的狀態。在x86平臺下,這類指令共有19個,我自己稱之為x86平臺敏感指令中的邊界指令。

    就是因為x86平臺指令集有上述缺陷,所以為了計算虛擬化技術在x86平臺應用,各大虛擬化廠商推出了五花八門的虛擬化技術,其目的都是圍繞“如何捕獲模擬這19條邊界指令”這一命題來設計。在很長一段時間,都是通過軟件的方式來解決這個問題,其中包括無需修改內核的全虛擬化與需要修改內核的半虛擬化。盡管半虛擬化要求修改Guest OS內核的方式在一定程度上并不滿足“ 等價性”要求,但是在性能上卻明顯優于全虛擬化。直到2005年IntelAMD公司分別推出了VT-d與AMD-V,能夠在芯片級別支持全虛擬化時,虛擬化技術才得到徹底完善,這就是現在稱之為的硬件輔助虛擬化技術。

    3

    x86平臺計算虛擬化解決方案

    3.1 全虛擬化

    全虛擬化(Full Virtualization)與半虛擬化(Para- Virtualization)的劃分,是相對于是否修改Guest OS而言的。如下圖所示,全虛擬化通過一層能夠完整模擬物理硬件環境的虛擬軟件,使得Guest OS與底層物理硬件徹底解耦。因此,Guest OS無需任何修改,虛擬化的環境對其完全透明,也就是說在全虛方案中,虛擬機感知不到自己處于虛擬化環境中,認為自己一直運行在物理硬件上。如下圖所示:

    在實現上,通常是結合特權指令的二進制翻譯機制與一般指令的直接執行的方式。具體來說, 對于Guest OS發出的特權指令和邊界指令,VMM會進行實時翻譯,并緩存結果(目的是提高虛擬化性能),而對于一般級別的指令,則無需VMM干涉,可以直接在硬件上執行。異常-捕獲-模擬的過程如下圖所示:

    由于虛擬化環境對Guest OS是完全透明的,全虛擬化模式對于虛擬機的遷移以及可移植性是最佳解決方案,虛擬機可以無縫地從虛擬環境遷移到物理環境中。但是,軟件模擬實現的全虛擬化無疑會增加VMM的上下文切換,因為這種方案實現的虛擬機性能不如半虛擬化方案。VMware的ESX系列產品 和Workstations系列產品是全虛擬化技術的典型產品。

    3.2半虛擬化

    如前所述,x86平臺上一直存在一些Ring 3級別可以執行的邊界指令,盡管全虛擬化模式通過實時譯這些特殊指令解決了這一問題,但是實現開銷較大,性能并不如在實際物理機上運行。為了改善性能,半虛擬化技術應運而生, “Para-Virtualization” 可理解為通過某種輔助的方式實現虛擬化。半虛擬化的解決方案如下圖所示。

    半虛擬化在Guest OS和虛擬層之間增加了一個特殊指令的過渡模塊,通過修改Guest OS內核,將執行特權指令和邊界指令替換為對虛擬層進行hypercall的調用方式來達到目的。同時,虛擬層也對內存管理、中斷處理、時間同步提供了hypercall的調用接口。Hypercall調用過程如下圖所示:

    通過這種方式,虛擬機運行的性能得以顯著提升。但是,對于某些無法修改內核的操作系統,比如:Windows,則不能使其運行于半虛擬化環境中。而且,由于需要修改Guest OS內核,無法保證虛擬機在物理環境與虛擬環境之間的透明切換。開源項目Xen和華為6.3版本之前的虛擬化解決方案Fusion Compute就是通過修改Linux內核以及提供I/O虛擬化操作的Domain 0的特殊虛擬機,使得運行于虛擬化環境上的虛擬機性能可以接近運行于物理環境的性能,屬于半虛擬化技術方案的典型產品。但是,隨著業務規模的增大,特殊虛機Domain 0是這種解決方案擴展性和性能方面的瓶頸。

    3.3硬件輔助虛擬化

    所謂“解鈴還須系鈴人”,針對敏感指令引發的一系列虛擬化問題,處理器硬件廠商最終給出了自己的解決方案。2005年Intel與AMD公司都效法IBM大型機虛擬化技術分別推出VT-x和AMD-V技術。如下圖所示:

    第一代VT-x與AMD-V都試圖通過定義新的運行模式,使Guest OS恢復到Ring 0,而讓VMM運行在比Ring 0低的級別(可以理解為Ring -1)。比如:Intel公司的VT-x解決方案中,運行于非根模式下的Guest OS可以像在非虛擬化平臺下一樣運行于Ring 0級別,無論是Ring 0發出的特權指令還是Ring 3發出的敏感指令都會被陷入到根模式的虛擬層。VT-x解決方案具體如下圖所示:

    VT-x與AMD-V推出之后,完美解決解決x86平臺虛擬化的缺陷,且提升了性能,所以各個虛擬化廠商均快速開發出對應的產品版本,用于支持這種技術。比如:KVM-x86、Xen 3.0與VMware ESX 3.0之后的虛擬化產品。隨后Intel和AMD在第二代硬件輔助虛擬化技術中均推出了針對I/O的硬件輔助虛擬化技術VT-d和IOMMU。

    總結:x86平臺下的三種虛擬化技術,都是圍繞x86在虛擬化上的一些缺陷產生的。下圖對三種虛擬化技術進行了比較。

    從圖中可以看出,全虛擬化與半虛擬化的Guest OS的特權級別都被壓縮在Ring 1中,而硬件虛擬化則將Guest OS恢復到了Ring 0級別。在半虛擬化中,Guest OS的內核經過修改,所有敏感指令和特權指令都以Hypercall的方式進行調用,而在全虛擬化與硬件虛擬化中,則無需對Guest OS進行修改。全虛擬化中對于特權指令和敏感指令采用了動態二進制翻譯的方式,而硬件虛擬化由于在芯片中增加了根模式的支持,并修改了敏感指令的語義,所有特權指令與敏感指令都能夠自動陷入到根模式的VMM中。

    給作者點贊
    0 VS 0
    寫得不太好

    免責聲明:本文僅代表作者個人觀點,與C114通信網無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。

    熱門文章
      最新視頻
      為您推薦

        C114簡介 | 聯系我們 | 網站地圖 | 手機版

        Copyright©1999-2021 c114 All Rights Reserved | 滬ICP備12002291號

        C114 通信網 版權所有 舉報電話:021-54451141

        曰本AV