您好,登錄后才能下訂單哦!
OpenStack中如何理解KVM和QEMU,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
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(Quick Emulator)是一個獨立的開源虛擬機軟件,它是通過純軟件來仿真X86平臺處理器的取指、解碼和執行,虛擬客戶機的指令并不在物理平臺上直接執行,它利用其中的微型代碼生成器模塊進行動態翻譯,將需要模擬的客戶機的代碼架構轉換成主機代碼架構并最終執行。QEMU虛擬機是一個純軟件的實現(KVM需要硬件虛擬化技術支持),所以性能低下。但是,其優點是虛擬機可以與宿主機并不是同一個架構。與KVM不同的是,QEMU的代碼中有整套的虛擬機實現,包括處理器虛擬化、內存虛擬化,以及KVM使用到的虛擬設備模擬(比如網卡、顯卡、存儲控制器和硬盤等)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。