KVM架構與原理詳解

2021-07-10 19:30:16 字數 1399 閱讀 4569

1. kvm架構

kvm基本結構有2個部分構成:

kvm 驅動,現在已經是linux kernel的乙個模組了。其主要負責虛擬機器的建立,虛擬記憶體的分配,vcpu暫存器的讀寫以及vcpu的執行。

另個組成是qemu,用於模擬虛擬機器的使用者空間元件,提供i/o裝置模型,訪問外設的途徑。

圖1 kvm基本結構

kvm基本結構如上圖。kvm已經是核心模組,被看作是乙個標準的linux 字符集裝置(/dev/kvm)。qemu通過libkvm應用程式介面,用fd通過ioctl向裝置驅動來傳送建立,執行虛擬機器命令。裝置驅動kvm就會來解析命令(kvm_dev_ioctl函式在kvm_main.c檔案中),如下圖:

圖2 kvm_dev_ioctl函式

kvm 模組讓linux主機成為乙個虛擬機器監視器(vmm),並且在原有的linux兩種執行模式基礎上,新增加了客戶模式,客戶模式擁有自己的核心模式和使用者模式。在虛擬機器執行時,三種模式的工作各為:

客戶模式: 執行非i/o的客戶**,虛擬機器執行在這個模式下。

使用者模式:代表使用者執行i/o指令,qemu執行在這個模式下。

核心模式:實現客戶模式的切換,處理因為i/o或者其他指令引起的從客戶模式退出(vm_exit)。kvm 模組工作在這個模式下。

在kvm的模型中,每乙個gust os都是作為乙個標準的linux程序,都可以使用linux程序管理命令管理。

這裡假如qemu通過ioctl發出kvm_create_vm 指令,建立了乙個vm後,qemu需要需要傳送一些命令給vm,如kvm_create_vcpu。這些命令當然也是通過ioctl傳送的,使用者程式中用ioctl傳送kvm_create_vm得到的返回值就是新建立的vm對應的fd(kvm_vm),fd是建立的指向特定虛擬機器例項的檔案描述符,之後利用這個fd傳送命令給vm進行訪問控制。kvm解析這些命令的函式是kvm_vm_ioctl。

2. kvm 工作原理

kvm基本工作原理概述:

使用者模式的qemu利用libkvm通過ioctl進入核心模式,kvm模組未虛擬機器建立虛擬記憶體,虛擬cpu後執行vmlauch指令進入客戶模式。載入guest os並執行。如果guest os 發生外部中斷或者影子頁表缺頁之類的情況,會暫停guest os的執行,退出客戶模式出行異常處理,之後重新進入客戶模式,執行客戶**。如果發生i/o事件或者訊號佇列中有訊號到達,就會進入使用者模式處理。(如下圖)

圖3 kvm工作原理流程圖

Kafka架構原理詳解

kafka 儲存的訊息來自任意多被稱為 producer 生產者的程序。資料從而可以被發布到不同的 topic 主題下的不同 partition 分割槽。在乙個分區內,這些訊息被索引並連同時間戳儲存在一起。其它被稱為 consumer 消費者的程序可以從分割槽訂閱訊息。kafka 執行在乙個由一台或...

簡述KVM架構和Xen架構

暑假最後一篇更新,因為,明天我就回學校了。以下均為個人理解,如果有不對的地方還望各位dalao不吝賜教。虛擬化 虛擬化是通過hypervisor程式實現的,hypervisor的作用是將硬體虛擬化提供給多個作業系統使用,是虛擬化技術的核心。虛擬化分為兩種 1型虛擬化和2型虛擬化。kvm架構 先來看一...

Hbase原理與架構

1 client向hregionserver傳送寫請求。2 hregionserver將資料寫到hlog write ahead log 為了資料的持久化和恢復。3 hregionserver將資料寫到記憶體 memstore 4 反饋client寫成功。1 當memstore資料達到閾值 預設是1...