新聞中心
解剖KVM的內(nèi)部是如何運作的?
作者:佚名 2020-02-12 15:08:41
云計算
虛擬化 kvm已經(jīng)是內(nèi)核模塊,被看作是一個標準的linux 字符集設(shè)備(/dev/kvm)。Qemu通過libkvm應(yīng)用程序接口,用fd通過ioctl向設(shè)備驅(qū)動來發(fā)送創(chuàng)建,運行虛擬機命令。

一、 KVM架構(gòu)
kvm基本結(jié)構(gòu)有2個部分構(gòu)成:
kvm 驅(qū)動,現(xiàn)在已經(jīng)是linux kernel的一個模塊了。其主要負責虛擬機的創(chuàng)建,虛擬內(nèi)存的分配,VCPU寄存器的讀寫以及VCPU的運行。
另一個組成是Qemu,用于模擬虛擬機的用戶空間組件,提供I/O設(shè)備模型,訪問外設(shè)的途徑。
圖1 kvm基本結(jié)構(gòu)
kvm基本結(jié)構(gòu)如上圖。kvm已經(jīng)是內(nèi)核模塊,被看作是一個標準的linux 字符集設(shè)備(/dev/kvm)。Qemu通過libkvm應(yīng)用程序接口,用fd通過ioctl向設(shè)備驅(qū)動來發(fā)送創(chuàng)建,運行虛擬機命令。設(shè)備驅(qū)動kvm就會來解析命令(kvm_dev_ioctl函數(shù)在kvm_main.c文件中),如下圖:
圖2 kvm_dev_ioctl函數(shù)
kvm 模塊讓Linux主機成為一個虛擬機監(jiān)視器(VMM),并且在原有的Linux兩種執(zhí)行模式基礎(chǔ)上,新增加了客戶模式,客戶模式擁有自己的內(nèi)核模式和用戶模式。在虛擬機運行時,三種模式的工作各為:
客戶模式: 執(zhí)行非I/O的客戶代碼,虛擬機運行在這個模式下。
用戶模式:代表用戶執(zhí)行I/O指令,qemu運行在這個模式下。
內(nèi)核模式:實現(xiàn)客戶模式的切換,處理因為I/O或者其他指令引起的從客戶模式退出(VM_EXIT)。kvm 模塊工作在這個模式下。
在kvm的模型中,每一個Gust OS都是作為一個標準的linux進程,都可以使用linux進程管理命令管理。
這里假如qemu通過ioctl發(fā)出KVM_CREATE_VM 指令,創(chuàng)建了一個VM后,qemu需要需要發(fā)送一些命令給VM,如KVM_CREATE_VCPU。這些命令當然也是通過ioctl發(fā)送的,用戶程序中用ioctl發(fā)送KVM_CREATE_VM得到的返回值就是新創(chuàng)建的VM對應(yīng)的fd(kvm_vm),fd是創(chuàng)建的指向特定虛擬機實例的文件描述符,之后利用這個fd發(fā)送命令給VM進行訪問控制。kvm解析這些命令的函數(shù)是kvm_vm_ioctl。
二、 KVM 工作原理
kvm基本工作原理概述:
用戶模式的qemu利用libkvm通過ioctl進入內(nèi)核模式,kvm模塊為虛擬機創(chuàng)建虛擬內(nèi)存,虛擬CPU后執(zhí)行VMLAUCH指令進入客戶模式。加載Guest OS并執(zhí)行。如果Guest OS 發(fā)生外部中斷或者影子頁表缺頁之類的情況,會暫停Guest OS的執(zhí)行,退出客戶模式出行異常處理,之后重新進入客戶模式,執(zhí)行客戶代碼。如果發(fā)生I/O事件或者信號隊列中有信號到達,就會進入用戶模式處理。(如下圖)
圖3 KVM工作原理流程圖
網(wǎng)頁名稱:解剖KVM的內(nèi)部是如何運作的?
當前鏈接:http://fisionsoft.com.cn/article/dhochjg.html


咨詢
建站咨詢
