【问题标题】:Weight-factor to determine Virtual Cores for a Virtual Machine确定虚拟机虚拟内核的权重因子
【发布时间】:2019-10-28 17:42:06
【问题描述】:

我必须设计一种算法来决定将虚拟内核分配给VM

例如我有 2 个选项来创建 machines。那可能是物理的/虚拟的。让我们考虑两种情况:

  • 如果我需要 1 核 2.3 GHz,这意味着我需要一个能够运行
    2.3 * 10^9 指令的处理器。如果将具有这些能力的处理器分配给物理机,就可以了。
  • 但是当我想将2.3 GHz 的1 核分配给虚拟机时,我想使用值为0.8 的常量weight-factor。我将“指令数”(即 2.3 * 10^9)除以权重因子 0.8。因此,虚拟机所需的处理能力应该由这个因素来衡量。结果是 2.875 * 10^9。

我想向您确认,在虚拟机的情况下,这是通过使用权重因子来扩展所需处理能力的正确方法。

如果是,是否有任何相关研究或概念证明来使用这种确定虚拟机所需处理器数量的机制?

【问题讨论】:

  • 权重因子是否应该代表虚拟化的开销?请注意,“2.3 Ghz”核心可能更像“a core than actually runs at any speed between 1.25 GHz (due to thermal throttling) to 3.4 GHz (due to "turbo-boost")”。
  • 这是开销但不是机器虚拟化的开销,而是将其视为超线程开销。我想使用一个因素来告诉我每个周期需要多少额外时钟才能使虚拟内核执行与物理内核相同的情况。谢谢@Brendan

标签: performance operating-system virtualization core hyperthreading


【解决方案1】:

一般;用于 80x86 CPU 上的 SMT(例如超线程);一个核心中的所有逻辑 CPU 都在工作:

  • 如果所有逻辑 CPU 都使用不同的资源(例如,一个使用 SSE 指令,另一个使用通用整数指令);如果每个逻辑 CPU 是唯一使用内核的逻辑 CPU,它的速度可能与它一样快

  • 如果所有逻辑 CPU 都在争夺相同的资源,则内核的性能可能会被逻辑 CPU 平均分配(例如,每个内核有 2 个逻辑 CPU,每个逻辑 CPU 可能获得一半的性能如果它是唯一使用内核的逻辑 CPU,它就会有)。

请注意,这也可能适用于 AMD 的 Bulldozer(即使它不被视为 SMT),其中 FPU 在内核之间共享,但内核的其余部分不共享(换句话说,如果两个内核都在同时会影响两个内核的性能)。

这意味着(例如)对于每个内核有 2 个逻辑 CPU 的 2.3 GHz 内核,每个逻辑 CPU 可能会获得(粗略等值)从 0.75 GHz 到 3.4 Ghz 的任何频率;取决于每个逻辑 CPU 恰好正在执行的确切代码和各种电源管理条件(热节流、涡轮增压等)。

但是,实际性能还取决于缓存(和缓存共享)、RAM 芯片带宽和虚拟机开销(从导致大量 VMEXIT 的代码的“极端”到几乎没有)等因素。考虑到这一点(例如)对于2.3 GHz 内核,每个逻辑 CPU 可能会获得(粗略的等效)从几百 MHz 到 3.4 Ghz 的任何频率;取决于许多因素。

基本上;你的“体重”应该是从 0.1 到 1.0 的任意随机数,具体取决于一堆你不能/不会知道的东西。

幸运的是,在虚拟机内运行的任何代码都可能被设计为处理各种不同的 CPU,每个 CPU 的速度各不相同;因此,只需将任何 CPU 分配给虚拟机,并让在虚拟机中运行的软件适应它所提供的任何性能,就足够了。

或者(如果您需要保证某种性能,或者您想尝试隐藏时间差异,以便 VM 中的代码不知道它不是在真实硬件上运行);您可以跟踪“虚拟时间”和“挂钟时间”,并尝试使这些时间大致同步。例如,如果“虚拟时间”移动得太慢(例如,因为 VM 内的代码导致大量 VMEXIT),您可以假装虚拟 CPU 变热并开始热节流,以创建一个合理/现实的借口,允许“虚拟时间”赶上“挂钟时间”;如果某些事情可能比它应该发生的更快(例如,您知道来宾正在等待一个虚拟计时器,该计时器将在 100 毫秒内到期,并且可以假装 100 毫秒没有过去),您可以故意减慢虚拟机的速度,直到“挂钟时间”赶上了“虚拟时间”。在这种情况下,给自己一些移动空间是个好主意(假设虚拟 CPU 比它可能的慢,因为减慢虚拟机的速度比加快它更容易)。当然这也可以用来隐藏 SMT 造成的时序差异,也可以隐藏 VM 之间共享 CPU 造成的时序差异(例如,当虚拟内核多于真实内核时)。

注意:“另类选择”是说“虚拟时间”与“挂钟时间”完全无关。当您只有一个旧的 1 GHz CPU 时,这允许您(例如)模拟一个 6 GHz CPU - 这只是意味着 1 个“虚拟秒”需要大约 6 个“挂钟秒”。

另外请注意,过去 18 个月以上的所有安全问题(例如幽灵)我强烈考虑使用“核心”作为最小可分配单位,以便在任何时间点虚拟机获取属于某个内核的所有逻辑 CPU 或不获取属于该内核的任何逻辑 CPU(并拒绝允许同一内核中的逻辑 CPU 同时分配给不同的虚拟机,因为数据可能会泄漏到任何从一个 VM 到另一个 VM 的许多侧信道中的一个)。

【讨论】:

  • 非常有用的内容@Brendan。我将考虑所有这些因素来分配权重因子。我将尝试考虑特定程序的指令数量并尝试预测它的 CPS。此外,对于在 VM 上运行的其他程序,CPS 也会被累积。而在主机操作系统上,其他具有 CPS 要求的程序将被考虑在权重因子中。我将深入研究更多细节以进一步澄清。是否有包含此主题的资源/博客,因为我只找到了有关如何确定物理核心与虚拟核心比率的详细信息。
猜你喜欢
  • 2014-02-22
  • 2012-08-26
  • 2011-10-20
  • 1970-01-01
  • 2011-10-24
  • 2012-02-06
  • 2011-12-15
  • 2012-08-04
  • 2018-02-23
相关资源
最近更新 更多