Xen虛擬化基本原理詳解

標籤: 虛擬化 xen
原創做品,容許轉載,轉載時請務必以超連接形式標明文章 原始出處 、做者信息和本聲明。不然將追究法律責任。 http://wangzan18.blog.51cto.com/8021085/1727106

查看虛擬化技術詳解請點擊html

1、Xen概述前端

    Xen是由劍橋大學計算機實驗室開發的一個開源項目。是一個直接運行在計算機硬件之上的用以替代操做系統的軟件層,它可以在計算機硬件上併發的運行多個客戶操做系統(Guest OS)。目前已經在開源社區中獲得了極大的推進。後端

    Xen支持x8六、x86-6四、安騰( Itanium)、Power PC和ARM多種處理器,所以Xen能夠在大量的計算設備上運行,目前Xen支持Linux、NetBSD、FreeBSD、Solaris、 Windows和其餘經常使用的操做系統做爲客戶操做系統在其管理程序上運行。安全

2、Xen虛擬化類型網絡

    Xen對虛擬機的虛擬化分爲兩大類,半虛擬化(Para virtualization)和徹底虛擬化(Hardware VirtualMachine)。架構

一、半虛擬化(PV)併發

    半虛擬化(Paravirtualization)有些資料稱爲「超虛擬化」,簡稱爲PV,是Xen主導的虛擬化技術。這種技術容許虛擬機操做系統感知到 本身運行在Xen Hypervisor上而不是直接運行在硬件上,同時也能夠識別出其餘運行在相同環境中的客戶虛擬機。dom

    在Xen Hypervisor上運行的半虛擬化的操做系統,爲了調用系統管理程序(Xen Hypervisor),要有選擇地修改操做系統,然而卻不須要修改操做系統上運行的應用程序。因爲 Xen 須要修改操做系統內核,因此您不能直接讓當前的 Linux 內核在 Xen 系統管理程序中運行,除非它已經移植到了Xen 架構。不過,若是當前系統可使用新的已經移植到 Xen 架構的Linux 內核,那麼您就能夠不加修改地運行現有的系統。異步

wKiom1aE5QrDbBXRAAKuHPzjwaQ004.png

wKiom1Z4wHeRyg0YAADxLwu77E4551.jpg

二、徹底虛擬化(HVM)工具

    徹底虛擬化(Hardware Virtual Machine)又稱「硬件虛擬化」,簡稱HVM,是指運行在虛擬環境上的虛擬機在運行過程當中始終感受本身是直接運行在硬件之上的,而且感知不到在相同硬件環境下運行着其餘虛擬機的虛擬技術。

   在Xen Hypervisor運行的徹底虛擬化虛擬機,所運行的操做系統都是標準的操做系統,即:無需任何修改的操做系統版本。同時也須要提供特殊的硬件設備。

   值的注意的是,在Xen上虛擬的Windows虛擬機必須採用徹底虛擬化技術。

wKioL1aE5RHhvCs6AALRfLvs54Q913.png

wKioL1aFTAvyN4lWAAJrZzsLU0k578.png

三、CPU徹底虛擬化,IO半虛擬化(PVHVM)

    爲了提升性能,徹底虛擬化的Guests可使用特殊的半虛擬設備驅動程序(PVHVM或PV-on-HVM驅動)。這些驅動程序在HVM環境下優化你的 PV驅動,模擬的磁盤和網絡IO旁路運行,從而讓你的PV在HVM中有更好的性能。這意味着你在用戶窗口操做方面能夠獲得最佳的性能。

    注意,Xen項目PV(半虛擬化)的Guest自動使用PV驅動:所以不須要這些驅動程序,由於你已經自動使用優化的驅動程序。PVHVM只會在HVM(全虛擬化)guest虛擬機中須要。

wKioL1aE6Reg3wBWAAOeTP66pjk857.png

wKiom1aFTA6RLqasAAKONNYLaWA135.png

3、Xen基本組件

  • Xen Hypervisor:直接運行於硬件之上是Xen客戶操做系統與硬件資源之間的訪問接口(如:)。經過將客戶操做系統與硬件進行分類,Xen管理系統能夠容許客戶操做系統安全,獨立的運行在相同硬件環境之上。

  • Domain 0:運行在Xen管理程序之上,具備直接訪問硬件和管理其餘客戶操做系統的特權的客戶操做系統。

  • DomainU:運行在Xen管理程序之上的普通客戶操做系統或業務操做系統,不能直接訪問硬件資源(如:內存,硬盤等),但能夠獨立並行的存在多個。

