CPU虚拟化功能是通过qemu-kvm和qemu-system提供,他们是KVM和QEMU的核心包

一个KVM虚机在宿主机中其实是一个qemu-kvm进程,与其他Linux进程一样被调度

  • 一个KVM虚拟机就是宿主机上的一个进程

将VM1关机,然后查看进程
在这里插入图片描述
在这里插入图片描述

将VM1开机,然后查看进程
在这里插入图片描述

虚机中的每一个虚拟vCPU则对应qemu-kvm进程中的一个线程

  • KVM中一个VCPU就是宿主机KVM对应进程中的一个线程

当前VM1虚拟机vCPU数为1,查看线程数
在这里插入图片描述

将VM1关机,然后将vCPU改为2,看线程在这里插入图片描述
在这里插入图片描述

示意图
在这里插入图片描述

  • 在这个例子中,宿主机有两个物理CPU,上面起了两个虚机VM1和VM2,所以当前宿主机上有两个qemu-kvm进程,假设VM1对应进程为qemu-kvm1,另一个为qemu-kvm2。
  • VM1有2个vCPU,所以qemu-kvm1进程上应该有2个vCPU线程
  • VM2有4个vCPU。所以qemu-kvm2进程上应该有4个vCPU线程
  • 这里也演示了另一个知识点,即虚机的vCPU总数可以超过物理CPU数量,这个叫CPU overcommit(超配)
  • KVM允许overcommit,这个特性使得虚机能够充分利用宿主机的CPU资源,但前提是在同一时刻,不是所有的虚机都满负荷运行
  • 当然,如果每个虚机都很忙,反而会影响整体性能,所以在使用overcommit的时候,需要对虚机的负载情况有所了解,需要测试
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