虛擬化技術

虛擬化技術

虛擬化技術

計算機基本部件:控制器+運算器=CPU   memory   I/O(keyboard monitor)

虛擬化:將底層的計算機資源抽象或者虛擬爲多組彼此之間互相隔離的計算平臺,每一個平臺都具有五大部件中的所有設備。

將計算機的基本設備平均的或者按照某種標準劃分成不同的部分

 

基礎架構  用戶空間  庫級別 的虛擬化

 

Cpu虛擬化 (少於物理核心數)  切割時間片-->> 進程

  分時技術-->>虛擬機  

模擬(完全虛擬化):

1,通過軟件模擬出來cpu,一個cpu相當於一個進程,當需要調用特權指令時,再向宿主機調用(解碼 封裝);底層和上次架構不一致,模擬ring 0 1 2 3

2,BT(banary translation)二進制翻譯技術。當虛擬機內核進行特權指令調用時,直接翻譯成對宿主機的特權指令的調用,邊運行,邊調用,邊翻譯,邊轉換,即運行時翻譯。不再需要軟件級別的封裝和解碼。底層和上次不一致。模擬ring0.假設各guest的內核是運行在ring1的。完全虛擬化。Host得支持硬件虛擬化。<軟件>

3,HVM<硬件> 硬件輔助的虛擬化

cpu分成5個環

-1:宿主機。特權指令

0:沒了特權指令

HVM硬件虛擬機器

半虛擬化:

Guest知道自己運行在虛擬化技術中,當需要調用特權指令時不直接調用cpu特權指令,而是自己去尋找宿主機的內核去請求

虛擬機監視器:hypervisor(直接管理硬件,相當於內核上,跑在宿主機上),主要是cpu和內存的虛擬,不包括IO設備,hyper call:一般系統調用直接由虛擬內核完成,當需要時由hyper call來提供。直接調用,而不是翻譯。調用的不是cpu指令集而是hyper call。

 

Memory虛擬化

Memory本身就是虛擬化的,每一個進程看到的是線性地址空間,內核看見的是物理地址空間

1,硬件不支持虛擬物理地址轉換成物理地址,需要模擬

進程要訪問一個數據,將線性地址提供給虛擬機cpu(cpu無法識別線性地址),然後cpu將線性地址轉交給MMU(負責將線性地址轉換成物理地址),此時還在虛擬機內,是虛擬物理地址,所以虛擬機內核再將虛擬物理地址轉交給hypervisor hypersior軟件裏面通過虛擬MMu技術將虛擬物理地址轉換成物理地址提供給宿主機。

宿主機上的多個虛擬機會出現tlb(轉換後源緩存器,緩存mmu中的表中的從線性地址到物理地址轉換的對應關係,主要有緩存)很難命中問題:tlb緩存a上關係,虛擬機切換到b上後,又緩存b上關係,需要一直清理緩存,可以用虛擬TLB技術來調優:

TLB虛擬化:

TaggedTLB:直接將GVA-->>HPA,緩存下來,而不需要在緩存中間的GPA等過程  

 

2,硬件支持

Intel:EPT擴展的頁表技術

AMD:NTP嵌套頁表

這兩種都是虛擬MMU技術

 

 

Cpu:時間切割內存:空間切割                                                                                                                                                                    

I/O虛擬化:

外存:

硬盤,光盤,U盤

網卡:

網卡

顯示設備:

VGA(圖像設備器):frame buffer機制(焦點捕獲方式)

鍵盤鼠標:

Ps/2,usb

 

方式:1,對I/O虛擬來講  模擬==完全虛擬化:完全使用軟件來模擬真實硬件簡單  性能差

2,半虛擬化:例:數據包的發送   網卡的調用

spacer.gifspacer.gif 

IO backend

spacer.gifspacer.gif 

spacer.gifspacer.gifspacer.gifspacer.gifspacer.gifspacer.gifspacer.gifspacer.gif 

 

 

spacer.gifIO frontend

spacer.gif 

spacer.gifspacer.gif 

spacer.gifspacer.gifspacer.gif 

 

 

 

