1. 程式人生 > >虛擬化技術總覽

虛擬化技術總覽

困難 入門 圖片 kvm -m 客戶 朋友 logs 技術分享

虛擬化本質上是軟/硬件層的抽象

說起虛擬化,相信大家應該都不陌生,像虛擬內存、Java 虛擬機、Android 模擬器這些都是虛擬化技術的體現,為什麽這樣說,這個就要回到虛擬化技術的本質上——虛擬化就是由位於下層的軟件模塊,根據上層的軟件模塊的期待,抽象(虛擬)出一個虛擬的軟件或硬件模塊,使上一層軟件直接運行在這個與自己期待完全一致的虛擬環境上。從這個意義上來看,虛擬化既可以是軟件層的抽象,又可以是硬件層的抽象。

技術分享圖片

所以說,像虛擬內存、Java 虛擬機、Android 模擬器這些都屬於是軟件虛擬化技術,而硬件虛擬化技術更多的應用就是在雲計算領域。從提出至今,虛擬化技術已經出現了多種實現方式,這些不同的方式其實就是軟件和硬件的不同組合。本文主要就是對這些實現方式進行一個總覽,形成一個總體認識,方便後面的學習。

VMM

VMM 全稱是 Virtual Machine Monitor,虛擬機監控系統,也叫 Hypervisor,是虛擬化層的具體實現。主要是以軟件的方式,實現一套和物理主機環境完全一樣的虛擬環境,物理主機有的所有資源,包括 CPU、內存、網絡 IO、設備 IO等等,它都有。這樣的方式相當於 VMM 對物理主機的資源進行劃分和隔離,使其可以充分利用資源供上層使用。虛擬出的資源以虛擬機的形式提供服務,一個虛擬機本質上和一臺物理機沒有什麽區別,可以跑各種操作系統,在之上再跑各種應用。這種方式無疑是計算機歷史上非常裏程碑的一步,你想想,以前可能要買多臺服務器才能解決的事,現在只用一臺就解決了。

虛擬機通常叫做客戶機(guest)

,物理機叫宿主機(host),VMM 處在中間層,既要負責對虛擬資源的管理,包括虛擬環境的調度,虛擬機之間的通信以及虛擬機的管理等,又要負責物理資源的管理,包括處理器、中斷、內存、設備等的管理,此外,還要提供一些附加功能,包括定時器、安全機制、電源管理等。

技術分享圖片

VMM 分類

VMM 根據平臺類型和實現結構有兩種不同的分類,按平臺類型可以分為完全虛擬化類虛擬化,完全虛擬化就是 VMM 完全模擬出一個跟物理主機完全一樣的環境。但是這個是非常困難的,首先,這需要硬件的支持,而硬件在初期設計的時候,沒有那麽遠的前瞻性,可以預想到為虛擬化提供支持,前次,指令的復雜性,即使通過模擬的方式也很難做到全部指令都模擬。所以,就需要借助其他的一些技術來輔助虛擬化。

技術分享圖片

軟件輔助虛擬化是通過優先級壓縮(Ring Compression)和二進制代碼翻譯(Binary Translation)這兩個技術來完成的。簡單講,RC 基於 CPU 特權級的原理,也就是 guest、VMM 和 host 分別處於不同的特權級上(這個後面講 CPU 虛擬化的時候會詳述),guest 要訪問 host 就屬於越級訪問,會拋異常,這時 VMM 會截獲這個異常,並模擬出其可能的行為,從而進行相應處理。但這個問題很明顯,就是由於硬件設計的缺陷,有些指令並不能截獲,從而導致“漏洞”。

BT 可以彌補這個缺陷,它通過去掃描 guest 的二進制的代碼,將難以虛擬化的指令轉為支持虛擬化的指令,從而可以配合 VMM 完成虛擬化功能。這兩種方式都是通過「打補丁」的方式來輔助虛擬化,很難再架構上保證完整性。

所以,後期的硬件廠商就在硬件上對虛擬化提供了支持,有了硬件輔助的虛擬化。通過對硬件本身加入更多的虛擬化功能,就可以截獲更多的敏感指令,填補上漏洞。在這一塊,Intel 的 VT-x/d 技術和 AMD 的 AMD-V 技術是其中的代表。

而類虛擬化則是另外一種通過軟件來避免漏洞的方式,就是通過修改 guest 操作系統內核代碼(API 級)來避免漏洞,這種方式好處就是可以自定義內核的執行行為,某種程度上對性能進行優化。

上面這種分類僅供了解即可,重點掌握下面這種分類,就是根據 VMM 的實現結構分類,主要分類** Hypervisor 模型(1 型)宿主模型(2 型)**。

Hypervisor 模型中 VMM 既是操作系統,也是虛擬化軟件,也就是集成了虛擬化功能的操作系統,對上為 guest 提供虛擬化功能,對下管理著所有物理資源,它的優點就是效率高,虛擬機的安全性只依賴於 VMM,缺點就是管理所有的物理資源,意味著 VMM 要承擔很多的開發工作,特別是驅動層面的開發,我們知道硬件的 I/O 設備是很多的,這些設備都要有對應的驅動來設配才能為虛擬機提供功能。

技術分享圖片

宿主模型剝離了管理功能和虛擬化功能,虛擬化功能只是作為內核的一個模塊來加載,比如 KVM 技術就是其中的佼佼者,KVM 技術可以說是雲計算最核心的技術了,後面會經常用到。一般 KVM 只負責 CPU 和內存的虛擬化,I/O 的虛擬化則由另外一個技術來完成,即 Qemu。這些技術都是後面的重點,在這裏只是提一下。

技術分享圖片

典型虛擬化產品

  • VMware

VMware 可以說是虛擬化的鼻祖,現在很多公司都是在模仿 VMware 的產品,相應用過 VMware 虛擬機的朋友應該不陌生了,VMware 提供了很多的虛擬化產品,從服務器到桌面都有很多應用。主要有面向企業級應用的 ESX Server,面向服務端的入門級產品 VMware Server,面向桌面的主打產品 VMware Workstation(這個相信大家經常用),面向蘋果系統的桌面產品 VMware Fusion,還有提供整套虛擬應用產品的 VMware vSphere,細分的話還有 VMware vStorage(虛擬存儲),VMware vNet(虛擬網絡)等。

  • Xen

Xen 是一款開源虛擬機軟件,Xen 結合了 Hypervisor 模型和宿主模型,屬於一種混合的虛擬化模型,基於 Xen 的虛擬化產品也有很多,比如 Ctrix、VirtualIron、RedHat 和 Novell 等都有相應的產品。這個一般是研究機構用得多一些,生產環境中大部分用的是 KVM。

  • KVM

KVM 也是一款開源軟件,於 2007 年 2 月被集成到了 Linux 2.6.20 內核中,成為了內核的一部分。KVM 采用的是基於 Intel VT 的硬件輔助虛擬化技術,以及結合 Qemu 來提供設備虛擬化,從實現上看,屬於宿主模型。使用 KVM 的廠商很多啊,像我們比較熟悉 VMware Workstation 和 VirtualBox 都在使用,在此就不一一列舉了。

對雲計算感興趣的小夥伴可以關註我的微信公眾號:雲計算小白,專註雲計算領域,堅持分享幹貨。

技術分享圖片

虛擬化技術總覽