天天看點

虛拟化技術(二)——常見的虛拟化技術

虛拟化技術(二)——常見的虛拟化技術

之前大緻介紹了什麼是虛拟化,并以CPU的虛拟化為例進行簡要介紹,糾正一些人們對于虛拟化的誤解!那本本節就來說一說常見的虛拟化技術!

概述

上節提到,以筆者為例,平時在PC上使用比較多的虛拟化是Vmwear(一個桌面軟體,當然偶爾也會使用Virtual Box,後者是一個開源軟體功能依舊很強大),這類軟體可以在windows上安裝linux虛拟機(使用者學習linux系統,或者安裝hadoop叢集進行學習測試),且安裝完成的虛拟機就是一個檔案夾,可以拷貝到任意其他PC電腦上使用,隻要那台電腦上也裝了Vmwear,等同于一個移動作業系統。但是這僅僅是我們個人在PC端使用的虛拟化軟體,如果在企業級伺服器上相應的工具又是什麼?Vmwear在伺服器端也推出了自己的虛拟化工具,叫做ESXI,打開後是一個文本界面,但是它并不是使用最廣泛的虛拟化技術,使用最廣泛的服務端虛拟化技術是KVM和Xen。KVM是Host OS 中的兩個核心子產品,且是使用做廣泛的開源的hyperviser。但是KVM出現的比較晚,KVM是依賴硬體輔助虛拟化技術實作的,是在06年硬體虛拟化技術出現後才有的。而06年之前使用的是另一個開源的hyperviser,那就是XEN,國内的阿裡和國外的AWS都是使用的XEN。Xen是劍橋實驗室開發的,對系統修改比較大。目前linux伺服器首選KVM(為什麼AWS和阿裡雲沒有使用KVM而使用XEN,或許因為他們開始做雲計算的時候KVM還不成熟,無法商用)。下面主要以KVM和XEN這兩種典型的技術進行介紹。

一、XEN:

上一節中提到,X86不好做虛拟化的根本原因就是虛拟的作業系統中有些指令沒有辦法執行(特權指令)。KVM是基于應将輔助虛拟化技術解決的這個問題,但是XEN出現的的時候還沒有硬體輔助虛拟化技術,它是怎麼解決這個問題的呢?XEN的處理方法就是讓虛拟機的作業系統不要去用這些指令(簡單,暴力,我喜歡)。那虛拟機的作業系統不用這些指令,虛拟機怎麼工作呢?XEN給出的解決方案是,當虛拟機用到這些指令時不去調用CPU的指令而是調用xen的hyperviser,它幫你把完成這些指令相應的功能。而這樣需要付出的代價就是要改作業系統,把作業系統的核心給改了,讓作業系統在遇到這些指令的時候不要去調CPU的指令而是去調用XEN的hyperviser,是以XEN把這種調用叫做HyperCall(國内大多被翻譯成“超級調用”)。是以XEN裡面是跑不了widow的虛拟機的,因為沒有辦法修改windows的核心,但有支援XEN的linux版本。

1.1 XEN的使用

首先找台伺服器過來,裝上linux,之後裝上XEN,裝上xen之後他會修改linux的核心,改完之後他會告訴你重新開機這台伺服器機器。而當你重新開機這台伺服器之後,裡面軟體的位置就發生了翻天覆地的變化,如下圖所示:

虛拟化技術(二)——常見的虛拟化技術

在重新開機伺服器之前,我們是在伺服器硬體上 裝了linux的作業系統,然後在linux之上裝了Xen;本來實體伺服器上跑的是作業系統,但是裝完XEN并重新開機之後,在伺服器的硬體之上跑的不在是linux作業系統而是XEN 的Hypervisor,而之前我們裝的linux作為Host OS 在其之上 ,即左上角的HOST OS,其本質上也就是一個虛機了。之後如果再建立虛機GUEST OS就會如圖Host OS的右邊,也稱之為Paravirtualized OS因為Para這個字首願意是并列的意思 ,但因為也有半的意思,是以在某些文獻中被稱之為“半虛拟化”(算是一種英文直譯的後果吧)。

此時還涉及到一個問題就是外部裝置怎樣供多個虛機使用?這是就要依靠右上角的那個Host OS即管理用的虛機稱之為Domain0,之後再啟動的虛機,即供使用者使用的虛機成為DomainU。也就是Domain0是做管理用的虛機,DomainU是使用者用的虛機。回到之前的問題,而外設的虛拟化怎麼實作?其實就是在Domain0 裡面跑實體的驅動通過Domain0将這個實體的裝置虛拟化成多個裝置供其他的虛機(DomainU)去使用,是以說Domain0和Hypervisor一起實作了外部裝置的虛拟化。由此可見外部裝置的虛拟化從來都不是HyperVisor自己可以搞定的,都要依賴其他的輔助協同去實作,對于KVM來說他依賴于qemu,對于XEN來說依賴于Domain0,另外VMware在服務端的虛拟化技術叫做ESXI,他的架構在本質上跟KVM是非常類似的。微軟的HyperVisor叫做Hyper_V跟Xen比較類似。

虛拟化技術(二)——常見的虛拟化技術

二、KVM

上一節我們提到,在安裝虛拟機時底層跑的是系統(我們PC機上的windows)我們稱為Host OS。相應的在linux伺服器端,原始裝的那個linux系統我們也稱為Host OS,在器之上我們安裝各種應用,JVM,JCC,Python等等。而KVM是Host OS中的兩個核心子產品,KVM自己主要完成指令集的虛拟化工作和硬體輔助虛拟化技術(就是晶片裡面的硬體輔助虛拟化技術,比如interl的NT-x AMD-V配合起來去完成計算虛拟化的功能),此外一台計算機光有計算功能還是不夠的,一台計算機還要有外部裝置,還有記憶體的管理,而這樣一些功能并不在KVM裡面實作,而是在qemu裡面實作,是以我們也可以說KVM虛機指的是KVM和Qemu在一起實作的虛機。需要注意,每一個虛機在我們的Host OS裡面他都是一個程序,跟普通程序的地位是一樣的。正如上節提到的,虛拟化與模拟是不一樣的,模拟的方式是模拟一個CPU,而程式的指令集先在模拟器上翻譯一下,翻譯成底層硬體的指令集,在底層硬體上執行,當硬體CPU傳回結果以後,他在将底層硬體傳回的資訊經過模拟器翻譯成上層軟體的指令集運作。而KVM和硬體輔助虛拟化技術結合起來可以使得指令直接在CPU上執行。

虛拟化技術(二)——常見的虛拟化技術

下一節将介紹虛拟機在使用中遇到的問題,并由此引出Container技術!

未完待續。。。。(謹以此系列文章緬懷逝去的學生時代)

虛拟化技術(二)——常見的虛拟化技術

繼續閱讀