在前端給用戶可顯示的網卡,並沒有實際功能,實則直接發給後端的虛擬網卡設備,hypvisor 的IO棧將虛擬網卡轉換成實際網卡調用,在此有個隊列,將多個虛擬機的發包進行排隊,I/O調用驅動程序來使用網卡等硬件設備

 

3,IO透傳技術IO-through:硬件支持透傳

讓虛擬機直接使用物理設備(要使用hypervisor進行協調:通過設備管理器將宿主機的設備分配給guest os  ,guest os才能使用宿主機的設備)。使用幾乎接近硬件物理性能的設備來使用硬件。

Intel:VT-d技術:完成中斷映射

基於北橋的硬件輔助的虛擬化技術,提高IO的可靠性和靈活性

 

DMA:直接內存訪問:加速IO訪問的方式:將各寄存器中IO設備中的數據保存在讀過來直接放在內存中

IOMMU:IO內存管理單元:IO總線到IO地址轉換的設備

 

 

 

 

 

 

 

Guest的用戶空間在環3上  內核空間在環1上。

 

如果在轉換時虛擬機和宿主機不是一個操作系統,在調用特權指令時就要 轉換 成對應的宿主機的特權指令,此過程中消耗更多資源。

64爲兼容32位

用戶空間(環三,系統調用)和內核空間(環0  特權指令)

運行普通指令的環三環一和環二未使用  環零中  操作某些寄存器的特權指令

 

BT技術:guest

 

 

兩種實現方式:

Type-一型:直接在硬件上沒有操作系統,安裝hypervisor,直接管理硬件信息,所有運行在硬件上的操作系統都是虛擬機。xen,vmare: ESX/ESXi

Type-二型:在硬件上創建操作系統,在操作系統上安裝軟件,有軟件來創建虛擬機。管理上更可靠。kvm, vmare workstation,vitrtualbox

 

VMM:虛擬機監視器

 

 

虛擬化技術的分類:

1,模擬:Qemu  指令轉換(高層到底層),不夠穩定硬件可任意

虛擬出來的cpu由於和硬件物理機的cpu不兼容,在調用常規或者特權指令時就需要中間軟件進行翻譯到具體的cpu上,翻譯比較慢,翻譯完還要再次執行,性能很差

BT二進制翻譯技術

2,完全虛擬化:KVMVMware workstation

硬件架構要與宿主機相同,只要不是調用特權或者敏感指令,這些指令就會直接運行在物理cpu上,如果是特權指令,虛擬機監視器VMM就會捕獲翻譯或者調用hype call的方式。

3,半虛擬化:xen(在硬件輔助之下也支持完全虛擬化,不過必須工作在HVM模式)

Guest os必須修改內核,讓其知曉自己運行在虛擬化環境中,當需要操作硬件時,不是直接操作硬件,而是發起hyper call調用

4,OS級別的虛擬化(容器級虛擬化):

沒有VMM,將用戶空間進行切割虛擬,直接運行在硬件上,分割爲多個,彼此之間互相隔離(namespace)。

容器級虛擬化:docker

DockerVZ,LXC(LiunX Container)

5,庫級別的虛擬化:

 WINE:linux中運行windows中的程序

 

調優:

跨多個物理主機進行調度管理運行在其上的虛擬機:

Iaas雲環境:xen kvm

 基礎架構服務Infrastructureas  a   service

Paas雲環境:容器級虛擬化 平臺服務Platfrom

 

兩種實現方式:

Type-一型:直接在硬件上沒有操作系統,安裝hypervisor,直接管理硬件信息,所有運行在硬件上的操作系統都是虛擬機。xen,vmare: ESX/ESXi

Type-二型:在硬件上創建操作系統,在操作系統上安裝軟件,有軟件來創建虛擬機。管理上更可靠。kvm, vmare workstation,vitrtualbox

 

Xen:

開源VMM

Xen Hypervisor必須直接運行在硬件資源上  

虛擬化了 CPU,內存(所運行的內核最基本的驅動),所有虛擬機的cpu和內存都是由xen hypervisor提供