wKioL1Z4wP6zG5XZAABoXq8aIq0613.png

一、Xen Hypervisor

    Xen Hypervisor是直接運行在硬件與全部操做系統之間的基本軟件層。它負責爲運行在硬件設備上的不一樣種類的虛擬機(不一樣操做系統)進行CPU調度和內 存分配。Xen Hypervisor對虛擬機來講不僅僅是硬件的抽象接口,同時也控制虛擬機的執行,讓他們之間共享通用的處理環境。

    Xen Hypervisor不負責處理諸如網絡、外部存儲設備、視頻或其餘通用的I/O處理。

二、Domain 0

    Domain 0 是通過修改的Linux內核,是運行在Xen Hypervisor之上獨一無二的虛擬機,擁有訪問物理I/O資源的特權,而且能夠與其餘運行在Xen Hypervisor之上的其餘虛擬機進行交互。全部的Xen虛擬環境都須要先運行Domain 0,而後才能運行其餘的虛擬客戶機。

    Domain 0 在Xen中擔任管理員的角色,它負責管理其餘虛擬客戶機。

    在Domain 0中包含兩個驅動程序,用於支持其餘客戶虛擬機對於網絡和硬盤的訪問請求。這兩個驅動分別是Network Backend Driver和Block Backend Driver。

    Network Backend Driver直接與本地的網絡硬件進行通訊,用於處理來自Domain U客戶機的全部關於網絡的虛擬機請求。根據Domain U發出的請求Block Backend Driver直接與本地的存儲設備進行通訊而後,將數據讀寫到存儲設備上。

wKiom1aEnXrABiIsAACoGvcrjlU684.jpg三、Domain U

    Domain U客戶虛擬機沒有直接訪問物理硬件的權限。全部在Xen Hypervisor上運行的半虛擬化客戶虛擬機(簡稱:Domain U PV Guests)都是被修改過的基於Linux的操做系統、Solaris、FreeBSD和其餘基於UNIX的操做系統。全部徹底虛擬化客戶虛擬機(簡 稱:Domain U HVM Guests)則是標準的Windows和其餘任何一種未被修改過的操做系統。

    不管是半虛擬化Domain U仍是徹底虛擬化Domain U,做爲客戶虛擬機系統,Domain U在Xen Hypervisor上運行並行的存在多個,他們之間相互獨立,每一個Domain U都擁有本身所能操做的虛擬資源(如:內存,磁盤等)。並且容許單獨一個Domain U進行重啓和關機操做而不影響其餘Domain U。

 wKiom1Z4wU2xJVPyAAF8T1xvdn4339.png

4、Xen基本體系架構及運行原理

一、Xen體系架構

    Xen 的 VMM ( Xen Hyperviso ) 位於操做系統和硬件之間,負責爲上層運行的操做系統內核提供虛擬化的硬件資源,負責管理和分配這些資源,並確保上層虛擬機(稱爲域 Domain)之間的相互隔離。Xen採用混合模式,於是設定了一個特權域用以輔助Xen管理其餘的域,並提供虛擬的資源服務,該特權域稱爲Domain 0,而其他的域則稱爲Domain U。

    Xen向Domain提供了一個抽象層,其中包含了管理和虛擬硬件的API。Domain 0內部包含了真實的設備驅動(原生設備驅動),可直接訪問物理硬件,負責與 Xen 提供的管理 API 交互,並經過用戶模式下的管理工具來管理 Xen 的虛擬機環境。

    Xen2.0以後,引入了分離設備驅動模式。該模式在每一個用戶域中創建前端(front end)設備,在特權域(Dom0)中創建後端(back end)設備。全部的用戶域操做系統像使用普通設備同樣向前端設備發送請求,而前端設備經過IO請求描述符(IO descripror ring)和設備通道(device channel)將這些請求以及用戶域的身份信息發送處處於特權域中的後端設備。這種體系將控制信息傳遞和數據傳遞分開處理。

    在Xen體系結構設計中,後端設別運行的特權域被賦予一個特有的名字---隔離設備域(Isolation Device Domain, IDD),而在實際設計中,IDD 就處在Dom0中。全部的真實硬件訪問都由特權域的後端設備調用本地設備驅動 (native device drive)發起。前端設備的設計十分簡單,只須要完成數據的轉發操做,因爲它們不是真實的設備驅動程序,因此也不用進行請求調度操做。而運行在IDD中 的後端設備,能夠利用Linux的現有設備驅動來完成硬件訪問,須要增長的只是IO請求的橋接功能---能完成任務的分發和回送。

