歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> KVM--基於內核的虛擬化技術

KVM--基於內核的虛擬化技術

日期:2017/3/2 16:51:25   编辑:Linux服務器

介紹KVM,它的本質以及如何配置和安裝。虛擬化最近幾年取得了長足的進步,首先由於有大量的開源虛擬機管理程序在不斷發展,這個改進幾乎排除了操作系統與大功率服務器快速增長的利用之間的障礙,公司立即受益。

知道最近,軟件仿真虛擬化一直是關注的焦點,兩個常見的軟件仿真虛擬化途徑是完全虛擬化和半虛擬化。對於完全虛擬化,通常調用管理程序或虛擬機監視器,存在於虛擬操作系統和硬件層之間,這個層在操作系統實例之間多路復用競爭系統資源。半虛擬化不同,管理程序在一個協作的環境中運作,因為每個客戶操作系統都知道它正運行在一個虛擬化環境中,因此每個使用管理程序的協作都在硬件下完成虛擬。

兩個途徑都有優勢也有劣勢,半虛擬化的主要優勢在於它運行盡可能快地基於軟件的虛擬化,以不支持有專利的操作系統為代價。完全虛擬化沒有這個限制,但是,完全虛擬化管理程序非常復雜。VMware,一個商業虛擬化解決方案,它就是一個完全虛擬化的例子,Xen,用戶模式Linux(UML)和其他提供的是半虛擬化解決方案。

簡單介紹一下基於硬件的虛擬化,這個線路已經變得模糊起來,隨著Intel的VT技術和AMD的SVM技術的出現,編寫一個管理程序變得更加簡單了,現在,保持管理程序復雜性到最小程度,對於完全虛擬化受益匪淺。

Xen作為最優秀的半虛擬化引擎,在基於硬件的虛擬化的幫助下,現在也支持完全虛擬化MS windows了。KVM是一個相對較新的簡單的,但也非常強大的虛擬化引擎,它已經集成到Linux內核中去了,讓內核天生有虛擬化的能力,因為KVM使用的是基於硬件的虛擬化技術,它不需要修改客戶操作系統,因此,部署在一個受支持的處理器上,它可以從Linux支持任何平台。

KVM

kvm是一個獨特的管理程序,kvm開發者們發明了一個方法讓Linux內核自身變成一個管理程序,通過將KVM作為一個內核模塊實現,在虛擬環境下Linux內核集成管理程序將其作為一個可加載的模塊可以簡化管理和提升性能。這可能是開發者將KVM添加到內核的主要原因。

這種方法有許多優勢,通過添加虛擬化功能到一個標准的Linux內核,虛擬環境能從所有正在Linux內核上運行的工作中受益,在這種模式下,每個虛擬機都是一個常規的Linux進程,通過Linux調度程序進行調度,通常,一個標准的Linux進程都有兩個執行模式:內核模式和用戶模式。對於應用程序而言用戶模式是默認模式,當它需要一些來自內核的服務時就進入內核模式,如往磁盤上寫入時。KVM添加了第三個模式:客戶模式。

客戶模式進程是運行在虛擬機內的,它非常象正常模式(無虛擬實例),有它自己的內核和用戶空間變量、在客戶模式下可以使用正常的kill和ps命令,因為無虛擬實例,KVM虛擬機表現為一個正常的進程,能象其他進程一樣被殺掉,KVM利用硬件虛擬技術虛擬處理器的形態,虛擬機的內存管理由內核直接處理,目前的版本I/O在用戶空間處理,主要通過QEMU完成。

一個典型的KVM安裝包括以下部件:
一個管理虛擬硬件的設備驅動,這個驅動通過一個字符設備/dev/kvm陳列它的功能

一個模擬pc硬件的用戶空間部件,目前,這在用戶空間處理,它是一個稍微改動過的QEMU進程。

I/O模型直接衍生於QEMU,支持寫時復制磁盤映像和其他QEMU特征。

你如何查明你的系統是否能運行KVM?首先,你需要一個支持虛擬化的處理器,這裡有一個兼容KVM的處理器列表(http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors),看看你的處理器是否在其中。另外,你還可以檢查/proc/cpuinfo,如果在cpu flags字段看到了vmx或smx,那麼你的處理器就支持KVM。

如何比較KVM和現存的管理程序

相對它的競爭者而言,KVM還是一個比較新的項目,與KVM的主要開發者Avi Kivity會面時,他是這樣與其他解決方案做對比的:

在許多方面,VMware是一個基礎破壞技術,它只用軟件技術管理眾所周知地的復雜的x86架構的完全虛擬化,達到了非常好的性能和穩定性。結果,VMware變得非常大而其非常復雜的軟件了。換句話說,KVM依賴於最新的硬件的虛擬技術,就其本身而論,它非常小(大約1萬行代碼)且相當簡單,另外一個巨大的不同之處是VMware是有專利的,而KVM是開源的。

