談談虛擬化技術深度解密(上)
發展歷史
早在計算機還是龐然大物的上世紀60年代,虛擬化技術已經開始悄悄發展了。
- 1964年 IBM M44/44X被認為是世界上***個支持虛擬化的系統,其技術方式是:像分時系統一樣,在每個時間片,一個IBM 7044大型機獨占所有硬件資源來運行,并且提出了分頁的概念,由于其依賴硬件來實現虛擬化,史稱硬件虛擬化。
- 1974年,論文Formal requirements for virtualizable third generation architectures提出了虛擬化系統結構的三個基本條件[1]。
- 1972年著名的天才法國程序員Fabrice Bellard出生。
- 1979年的 Unix 第7版引入了 chroot 機制,chroot 就是讓一個進程把指定的目錄作為根目錄,它的所有文件系統操作都只能在這個指定目錄里進行。
- 1990年 Xen hypervisor 的Xenoserver初始代碼工程由 Keir Fraser 和 Ian Pratt 創建。
- 1998年,很著名的 X86 模擬器 Bochs 出現了,其正式版本的推出時間為1998年11月。
- 1999年,Vmware 公司率先推出針對 X86 平臺的商用虛擬機 Vmaware workstation。
- 2001年,目前***的采用動態二進制翻譯技術的虛擬化軟件 Qemu(Quick EMUlator) 發布***個版本,其作者是Fabrice Bellard。
- 2003年,劍橋大學發布了*** Public 的 Xen 版本,通過半虛擬化技術實現了對包括 x86-64 平臺多個平臺的虛擬化支持。
- 同年,Intel 公布了將在 x86 平臺的 CPU 上支持虛擬化技術 VT。
- 2007年1月,Sun 公司發布了開源虛擬化 VirtualBox 。
- 2007年2月,Linux Kernel 主線版本2.6.20合入了由以色列公司 Qumranet開發的 KVM(Kernel-based Virtual Machine ),支持KVM的前提是 CPU 必須要支持硬件虛擬化。
- 2008年***季度,微軟連同 Windows Server 2008 同時發布了虛擬化產品 Hyper-V。
- 2008年6月, Linux Container 發布了0.1.0版本,其可以提供輕量級的虛擬化,用來隔離進程和資源。
- 2008年9月4,Red Hat 收購了色列公司 Qumranet,并著手開始用 KVM 替換在 Red Hat 中的使用的 Xen [Xen開始在主流Linux 發行廠商中衰落]。
- 2010年10月21日,NASA 發布了可以提供基礎設施即服(IaaS)服務的云平臺 OpenStack ,并提供了***個版本。
- 2011年1月11日,Ubuntu的創始人 Mark shuttleworth 宣布,Ubuntu 將采用 Openstack 作為基礎的云平臺,在之前的版本 Ubuntu 采用的是 Eucalyptus。
- 2013年3月15,在加利福尼亞州圣克拉拉召開的 Python 開發者大會上,DotCloud 的創始人兼***執行官 Solomon Hvkes 在一場僅五分鐘的微型演講中,***提出了 Docker 這一概念,并于會后將源碼進行了開源,托管在了Github上。
- 2014年6月,Docker發布了***個正式版本1.0,彼時,Docker的下載量已經超過 275萬次 ,1年之內 Redhat 和 AWS 就宣布為 Docker 提供官方支持。
- 2015年國外國內涌現各種從事云的公司,并提供了各種云服務,諸如Laas,Paas,Saas等。
從上述時間線,我們的發現,各種如春筍般的新技術的出現,必將有舊技術的沒落,技術的革新比我們想象的要快太多。
基礎概念
什么是虛擬化?
這里簡單歸納一下我的理解:
1. 虛擬化是資源的一種邏輯表示,并不會受限于物理資源。
2. 運行的環境不在真實的硬件上,而是硬件之上的虛擬內存中的一段,或者說是虛擬的環境中。
3. 虛擬化為數據、計算能力、存儲資源等提供了一個邏輯視圖,而不是物理視圖。
4. 虛擬化的發展,大幅降低了IT硬件成本,減少了資源的浪費,并且提升了系統的穩定性和安全性。
全虛擬化
全虛擬化(Full Virtualization)也稱為原始虛擬化技術,該模型使用虛擬機協調Guest操作系統和原始硬件,VMM在Guest操作系統和裸硬件之間用于工作協調,一些受保護指令必須由Hypervisor(虛擬機管理程序)來捕獲處理。 全虛擬化的運行速度要快于硬件模擬,但是性能方面不如裸機,因為Hypervisor需要占用一些資源。
半虛擬化
半虛擬化(Para Virtualization)是另一種類似于全虛擬化的技術,它使用Hypervisor分享存取底層的硬件,但是它的Guest操作系統集成了虛擬化方面的代碼。該方法無需重新編譯或引起陷阱,因為操作系統自身能夠與虛擬進程進行很好的協作。 半虛擬化需要Guest操作系統做一些修改,使Guest操作系統意識到自己是處于虛擬化環境的,但是半虛擬化提供了與原操作系統相近的性能。
虛擬化技術的關鍵特性
同質 - Equivalence
即VM的運行環境和物理機的環境在本質上是相同的,表現上允許有一些差異。如CPU的橋片必須一致,CPU core的個數以及內存可以不同,不必使用同類型的網絡適配器驅動等等。
高效 - Efficiency
即VM的性能必須接近物理機。因此,常見的虛擬系統模擬器(Boches,simics等)就不能成為VM。為達此目的,軟件在虛擬系統上運行時,大多數指令要直接運行在硬件上執行,只有少量指令需要VMM的模擬或翻譯處理。
資源受控 - Resource control
即VMM(Virtual Machine Monitor)對物理機的所有資源有絕對的控制力。虛擬機不允許直接執行敏感指令。