我有一个 8 核和 32GB RAM 的 KVM 虚拟化主机。该机器用于托管用于评估软件、配置等的 VM。通常有 2-4 个 VM 同时运行。主机运行的是 Ubuntu Server 12.04 LTS。这是一个只安装了 KVM 的简单安装。通常,此主机上的来宾 VM 分配有 2 个内核和 4GB 的 RAM。所有来宾都运行 Ubuntu 12.04 服务器。
最近,我开始在分配了 2 个内核和 8GB RAM 的 VM 上测试一个软件(CrashPlan PROe Server)。CrashPlan PROe 是一个 Java 应用程序。我从生产服务器导入了一个配置来模拟我们的实时环境。
在正常负载下,我观察到使用 top(在客户机上)的 CPU 利用率很高。我还在主机上观察到一个 KVM 进程表现出相似的 CPU 负载。在 KVM 主机上,每个 VM 似乎有一个 KVM 进程。
• 对于每个KVM 来宾将有一个主机KVM 进程,我是否正确?
• 将CPU 资源分配给虚拟机时——虚拟机是否直接寻址这些内核?或者主机是否只是向来宾呈现所述内核的一些虚拟表示?
• 在我的特定情况下,在具有 8 个内核和 32GB RAM 的机器上仅分配了 2 个内核和 8GB RAM 的来宾如何导致如此高的 CPU 利用率(在单个 KVM 进程上超过 80%)主人?
KVM 为您分配给来宾的每个虚拟 CPU 启动并运行一个进程。双核 VM 意味着两个主机端线程。
来宾调度一个 vcpu,命令被传递给主机并在适当的线程中执行。
众所周知,Java 资源匮乏。80% 还不错,因为这只是一个主机核心。即两个完全调度的主机核心将显示 200%