虛擬化技術之我見

本篇博客大體介紹了虛擬化技術的總體輪廓,對一些容易混淆的概念進行了詳細講解,算是虛擬化技術的入門知識吧;

===================================================================

1 什麼是虛擬化

2 虛擬化技術的分類

    2.1 硬件仿真

    2.2 完全虛擬化

    2.3 半虛擬化

    2.4 操作系統級虛擬化

    2.5 庫虛擬化

    2.6 應用程序虛擬化

3 完全虛擬化和半虛擬化的區別

    3.1 完全虛擬化

        3.1.1 兩大加速技術

        3.1.2 Intel硬件輔助虛擬化技術

    3.2 半虛擬化

4. 計算機不同組件的虛擬化方式

    4.1 CPU虛擬化

        4.1.1 模擬和虛擬的區別

    4.2 Memory虛擬化

        4.2.1 兩大加速技術

    4.3 I/O虛擬化

        4.3.1 I/O設備類型及虛擬化類型

        4.3.2 I/O虛擬化的3種方式

    4.4 網絡虛擬化

        4.4.1 橋接 

        4.4.2 隔離

        4.4.3 僅主機

        4.4.4 路由

        4.4.5 NAT

5. 虛擬化的兩種實現模型

    5.1 Hypervisor模型

    5.2 Hosted模型

6. 虛擬網卡的實現原理

    6.1 TUN和TAP

7. 如何在Linux上建立橋設備

    7.1 配置文件方式

    7.2 brctl命令行方式

===================================================================


1. 什麼是虛擬化

將一組物理平臺抽象爲多組彼此之間互相隔離的平臺,且每個平臺都彷彿使用全部的硬件資源;


2. 虛擬化技術的分類

2.1 硬件仿真(Emulation)

簡介:屬於Hosted模式,在物理機的操作系統上創建一個模擬硬件的程序(Hardware VM)來仿真所想要的硬件,並在此程序上跑虛擬機,而且虛擬機內部的客戶操作系統(Guest OS)無需修改;

架構圖

wKiom1N8kR-isTEsAADs_GBK7E4590.jpg

產品:PearPC,Bochs,QEMU;

優點:Guest OS無需修改,而且非常適合用於操作系統開發,也利於進行固件和硬件的協作開發;

缺點:速度非常慢,有時速度比物理情況慢100倍以上;

2.2 完全虛擬化(Full Virtulization)

簡介:主要是在客戶操作系統和硬件之間捕捉和處理那些對虛擬化敏感的特權指令,使客戶操作系統無需修改就能運行,速度會根據不同的實現而不同,但大致能滿足用戶的需求;這種方式是業界現今最成熟和最常見的,而且屬於 Hosted 模式和 Hypervisor 模式的都有;

架構圖

wKioL1N8kRGydGUZAADZt9dXavA557.jpg

產品:VMware Workstation,VMware ESX/ESXi,Parallels Desktop,KVM,Xen(HVM);

優點:Guest OS無需修改,速度和功能都非常不錯,更重要的是使用非常簡單;

缺點:基於Hosted模式的全虛擬產品性能方面不是特別優異,特別是I/O方面;

2.3 半虛擬化(Para Virtulization)

簡介:它與完全虛擬化有一些類似,它也利用Hypervisor來實現對底層硬件的共享訪問,但是由於在Hypervisor 上面運行的Guest OS已經集成與半虛擬化有關的代碼,使得Guest OS能夠非常好地配合Hyperivosr來實現虛擬化。通過這種方法將無需重新編譯或捕獲特權指令,使其性能非常接近物理機;

架構圖

wKiom1N8kVKQRmOaAADvsMZOc-8872.jpg

產品:Xen,UML(user-mode linux);

優點:這種模式和全虛擬化相比,架構更精簡,而且在整體速度上有一定的優勢;

缺點:需要對Guest OS進行修改,所以在用戶體驗方面稍有欠缺;

2.4 操作系統級虛擬化(Operating System Level Virtulization)

簡介:這種技術通過對服務器操作系統進行簡單地隔離來實現虛擬化,主要用於VPS;

架構圖

wKioL1N8kT3Q0mntAACs_g5spyI195.jpg

產品:OpenVZ,lxc,Solaris Containers,FreeBSD jails;

優點:因爲它是對操作系統進行直接的修改,所以實現成本低而且性能不錯;

缺點:在資源隔離方面表現不佳,而且對Guest OS的型號和版本有限定;

2.5 庫虛擬化:如wine

2.6 應用程序虛擬化:如jvm


3. 完全虛擬化和半虛擬化的區別