Xen是一個相當大的項目,同時提供半虛擬化和完全虛擬化,它被設計為一個獨立的內核,它只需要Linux執行I/O,這樣使得它相當的大,它有自己的調度程序、內存管理器、計時器和機器初始化程序。

相反,KVM使用標准Linux調度程序、內存管理器和其他服務。這樣KVM開發者們可以集中精力在虛擬化上,將虛擬技術建立在內核上而不是去替換內核。

QEMU是一個用戶空間模擬器,它是一個相當驚人的項目,可以在不同宿主處理器上模擬非常多的客戶處理器,而且性能非常好。但是,用戶空間架構不允許它在無內核加速器的情況下解決天生的速度問題。KVM認可QEMU的實用價值,使用它進行I/O硬件模擬。盡管KVM不帶有任何特殊的用戶空間,但QEMU代碼寫得非常好--因此我們使用了這些代碼。

但是,KVM也不是完美的,因為它還是一個新技術,它包括下面的這樣一些限制:

在寫本文的時候,KVM僅支持Intel和AMD虛擬化,而Xen還支持IBM PowerPC和Itanium【安騰】處理器。

目前的版本最宿主SMP處理器的支持還比較弱

性能調整

但是,這個項目在快速地發展,按照Avi Kivity所說的,KVM已經在某些方面超過了Xen,將來在其他方面也將趕上Xen。

虛擬化如何工作

台虛擬化是一個舊技術了,但是,最近幾年,硬件和操作系統都很成熟了,有望實現真正的虛擬化,大多數虛擬化基礎部分是管理程序,管理程序在虛擬客戶操作系統和真實硬件之間充當一個中間層,有時候,管理程序就是操作系統,如Xen,其他時候,它是用戶層軟件,如VMware,虛擬客戶操作系統或虛擬實例是一個隔離的操作系統,但是,實際上是管理程序提供了這種幻覺。

支持虛擬化的處理器

由於虛擬技術的復活,微處理器廠商已經更新了它們的處理器,天生就支持虛擬化了。允許處理器直接支持管理程序,使得開發管理程序的任務更簡單了,處理器為宿主操作系統和客戶操作系統管理處理器的狀態,還以虛擬操作系統的名義管理I/O和中斷。

安裝KVM

KVM已經被添加到許多發行版中了,包括OpenSUSE/SUSE,Fedora 7(內置了KVM),Debian和Ubuntu(Feisty)。

對於其他發行版而言,你需要下載2.6.20及以上的內核版本,在自定義編譯內核時,在進行內核配置時選擇Device?Virtualization,啟用support for hardware-based virtualization【支持基於硬件的虛擬化】,你還可以隨KVM模塊一起從http://sourceforge.net/project/showfiles.php?group_id=180599獲取用戶空間工具。

我已經安裝了OpenSUSE軟件包,因此,在本文中例子中的文件名可能與你的發行版不一樣。

創建客戶操作系統

使用編譯好的支持虛擬化技術的內核,下一步工作是為客戶操作系統創建一個磁盤映像,你可以用qemu-img命令來完成,下面有展示,注意映像的大小是6GB,但是使用QEMU的寫時復制格式(qcow)時,文件將按需增大,而不是一次性占用6GB空間。

#qemu-img create -f qcow image.img 6G

在目前的KVM版本下I/O是由QEMU處理的,因此讓我們查看一些重要的QEMU參數:

-m:按兆字節(MB)顯示的內存
-cdrom:理論上是一個ISO鏡像文件,充當虛擬機的一個cd-rom驅動器,如果不指定cdrom參數,ide1主驅動器將充當cd-rom。
-hda:指向一個QEMU寫時復制鏡像文件,要指定多個磁盤,我們可以這樣:
#qemu-kvm -m 384 -hda vmdisk1.img -hdb vmdisk2.img -hdc vmdisk3.img
-boot:允許我們自定義啟動選項;-d參數指定從cd-rom啟動。

默認命令從一個子窗口啟動客戶操作系統,但是你可以通過下面的參數以全屏模式啟動:
-fulle-screen

另外,KVM允許在虛擬環境中進行低級硬件控制,你可以通過特殊的參數重定向串口、並口和USB端口到指定的設備。聲音在虛擬機中也是支持的,你可以通過-soundhw參數在虛擬機中啟用你的聲卡。

下面是一些快捷鍵:
Ctrl-Alt-F:固定為全屏幕
Ctrl-Alt-N:切換到虛擬控制台N
Ctrl-Alt:固定鼠標和鍵盤

結論

隨著Linux內核引入KVM,將來的Linux發行版將內置支持虛擬化技術,將不再需要任何雙啟動安裝,因為所有你需要的所有應用程序都能直接從Linux桌面運行,KVM只是眾多開源管理程序的其中一員,再一次肯定了開源已經成為虛擬技術的前進方向

Copyright © Linux教程網 All Rights Reserved