硬件如果想被運行在硬件上的應用程序使用,直接運行在硬件上的操作系統的內核就得能加載這個硬件的驅動

IO:第一個虛擬機(Dom0)的內核來實現:

1,提供一個管理其它虛擬機的接口

2,提供一個管理平臺內核空間提供了各種IO的驅動

當其他虛擬機需要調用IO設備的時候向第一個虛擬機發出請求,第一個虛擬機的內核cpu通過對真實IO設備在用戶空間的模擬,提供給其他虛擬機(Qemu來模擬實現)

運行在Dom0上的用戶空間的Qemu爲每創建的一個虛擬機用到IO設備時,模擬出一個IO設備,並映射到真正的硬件設備上實現

I/O虛擬化的半虛擬化方法是Xen所採用的方法,它也就是廣爲熟知的分離式驅動模型,由前端驅動和後端驅動兩部分構成。 前端驅動運行在Domain U中,而後端驅動運行在Domain 0中,它們通過一塊共享內存交互。前端驅動管理客戶操作系統的I/O請求,後端驅動負責管理真實的I/O設備並複用不同虛擬機的I/O數據。

底層cpu的一個線程就相當於虛擬機的一個cpu

底層的物理地址進行分段,將其中一部分提供給虛擬機使用(對底層來說可能是分段的,不連續的地址段,但對虛擬機來說是連續的)

 

組成部分:

1,Xen Hypervisor:Xen的核心組成部分,虛擬化監視器,直接運行在硬件之上,直接將運行能力提供給運行在其上的虛擬機操作系統。

在各虛擬機之間進行CPU和內存的分配,中斷請求的分配。

2,Dom0(特權域):

直接運行在硬件上,能和硬件資源進行交互,也能和其他虛擬機進行交互

特權域:IO資源分配

爲了支持半虛擬化(前端和後端)

網絡設備:net-front  net-backend

塊設備:block-front(虛擬機中)  block-backend(特權域中)

Linux Kernel:2.6.37

提供管理DomU的工具棧:用於實現對虛擬機進行添加,啓動,快照,停止,刪除等操作。

3,DomU:

非特權域,無權訪問硬件資源:根據其虛擬化方式實現,有多重=種類型

只有在硬件資源支持下才能支持完全虛擬化,否則只支持半虛擬化

DomU的虛擬化類型:

PV半虛擬化

HVM硬件輔助虛擬化(完全虛擬化):利用cpu提供的環-1運行Xen Hypervisor,cpu能主動捕獲到每一個虛擬機嘗試去執行特權指令並通知給XenHypervisor,留下來完成指令轉換過程。

PV on HVMIO半虛擬化 CPU完全虛擬化

 

Xen的PV技術:

不需要cpuHVM特性,硬件輔助虛擬化,但guest必須知道自己運行在PV環境(內核)上,無需仿真cpu。

Xen的HVM(硬件輔助虛擬化)技術:

依賴於INtel VT或AMD-V硬件擴展,還要依賴於Qemu來模擬IO設備。

運行於DomU中的OS,幾乎所有支持此X86平臺

Xen的PV on HVM:

Cpu爲HVM模式運行

IO設備爲PV模式運行

運行於DomU中的OS:只要OS能驅動PV接口類型的IO設備。

Net-front   blk-front

 

guest中要能支持它的前半段,Dom0要能支持後半段。

 

Xen的工具棧:

Xm/xend:在xen hypervisor的dom0中要啓動xend服務

Xm:命令行管理工具,有諸多子命令:create,Destroy,stop,pause

 

xl(輕量級):基於libxenlight提供的輕量級的命令行工具棧

 

Xe/xapi:提供了對xen進行管理的api,因此多用於cloud環境。

 

Virsh/libvirt(庫):virt-manager

 

雲棧,雲環境:統一對虛擬機資源進行管理

 

XenStore:

爲各domain提供的共享信息存儲空間,有着層級結構的名稱空間,位於Dom0,由Dom0進行管理,支持事務和原子操作,用於控制DomU中的設置,通過不同方式對它進行訪問

 

Type-I:硬件-->>hypervisor-->>vm

Type-II:硬件-->>host->>VMM-->>vm

 

KVM:kernal-based Virtual Machine

 

運行在硬件上的宿主機(host)在安裝了KVM之後,宿主機的內核空間轉變成Hypervisor,用戶空間就成爲了這個Hypervisor的控制管理臺的接口,用戶空間會提供一些接口來創建虛擬機使用,創建的虛擬機就相當於運行在內核上的進程,用戶空間的系統管理工具可以拿來管理虛擬實例。

內核cpu通過向宿主機的cpu創建線程來實現

依賴於HVM技術

 

KVM載入後系統的運行模式:

KVM hypervisor:原來的宿主機的內核由於加入了KVM所以變成了Hypervisor,加入的KVm Driver

內核模式:guest os執行的IO類操作,或其他的特殊指令操作“來賓-內核”模式

用戶模式:代表guest os執行IO類操作

來賓模式:guest osIo類操作,它被稱作虛擬機的用戶模式,“來賓-用戶”模式

 

 

虛擬機的cpu調度相當於物理機cpu的一個線程

IO類操作由運行在用戶空間的Qemu來實現

 

KVM組件:

兩類組件:

/dev/kvm:工作於hypervisor,在用戶空間,可以通過ioctl()系統調用完成vm創建,啓動等管理功能,他是一個字符設備

功能:創建Vm,爲Vm分配內存,讀寫Vcpu的寄存器,向Vcpu中注入中斷,運行Vcpu等等

qemu進程:工作於用戶空間,主要用於實現模擬PC機 的IO設備

 

KVM特性:

內存管理:分配給虛擬機的內存交換至swap

支持使用Huge Page

支持使用Intel EPTAMD RVI技術完成內存地址映射:虛擬機的用戶空間的線性內存直接到物理內存地址空間:

GVA-->>HPA(直接映射)

(如果沒有這個技術,原來階段就需要影子頁表來實現:GVA-->>GPA-->>HPA

支持KCMkernal same-page merging)相同頁面合併:操作系統和版本一致,內存頁面共享,降低內存佔用

 

硬件支持:取決於linux內核

存儲:本地存儲:

網絡附加存儲:

存儲區域存儲:

分佈式存儲:

 

實時遷移:多個物理機運行hypervisor,底層硬件相同或者兼容,運行在第一個hypervisor上的虛擬機可以在運行時可以被調度到第二個上面,並且這個虛擬機上運行的程序還不會被終止(使用共享存儲存儲磁盤映像文件)

當一個物理機上的虛擬機運行時,在本地有對應的內存信息,在實時遷移時將這個內存信息複製到另一個虛擬機上,並創建另一個虛擬機實例,這樣原來的虛擬機就結束掉,內存就得到釋放。

支持的guest oslinuxwindowsOpenBSD

 

設備驅動:

IO設備的完全虛擬化:模擬硬件

IO設備的半虛擬化:在guest OS中安裝驅動,virtiovirtio-blk,virtio-net.virtio-pcl

 

KVM侷限性:

一般侷限性:

Cpu Overcommit:所有虛擬機的虛擬CPU的數量不要大於物理cpu的數量

時間記錄難以精確,依賴於時間同步機制。

 

Mac地址:

Vm量特別大時,存在衝突的可能性

實時遷移:

硬件兼容

性能侷限性:

 

 

Kvm的工具棧:

Qemu提供的:

Qemu-kvm:與底層KVM打交道,完成虛擬機的創建管理等相關管理操作

Qemu-img:磁盤映像文件的管理

Qemu-io:對IO性能的監控

 

Libvirt

Virtual machine manager

Virsh:命令行工具

Libvirt:進行管理

Virt-viewer:查看

 

圖形化管理工具:virt-manager   virt-viewer(查看)

 

Virshvirt-manager支持遠程管理操作

 

 

Qemu主要提供了的一下幾部分:

處理器模擬器:

仿真IO設備:

關聯模擬的設備至真實設備:

調試器:

與模擬器交互的用戶接口

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章