Xen虛擬化基本原理詳解


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

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

一、Xen概述

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

    Xen支持x86、x86-64、安騰( Itanium)、Power PC和ARM多種處理器,因此Xen可以在大量的計算設備上運行,目前Xen支持Linux、NetBSD、FreeBSD、Solaris、 Windows和其他常用的操作系統作為客戶操作系統在其管理程序上運行。

二、Xen虛擬化類型

    Xen對虛擬機的虛擬化分為兩大類,半虛擬化(Para virtualization)和完全虛擬化(Hardware VirtualMachine)。

1、半虛擬化(PV)

    半虛擬化(Paravirtualization)有些資料稱為“超虛擬化”,簡稱為PV,是Xen主導的虛擬化技術。這種技術允許虛擬機操作系統感知到 自己運行在Xen Hypervisor上而不是直接運行在硬件上,同時也可以識別出其他運行在相同環境中的客戶虛擬機。

    在Xen Hypervisor上運行的半虛擬化的操作系統,為了調用系統管理程序(Xen Hypervisor),要有選擇地修改操作系統,然而卻不需要修改操作系統上運行的應用程序。由於 Xen 需要修改操作系統內核,所以您不能直接讓當前的 Linux 內核在 Xen 系統管理程序中運行,除非它已經移植到了Xen 架構。不過,如果當前系統可以使用新的已經移植到 Xen 架構的Linux 內核,那么您就可以不加修改地運行現有的系統。

wKiom1aE5QrDbBXRAAKuHPzjwaQ004.png

wKiom1Z4wHeRyg0YAADxLwu77E4551.jpg

2、完全虛擬化(HVM)

    完全虛擬化(Hardware Virtual Machine)又稱“硬件虛擬化”,簡稱HVM,是指運行在虛擬環境上的虛擬機在運行過程中始終感覺自己是直接運行在硬件之上的,並且感知不到在相同硬件環境下運行着其他虛擬機的虛擬技術。

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

   值的注意的是,在Xen上虛擬的Windows虛擬機必須采用完全虛擬化技術。

wKioL1aE5RHhvCs6AALRfLvs54Q913.png

wKioL1aFTAvyN4lWAAJrZzsLU0k578.png

3、CPU完全虛擬化,IO半虛擬化(PVHVM)

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

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

wKioL1aE6Reg3wBWAAOeTP66pjk857.png

wKiom1aFTA6RLqasAAKONNYLaWA135.png

三、Xen基本組件

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

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

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

wKioL1Z4wP6zG5XZAABoXq8aIq0613.png

1、Xen Hypervisor

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

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

2、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.jpg3、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

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

1、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

 

2、不同虛擬技術的運行機制

半虛擬化技術:

    采用半虛擬化技術的虛擬機操作系統能夠識別到自己是運行在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

3、Domain 管理和控制

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

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

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

 3.1、Xend

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

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

wKiom1Z4wjHzzfRHAABSRVC52Uw181.png

3.2、Xm

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

3.3、Xenstored

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

3.4、Libxenctrl

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

 wKioL1Z4wnuzrejgAABLmVHhTDU722.png

3.5、Qemu-DM

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

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

3.6、Xen Virtual Firmware

    Xen Virtual Firmware是被嵌入到所有完全虛擬化客戶機中的虛擬的BIOS系統,來確保所有客戶操作系統在正常啟動操作中接收到標准的啟動指令集並提供標准的軟件兼容環境。

4、半虛擬化環境下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

五、Xen的網絡架構

1、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

 

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

wKiom1Z4w_Wxj5afAADIPI_kfCE950.png

3、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM