1. 程式人生 > >KVM架構及模塊簡介

KVM架構及模塊簡介

裁剪 內核源代碼 系統環境 virt 打開 ng- strong 處理 存儲控制器

1.簡介

2.架構

3.KVM模塊及QEMU

一、簡介

  KVM(Kernel Virtual Machine)基於內核的虛擬機。阿維·齊維迪(Avi Kivity)在一家名為Qumranet的初創企業開始了KVM的研發工作,開發人員基於Linux Kernel通過加載新的模塊使Linux Kernel本身變成一個Hypervisor(管理程序),後KVM模塊源代碼成為Linux內核源代碼的一部分。隨後此公司於2008年被紅帽公司收購,於是redhat在自己的產品中用KVM替換了Xen。

  KVM目前的設計為:通過可加載的內核模塊支持客戶機操作系統(Linux、Solaris、Windows等等)。

  KVM的架構中,虛擬機的實現為常規的Linux進程,由標準的調度程序進行調度。

二、架構

  從虛擬機的基本架構上來區分,一般分為兩種。

  類型一:可以視為特別為虛擬機優化裁剪的操作系統內核。虛擬機監控程序運行在底層軟件層,實現系統的初始化、物理資源的管理等操作系統的職能。這一類型的虛擬機監控程序一般會提供一個具有一定特定權限的特殊虛擬機,這個特殊虛擬機運行用戶日常操作系統和管理使用的操作系統環境。如:Xen、VMware ESXI和Hyper-V。

  類型二:虛擬機監控程序依賴操作系統來實現管理和調度,也會受到宿主操作系統的一些限制。無法為了虛擬機的優化而改變操作系統。如:VMware Workstation、VirtualBox。

而KVM是基於宿主操作系統的類型二的虛擬機。(如果說在windows下使用VMware Workstation,這個就可以類比為在Linux下的VMware Workstation。只不過KVM是通過內核模塊的形式實現,充分利用Linux內核既有的實現,最大限度的重用代碼。)

技術分享圖片

  左側是標準的Linux操作系統,KVM內核模塊在運行時按需加載進入內核空間運行。KVM本身並不進行任何模擬。相反,它暴露出一個/dev/kvm接口,需要用戶空間程序通過借口設置一個客戶機虛擬服務器的地址空間,向他提供模擬的I/O,並將它的視頻顯示映射回宿主的顯示屏,目前這個應用程序就是QEMU。

三、KVM模塊及QEMU

KVM模塊

  KVM模塊是KVM虛擬機的核心部分。KVM僅支持硬件虛擬化。其主要功能是初始化cpu硬件,打開虛擬化模式,然後將虛擬客戶機運行在虛擬機模式下,並對虛擬客戶機的運行提供一定的支持。

  以KVM在Intel的CPU上運行為例,在被內核加載的時候,KVM模塊會先初始化內部的數據結構;之後KVM模塊檢測系統當前的CPU,然後打開CPU控制寄存器CR4中的虛擬化模式開關,並通過執行VMXON指令將宿主操作系統置於虛擬化模式的根模式;最後KVM模塊創建特殊設備文件/dev/kvm並等待來自用戶空間的命令。接下來虛擬機的創建和運行是一個用戶空間程序(QEMU)和KVM模塊互相配合的過程。

QEMU

  QEMU是一個開源的虛擬機純軟件的實現,性能低下。但是其優點是支持本身編譯運行的平臺上就可以實現虛擬機的功能,甚至虛擬機可以與宿主機不同架構。QEMU代碼中有著整套虛擬機的實現,包括處理器、內存虛擬化以及虛擬設備模擬(比如網卡、顯卡、存儲控制器及硬盤等。)

  虛擬機運行期間,QEMU會通過KVM模塊提供的系統接口調用進入內核,由KVM模塊將虛擬機至於處理器的特殊模式運行。遇到虛擬機輸入輸出操作,KVM模塊會從上次系統調用的接口返回給QEMU,由QEMU來負責解析和處理這些設備。從QEMU角度看,可以說QEMU使用了KVM模塊的虛擬化功能,為自己的虛擬機提供硬件虛擬化的加速,極大提高虛擬機的性能。虛擬機的配置和創建,運行依賴的虛擬設備,用戶操作環境和交互,以及一些特殊功能(如動態遷移),都是由QEMU自己實現的。QEMU和KVM模塊兩者的結合無疑是最合適的選擇。而qemu-kvm是為了KVM專門做了修改和優化的QEMU分支。

KVM架構及模塊簡介