云计算之虚拟化技术
轉載:https://www.jianshu.com/p/312056e70387?from=timeline
?云叔和云計算?關注
?0.1?2017.12.10 13:32*?字數 3194?閱讀 7608評論 0喜歡 5
通過前幾篇文章的閱讀,相信大家對云計算概念、架構和技術有了一定的認識。那么,我們這里來談談云計算的核心技術之一:虛擬化。
在講虛擬化技術前,我們先來學習幾個概念:
(1)物理平臺----實現虛擬技術的真實物理硬件和操作系統平臺。
(2)虛擬平臺----在物理平臺上,虛擬出來的運行不同操作系統的各種虛擬機。
(3)VMM----虛擬機監視器,一種監控和管理虛擬機運行的核心軟件層,也叫Hypervisor。
(4)宿主機----真實的物理服務器,上面可以運行虛擬出來的虛擬機。
(5)客戶機----就是指從宿主機上虛擬出來的虛擬機。
?
1 什么是虛擬化?
云計算的核心技術之一就是虛擬化技術。所謂虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。
虛擬化的核心軟件VMM,是一種運行在物理服務器和操作系統之間的中間層軟件。VMM是一種在虛擬環境中的“元”操作系統。他們可以訪問服務器上包括CPU、內存、磁盤、網卡在內的所有物理設備。VMM不但協調著這些硬件資源的訪問,也同時在各個虛擬機之間施加防護。當服務器啟動并執行VMM時,它會加載所有虛擬機客戶端的操作系統同時會分配給每一臺虛擬機適量的內存,CPU,網絡和磁盤。
2 虛擬化方式
虛擬化技術有很多實現方式,比如根據虛擬化的程度和級別,有軟件虛擬化和硬件虛擬化,全虛擬化和半虛擬化。
2.1軟件虛擬化
軟件虛擬化,顧名思義,就是采用純軟件的方法在在現有的物理平臺上實現物理平臺訪問的截獲和模擬,該物理平臺往往不支持硬件虛擬化。
常見的軟件虛擬化技術QEMU,是通過純軟件來仿真X86平臺處理器的指令,然后解碼和執行,該過程并不在物理平臺上直接執行,而是通過軟件模擬實現,因此往往性能比較差,但是可以在同一平臺上模擬出不同架構平臺的虛擬機。
VMware則采用了動態二進制翻譯技術。VMM在可控的范圍內,允許客戶機的指令在可控的范圍內直接運行??蛻魴C指令在運行前會被VMM掃描,其中突破VMM限制的指令被動態替換為可以在物理平臺上直接運行的安全指令,或者替換為對VMM的軟件調用。因此其性能上比QEMU有大幅提升,但是其失去了跨平臺虛擬化的能力。
2.2硬件虛擬化
硬件虛擬化,簡單來說,就是物理平臺本身提供了對特殊指令的截獲和重定向的硬件支持,新的硬件會提供額外的資源來幫助軟件實現對關鍵硬件資源的虛擬化,從而提升性能。
比如X86平臺,CPU帶有特別優化過的指令集來控制虛擬過程,通過這些指令集,VMM會將客戶機置于一種受限模式下運行,一旦客戶機試圖訪問硬件資源,硬件會暫停客戶機的運行,將控制權交回給VMM處理。同時,VMM還可以利用硬件的虛擬化增強技術,將客戶機對硬件資源的訪問,完全由硬件重定向到VMM指定的虛擬資源。
由于硬件虛擬化可提供全新的架構,支持操作系統直接在上面運行,無需進行二進制翻譯轉換,減少的性能開銷,極大地簡化了VMM的設計,從而使VMM可以按標準編寫,通用性更好,性能更強。
需要說明的是,硬件虛擬化技術是一套解決方案,完整的情況需要CPU、主板芯片組、BIOS和軟件的支持。Intel在其處理器產品線中實現了Intel VT虛擬化技術(包括Intel VT-x/d/c)。AMD也同樣實現了其芯片級的虛擬化技術AMD-V。
2.3全虛擬化
完全虛擬化技術又叫硬件輔助虛擬化技術,最初所使用的虛擬化技術就是全虛擬化(Full Virtualization)技術,它在虛擬機(VM)和硬件之間加了一個軟件層Hypervisor,或者叫做虛擬機管理程序或虛擬機監視器(VMM)。
完全虛擬化技術幾乎能讓任何一款操作系統不用改動就能安裝到虛擬服務器上,而它們不知道自己運行在虛擬化環境下。主要缺點是,性能方面不如裸機,因為VMM需要占用一些資源,給處理器帶來開銷。
2.4半虛擬化
半虛擬化技術是后來才出現的技術,也叫做準虛擬化技術,現在比較熱門,它就是在全虛擬化的基礎上,把客戶操作系統進行了修改,增加了一個專門的API,這個API可以將客戶操作系統發出的指令進行最優化,即不需要VMM耗費一定的資源進行翻譯操作。因此VMM的工作負擔變得非常的小,因此整體的性能也有很大的提高。不過缺點就是,要修改包含該API的操作系統,但是對于某些不含該API的操作系統(主要是Windows)來說,就不行能用這種方法。
半虛擬化技術的優點是性能高。經過半虛擬化處理的服務器可與VMM協同工作,其響應能力幾乎不亞于未經過虛擬化處理的服務器。它的客戶操作系統(Guest OS)集成了虛擬化方面的代碼。該方法無需重新編譯或引起陷阱,因為操作系統自身能夠與虛擬進程進行很好的協作。
3 虛擬化實現
虛擬化技術指的是軟件層面的實現虛擬化的技術,整體上分為開源虛擬化和商業虛擬化兩大陣營。典型的代表有:Xen,KVM,WMware,Hyper-V、Docker容器等。
這里介紹一下開源的KVM和Xen以及微軟的Hyper-V技術。
3.1 KVM
?
KVM(Kernel-based Virtual Machine)是基于內核的虛擬機,KVM是集成到Linux內核的VMM,是X86架構且硬件支持虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux做大量的事,如任務調度、內存管理與硬件設備交互等。
KVM本身不執行任何模擬,需要用戶控件程序通過/dev/kvm接口設置一個客戶機的虛擬虛擬地址空間,向它提供模擬的I/O,并將其視頻顯示映射回宿主機的顯示屏。
KVM繼承了Linux系統管理內存的諸多特性,比如,分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的支持能夠讓虛擬機高效訪問更大的內存空間等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的占用率,并提供較好的吞吐量。此外,KVM還借助于KSM(Kernel Same-pageMerging)這個內核特性實現了內存頁面共享。KSM通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,并將這些內存頁合并為一個被各相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新為其提供一個新的頁面副本。實踐中,運行于同一臺物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很的,比如共享庫、內核或其它內存對象等都有可能表現為相同的內存頁,因此,KSM技術可以降低內存占用進而提高整體性能。
3.2 Xen
?
Xen是一個基于X86架構、發展最快、性能最穩定、占用資源最少的開源虛擬化技術。在Xen使用的方法中,沒有指令翻譯。這是通過兩種方法之一實現的。第一,使用一個能理解和翻譯虛擬操作系統發出的未修改指令的CPU(此方法稱作完全虛擬化)。另一種,修改操作系統,從而使它發出的指令最優化,便于在虛擬化環境中執行(此方法稱作準虛擬化)。
在Xen環境中,主要有兩個組成部分。一個是虛擬機監控器(VMM)。VMM層在硬件與虛擬機之間,是必須最先載入到硬件的第一層。Hypervisor載入后,就可以部署虛擬機了。在Xen中,虛擬機叫做“domain”。在這些虛擬機中,其中一個扮演著很重要的角色,就是domain0,具有很高的特權。通常,在任何虛擬機之前安裝的操作系統才有這種特權。
Domain0要負責一些專門的工作。由于hypervisor中不包含任何與硬件對話的驅動,也沒有與管理員對話的接口,這些驅動就由domain0來提供了。通過domain0,管理員可以利用一些Xen工具來創建其它虛擬機(Xen術語叫domainU)。這些domainU也叫無特權domain。這是因為在基于i386的CPU架構中,它們絕不會享有最高優先級,只有domain0才可以。
3.3 Hyper-V
Hyper-V采用微內核的架構,兼顧了安全性和性能的要求。Hyper-V底層的VMM運行在最高的特權級別下,微軟將其稱為ring -1(而Intel則將其稱為root mode),而虛擬機的OS內核和驅動運行在ring 0,應用程序運行在ring 3下,這種架構就不需要采用復雜的BT(二進制特權指令翻譯)技術,可以進一步提高安全性。
由于Hyper-V底層的VMM代碼量很小,不包含任何第三方的驅動,非常精簡,所以安全性更高。Hyper-V采用基于VMbus的高速內存總線架構,來自虛機的硬件請求(顯卡、鼠標、磁盤、網絡),可以直接經過VSC,通過VMbus總線發送到根分區的VSP,VSP調用對應的設備驅動,直接訪問硬件,中間不需要Hypervisor的幫助。
這種架構效率很高,不再像以前的Virtual Server,每個硬件請求,都需要經過用戶模式、內核模式的多次切換轉移。更何況Hyper-V現在可以支持Virtual SMP,Windows Server 2008虛機最多可以支持4個虛擬CPU;而Windows Server 2003最多可以支持2個虛擬CPU。每個虛機最多可以使用64GB內存,而且還可以支持X64操作系統。
總結
- 上一篇: ahjesus解决win下U盘无法写入的
- 下一篇: cocos2d-x学习 之一