KVM和虚拟到物理CPU映射

我是虚拟派对的一个相对迟到的人,所以如果这看起来是一个明显的问题,那么你将不得不原谅我。

如果我有一个有12个内核的服务器,每个KVM客户端是否可以访问所有12个内核? 我知道KVM使用Linux调度程序,但这是我对“接下来会发生什么”的理解的地方。

我问的原因是,我们打算在KVM客户端运行10个不同的任务(为了便于升级而进行隔离),100%的时间不会使用单个内核,所以在这个基础上,必须为每个guest虚拟机分配1个虚拟CPU – 我们将从一个“完整的”空闲的服务器中脱颖而出,以显示它。

换句话说,假设我的描述如上,在处理能力方面,1个虚拟CPU实际上等同于12个物理核心吗? 或者,这不是如何工作?

非常感谢

史蒂夫

虚拟CPU相当于1个物理内核,但是当您的虚拟机尝试处理某些内容时,它可能会运行在当时碰巧可用的任何内核上。 调度程序处理这个,虚拟机不知道它。 您可以将多个vCPU分配给允许跨多个核心同时运行的VM。

根据需要在所有虚拟机之间共享内核,这样您就可以拥有一个4核系统,并在其上运行10个虚拟机,并为每个虚拟机分配2个vCPU。 根据调度程序的确定,虚拟机可以非常高效地共享系统中的所有内核。 这是虚拟化的主要优点之一 – 最大限度地利用订阅不足的资源来为多个操作系统实例提供动力。

如果你的虚拟机如此繁忙以致于不得不争夺CPU时间,结果就是虚拟机可能需要等待CPU时间。 同样,这对VM来说是透明的,并由调度程序处理。

我不熟悉KVM,但以上都是大多数虚拟化系统的通用行为。

虚拟CPU是qemu-kvm进程中的一个线程。 qemu-kvm当然是multithreading的。
除非将进程固定到特定的CPU,否则系统调度程序将从可用内核中分配线程CPU时间,这意味着任何vCPU都可以从任何物理内核中获取CPU周期,除非专门固定到特定内核,

我会build议检查哪个vCPU分配给你的虚拟机,他们给你最好的性能。 同样也符合你的工作量,即CPU绑定或I / O绑定,然后有很多免费的基准testing工具可用来检查你的性能,比如Apache bechmark用于IO绑定操作,John the Ripper用于CPU绑定操作。 一旦你确定你的虚拟机提供了最好的性能,你就可以分配或者configuration其他的虚拟机。 因为我们没有照顾vCPU,所以对性能有负面影响。

例如,如果你有一个拥有4个内核的主机,并且你想运行一个虚拟机并为其分配一个vCPU,那么它的性能将是最低的,因为它们将仅使用4个内核中的一个内核,其余3个内核将不是同时利用。 由于虚拟机监视器(VMM)或pipe理程序不知道VM的内部负载。 如果您分配4个vcpu,您将获得最大吞吐量,在这种情况下,如果您的工作负载是multithreading的,则主机的所有核心将同时使用。 再次,如果你增加一个核心,即超过分配的vCPU超过4可用,那么你可以得到性能下降。 只有你有更多的虚拟虚拟机,如果其中一个虚拟机将被迁移到其他服务器或closures,那么你仍然担心所有的核心将被利用,否则如果没有configuration过度分配将会浪费。