Read the fucking source code!
--By 魯迅A picture is worth a thousand words.
--By 高爾基說明:架構
Show me the code
,一切從源代碼出發;本文做爲開篇,從宏觀方面來進行介紹,有個初步認識,不涉及到具體原理分析。框架
什麼是虛擬化?工具
Virtual Machine Motior(VMM)
,虛擬機監控器,也叫Hypervisor
,向下管理實際的物理資源,向上給不一樣的虛擬機提供邏輯資源;Virtual Machine(VM)
,虛擬機能夠根據本身的選擇運行不一樣的OS(Guest OS),它會認爲本身獨享硬件;經過軟件模擬來實現VMM層,好比QEMU
,仍是以圖片來舉例說明下:性能
Guest代碼指令
翻譯成TCG(Tiny Code Generator)中間代碼
,最終翻譯成Host架構支持的代碼指令
;純軟件行爲來翻譯指令,顯然是一件很低效的事情,硬件虛擬化的支持能夠提升總體的性能,硬件虛擬化指處理器自己提供能力來讓客戶機指令獨立運行。ui
KVM (Kernel-Based Virtual Machine)
,基於內核的虛擬機,實現對CPU和內存的虛擬化,以及硬件I/O虛擬化的攔截,Guest的I/O被KVM
攔截後交給Qemu去處理;KVM
是內核的一個Module,可讓Linux變成一個Hypervisor
;KVM
須要Host處理器自己支持虛擬化擴展,好比intel VT
,AMD-V
等;Para-Virtualization
):客戶機操做系統知道自身運行在虛擬環境裏,進行定製化修改,以配合Hypervisor進行工做,優勢是半虛擬化的架構更精簡,性能上有必定優點,缺點是客戶機OS須要修改,用戶體驗誤差;virtio
,須要宿主機/Hypervisor和客戶機都安裝對應的驅動;Full Virtualization
):客戶機操做系統不須要任何改動,使用簡單,因爲全虛擬化須要模擬出完整的,和物理平臺同樣的平臺給客戶機,所以也增長了Hypervisor的設計難度;native/bare-mental Hypervisor
,直接控制硬件資源和客戶機,典型的是Xen
;VMware Workstation
, KVM
等,Hypervisor只是宿主機操做系統的一個應用程序;從上文的虛擬化分類來看,咱們研究目標KVM+Qemu
,是採用硬件虛擬化技術的全虛擬化方案(Type2)。操作系統
Qemu (Quick Emulator)
:是虛擬化方案的用戶態組成部分,它有兩種模式:1)Emulator
,模擬器,模擬各類硬件,使用的是二進制翻譯技術;2)Virtualiser
,虛擬機,經過ioctl
與KVM內核模塊
進行交互,完成虛擬化功能;Qemu
爲每一個VM虛擬機
建立一個進程,針對每一個vCPU虛擬CPU
建立一個線程,Guest的系統和應用運行在vCPU
之上;Qemu
能模擬I/O功能,而這部分功能KVM
可能並非所有支持,執行流程以下:虛擬機VM
中的程序執行I/O操做,VM
退出進入KVM,KVM進行判斷處理並將控制權交給Qemu
,由Qemu
來模擬I/O設備來響應程序的I/O請求;本文純當掃盲貼了,至於具體技術細節的深刻分析,後續會進行不按期更新。線程
《KVM實戰-原理、進階與性能調優》
翻譯
歡迎關注我的公衆號,不按期更新內核機制文章
設計