天天看點

虛拟化技術之我見

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

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

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)無需修改;

架構圖:

虛拟化技術之我見

産品:PearPC,Bochs,QEMU;

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

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

2.2 完全虛拟化(Full Virtulization)

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

虛拟化技術之我見

産品: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來實作虛拟化。通過這種方法将無需重新編譯或捕獲特權指令,使其性能非常接近實體機;

虛拟化技術之我見

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

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

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

2.4 作業系統級虛拟化(Operating System Level Virtulization)

簡介:這種技術通過對伺服器作業系統進行簡單地隔離來實作虛拟化,主要用于VPS;

虛拟化技術之我見

産品: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.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,嵌套的頁面技術)

具體實作原理如下圖:

虛拟化技術之我見

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

4.3 I/O虛拟化

4.3.1 I/O裝置類型及虛拟化類型

外存:硬碟、CD光牒、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裝置模拟和半虛拟化的對比圖如下:

虛拟化技術之我見

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轉發功能,經過實體網卡發出去的資料封包的源位址就是實體網卡的位址,以實作内部虛拟網絡對外透明;

詳細對比圖如下:

5.1 Hypervisor模型

如:Xen,vmware ESX/ESXi等;

5.2 Hosted模型

如:kvm,vmware workstation,virtualbox等;

二者的結構對比圖如下:

虛拟化技術之我見
虛拟化技術之我見

6.1 TUN與TAP

    在計算機網絡中,TUN與TAP是作業系統核心中的虛拟網絡裝置。不同于普通靠硬體網路闆卡實作的裝置,這些虛拟的網絡裝置全部用軟體實作,并向運作于作業系統上的軟體提供與硬體的網絡裝置完全相同的功能;

    TAP等同于一個以太網裝置,它操作第二層資料包如以太網資料幀。TUN模拟了網絡層裝置,操作第三層資料包比如IP資料封包;

    作業系統通過TUN/TAP裝置向綁定該裝置的使用者空間的程式發送資料,反之,使用者空間的程式也可以像操作硬體網絡裝置那樣,通過TUN/TAP裝置發送資料。在後一種情況下,TUN/TAP裝置向作業系統的網絡棧投遞(或“注入”)資料包,進而模拟從外部接受資料的過程;

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

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

7.2 brctl指令行方式:網絡重新開機後失效,但配置友善,可寫進腳本直接執行;

繼續閱讀