2015年11月11日星期三

KVM学习

x86指令集的虚拟化
x86本来是虚拟化不友好的
  • 没有硬件预留条件
  • 根据优先级上下文的不同指令的行为不同
  • trap-and-emulate会带来性能损失
  • 复杂指令集的特征致使指令替换复杂化
早期的x86虚拟化方式
  • 二进制翻译 VMware
    • 为特权guest代码执行替换代码
    • 为了保持假象需要替换相当量的代码
  • CPU半虚拟化 Xen
硬件支持的x86CPU虚拟化
两大分支:
  • Intel VT
  • AMD-V
但是核心思想是一致的:


基于硬件的虚拟化工作原理:虚拟化由用户态程序Qemu和内核态驱动kvm配合完成,qemu提供对CPU的模拟,展现给虚拟机一定数目的CPU和CPU特性,KVM负责把qemu的部分指令在硬件上直接实现,实现了加速执行的目的。

            QEMU   (user mode)
      --------------------------
         Linux   (kernel mode)
 
              
              |------------------------------
              |  Guest App   (user mode)   |
    non-root  | -------------------------- | Gust VM
              |  Guest OS   (kernel mode)  |
   ------------------------------------------
                    QEMU     (user mode)           
      root      --------------------------
                 Linux/KVM  (kernel mode)
 
 
在 KVM 环境中,每个客户机都是一个标准的 Linux 进程(QEMU 进程),而每一个 vCPU 在宿主机中是 
QEMU 进程派生的一个普通线程。也就是说使用进程即可创建一个虚拟机。
 
qemu操作的设备文件是/dev/kvm,

 客户虚拟机的物理内存是进程地址空间的一部分。vCPU运行在进程执行上下文里。
 
 
 
 
 

没有评论:

发表评论