• <dd id="ow24i"></dd>
  • <kbd id="ow24i"><samp id="ow24i"></samp></kbd>
    <sup id="ow24i"><input id="ow24i"></input></sup>
    <td id="ow24i"><bdo id="ow24i"></bdo></td>
  • <button id="ow24i"></button>
  • <blockquote id="ow24i"></blockquote><table id="ow24i"></table>
    新聞動態
    技術中心
    技術中心
    當前位置:科達自控 >> 服務支持 >> 技術中心 >> 瀏覽文章
    服務器虛擬化原理
    作者:趙功 日期:2021年05月31日 來源:技術部 瀏覽:

    內容導讀:虛擬化技術源于大型機,最早可以追溯到20世紀六、七十年代大型機上的虛擬分區技術,即允許在一臺主機上運行多個操作系統,讓用戶盡可能充分地利用昂貴的大型機資源。隨著技術的發展和市場競爭的需要

    (一)概述

    虛擬化技術源于大型機,最早可以追溯到20世紀六、七十年代大型機上的虛擬分區技術,即允許在一臺主機上運行多個操作系統,讓用戶盡可能充分地利用昂貴的大型機資源。隨著技術的發展和市場競爭的需要,虛擬化技術向小型機或UNIX服務器上移植,只是由于真正使用大型機和小型機的用戶還是少數,再加上各廠商產品和技術之間的不兼容,所以虛擬化技術不太被公眾所關注。(注:由于x86架構在設計之初并沒有考慮支持虛擬化技術,它本身的結構和復雜性使得在其之上進行虛擬化非常困難,早期的x86架構并沒有成為虛擬化技術的受益者。)

    20世紀90年代,虛擬化軟件廠商采用一種軟件解決方案,以VMM(Virtual Machine Monitor,虛擬機監視器)為中心使x86服務器平臺實現虛擬化。然而在這種純軟件的“全虛擬化”模式下,每個Guest OS(客戶操作系統)獲得的關鍵平臺資源都要由VMM控制和分配,需要利用二進制轉換,而二進制轉換帶來的開銷使得“完全虛擬化”的性能大打折扣。為解決性能問題,出現了一種新的虛擬化技術“半虛擬化”,即不需要二進制轉換,而是通過對客戶操作系統進行代碼級修改,使定制的Guest OS獲得額外的性能和高擴展性;但是修改Guest OS也帶來了系統指令級的沖突及運行效率問題,需要投入大量的優化工作。當前,虛擬化技術已經發展到了硬件支持的階段,“芯片輔助虛擬化”技術就是把純軟件虛擬化技術的各項功能用硬件電路來實現。其可減少VMM運行的系統開銷,可同時滿足CPU半虛擬化和二進制轉換技術的需求,使VMM的設計得到簡化,進而使VMM能夠按通用標準進行編寫。芯片輔助虛擬化技術除了在處理器上集成芯片輔助虛擬化指令,同時也提供I/O方面的虛擬化支持,最終可實現整個平臺的虛擬化。虛擬化技術的實現和發展,都向人們展示了虛擬化應用的廣闊前景。

    x86架構服務器的虛擬化是一個封閉的體系,由服務器原廠商提供,這里將不再涉及,后面的虛擬化和虛擬化管理都是指x86服務器的虛擬化。

    虛擬化(Virtualization)是資源的邏輯表示,而不受物理限制的約束。虛擬化技術的實現形式是在系統中加入一個虛擬化層,將下層的資源抽象成另一種形式的資源,提供給上層使用。

    服務器虛擬化就是使軟件和硬件相互分離,即在操作系統與硬件之間加入一個虛擬化軟件層VMM,通過空間上的分割、時間上的分時以及模擬,將服務器物理資源抽象成邏輯資源,向上層操作系統提供一個與它原先期待一致的服務器硬件環境VM(Virtual Machine,虛擬機),使得上層操作系統可以直接運行在虛擬環境上,并允許具有不同操作系統的多個虛擬機相互隔離,并發運行在同一臺物理機上,從而提供更高的IT資源利用率和靈活性。

    服務器虛擬化的虛擬化軟件層即為虛擬機監視器(VMM),也稱Hypervisor,常見的Hypervisor分為兩類:

    Type-I(裸金屬型)VMM直接運作在裸機上,使用和管理底層的硬件資源,Guest OS對真實硬件資源的訪問都要通過VMM來完成,作為底層硬件的直接操作者,VMM擁有硬件的驅動程序。

    Type-II(宿主型)VMM之下還有一層宿主操作系統,由于Guest OS對硬件的訪問必須經過宿主操作系統,因而其帶來了額外的性能開銷,但可充分利用宿主操作系統提供的設備驅動和底層服務來進行內存管理、進程調度和資源管理等。

    服務器虛擬化前后的巨大差異,源于虛擬機與物理服務器的本質區別。

    虛擬機是由虛擬化層提供的高效、獨立的虛擬計算機系統,每臺虛擬機都是一個完整的系統,它具有處理器、內存、網絡設備、存儲設備和BIOS,因此操作系統和應用程序在虛擬機中的運行方式與它們在物理服務器上的運行方式沒有區別。

     

    與物理服務器相比,虛擬機不是由真實的電子元件組成,而是由一組虛擬組件(文件)構成,這些虛擬組件與物理服務器的硬件配置無關。與物理服務器相比,虛擬機具有以下優勢:

    抽象解耦

     

    ① 可在任何相同架構的服務器上運行;

     

    ② 上層應用操作系統不需修改即可運行。

     

    分區隔離

     

    ③ 可與其他虛擬機同時運行;

     

    ④ 實現數據處理、網絡連接和數據存儲的安全隔離。

     

    封裝移動

     

    ⑤ 可封裝于文件之中,通過簡單的文件復制實現快速部署、備份及還原;

     

    ⑥ 可便捷地將整個系統(包括虛擬硬件、操作系統和配置好的應用程序)在不同的物理服務器之間進行遷移,甚至可以在虛擬機正在運行的情況下進行遷移。

     

    彈性擴展

     

    ⑦ 可對單個物理服務器上的虛擬資源(虛擬CPU、虛擬網卡等)進行按需動態擴展(不停機);

     

    ⑧ 可作為即插即用的虛擬工具進行構建和分發,按集群彈性資源分配機制實現動態擴展。

    (二)服務器虛擬化實現

     

    VMM對物理資源的虛擬可以劃分為3個部分:CPU虛擬化、內存虛擬化和I/O設備虛擬化,其中以CPU的虛擬化最為關鍵。

     

    1) CPU虛擬化

    經典的虛擬化方法

    現代計算機體系結構一般至少有兩個特權級(即用戶態和核心態,x864個特權級,即Ring0Ring3)用來分隔系統軟件和應用軟件。那些只能在處理器的最高特權級(內核態)執行的指令稱為特權指令,一般可讀寫系統關鍵資源的指令(即敏感指令)絕大多數都是特權指令(x86存在若干敏感指令是非特權指令的情況)。如果執行特權指令時處理器的狀態不在內核態,通常會引發一個異常信號,并交由系統軟件來處理這個非法訪問(陷入)。經典的虛擬化方法就是使用“特權解除”和“陷入-模擬”的方式,即將Guest OS運行在非特權級,而將VMM運行于最高特權級(完全控制系統資源)。解除了Guest OS的特權級后,Guest OS的大部分指令仍可以在硬件上直接運行,只有執行到特權指令時,才會陷入到VMM模擬執行(“陷入-模擬”)!跋萑-模擬” 的本質是保證可能影響VMM正確運行的指令由VMM模擬執行,大部分的非敏感指令還是照常運行。

    x86的虛擬化漏洞

    因為x86指令集中有若干條指令是需要被VMM捕獲的敏感指令,但是卻不是特權指令(稱為臨界指令),因此“特權解除”并不能導致它們發生陷入模擬,執行它們不會發生自動的“陷入”而被VMM捕獲,從而阻礙了指令的虛擬化。

    x86下的敏感指令分類大致如下:

    ① 訪問或修改機器狀態或虛擬機狀態的指令;

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

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

    ④ 所有I/O指令。

     

    其中第一、四項都是特權指令,在內核態下執行時會自動產生陷阱被VMM捕獲,但是第二、三項不是特權指令,而是臨界指令。部分臨界指令會因為Guest OS的權限解除而執行失敗,但是卻不會拋出異常,所以不能被捕獲,如第三項中的VERW指令。

    由于x86指令集中有十幾條敏感指令不是特權指令,因此x86無法使用經典的虛擬化技術完全虛擬化。鑒于x86指令集本身的局限,長期以來針對x86的虛擬化實現大致分為兩派:Full virtualization派和Para virtualization派。兩派區別主要在對非特權敏感指令的處理上,Full virtualization派采用的是動態的方法,即運行時監測,捕捉后在VMM中模擬;而Paravirtualization派則主動進攻,將所有用到的非特權敏感指令全部替換,這樣就減少了大量的“陷入—上下文切換—模擬—上下文切換”過程,獲得了大幅的性能提升。

    全虛擬化

    全虛擬化指所抽象的VM具有完全的物理機特性,操作系統在其上運行不需要任何修改。Full virtualization派秉承無需修改直接運行的理念,對“運行時監測,捕捉后模擬”的過程進行優化。該派內部的實現又有些差別,其中以基于二進制翻譯 (BT) 的全虛擬化為代表,其主要思想是在執行時將VM上執行的Guest OS指令,翻譯成x86指令集的一個子集,其中的敏感指令被替換成陷入指令。翻譯過程與指令執行交叉進行,不含敏感指令的用戶態程序可以不經翻譯直接執行。

    半虛擬化

    半虛擬化指需操作系統協助的虛擬化,在其上運行的操作系統需要修改。

    Para virtualization派的基本思想是通過修改Guest OS的代碼,將含有敏感指令的操作,替換為對VMM的超調用Hypercall,它類似于OS的系統調用,將控制權轉移到VMM,該技術因Xen項目而廣為人知。該技術的優勢在于VM的性能能接近于物理機,缺點在于需要修改Guest OS(如:Windows系統不支持修改)及會增加維護成本,修改Guest OS會導致操作系統對特定hypervisor產生依賴性,因此很多虛擬化廠商基于Xen開發的虛擬化產品部分已經放棄了Linux半虛擬化,而專注基于芯片輔助的全虛擬化開發,以支持未經修改的操作系統。

    芯片輔助虛擬化

    芯片輔助虛擬化指借助處理器硬件的支持來實現高效的全虛擬化。

    其基本思想就是引入新的處理器運行模式和新的指令,使得VMMGuest OS運行于不同的模式下,Guest OS運行于受控模式,原來的一些敏感指令在受控模式下會全部陷入VMM,這樣就解決了部分非特權的敏感指令的“陷入-模擬”難題。而且模式切換時上下文的保存恢復由硬件來完成,這樣就大大提高了“陷入-模擬”時上下文切換的效率。以Intel VT-x芯片輔助虛擬化技術為例,該技術增加了在虛擬狀態下的兩種處理器工作模式:根(Root)操作模式和非根(Nonroot)操作模式。Xen運作在根操作模式下,而Guest OS運行在非根操作模式下。這兩個操作模式分別擁有自己的特權級環,Xen和未經修改內核的Guest OS運行在這兩個操作模式的0環。這樣,既能使Xen運行在0環,也能使Guest OS運行在0環,避免修改Guest OS。根操作模式和非根操作模式的切換是通過新增的CPU指令(VMXON,VMXOFF)來完成的。

    芯片輔助虛擬化技術消除了操作系統的ring轉換問題,降低了虛擬化門檻,支持任何操作系統的虛擬化而無需修改OS內核,得到了虛擬化軟件廠商的支持。芯片輔助虛擬化技術已經逐漸消除軟件虛擬化技術之間的差別,并成為未來的發展趨勢。圖3.7vCPU調度分配機制。

    從虛擬機系統的結構與功能劃分可以看出,客戶操作系統與虛擬機監視器共同構成了虛擬機系統的兩級調度框架,圖3.7是一個多核環境下虛擬機系統的兩級調度框架?蛻舨僮飨到y負責第二級調度,即線程或進程在vCPU上的調度(將核心線程映射到相應的虛擬CPU)。虛擬機監視器負責第一級調度,即vCPU在物理處理單元上的調度。兩級調度的調度策略和機制不存在依賴關系。vCPU調度器負責物理處理器資源在各個虛擬機之間的分配與調度,本質上即把各個虛擬機中的vCPU按照一定的策略和機制進行調度,在物理處理單元上可以采用任意的策略來分配物理資源,滿足虛擬機的不同需求。vCPU可以調度在一個或多個物理處理單元執行(分時復用或空間復用物理處理單元),也可以與物理處理單元建立一對一固定的映射關系(限制訪問指定的物理處理單元)。

    2) 內存虛擬化

    因為VMM掌控所有系統資源,因此其握有整個內存資源,負責頁式內存管理,維護虛擬地址到機器地址的映射關系。因Guest OS本身亦有頁式內存管理機制,則有VMM的整個系統就比正常系統多了一層映射。

    虛擬地址(VA):指 Guest OS . 提供給其應用程序使用的線性地址空間。

    物理地址(PA):經VMM抽象的、虛擬機看到的偽物理地址。

    機器地址(MA):真實的機器地址,即地址總線上出現的地址信號。

    映射關系如下:Guest OS: PA = f(VA)、VMM: MA = g(PA)。

    VMM維護一套頁表,負責PAMA的映射。Guest OS維護一套頁表,負責VAPA的映射。實際運行時,用戶程序訪問VA1,經Guest OS的頁表轉換得到PA1,再由VMM介入,使用VMM的頁表將PA1轉換為MA1。

     

    普通 MMU(Memory Management Unit,內存管理單元)只能完成一次虛擬地址到物理地址的映射,在虛擬機環境下,經過MMU轉換所得到的“物理地址”并不是真正的機器地址。若需得到真正的機器地址,則必須由VMM介入,再經過一次映射才能得到總線上使用的機器地址。如果虛擬機的每個內存訪問都需要VMM介入,并由軟件模擬地址轉換,那么效率是很低下的,幾乎不具有實際可用性。為實現虛擬地址到機器地址的高效轉換,現普遍采用的思想是:由VMM根據映射fg生成復合的映射fg,并直接將這個映射關系寫入MMU。當前采用的頁表虛擬化方法主要是MMU類虛擬化(MMU Paravirtualization)和影子頁表,后者已被內存的芯片輔助虛擬化技術所替代。

    MMU Paravirtualization

    其基本原理是:當Guest OS創建一個新的頁表時,會從它所維護的空閑內存中分配一個頁面,并向Xen注冊該頁面,Xen會剝奪Guest OS對該頁表的寫權限,之后Guest OS對該頁表的寫操作會到Xen加以驗證和轉換。Xen會檢查頁表中的每一項,確保它們只映射了屬于該虛擬機的機器頁面,而且不得包含對頁表頁面的可寫映射。然后,Xen會根據自己所維護的映射關系,將頁表項中的物理地址替換為相應的機器地址,最后再把修改過的頁表載入MMU。如此,MMU就可以根據修改過頁表直接完成虛擬地址到機器地址的轉換。

    內存芯片輔助虛擬化

    內存的芯片輔助虛擬化技術是用于替代虛擬化技術中軟件實現的“影子頁表”的一種芯片輔助虛擬化技術,其基本原理是:GVA(客戶操作系統的虛擬地址)GPA(客戶操作系統的物理地址)HPA(宿主操作系統的物理地址),兩次地址轉換都由CPU硬件自動完成(軟件實現內存開銷大、性能差)。以VT-x技術的頁表擴充技術Extended Page Table(EPT)為例,首先,VMM預先把客戶機物理地址轉換到機器地址的EPT頁表設置到CPU中;其次,客戶機修改客戶機頁表無需VMM干預;最后,地址轉換時,CPU自動查找兩張頁表完成客戶機虛擬地址到機器地址的轉換。使用內存的芯片輔助虛擬化技術,客戶機運行過程中無需VMM干預,這節省了大量軟件開銷,內存訪問性能接近物理機。

    3) I/O設備虛擬化

    VMM通過I/O虛擬化來復用有限的外設資源,其通過截獲Guest OSI/O設備的訪問請求,然后通過軟件模擬真實的硬件,目前I/O設備的虛擬化方式主要有3種:設備接口完全模擬、前端/后端模擬、直接劃分。

     

    設備接口完全模擬

    設備接口完全模擬,即軟件精確模擬與物理設備完全一樣的接口,Guest OS驅動無需修改就能驅動這個虛擬設備。其優點是沒有額外的硬件開銷,可重用現有驅動程序,缺點是為完成一次操作要涉及多個寄存器的操作,使得VMM要截獲每個寄存器訪問并進行相應的模擬,導致多次上下文切換,性能較低。

    前端/后端模擬

    VMM提供一個簡化的驅動程序(后端,Backend),Guest OS中的驅動程序為前端 (Frontend,FE),前端驅動將來自其他模塊的請求通過與Guest OS間的特殊通信機制直接發送給Guest OS的后端驅動,后端驅動在處理完請求后再發回通知給前端(Xen即采用該方法)。其優點是由于基于事務的通信機制,能在很大程度上減少上下文切換開銷,沒有額外的硬件開銷;缺點是需要VMM實現前端驅動,后端驅動可能成為瓶頸。

    直接劃分

    直接劃分即直接將物理設備分配給某個Guest OS,由Guest OS直接訪問I/O設備(不經VMM),目前與此相關的技術有IOMMU(Intel VT-d,PCI-SIGSR-IOV),旨在建立高效的I/O虛擬化直通道。其優點是直接訪問減少了虛擬化開銷,缺點是需要購買額外的硬件。

    優點:1.降低物理基礎架構的成本

    2. 降低數據中心的運營成本(能耗和散熱)

    3. 提高工作效率、運營靈活性,大幅提高系統可靠性

    上一篇文章:PLC項目調試七步法 下一篇文章:沒有了
    相關鏈接
    發表評論
    用戶評論
    版權所有 山西科達自控股份有限公司 晉ICP備09004627號-2  晉公網安備 14019202000008號   
    官方微信
    新浪官方微博
    騰訊官方微博
    99视频这里只有精品_日本高清色倩视频在线观看_人妻无码人妻有码中文字幕_欧美亚洲国产日韩一区二区