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实战-原理、进阶与性能调优》
翻译
欢迎关注我的公众号,不按期更新内核机制文章
设计