wKiom1Z4wYPxU1DHAACPO3xExWY839.jpg

 

二、不一樣虛擬技術的運行機制

半虛擬化技術:

    採用半虛擬化技術的虛擬機操做系統可以識別到本身是運行在Xen Hypervisor而非直接運行於硬件之上,而且也能夠識別到在相同的機器上運行的其餘虛擬機系統。並且運行的操做系統都須要進行相應的修改。

    半虛擬化客戶機(Domain U PV Guests)包含兩個用於操做網絡和磁盤的驅動程序,PV Network Driver 和PV Block Driver。

    PV Network Driver負責爲Domain U提供網絡訪問功能。PV Block Driver負責爲Domain U提供磁盤操做功能。

 wKioL1Z4wc2S6QZ-AAAliJ3RmVs057.png

徹底虛擬化技術:

    徹底虛擬化客戶機(Domain U HVM Guests)運行的是標準版本的操做系統,所以其操做系統中不存在半虛擬化驅動程序(PV Driver),可是在每一個徹底虛擬化客戶機都會在Domain 0中存在一個特殊的精靈程序,稱做:Qemu-DM,Qemu-DM幫助徹底虛擬化客戶機(Domain U HVM Guest)獲取網絡和磁盤的訪問操做。

    徹底虛擬化客戶機必須和在普通硬件環境下同樣進行初始化,因此須要在其中加入一個特殊的軟件Xen virtual firmware,來模擬操做系統啓動時所須要的BIOS。

wKiom1Z4wefAyuEWAAAuL82zxWo823.png

三、Domain 管理和控制

    開源社區中將一系列的Linux精靈程序分類爲「管理」和「控制」兩大類。這些服務支撐着整個虛擬環境的管理和控制操做,而且存在於Domain 0虛擬機中。

    下面將對直接服務進行詳細的描述。

    注:爲了清晰的描述Xen的運行流程,畫圖時將精靈程序放在Domain 0外部來描述,但事實上全部精靈程序都存在於Domain 0 之中。

 3.一、Xend

    Xend精靈線程是一個Python應用程序,它做爲Xen環境的系統管理員。它利用Libxenctrl類庫向Xen Hypervisor發出請求。

    全部Xend處理的請求都是由XM工具使用XML RPC接口發送過來的。

wKiom1Z4wjHzzfRHAABSRVC52Uw181.png

3.二、Xm

    用於將用戶輸入經過XML RPC接口傳遞到Xend中的命令行工具。

3.三、Xenstored

    Xenstored精靈程序用於維護註冊信息,這些信息包括內存和在鏈接Domain 0和全部其餘Domain U之間的事件通道。Domain 0虛擬機利用這些註冊信息來與系統中其餘虛擬機創建設備通道,即幫助Domain U虛擬機訪問硬件資源。

3.四、Libxenctrl

    Libxenctrl是C程序類庫,用於讓Xend具備經過Domain 0與Xen Hypervisor進行交互的能力。在Domain 0中存在一個特殊的驅動程序稱做privcmd,它將請求發送給Hypervisor。

 wKioL1Z4wnuzrejgAABLmVHhTDU722.png

3.五、Qemu-DM

    在Xen環境下,每一個徹底虛擬化虛擬機都須要擁有本身的Qemu精靈程序。Qemu-DM處理在Xen環境下徹底虛擬化客戶機所能容許執行的全部關於網絡 和磁盤請求和操做。Qemu程序必須存在於Hypervisor以外同時又須要訪問網絡和I/O,因此Qemu-DM必須存在於Domain 0 中(參見前面章節對Domain 0 的描述)。

    將來版本的Xen中,一種新的工具Stub-DM將會提供一系列對全部徹底虛擬化客戶機均可用的服務,以此來替代須要在每一個虛擬機上都生成一個Qemu的邏輯。

