KVM原理


虛擬化是雲計算的基礎。簡單的說,虛擬化使得在一台物理的服務器上可以跑多台虛擬機,虛擬機共享物理機的 CPU、內存、IO 硬件資源,但邏輯上虛擬機之間是相互隔離的。
物理機我們一般稱為宿主機(Host),宿主機上面的虛擬機稱為客戶機(Guest)

KVM屬於完全虛擬化,功能組件上由兩部分組成,KVM Driver(內核態)和Qemu(用戶態)。KVM Driver負責模擬虛擬機的CPU運行,內存管理,設備管理等;Qemu則模擬虛擬機的IO設備接口以及用戶態控制接口。

Qemu在最上層,將虛擬機的整體呈現到host用戶上,可以理解成客戶模式;Qemu通過中間層libkvm或者ioctl等控制/dev/kvm設備接口,從而掌握內核態中kvm驅動進行的資源分配,即用戶態模式;

kvm驅動接收用戶態操作指令,控制虛擬機在內核態的資源分配,稱之為內核模式。在HOST里面,客戶模式的體現就是一個虛擬機內部環境,用戶態則是虛擬機進程。

 

KVM工作原理:用戶模式的QEMU通過ioctl進入內核模式,kvm模塊為虛擬機創建虛擬內存,虛擬CPU后執行VMLAUCH指令進入客戶模式。加載Guest OS並執行。如果Guest OS發生外部中斷或者影子頁表卻也之類的情況,會暫停Guest OS的執行,退出客戶模式進行異常處理,執行客戶代碼。如果發生I/O事件或者信號隊列有信號到達,就會進入用戶模式處理。

 

 

 

KVM 由處於內核態的 KVM 模塊和用戶態的 QEMU 兩部分構成。內核模塊實現了 CPU 和內存虛擬化等決定關鍵性能和核心安全的功能並向用戶空間提供了使用這些功能的接口,QEMU 利用 KVM 模塊提供的接口來實現設備模擬、 IO 虛擬化和網絡虛擬化等。單個虛擬機是宿主機上的一個普通 QEMU 進程,虛擬機中的 CPU 核(vCPU)是 QEMU 的一個線程,VM 的物理地址空間是 QEMU 的虛擬地址空間

 

因此在虛擬機運行時,有三種模式:

客戶模式:執行非I/O的客戶代碼,虛擬機運行在這個模式下。

用戶模式:代表用戶執行I/O指令,QEMU運行在這個模式下。

內核模式:實現客戶模式的切換,處理因為I/O或者其他指令引起的從客戶模式退出(VM_EXIT)。kvm模塊運行在這個模式下。

kvm模型中,每一個Guest OS都是作為一個標准的Linux進程,都可以使用Linux進程管理命令管理。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM