對資源的抽象:
注意:本文討論的是系統虛擬化,而不是程序級虛擬化。
虛擬化技術分類:
半虛擬化(需要guest os的支援)
hypervisor (vmm)
hypervisor:
必須能夠控制硬體資源(cpu、記憶體、io等)
必須有效隔離客戶機(免受客戶機的威脅)
多客戶機之間強隔離
虛擬機器:
等價性(硬體資源的等價性)
高效性(emulator不夠高效,不被稱為虛擬機器)
亞馬遜、rackspace、阿里雲
基於linux核心
cpu虛擬化:
掃瞄guest os指令,對敏感指令進行替換;實現複雜,效率低。
不需要掃瞄guest os指令,效率很高。
cpu廠商從硬體上支援虛擬化指令。
記憶體虛擬化挑戰:
作業系統要求記憶體從0開始
作業系統要求記憶體位址連續
它的好處在於:低段記憶體連續、管理更高效、使用supertlbs加速訪問效率
mmu(記憶體管理單元)虛擬化技術:
通過修改核心使guest和hypervisor共享同一張頁表,使用段保護的方式對位址空間分段,讓guest無法訪問hypervisor的空間。這種技術廣泛應用於xenlinux32,因為無需切換頁表而相當高效,但安全性必須通過審計保證,且不支援windows。
當guest訪問虛擬位址時觸發page fault,hypervisor通過分析得知是guest的正常請求,於是將其翻譯為hypervisor的記憶體位址。該實現方案簡單,但因為它只能快取訪問過的虛擬位址,因此效率非常低。
在guest內部有一張頁表的同時,在hypervisor中為其建立一張對應的轉換表,即影子頁表。影子頁表的建立過程相對複雜(guest訪問虛擬記憶體,引發缺頁異常,hypervisor捕獲並查詢guest中的頁表,最終將guest到hypervisor的位址轉換關係放入影子頁表中)。該實現方案無需修改核心,但效率較低(相對物理機而言,xenlinux32的轉換效率為84%左右,而xenlinux64僅為65%左右)。
cpu廠商引入硬體支援,完成虛擬機器記憶體到物理機記憶體的轉換,整個過程無需hypervisor介入。而hypervisor唯一需要做的就是在建立虛擬機器時,將位址的對映關係放入cpu的某個暫存器當中。該實現方案的效率極高(相對物理機而言,使用4k頁的轉換效率可達95%以上,而使用2m頁可達98%以上)。
i/o裝置的工作原理:
hypervisor通過捕獲訪問,然後解碼並進行模擬。這種方式的效率很低,並且僅出現在早期的虛擬化中。
重新定義i/o架構,例如xen引入split diver,通過共享記憶體交換資料,摒棄了暫存器和dma的操作方式,因此效率很高,唯一的不足是軟體複雜度較高。採用pv虛擬化的i/o解決方案大量出現於商業級虛擬化軟體中,例如xen和kvm。
xen起源於2023年劍橋大學的開源專案,2023年發布xen2.0支援pv,2023年發布xen3.0支援pvhvm,後來被citrix以5億美元收購,目前xen仍處於研發狀態,最新的xen 4.6支援pvh。
xen的pv模式,需要修改guest os核心,將所有的i/o,中斷等重新定義,形成與x86完全不同的架構。而xen的hvm模式,借助cpu的硬體輔助(vt-x),將hypervisor執行在ring0,guest kernel執行在ring1上。hvm無需修改guest os核心。
xen還提供了另外一些技術:用於掛載pv驅動的xen bus,還有用於資訊儲存和交換的xen store。
xen對於i/o裝置的支援包括軟體模擬、半虛擬化(pv)和裝置直通。
xen的商業化雲平台包括:亞馬遜aws、阿里雲等。
kvm通過在linux核心中加入乙個模組,把linux核心擴充套件成為hypervisor。kvm最早由以色列的一家公司於2023年建立並引入linux核心。它依賴於vt技術,最初僅支援x86架構,後來被redhat以1億美元收購。
kvm基於linux核心開發而來,依賴intel vmx或amd svm技術,完成cpu和記憶體的虛擬化,借助what i/o架構實現i/o虛擬化。此外,kvm還通過para-virtualized spinlocks解決自旋鎖的效能損失問題,通過para-virtualized timing解決時間虛擬化的問題,通過para-virtualized huge page降低記憶體虛擬化開銷。
kvm的商業化雲平台包括:google gce、阿里雲ecs 2.0。
xen和kvm的共同點:借助硬體技術模擬cpu和記憶體,使用qemu模擬非關鍵裝置,通過pv增強虛擬化i/o的效能。
xen和kvm的不同點:xen是type-1 hypervisor而kvm是type-2;xen的軟體複雜度(**量)遠大於kvm。
虛擬化技術入門
阿里雲大學 虛擬化技術入門 本章主要講解雲計算技術的核心技術之一虛擬化技術,課程首先說明了虛擬化技術的主要作用以及常見實現方法,並針對硬體中常用的虛擬化技術 cpu 記憶體 io 進行詳細的講解,最後還針對目前流行的開源虛擬化專案進行說明,講解其出現的漏洞以及阿里雲是怎樣完成漏洞分析和處理的。講師介...
雲計算 虛擬化技術
雲計算很重要的乙個特性就是共享,而實現共享的乙個技術是虛擬化,今天就八一八虛擬化,什麼是虛擬化。虛擬化並不是乙個新的技術,早在ibm大型機時代就已經誕生,目前講的虛擬化主要指以下兩種 1 伺服器級虛擬化 vmware esxi kvm xen等等,使用者看到的是硬體伺服器 2 os級虛擬化 lxc容...
雲計算 虛擬化技術
雲計算的的定義 雲計算是基於網際網路的服務的增加 使用 和交付模式,通常涉及通過網際網路提供動態易擴充套件且經常是虛擬化的資源。是傳統計算機和網路技術發展融合的產物,它意味著計算能力也可作為一種商品通過網際網路進行流通。雲計算的六大關鍵特性技術 按需自助服務 可測量的服務 廣泛的網路接入 多租戶 資...