主要介紹虛擬化技術的歷史演進過程和KVM虛擬化的一些特點妙黍。
0、簡介
虛擬化技術的演變過程可以分為軟件模擬瞧剖、虛擬化層翻譯废境、容器虛擬化三個大的階段。其中筒繁,虛擬化層翻譯又可以分為:軟件捕獲翻譯(軟件全虛擬化)噩凹、改造虛擬機系統(tǒng)內核加虛擬化層翻譯(半虛擬化)和硬件支持的虛擬化層翻譯(硬件支持的全虛擬化)三種。
1毡咏、軟件模擬
軟件模擬是通過軟件完全模擬CPU驮宴、芯片組、磁盤呕缭、網(wǎng)卡等計算機硬件堵泽。因為是軟件模擬,所以理論上可以模擬任何硬件恢总,甚至是不存在的硬件迎罗。但是因為這種方式全部是軟件模擬硬件,所以非常低效片仿,性能很差纹安,因此一般只用于研究測試的場景。采用這種技術的典型產(chǎn)品有Bochs砂豌、QEMU等厢岂。
2、虛擬化層翻譯
X86平臺指令集劃分為4個特權模式:Ring 0阳距、Ring 1塔粒、Ring 2、Ring 3筐摘。操作系統(tǒng)一般使用Ring 0級別卒茬,應用程序使用Ring 3級別,驅動程序使用Ring 1和Ring 2級別咖熟。X86平臺在虛擬化方面的一個難點就是如何將虛擬機越級的指令使用進行隔離圃酵。
2.1 軟件全虛擬化
VMware公司首先想到了通過虛擬化引擎,捕獲虛擬機的指令球恤,并進行處理的解決方法辜昵。
通過虛擬化引擎VMM來對虛擬機上的指令進行捕獲并解釋執(zhí)行荸镊,就可以有效地隔離開虛擬機和物理機上的操作咽斧,最常見的表現(xiàn)就是關閉虛擬機并不會關閉物理機堪置。這種方案也因此叫做軟件全虛擬化的解決方案。
Hypervisor张惹,又稱虛擬機監(jiān)視器(英語:virtual machine monitor舀锨,縮寫為 VMM),是用來建立與執(zhí)行虛擬機器的軟件宛逗、固件或硬件坎匿。
被Hypervisor用來執(zhí)行一個或多個虛擬機器的電腦稱為主體機器/宿主機/物理機(host machine),這些虛擬機器則稱為客體機器/虛擬機(guest machine)雷激。hypervisor提供虛擬的作業(yè)平臺來執(zhí)行客體操作系統(tǒng)(guest operating systems)替蔬,負責管理其他客體操作系統(tǒng)的執(zhí)行階段;這些客體操作系統(tǒng)屎暇,共同分享虛擬化后的硬件資源承桥。
2.2 半虛擬化
軟件全虛擬化的解決方案雖然可行,但是由于指令需要經(jīng)過VMM根悼,所以要在虛擬化層做大量的工作凶异,性能上比較一般,因此Xen項目提出了使用修改虛擬機操作系統(tǒng)內核的解決方案挤巡。具體來說就是在虛擬機上使用修改過的內核剩彬,在修改過的內核中對特殊指令進行修改使其與物理機隔離開來,這樣就可以有效地減少虛擬化層的工作矿卑,從而提高性能喉恋。但是劣勢也是顯而易見的,由于需要使用特殊的內核母廷,因此在配置上也會相對麻煩一些瀑晒,且由于內核原因一開始不支持windows系統(tǒng)的虛擬化,直到后來才加入支持徘意。
不過由于將一部分的指令翻譯工作從虛擬化層轉移到了修改過的內核當中苔悦,因此性能比上面提到的軟件全虛擬化要高很多,這種虛擬化方式也稱為半虛擬化(paravirtualization)或者是準虛擬化椎咧。
2.3 硬件全虛擬化
2005年玖详,Intel推出了硬件的方案,對CPU指令進行改造勤讽,即VT-x蟋座,如圖1-5所示。VT-x增加了兩種操作模式:VMX root operation和VMX non-root operation脚牍。VMM運行在VMX root operation模式向臀,虛擬機運行在VMX non-root operation模式。這兩種操作模式都支持Ring 0~Ring 3這4個特權級诸狭。
2005年券膀,隨著Intel推出支持x86虛擬化技術的CPU君纫,Xen亦加入全虛擬化模式。Xen的全虛擬化模式允許在虛擬機中運行Windows等非Linux系統(tǒng)芹彬。
因為是基于硬件的蓄髓,所以效率非常高,這種方案也稱為硬件支持的全虛擬化方案∈姘铮現(xiàn)在的一個發(fā)展趨勢是不僅CPU指令有硬件解決方案会喝,I/O通信也有硬件解決方案,稱為VT-d玩郊;網(wǎng)絡通信也有硬件解決方案肢执,稱為VT-c。
除了Intel译红,AMD也在自家的處理器上加入了對硬件級虛擬化的支持蔚万,命名為AMD-v。
當前的虛擬化引擎临庇,都是使用硬件支持的虛擬化解決方案反璃。并且最新的操作系統(tǒng)一般都支持一些半虛擬化的特性,所以宿主機和虛擬機使用比較新的版本假夺,性能也會好一些淮蜈。
3、容器虛擬化
容器虛擬化的原理是基于CGroups已卷、Namespace等技術將進程隔離梧田,每個進程就像一臺單獨的虛擬機一樣,有自己被隔離出來的資源侧蘸,也有自己的根目錄裁眯、獨立的進程編號、被隔離的內存空間讳癌〈┪龋基于容器的虛擬化可以實現(xiàn)在單一內核上運行多個實例,因此是一個更高效率的虛擬化方式晌坤。目前基于Docker+k8s的容器級虛擬化技術已經(jīng)在國內許多互聯(lián)網(wǎng)公司的生產(chǎn)環(huán)境中大量使用逢艘。
4、KVM虛擬化
4.1 kvm簡介
KVM(Kernel-based Virtual Machine)最初是由以色列的公司Qumranet開發(fā)的骤菠。KVM在2007年2月被正式合并到Linux 2.6.20核心中它改,成為內核源代碼的一部分。2008年9月4日商乎,RedHat公司收購了Qumranet央拖,開始在RHEL中用KVM替換Xen,第一個包含KVM的版本是RHEL 5.4。從RHEL 6開始鲜戒,KVM成為默認的虛擬化引擎专控。KVM必須在具備Intel VT或AMD-V功能的X86平臺上運行。在Linux內核3.9版中袍啡,加入了對ARM架構的支持踩官。
具體kvm虛擬化支持的處理器可以通過官網(wǎng)進行查詢却桶。
KVM包含一個為處理器提供底層虛擬化境输、可加載的核心模塊kvm.ko
(kvm-intel.ko
或kvm-amd.ko
),使用QEMU(QEMU-KVM)作為虛擬機上層控制工具颖系。KVM不需要改變Linux或Windows系統(tǒng)就能運行嗅剖。
實際上,在Linux中嘁扼,kvm就是內核中的一個模塊信粮,用戶空間通過QEMU模擬硬件提供給虛擬機使用,而一臺使用kvm創(chuàng)建的虛擬機就是一個Linux中的進程趁啸,管理這個對應的進程就是相當于管理整個對應的虛擬機强缘。
4.2 QEMU和KVM
以下摘錄自wiki:
QEMU有多種模式
- User mod:又稱作“使用者模式”,在這種模塊下不傅,QEMU運行針對不同指令編譯的單個Linux或Darwin/macOS程序旅掂。系統(tǒng)調用與32/64位接口適應。在這種模式下访娶,我們可以實現(xiàn)交叉編譯(cross-compilation)與交叉?zhèn)慑e(cross- debugging)商虐。
- System mod:“系統(tǒng)模式”,在這種模式下崖疤,QEMU模擬一個完整的計算機系統(tǒng)秘车,包括外圍設備。它可以用于在一臺計算機上提供多臺虛擬計算機的虛擬主機劫哼。 QEMU可以實現(xiàn)許多客戶機OS的引導叮趴,比如x86,MIPS权烧,32-bit ARMv7疫向,PowerPC等等。
- KVM Hosting:QEMU在這時處理KVM鏡像的設置與遷移豪嚎,并參加硬件的仿真搔驼,但是客戶端的執(zhí)行則由KVM完成。
- Xen Hosting:在這種托管下侈询,客戶端的執(zhí)行幾乎完全在Xen中完成舌涨,并且對QEMU屏蔽。QEMU只提供硬件仿真的支持扔字。
前面我們提到過QEMU的架構是純軟件實現(xiàn)的囊嘉,因此靈活性很強温技,但是性能很差,因此可以搭配KVM模塊使用從而有效地提升性能表現(xiàn)扭粱,也就是我們常說的QEMU-KVM
舵鳞,此時的QEMU運行在上面提到的KVM Hosting
模式下,處理KVM鏡像的設置與遷移琢蛤,并參加硬件的仿真蜓堕,可以存儲及還原虛擬機運行狀態(tài),還可以虛擬多種設備博其,包括網(wǎng)卡套才、多CPU、IDE設備慕淡、軟驅背伴、顯卡、聲卡峰髓、多種并口設備傻寂、多種串口設備、多種USB設備携兵、PC喇叭疾掰、PS/2鍵盤鼠標(默認)和USB鍵盤鼠標、藍牙設備眉孩,但是客戶端的執(zhí)行則由KVM完成个绍。
QEMU-KVM的分支版本發(fā)布了3個正式的版本1.1、1.2浪汪、1.3巴柿,隨后和QEMU的主版本合并,也就是說現(xiàn)在的QEMU版本默認支持KVM死遭,而KVM的最后一個自己的版本是KVM 83广恢,隨后和內核版本一起發(fā)布,和內核版本號保持一致呀潭,所以要使用KVM的最新版本钉迷,就要使用最新的內核。
4.3 Libvirt和KVM
前面我們提到钠署,基于KVM的虛擬機在Linux中可以視為一個進程糠聪,而為了方便管理,紅帽公司發(fā)布了一個開源項目Libvirt谐鼎,Libvirt有API舰蟆,也有一套命令行工具,可以完成對虛擬機的管理,大多數(shù)的管理平臺都是通過Libvirt來完成對KVM虛擬機的管理的身害,比如OpenStack味悄、CloudStack、OpenNebula等塌鸯。
Libvirt主要由3部分組成:
- 一套API的lib庫侍瑟,支持主流的編程語言,包括C丙猬、Python涨颜、Ruby等
- Libvirtd服務
- 命令行工具virsh
Libvirt的設計目標是通過相同的方式管理不同的虛擬化引擎,但是目前實際上多數(shù)場景使用Libvirt的是KVM淮悼。Libvirt可以實現(xiàn)對虛擬機的管理咐低,比如虛擬機的創(chuàng)建揽思、啟動袜腥、關閉、暫停钉汗、恢復羹令、遷移、銷毀损痰,以及虛擬機網(wǎng)卡福侈、硬盤、CPU卢未、內存等多種設備的熱添加肪凛。Libvirt還可以通過SSH、TCP辽社、基于TCP的TLS來實現(xiàn)遠程的宿主機管理伟墙。
4.4 KVM的優(yōu)勢
KVM虛擬化的主要優(yōu)勢在我看來有三點:
-
開源免費
kvm是開源的,同時也是可以免費使用的滴铅,這也意味著有很多新技術會先在kvm上嘗鮮戳葵,再推廣到其他的虛擬化平臺,而且對于企業(yè)來說汉匙,免費這一對個人用戶而言感知不強的特性就會被放大很多倍拱烁,這也是諸如openstack等云平臺使用kvm作為首選虛擬化的原因。
-
性能優(yōu)越
同樣的硬件條件下噩翠,相比起軟件模擬戏自、半虛擬化等,kvm虛擬化可以提供更好的性能甚至于接近物理機的性能伤锚。
-
支持廣泛
除了廣泛的社區(qū)技術支持擅笔,還可以付費購買紅帽公司的技術支持。