vCPU映射到多个服务器上的CPU

时间:2015-09-18 03:45:19

标签: openstack

我在多台服务器上部署了openstack。每个服务器有2个CPU,每个8个核心,每个16个线程。如果我打开超线程,我可以在openstack部署中使用多少个最大vCPU,这样我就不会过度使用任何VM的任何vCPU。

1 个答案:

答案 0 :(得分:0)

<强> 超线程

我建议不要在使用KVM时开启超线程,但我有偏见。当超线程和kvm都很年轻时,围绕vcpu和超线程出现了许多问题。

为清楚起见,超线程只是在linux内核中创建一个软逻辑处理器,以便在cpu处理队列中达到更高的效率。

过度使用,vCPU和逻辑CPU

vCPU是分配给虚拟机的虚拟cpu。

逻辑CPU是逻辑上分配给主机系统Linux内核的CPU。

正如超线程所见,有时逻辑CPU数量超过主机上的物理CPU或核心。

从技术上讲,当你拥有比物理内核更多的vcpu内核时,你就过度承诺。注意我是怎么说的物理核心,而不是逻辑CPU。在proc / cpuinfo中,linux显示的内容可能无法准确反映可用的物理内核,部分归功于超线程。

由于kvm分配vCPU,默认情况下它们不会设置任何类型的CPU关联。这意味着,vCPU将用于当时linux中哪个逻辑处理器最可用。如果有人开始制作'MAKE = make -j64'世界类型的工作,你可能会看到一些非常重要的利用率,并开始在任何给定指令集的最可用的逻辑CPU周围发射软管。

现在,如果你有一个8个物理核心盒,托管4个虚拟机,2个vCPU一块,这很好。但想想启用超线程会发生什么......现在你有16个逻辑CPU,但只有8个核心。当您再启动4个虚拟机时会发生什么?您冒着让虚拟机直接影响其邻居的资源可用性的风险。这在技术上是过度使用的。

如果你不必,不要过度使用。

还要考虑主持人的需求。您可能希望在执行CPU密集型操作时在主机系统上设置cpu_affinity,并将该物理内核视为专用于HOST,并将其从可用于VM的可用(最大)vCPU计数中减去。

了解如何使用任务集设置亲和力:

参考:http://manpages.ubuntu.com/manpages/hardy/man1/taskset.1.html

每个虚拟机的最大vCPU

至于cpu配额,这基本上是你的虚拟机管理程序而不是OpenStack的功能。你需要通过CFM和一些仔细的计划来处理这个问题。

例如,RedHat调整自己的KVM包:

  

每个guest虚拟机支持的最大虚拟CPU数量不尽相同   取决于您所使用的Red Hat Enterprise Linux 6的次要版本   用作主机。最新推出的6.0版本   64,而6.3最多推出160.目前随着发布   6.7,每个guest虚拟机最多支持240个虚拟CPU。

参考:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/chap-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Virtualization_Restrictions.html

以下是有关调整PER vm cpu /资源分配的一些信息

参考:http://libvirt.org/formatdomain.html#elementsCPUAllocation