1. 程式人生 > >阿里雲大學-虛擬化技術入門-聽課筆記

阿里雲大學-虛擬化技術入門-聽課筆記

課時2 虛擬化技術概述

對資源的抽象:

  • 程序級虛擬化——應用層面抽象(如JVM)
  • 系統虛擬化——平臺層面抽象(虛擬機器)

注意:本文討論的是系統虛擬化,而不是程序級虛擬化。

虛擬化技術分類:

  • 全虛擬化

    • 硬體輔助虛擬化

    • 基於二進位制翻譯等

  • 半虛擬化(需要Guest OS的支援)

Hypervisor (VMM)

  • Type 1:硬體之上直接執行Hypervisor
  • Type 2:硬體之上執行Host OS並在核心中包含Hypervisor的功能

設計標準

Hypervisor:

  1. 必須能夠控制硬體資源(CPU、記憶體、IO等)

  2. 必須有效隔離客戶機(免受客戶機的威脅)

  3. 多客戶機之間強隔離

虛擬機器:

  1. 等價性(硬體資源的等價性)

  2. 高效性(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 記憶體虛擬化技術

記憶體虛擬化挑戰:

  1. 作業系統要求記憶體從0開始

  2. 作業系統要求記憶體地址連續

它的好處在於:低段記憶體連續、管理更高效、使用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。