3.六、Xen Virtual Firmware

    Xen Virtual Firmware是被嵌入到全部徹底虛擬化客戶機中的虛擬的BIOS系統,來確保全部客戶操做系統在正常啓動操做中接收到標準的啓動指令集並提供標準的軟件兼容環境。

四、半虛擬化環境下Domain 0與Domain U通訊

    根據前幾章節所述,Xen Hypervisor不負責處理網絡和磁盤請求,所以半虛擬化客戶機(Domain U PV)必須經過Domain 0 與Xen Hypervisor進行通訊,從而完成網絡和磁盤的操做請求。下面以半虛擬化客戶機(Domain U PV)執行向本地磁盤寫入數據爲例描述Domain 0與Domain U PV的交互過程。

    半虛擬化客戶機(Domain U PV)的PV Block Driver接收到要向本地磁盤寫入數據的請求,而後經過Xen Hypervisor將與Domain 0共享的本地內存中的數據寫入到本地磁盤中。在Domain 0 和半虛擬化Domain U之間存在事件通道,這個通道容許它們之間經過存在於Xen Hypervisor內的異步中斷來進行通訊。Domain 0將會接收到一個來自於Xen Hypervisor的系統中斷,並觸發Domain 0中的Block Backend驅動程序去訪問本地系統內容,並從與半虛擬化客戶機的共享內存中讀取適合的數據塊。從共享內存中讀取的數據隨後被寫入到本地磁盤的指定位置 中。

wKioL1Z4wsKh1bwxAABA-0P34sE313.png

    上圖中所顯示的事件通道是直接鏈接Domain 0 和Domain U PV是爲了清晰和簡單的描述系統是如何運行的。但事實上,事件通道(Event Channel)運行於Xen Hypervisor中,並在Xenstored中註冊特定的系統中斷,以此來讓Domain 0 和Domain U PV可以經過本地內存快速的共享信息。

 wKiom1Z4ws2gm2qPAADIPI_kfCE037.png

5、Xen的網絡架構

一、Xen支持三種網絡工做模式

Bridge模式

Xend啓動時流程:

1)  建立虛擬網橋 xenbr0。

2)  中止物理網卡 eth0。

3)  物理網卡 eth0 的 MAC 地址和 IP 地址被複制到虛擬網卡 veth0。

4)  物理網卡 eth0 重命名爲 peth0。

5)  Veth0 重命名爲 eth0。

6)  Peth0 的 MAC 地址更改( FE:FF:FF:FF:FF:FF ),ARP 功能關閉。

7)  鏈接 peth0、vif0.0 到網橋 xenbr0

8)  啓動 peth0、vif0.0、xenbr0

Domain U 啓動時的流程:

1)  vif<domainID>.0 鏈接到 xenbr0

2)  啓動vif<domainID>.0

 

Route 模式

Xend啓動時的流程:

1)  開啓Domain 0的IP Forward。

Domain U啓動時的流程:

1)  建立 vif<domainID>.0 ,dom U eth0的IP地址被拷貝到vif<domainID>。

2)  啓動 vif<domainID>.0。

3)  爲domU的配置文件中指向虛擬接口vif.0分配的IP地址增長靜態路由。

 

NAT模式

NAT 模式會使用虛擬局域網 virbr0

 

二、Xen Domain U Guests 發送數據包處理流程

wKiom1Z4w_Wxj5afAADIPI_kfCE950.png

三、Xen中虛擬網卡與物理網卡之間的關係

    安裝了Xen的Linux機器,在Dom 0中能看到如下幾類網卡(網絡接口設備 ):

(X ,Y都爲數字)

pethY

ethY

xenbrY

virbrY

vifX.Y(X爲DomaiID,Y表示該虛擬網卡是該Domain的第幾塊虛擬網卡)

vethY (通常在Xend啓動完成之後就不存在了)

wKioL1aE5T_iljl-AAL0A2Y3k48147.png

 

 

 

本文出自 「小小水滴」 博客,請務必保留此出處http://wangzan18.blog.51cto.com/8021085/1727106

相關文章
相關標籤/搜索