Linux雲計算底層技術之虛擬化技術總覽

本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆 「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。

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

提及虛擬化,相信你們應該都不陌生,像虛擬內存、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 都在使用,在此就不一一列舉了。


公衆號後臺回覆「加羣」,帶你進入高手如雲交流羣

個人公衆號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,後臺回覆 「1024」 便可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎你們關注。

相關文章
相關標籤/搜索