阿里雲大學-虛擬化技術入門-聽課筆記
課時2 虛擬化技術概述
對資源的抽象:
- 程序級虛擬化——應用層面抽象(如JVM)
- 系統虛擬化——平臺層面抽象(虛擬機器)
注意:本文討論的是系統虛擬化,而不是程序級虛擬化。
虛擬化技術分類:
全虛擬化
硬體輔助虛擬化
基於二進位制翻譯等
半虛擬化(需要Guest OS的支援)
Hypervisor (VMM)
- Type 1:硬體之上直接執行Hypervisor
- Type 2:硬體之上執行Host OS並在核心中包含Hypervisor的功能
設計標準
Hypervisor:
必須能夠控制硬體資源(CPU、記憶體、IO等)
必須有效隔離客戶機(免受客戶機的威脅)
多客戶機之間強隔離
虛擬機器:
等價性(硬體資源的等價性)
高效性(emulator不夠高效,不被稱為虛擬機器)
常見的Hypervisor
- Xen - 劍橋大學 2002
亞馬遜、rackspace、阿里雲
- KVM - 以色列 2007
基於Linux核心
Hyper-v - 微軟 2006
VMware ESX Server(高階伺服器)
VMware workspace (工作站)
VirtualBox(PC上常用的虛擬化技術)
課時3 CPU虛擬化技術
CPU虛擬化:
- 二進位制翻譯(早期x86技術不支援虛擬化)
掃描Guest OS指令,對敏感指令進行替換;實現複雜,效率低。
- 半虛擬化(修改Guest OS中的敏感指令)
不需要掃描Guest OS指令,效率很高。
- 硬體輔助虛擬化
CPU廠商從硬體上支援虛擬化指令。
課時4 記憶體虛擬化技術
記憶體虛擬化挑戰:
作業系統要求記憶體從0開始
作業系統要求記憶體地址連續
它的好處在於:低段記憶體連續、管理更高效、使用superTLBS加速訪問效率
記憶體重對映技術
MMU(記憶體管理單元)虛擬化技術:
Direct page table 直接頁表
Virtual TLB 虛擬TLB
Shadow page table 影子頁表
Extended page table 硬體擴充套件頁表
Direct page table
通過修改核心使Guest和Hypervisor共享同一張頁表,使用段保護的方式對地址空間分段,讓Guest無法訪問Hypervisor的空間。這種技術廣泛應用於XenLinux32,因為無需切換頁表而相當高效,但安全性必須通過審計保證,且不支援Windows。
Virtual TLB
當Guest訪問虛擬地址時觸發page fault,Hypervisor通過分析得知是Guest的正常請求,於是將其翻譯為Hypervisor的記憶體地址。該實現方案簡單,但因為它只能快取訪問過的虛擬地址,因此效率非常低。
Shadow page table
在Guest內部有一張頁表的同時,在Hypervisor中為其建立一張對應的轉換表,即影子頁表。影子頁表的建立過程相對複雜(Guest訪問虛擬記憶體,引發缺頁異常,Hypervisor捕獲並查詢Guest中的頁表,最終將Guest到Hypervisor的地址轉換關係放入影子頁表中)。該實現方案無需修改核心,但效率較低(相對物理機而言,XenLinux32的轉換效率為84%左右,而XenLinux64僅為65%左右)。
Extend page table
CPU廠商引入硬體支援,完成虛擬機器記憶體到物理機記憶體的轉換,整個過程無需Hypervisor介入。而Hypervisor唯一需要做的就是在建立虛擬機器時,將地址的對映關係放入CPU的某個暫存器當中。該實現方案的效率極高(相對物理機而言,使用4K頁的轉換效率可達95%以上,而使用2M頁可達98%以上)。
課時5 IO虛擬化技術
I/O裝置的工作原理:
- 硬體裝置的中斷請求
- CPU與記憶體的暫存器訪問
- 裝置與記憶體的DMA
I/O虛擬化的實現方式
軟體模擬
Hypervisor通過捕獲訪問,然後解碼並進行模擬。這種方式的效率很低,並且僅出現在早期的虛擬化中。
半虛擬化(PV)
重新定義I/O架構,例如Xen引入split diver,通過共享記憶體交換資料,摒棄了暫存器和DMA的操作方式,因此效率很高,唯一的不足是軟體複雜度較高。採用PV虛擬化的I/O解決方案大量出現於商業級虛擬化軟體中,例如Xen和KVM。
裝置直通(VT-d + SRIOV)
CPU廠商通過在北橋晶片中加入VT-d技術,解決中斷及DMA的remapping(重對映)問題,聯合I/O裝置對SRIOV技術的支援,解決物理裝置獨佔訪問的問題,最終使得I/O虛擬化的大部分工作由硬體完成,提高了效率並且降低了軟體複雜度。
課時6 開源虛擬化專案
Xen
Xen起源於2002年劍橋大學的開源專案,2003年釋出Xen2.0支援PV,2006年釋出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
KVM通過在Linux核心中加入一個模組,把Linux核心擴充套件成為Hypervisor。KVM最早由以色列的一家公司於2007年建立並引入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。