KVM CPU虛擬化


3.1 基本原理

CPU虛擬化是VMM中最核心的部分,由於內存和IO訪問的指令都是敏感指令,所以內存和IO虛擬化都依賴於CPU虛擬化的實現。CPU虛擬化的目標是讓虛擬機中執行的所有敏感指令都能產生異常而“陷入”,並由VMM進行模擬。VMM的陷入是通過CPU的保護機制、中斷或異常來完成的。通常,VMM的陷入方式有如下3種:

1、  CPU的保護機制觸發。CPU在執行敏感指令之前,會檢查執行條件是否滿足,執行條件主要包括:當前特權級別、運行模式、內存映射關係等,只要有任一條件不滿足,就會VM-Exit陷入到VMM進行進一步處理。

2、  異步中斷。包括處理器內部的中斷源和外設的中斷源,當中斷信號到達CPU時,CPU會強行中斷Guest OS當前執行的指令,然後VM-ExitVMM註冊的中斷服務程序進行進一步處理。

3、  虛擬機主動觸發的異常,也就是通常所說的陷阱。虛擬機可以通過陷阱指令主動VM-ExitVMM中。

KVM虛擬化解決方案中,利用了硬件的虛擬化特性(比如Intel VT-xAMD SVM)實現CPU的虛擬化。如之前介紹,VT-x提供了一套稱作VMX的新的工作模式,工作在該模式下的處理器又具有兩類操作模式:VMX root operationVMX non-root operation。對操作系統來說,VMX non-root operation模式與傳統的x86處理器兼容,最大的差別在於當虛擬機執行一些訪問全局資源的指令時將導致虛擬機退出操作(VM-Exit),從而使虛擬機監控器獲得控制權,以便對訪問全局資源的指令進行模擬。以後,虛擬機監控器可以通過虛擬機進入操作(VM-Entry)使虛擬機重新獲得控制權。

其次,VT-x爲系統編程接口狀態的切換提供硬件支持。VT-x爲每個虛擬機維護至少一個VMCSVirtual Machine Control Structure)結構,其中保存了虛擬機和虛擬機監控器的系統編程接口狀態。當執行VM exitVM entry操作時,VT-x自動根據VMCS中的內容完成虛擬機和虛擬機監控器間的系統編程接口狀態切換。另外,VT-x還提供了一組指令,使得虛擬機監控器通過一條指令就可以完成虛擬機間的切換。

3.2 VCPU

硬件虛擬化使用VCPU(Virtual CPU)描述符來描述虛擬CPUVCPU描述符與OS中進程描述符類似,本質是一個結構體,其中包含如下信息:

ü  VCPU標識信息,如VCPUID號,VCPU屬於哪個Guest等。

ü  虛擬寄存器信息,在VT-x的環境中,這些信息包含在VMCS中。

ü  VCPU狀態信息,標識白VCPU當前所處的狀態(睡眠、運行等),主要供調度器使用。

ü  額外的寄存器/部件信息,主要指未包含在VMCS中的寄存器或CPU部件,比如:浮點寄存器和虛擬的LAPIC等。

ü  其他信息:用戶VMM進行優化或存儲額外信息的字段,如:存放該VCPU私有數據的指針。

總體來說,VCPU可以劃分爲兩部分:

1、  VMCS爲主,由硬件來使用和更新的部分,主要是虛擬寄存器。

2、  VMCS之外,由VMM來使用和更新的部分。如VCPU標識、狀態信息等。

VMM創建虛擬機時,首先要爲虛擬機創建VCPU,整個虛擬機的運行實際上可以看做VMM調度不同的VCPU運行。

3.3 中斷虛擬化

在物理平臺上,中斷架構和外部中斷處理流程如下圖所示:

大致處理過程爲:

ü  IO設備通過中斷控制器(IO APICPIC)CPU發送中斷請求

ü  IO APIC將中斷轉發至目標CPULocal APIC

ü  目標APIC對該中斷進行處理

在虛擬化環境中,VMMGuest OS虛擬了一個與物理中斷架構類似的虛擬中斷架構,如下圖所示:
                                     

每個VCPU對應一個虛擬Local APIC,用於接收中斷,同時還模擬了虛擬IO APIC(或虛擬PIC)用於接收外設(虛擬設備)發出的中斷請求並進行轉發。虛擬Local APIC、虛擬IO APIC、虛擬PIC等都是VMM中的軟件實體(對應於相應的數據結構)。主要處理流程如下:

ü  當虛擬設備需要發送中斷時,虛擬設備會調用虛擬IO APIC的接口發送中斷;

ü  而虛擬IO APIC根據中斷請求,選出適合的虛擬Local APIC,並調用其接口發送中斷請求;

ü  虛擬Local APIC進一步利用CPU硬件虛擬化功能(Intel VT-xAMD SVM)的事件注入機制,將中斷注入到相應的VCPU

ü  當相應VCPU得到調度時,即處理相應的中斷。

3.4 調度

KVM虛擬化環境中,KVM虛擬機作爲一個系統進程運行,因此虛擬機的的調度,實際上就是利用了Linux自身的調度器完成。本文不做詳述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章