x86本来是虚拟化不友好的
- 没有硬件预留条件
- 根据优先级上下文的不同指令的行为不同
- trap-and-emulate会带来性能损失
- 复杂指令集的特征致使指令替换复杂化
- 二进制翻译 VMware
- 为特权guest代码执行替换代码
- 为了保持假象需要替换相当量的代码
- CPU半虚拟化 Xen
两大分支:
- 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运行在进程执行上下文里。
没有评论:
发表评论