3.1 完全虛擬化(Full Virtualization):宿主機Host完全虛擬出一個平臺,使得虛擬機guest無法意識到自己運行在虛擬化平臺上;中間一定有一個對特權指令的轉換過程;

3.1.1 兩大加速技術

  • BT技術:Binary Translation 二進制翻譯技術,前提是虛擬架構和底層物理架構需要保持一致;

    • 能將各guest對特權指令的調用,按需要在運行時,在調用的一刻直接翻譯成對Host中特權指令的調用,無需軟件層面多次解碼,且可以邊運行邊調用邊轉換;

    • 可將虛擬機guest對比底層硬件的性能從60%提升到80%~85%; 

    • BT機制中,guest的用戶空間運行在環3上,guest的內核空間運行在環1上,宿主機(Host)的內核空間運行在環0上,BT就監控在環1上,隨時將guest內核的調用轉換成特權指令調用; 

  • HVM技術:Hardware Virtualization Machine,硬件輔助虛擬化技術;

    • 如針對CPU的硬件虛擬化技術,使得物理CPU擁有5個環,環-1~環3,虛擬機的內核運行在CPU的環0上,而宿主機(Host)的內核運行在環-1上(特權指令環);

    • Host能夠捕獲guest對環0上的特權指令的調用,進而利用CPU硬件轉換成環-1上的特權指令,無需軟件參與;

    • 這種轉換需要激活Host的內核;HVM技術能將虛擬機guest對比底層硬件的性能提升至85%;

3.1.2 Intel硬件輔助虛擬化技術包括: 

  • 第一類:跟處理器相關:vt-x 

  • 第二類:跟芯片相關:vt-d 

  • 第三類:跟IO相關,VMDq和SR-IOV

3.2 半虛擬化(para-virtualization):各虛擬機的內核在發起特權指令時,需要調用hyper call,能夠意識到hypervisor的存在;

  • 執行特權指令是直接調用,而非翻譯,大大簡化了特權指令的執行過程;

  • 能將虛擬機guest對比底層硬件的性能提升至90-95%;


4. 計算機不同組件的虛擬化方式

4.1 CPU虛擬化

通過軟件,集合硬件CPU的微編碼,實現一個模擬的CPU,供虛擬機使用;

因爲虛擬機上的程序需要運行特權指令時,則需要通過虛擬機內核和宿主機內核這2層轉化,導致性能低下;

4.1.1 模擬和虛擬的區別

  • 模擬:emulation,物理架構和虛擬架構不一致,如物理x86架構上虛擬ppc架構,則虛擬架構上的非特權指令和特權指令都需要轉換,纔可以運行在物理CPU上,故需模擬虛擬機內核的環0、1、2、3;

  • 虛擬:virtulization,物理架構和虛擬架構一致,虛擬機上的非特權指令可以直接運行在物理CPU上,故只需模擬虛擬機內核的環0;

4.2 Memory虛擬化

    Memory在非虛擬化的操作系統中就是一種虛擬化實現,進程看到的是線程地址空間,而內核看到的是物理地址空間;

    在虛擬化環境下,hypervisor將物理內存分配成內存頁(page frame),然後被分隔後劃分給各虛擬機,故各虛擬機所獲得的就是離散、非完整的內存;

    虛擬機中的進程訪問內存需經過2次轉換,首先由MMU轉換成內核的連續虛擬地址空間,再經由hypervisor(利用shadow page table手段)轉換成物理地址空間;

    在虛擬機guest發生切換時,TLB緩存的結果可能會導致誤解,故每次虛擬機切換則不得不清空TLB,所以TLB的緩存命中率低下;

4.2.1 兩大加速技術

  • MMU(Memory Management Unit)的虛擬化:實現了GVA到HPA的直接轉換,具體實現技術有:

    • Intel:EPT技術(Extended Page Table,擴展的頁面技術)

    • AMD:NTP技術(Nested Page Table,嵌套的頁面技術)

    • 具體實現原理如下圖:

wKiom1N8oJjxNz45AAOfEbi0bNA759.jpg

  • TLB(Translation Lookaside Buffer)的虛擬化:tagged TLB:記錄(GuestA,GVA,HPA)的直接映射關係,需要CPU支持此特性;

4.3 I/O虛擬化

4.3.1 I/O設備類型及虛擬化類型

  • 外存:硬盤、光盤、U盤(一般使用模擬方式)

  • 網絡設備:網卡(一般使用半虛擬化方式)

  • 顯示設備:VGA(使用幀緩衝機制(frame buffer))

  • 鍵盤鼠標:PS2、USB(利用焦點捕獲方式,實現將模擬的設備和物理設備建立關聯關係)

