![KVM虚拟化Host与Guest资源利用率关系](https://linux22.com/image/630294/KVM%E8%99%9A%E6%8B%9F%E5%8C%96Host%E4%B8%8EGuest%E8%B5%84%E6%BA%90%E5%88%A9%E7%94%A8%E7%8E%87%E5%85%B3%E7%B3%BB.png)
我有一台 KVM 虚拟化主机,有 8 个内核和 32GB 的 RAM。该机器用于托管用于评估软件、配置等的虚拟机。通常有 2-4 个虚拟机同时运行。主机运行的是 Ubuntu Server 12.04 LTS。这是一个只安装了 KVM 的基本安装。通常,此主机上的客户虚拟机分配有 2 个内核和 4GB 的 RAM。所有客户虚拟机都运行 Ubuntu 12.04 Server。
最近,我开始在一台分配了 2 个内核和 8GB RAM 的虚拟机上测试一款软件(CrashPlan PROe Server)。CrashPlan PROe 是一款 Java 应用程序。我从生产服务器导入了配置来模拟我们的实时环境。
在正常负载下,我使用 top(在客户机上)观察到 CPU 利用率较高。我还在主机上观察到单个 KVM 进程表现出类似的 CPU 负载。在 KVM 主机上,每个虚拟机似乎都有一个 KVM 进程。
• 我说的每个 KVM 客户机都有一个主机 KVM 进程,正确吗?
• 在为虚拟机分配 CPU 资源时 - 虚拟机是否直接处理这些核心?还是主机只是向客户机提供所述核心的一些虚拟表示?
• 在我的特定情况下,在具有 8 核和 32GB RAM 的机器上,仅分配有 2 核和 8GB RAM 的客户机如何能够导致主机上如此高的 CPU 利用率(在单个 KVM 进程上超过 80%)?
答案1
KVM 会为您分配给客户机的每个虚拟 CPU 启动并运行一个进程。双核 VM 意味着两个主机端线程。
客户机调度一个 vcpu,命令被传递到主机并在适当的线程中执行。
众所周知,Java 占用大量资源。80% 还不错,因为那只是一个主机核心。也就是说,两个完全调度的主机核心将显示 200%