KVM虛擬機簡介
Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux2.6.20之后繼承Linux的主要發行版本中。它使用Linux自身的調度器進行管理,所以相對于Xen,其核心源碼很少。KVM目前已成為學術界的VMM之一。
Kvm僅僅是一個linux內核的模塊,當在linux中安裝了kvm后,linux會變成了hypervisor,即VMM,進行CPU和內存的虛擬管理,而qemu工具,實現虛擬機的創建管理,monitor管理各個IO設備,redhat在購買掉kvm后,專門定制了適合于redhat系統的qemu-kvm管理工具。
Kvm只能運行在支持硬件虛擬化的CPU上,并且只支持64bits系統。kvm屬于完全虛擬化的實現軟件。
KVM架構

如上kvm架構圖 安裝了kvm后的內核變得很詭異,其模式分為了三部分:內核模式,用戶模式,來賓模式 VCPU:用線程模擬實現的CPU KVM的主要兩類組件: 1、/dev/kvm:管理虛擬機的設備文件,用戶空間的程序可通過調用其ioctl()來完成虛擬機的創建啟動等管理工作,它是一個字符設備;其主要完成的操作包括: 創建虛擬機; 為虛擬機分配內存; 讀、寫VCPU的寄存器; 向VCPU注入中斷請求; 運行VCPU; 2、qemu進程:工作于用戶空間的組件,用于方針PC機的I/0類硬件設備。
KVM內存管理
KVM繼承了Linux系統管理內存的諸多特性,比如分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的 的支持能夠讓虛擬機高效訪問更大的內存空間等。
KVM基于Intel的EPT(Extended Page Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的占用率,并提高較好的吞吐量。
此外,KVM還借助于KSM(Kernel Same-page Merging)這個內核特性實現了內存頁面恭喜那個。KSM 通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,并將這些內存合并為一個被各種相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新為其提供一個新的頁面副本。實踐中,運行于同一臺物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很大的,比如共享庫,內核或其他內存對象等都有可能表現為相同的內存頁,因此KSM技術可以降低內存占用而提高整體性能。
KVM的管理工具

使用qemu-kvm管理KVM虛擬機
Qemu是一個廣泛使用的開源計算機仿真器和虛擬機。當作為仿真器時,可以在一種架構(如PC機)下運行另一種架構如(ARM)的操作系統和程序。而通過動態轉換,其可以獲得很高的運行效率,當作為一個虛擬機時,qemu可以通過直接使用真機的系統資源,讓虛擬系統能夠獲得接近于物理機的性能表現。qemu支持xen或者kvm模式下的虛擬化。當用kvm時,qemu可以虛擬x86、服務器和嵌入式powerpc,以及s390的系統
Qemu當運行與主機架構相同的目標架構時可以使用KVM。例如當在一個x86兼容處理器上運行qemu-system-x86時,可以利用kvm加速——為宿主機和客戶機提供更好的性能
Qemu的組成部分:
處理器模擬器(x86、PowerPC和Sparc)
仿真設備(顯卡、網卡、硬盤、鼠標等)
用于將仿真設備連接至主機設備(真實設備)的通用設備;
模擬機的描述信息;
調試器;
與模擬器交互的用戶接口;
