共計 1406 個字符,預計需要花費 4 分鐘才能閱讀完成。
OpenStack 中如何理解 KVM 和 QEMU,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
一、KVM 概述
KVM 是 Kernel-based Virtual Machine 的縮寫,即基于 linux 內核的虛擬機,是一種的完全虛擬化的解決方案,也就是說普通的操作系統不需經過修改就可以在 KVM 上運行。它使用 linux 自身的調度器進行管理,所以相對于 xen,其核心源碼很少。KVM 的虛擬化需要硬件的支持(如 intel VT 技術或者 AMD V 技術),是基于硬件的完全虛擬化。
準確來說,KVM 是 Linux 的一個模塊。可以用 modprobe 去加載 KVM 模塊。加載了模塊后,就可以使用 KVM 模塊創建虛擬機,實現虛擬內存的分配,虛擬 CPU 寄存器的讀寫以及管理虛擬 CPU 的運行。但僅有 KVM 模塊是遠遠不夠的,因為用戶無法直接控制內核模塊去作事情,所以還必須有一個用戶空間的工具才行。這個用戶空間的工具,開發者選擇了已經成型的開源虛擬化軟件 QEMU,使用它來模擬 PC 硬件的用戶空間組件,模擬 I / O 設備模型以及提供訪問外設的途徑。后邊會詳細的介紹 QEMU,這里先知道它用了 QEMU 就好了。
KVM 基本架構如下圖所示。
其中 KVM 被加入到標準的 Linux 內核中,被組織成 Linux 中標準的字符設備 (/dev/kvm)。Qemu 利用 KVM 提供的 LibKvm 應用程序接口,通過 ioctl 系統調用創建和運行虛擬機。KVM Driver 使得整個 Linux 成為一個虛擬機監控器。并且在原有的 Linux 兩種執行模式(內核模式和用戶模式) 的基礎上,新增加了客戶模式,客戶模式擁有自己的內核模式和用戶模式。在虛擬機運行下,三種模式的分工如下:
客戶模式:執行非 I / O 的客戶代碼,虛擬機運行在客戶模式下。
內核模式:實現到客戶模式的切換,處理因為 I / O 或者其它指令引起的從客戶模式的退出,KVM Driver 工作在這種模式下。
用戶模式:代表客戶執行 I / O 指令 Qemu 運行在這種模式下。
KVM 的具體工作流程如下:
用戶模式的 qemu 利用 libkvm 通過 ioctl 進入內核模式,kvm 模塊未虛擬機創建虛擬內存,虛擬 CPU 后執行 VMLAUCH 指令進入客戶模式。加載 Guest OS 并執行。如果 Guest OS 發生外部中斷或者影子頁表缺頁之類的情況,會暫停 Guest OS 的執行,退出客戶模式出行異常處理,之后重新進入客戶模式,執行客戶代碼。如果發生 I / O 事件或者信號隊列中有信號到達,就會進入用戶模式處理。
二、QEMU 概述
QEMU(Quick Emulator)是一個獨立的開源虛擬機軟件,它是通過純軟件來仿真 X86 平臺處理器的取指、解碼和執行,虛擬客戶機的指令并不在物理平臺上直接執行,它利用其中的微型代碼生成器模塊進行動態翻譯,將需要模擬的客戶機的代碼架構轉換成主機代碼架構并最終執行。QEMU 虛擬機是一個純軟件的實現(KVM 需要硬件虛擬化技術支持),所以性能低下。但是,其優點是虛擬機可以與宿主機并不是同一個架構。與 KVM 不同的是,QEMU 的代碼中有整套的虛擬機實現,包括處理器虛擬化、內存虛擬化,以及 KVM 使用到的虛擬設備模擬(比如網卡、顯卡、存儲控制器和硬盤等)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。