虛擬化技術前端
虛擬化技術:linux
計算機基本部件:控制器+運算器=CPU memory I/O(keyboard monitor)docker
虛擬化:將底層的計算機資源抽象或者虛擬爲多組彼此之間互相隔離的計算平臺,每個平臺都具備五大部件中的全部設備。windows
將計算機的基本設備平均的或者按照某種標準劃分紅不一樣的部分後端
基礎架構 用戶空間 庫級別 的虛擬化api
Cpu虛擬化 (少於物理核心數) 切割時間片-->> 進程緩存
分時技術-->>虛擬機 網絡
模擬(徹底虛擬化):架構
1,經過軟件模擬出來cpu,一個cpu至關於一個進程,當須要調用特權指令時,再向宿主機調用(解碼 封裝);底層和上次架構不一致,模擬ring 0 1 2 3frontend
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,半虛擬化:例:數據包的發送 網卡的調用
IO backend
IO frontend
在前端給用戶可顯示的網卡,並無實際功能,實則直接發給後端的虛擬網卡設備,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 HVM:IO半虛擬化 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 os非Io類操做,它被稱做虛擬機的用戶模式,「來賓-用戶」模式
虛擬機的cpu調度至關於物理機cpu的一個線程
IO類操做由運行在用戶空間的Qemu來實現
KVM組件:
兩類組件:
/dev/kvm:工做於hypervisor,在用戶空間,能夠經過ioctl()系統調用完成vm建立,啓動等管理功能,他是一個字符設備
功能:建立Vm,爲Vm分配內存,讀寫Vcpu的寄存器,向Vcpu中注入中斷,運行Vcpu等等
qemu進程:工做於用戶空間,主要用於實現模擬PC機 的IO設備
KVM特性:
內存管理:分配給虛擬機的內存交換至swap
支持使用Huge Page
支持使用Intel EPT或AMD RVI技術完成內存地址映射:虛擬機的用戶空間的線性內存直接到物理內存地址空間:
GVA-->>HPA(直接映射)
(若是沒有這個技術,原來階段就須要影子頁表來實現:GVA-->>GPA-->>HPA)
支持KCM(kernal same-page merging)相同頁面合併:操做系統和版本一致,內存頁面共享,下降內存佔用
硬件支持:取決於linux內核
存儲:本地存儲:
網絡附加存儲:
存儲區域存儲:
分佈式存儲:
實時遷移:多個物理機運行hypervisor,底層硬件相同或者兼容,運行在第一個hypervisor上的虛擬機能夠在運行時能夠被調度到第二個上面,而且這個虛擬機上運行的程序還不會被終止(使用共享存儲存儲磁盤映像文件)
當一個物理機上的虛擬機運行時,在本地有對應的內存信息,在實時遷移時將這個內存信息複製到另外一個虛擬機上,並建立另外一個虛擬機實例,這樣原來的虛擬機就結束掉,內存就獲得釋放。
支持的guest os:linux,windows,OpenBSD
設備驅動:
IO設備的徹底虛擬化:模擬硬件
IO設備的半虛擬化:在guest OS中安裝驅動,virtio(virtio-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(查看)
Virsh和virt-manager支持遠程管理操做
Qemu主要提供了的一下幾部分:
處理器模擬器:
仿真IO設備:
關聯模擬的設備至真實設備:
調試器:
與模擬器交互的用戶接口