歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

KVM基本原理和架構二-基本原理

KVM:Kernel-based Virtual Machine,是基於Linux內核的開源虛擬化解決方案,從2.6.20版本開始被合入kernel主分支維護。最初只支持X86平台的上支持VMX或者SVM的CPU,不久後被確認為標准Linux內核的虛擬化方案並逐步支持S390、IA64和PowerPC等體系架構;KVM本身只提供部分的虛擬化功能(虛擬CPU和內存),而由經過特殊改造後的Qemu(Qemu-kvm)來幫助下提供完整的平台虛擬化功能。

KVM依賴於x86硬件的虛擬化特性,提供全虛擬化的虛擬機,其基本思想是在Linux內核的基礎上添加虛擬機管理模塊,重用Linux內核中已完善和成熟的機制和模塊,比如進程調度、內存管理、IO管理等,使之成為一個可以支持運行虛擬機的Hypervisor。整體架構如下圖所示:

 


 

       
        KVM是基於硬件輔助虛擬化技術(如Intel VT-x)的全虛擬化解決方案,如上圖所示,說明如下:

ü  VMM(即KVM內核)運行於根模式下的Ring0;

ü  主機上的用戶態進程運行於根模式下的Ring3;

ü  虛擬機中的Kernel運行於非根模式下的Ring0;

ü  虛擬機中的用戶態進程運行於非根模式下的Ring3;

ü  Qemu-kvm是KVM官方提供並維護的改進後的Qemu,針對KVM解決方案,將標准Qemu做了針對性的改造,使其具有更好的性能,並與KVM進行了完美的融合;

ü  一個VM(虛擬機)就是一個傳統的Linux進程,VM運行於Qemu-KVM進程的地址空間中;

ü  VMM向上層提供/dev/kvm接口,/dev/kvm是一個標准的字符設備,通過ioctl接口控制;Qemu-kvm通過調用/dev/kvm設備的ioctl接口,對虛擬機進行相關控制,比如創建虛擬機、創建VCPU、運行虛擬機等;

ü  為提升KVM虛擬機中的IO性能,KVM還提供了Virtio驅動,相當於Xen環境中的半虛擬化驅動。

2.2 KVM運行視圖

KVM運行的基本如下圖所示:

 


    流程描述:

1、    運行在用戶態的Qemu-kvm通過ioctl系統調用操作/dev/kvm字符設備,創建VM和VCPU

2、    內核KVM模塊負責相關數據結構的創建即初始化,然後返回用戶態

3、    Qemu-kvm通過ioctl調用運行VCPU,即調度相應的VM運行

4、    內核進行相關處理後,執行VMLAUNCH指令,通過VM-Entry進入Guest OS運行,Guest OS運行於非根模式下。

5、    Guest OS執行相應的虛擬機代碼,非敏感指令可直接在物理CPU上運行

6、    當Guest OS中執行到敏感指令、發生外部中斷、或Guest OS發生內部異常時,將產生VM-Exit,並將相關信息記錄到VMCS結構中

7、    VM-Exit使CPU退回到根模式下,由VMM讀取VMCS結構判斷VM-Exit的原因

8、    如是IO操作或是其他外設指令,則返回到用戶態Qemu-kvm(即根模式下的Ring3),由Qemu-kvm完成對相關指令的模擬。

9、    如果不是,則由VMM自行處理

10、處理完成後,重新VM-entry進入到Guest OS運行。

2.3 KVM內核模塊組成

KVM主要由3個內核模塊組成:

ü  Kvm.ko

ü  Kvm-intel.ko

ü  Kvm-amd.ko

Kvm.ko是KVM的核心公共模塊,kvm-intel.ko和kvm-amd.ko分別是針對Intel和AMD平台架構的獨立模塊。在KVM核心公共模塊中,包含了IOMMU、中斷控制、KVM arch、設備管理等部分代碼,這些代碼構成了虛擬機管理的核心功能,從這些模塊的大致信息,也可以看出KVM自身並沒有實現一個完整的PC系統的虛擬化,而只是實現了最核心的CPU虛擬化、內存虛擬化和IO虛擬化等部分功能並向上層提供了相應的API,其余虛擬化和管理工作主要交給了Qemu-kvm負責。

 

Copyright © Linux教程網 All Rights Reserved