4.3.2 I/O虛擬化的3種方式

  • 模擬:如利用本地迴環文件模擬實現硬盤功能,完全使用軟件來模擬真實硬件;性能較低;對於I/O設備來說,模擬和完全虛擬化,沒有區別;

  • 半虛擬化:IO frontend,IO backend,僅適用於硬盤和網卡;性能比模擬方式高;

  • IO-through:IO透傳技術,即讓虛擬機直接使用物理設備;需hypervisor協調,但能以接近硬件設備的性能來使用硬件,性能最高;如Intel的VT-d技術,是基於北橋芯片的硬件輔助虛擬化技術,完成IO設備的硬件虛擬化 ,主要功能是用來提升IO設備的可靠性、靈活性和性能的;

  • I/O設備模擬和半虛擬化的對比圖如下:

wKioL1N8odyR5zuWAANwik1Wd0A359.jpg

4.4 網絡虛擬化

4.4.1 橋接:bridge mode,Host上的物理網卡(如eth0)虛擬化爲交換機,爲其上的guest虛擬機提供對外通信功能,而新建的橋接口(如br0)則接收發往Host的的數據報文;

4.4.2 隔離:isolation mode,利用軟件實現一個虛擬交換機,各虛擬機連接至此虛擬交換機,即可實現虛擬機間通信;但各虛擬機和宿主機Host間也是無法通信的;

4.4.3 僅主機:Host-only mode,虛擬出一個交換機,並在Host上模擬一個虛擬網卡,連接在此虛擬交換機上,用以虛擬機間通信及虛擬機和宿主機間通信,但與外部網絡是隔離的;

4.4.4 路由:routed  mode,在Host-only mode的基礎上,打開Host上虛擬網卡和物理網卡間的路由轉發功能,實現對外通信;若要實現host1訪問guest1,則host1必須配置有pnet0網卡的靜態路由,故不常用;

4.4.5 NAT:在Host-only模式下打開了NAT轉發功能,經過物理網卡發出去的數據報文的源地址就是物理網卡的地址,以實現內部虛擬網絡對外透明;

詳細對比圖如下:

wKioL1N8ounCT65RAAxw59x3cFU819.jpg


5. 虛擬化的兩種實現模型

5.1 Hypervisor模型

如:Xen,vmware ESX/ESXi等;

5.2 Hosted模型

如:kvm,vmware workstation,virtualbox等;

二者的結構對比圖如下:

wKioL1N8lBiR2HTzAAJ9W7tbtgk484.jpg


6. 虛擬網卡的實現原理

wKiom1N8lKWTwcToAAD_ECmt5FU614.jpg

6.1 TUN與TAP

    在計算機網絡中,TUN與TAP是操作系統內核中的虛擬網絡設備。不同於普通靠硬件網路板卡實現的設備,這些虛擬的網絡設備全部用軟件實現,並向運行於操作系統上的軟件提供與硬件的網絡設備完全相同的功能;

    TAP等同於一個以太網設備,它操作第二層數據包如以太網數據幀。TUN模擬了網絡層設備,操作第三層數據包比如IP數據封包;

    操作系統通過TUN/TAP設備向綁定該設備的用戶空間的程序發送數據,反之,用戶空間的程序也可以像操作硬件網絡設備那樣,通過TUN/TAP設備發送數據。在後一種情況下,TUN/TAP設備向操作系統的網絡棧投遞(或“注入”)數據包,從而模擬從外部接受數據的過程;


7. 如何在Linux上建立橋設備

前提條件:關閉NetworkManager;安裝管理橋設備的程序包:yum -y install bridge-utils

7.1 配置文件方式:永久生效,但配置較繁瑣;

cd /etc/sysconfig/network-scripts
vi ifcfg-br0
    DEVICE=br0
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    TYPE=Bridge
    IPADDR=172.16.25.40
    NETMASK=255.255.0.0
    GATEWAY=172.16.0.1
    DNS1=172.16.0.1
    IPV6INIT=no
    USERCTL=no
vi ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    TYPE=Ethernet
    BRIDGE=br0
    IPV6INIT=no
    USERCTL=no
brctl stp br0 on    # 開啓STP生成樹協議
service network restart

7.2 brctl命令行方式:網絡重啓後失效,但配置方便,可寫進腳本直接執行;

brctl addbr  br0    # 添加橋接口br0
brctl stp br0 on    # 開啓STP(生成樹)協議
ifconfig eth0 0 up  # 拆除eth0上的IP地址
brctl addif br0 eth0    # 爲橋關聯網卡接口
ifconfig br0 172.16.100.8/16 up # 爲橋設備配置IP地址
route add default gw 172.16.0.1 # 配置默認網關


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