CPU 和内存虚拟化原理 - 天天5分钟玩转 OpenStack(6)

前面咱们成功地把 KVM 跑起来了,有了些感性认识,这个对于初学者很是重要。不过还不够,咱们多少得了解一些 KVM 的实现机制,这对之后的工做会有帮助。ubuntu

CPU 虚拟化

KVM 的虚拟化是须要 CPU 硬件支持的。还记得咱们在前面的章节讲过用命令来查看 CPU 是否支持KVM虚拟化吗?
ide

root@ubuntu:~# egrep -o '(vmx|svm)'  /proc/cpuinfo vmx性能

若是有输出 vmx 或者 svm,就说明当前的 CPU 支持 KVM。CPU 厂商 Intel 和 AMD 都支持虚拟化了,除非是很是老的 CPU。测试

一个 KVM 虚机在宿主机中实际上是一个 qemu-kvm 进程,与其余 Linux 进程同样被调度。 好比在个人实验机上运行的虚机 kvm1 在宿主机中 ps 能看到相应的进程。ui

虚机中的每个虚拟 vCPU 则对应 qemu-kvm 进程中的一个线程。看下图spa

在这个例子中,宿主机有两个物理 CPU,上面起了两个虚机 VM1 和 VM2。 VM1 有两个 vCPU,VM2 有 4 个 vCPU。能够看到 VM1 和 VM2 分别有两个和 4 个线程在两个物理 CPU 上调度。线程

这里也演示了另外一个知识点,即虚机的 vCPU 总数能够超过物理 CPU 数量,这个叫 CPU overcommit(超配)。 KVM 容许 overcommit,这个特性使得虚机可以充分利用宿主机的 CPU 资源,但前提是在同一时刻,不是全部的虚机都满负荷运行。 固然,若是每一个虚机都很忙,反而会影响总体性能,因此在使用 overcommit 的时候,须要对虚机的负载状况有所了解,须要测试。orm

内存虚拟化

KVM 经过内存虚拟化共享物理系统内存,动态分配给虚拟机。看下图
进程

为了在一台机器上运行多个虚拟机,KVM 须要实现 VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)直接的地址转换。虚机 OS 控制虚拟地址到客户内存物理地址的映射 (VA -> PA),可是虚机 OS 不能直接访问实际机器内存,所以 KVM 须要负责映射客户物理内存到实际机器内存 (PA -> MA)。具体的实现就不作过多介绍了,你们有兴趣能够查查资料。内存

还有一点提醒你们,内存也是能够 overcommit 的,即全部虚机的内存之和能够超过宿主机的物理内存。但使用时也须要充分测试,不然性能会受影响。

下一节咱们讨论 KVM 如何实现存储虚拟化。

 

相关文章
相关标签/搜索