4

我试图在 VB IRC 频道中找到这个问题的答案,我查看了 stackexchange、stackoverflow、超级用户和其他地方。答案很接近,但不是我想知道的。

这只是一个好奇的问题,而不是必要的问题。我只是想知道事情是如何运作的。它与任何错误、增强请求或安全问题无关。如果您觉得这个论坛不是获得答案的地方,请让我找到合适的地点。谢谢。(尽管任何人都很难想象 VBox 自己的论坛可能是错误的地方,但我没有看到对我的特定问题的答案或发布到适当类别的地方。)无论发生什么,请不要关闭我的问题至少没有指向更好的资源(我讨厌这种情况发生!)。再次感谢。

现在,问题是:virtualbox 的主机驱动程序如何计算要提供的虚拟 CPU 的总数?

(请注意,我不会回复那些没有真正阅读过问题的人的回答,或者至少首先要求更多澄清。我认为这是一个非常直截了当的问题。)

让我把问题分解一下,以便尽可能准确和简洁地说明我真正要问的问题。我很想知道 VirtualBox HOST 软件(可能是什么部分)如何确定在配置界面上出现多少 VIRTUAL CPU,用户可以在其中选择他们想应用于特定 VM 的 VCPU 数量。

我不是在问什么:总的来说,我不是在问虚拟化硬件等的奇迹;我了解多核和多线程、VTx 等。我不是在问我应该为特定的 VM 或应用程序使用多少。在我的问题中,我不是在寻求帮助来配置任何特定的虚拟机。我不是要任何人问我为什么我需要知道——我已经告诉过你了;我只是好奇。如果您对我的具体问题不感兴趣,那很好。同样,这只是一个简单直接的问题:VBox 是如何得出这个数字的?

我已经知道的:确实,至少一般来说,答案是物理 CPU 的 2 倍;好的,如果是这样,为什么是 2x 而不是 3x 或其他乘数?(我知道小数不适用于奇数的内核或线程;我只是尽可能地通用。)例如,在我的 Phenom II X6 上,VirtualBox 为我提供了多达 12 个 VCPU。如果答案是线程,那不可能,因为我的特定 Thuban 没有线程(有些 Thuban 有,有些没有)。不过,我的 Thuban 拥有的是超传输,而不是超线程。同样,我的旧 Phenom II X2 将允许在 Virtualbox 中使用 4 个 VCPU。

我已经阅读了上述网站上的大量回复,告诫用户不要在每个 VM 上使用多个 VCPU,因为这会增加开销(一方面,您必须运行 IOAPIC,这会导致性能下降)。我也读过一些帖子,其中的问题听起来像我的,但他们最终并没有给出答案。

答案是某种 sigma sum 还是对数公式?它是否足够复杂,超过了这个论坛的格式化功能?很难想象为什么很难得到这个问题的答案,我认为这个问题会被多次询问和回答。我真的很想知道为什么它通常看起来是 2x;为什么这是“神奇”数字。如果我阅读源代码(假设这是可用的),评论会解释原因吗?

我真的很感激和钦佩阅读和回答这个问题的灵魂,而不是其他没有被问到的问题。我也希望您不要将我重定向到 IRC 的黑暗和敌对频道;IRC 上有一些非常反社会的实体,他们的言论让我想起了犯罪心理上的一些未订阅者。请注意,我说的是“一些”——那里也有乐于助人的人。没有对抗的意思;我只是讨厌再去IRC了。如果您知道 IRC 上有一个特别有用的昵称,我也将不胜感激。

顺便说一句,我一直在谷歌上寻找这个问题和其他问题的答案,并阅读 SO、SE 和 SU 板,我看到有些人的回答是完全不相关的。这就是为什么我的语气听起来很刺耳的原因。这是我的第一篇文章,我希望回复会比我在 IRC 上的一些经验更积极。

4

1 回答 1

4

您似乎在问“VirtualBox GUI 如何计算系统设置下处理器滑块的可用范围?”

因为 VirtualBox 是开源的(而且非常干净、编写良好的源代码),所以挖掘代码并找出答案并不难。深入了解/src/VBox/Frontends/VirtualBox/src/settings/machine文件夹,您可以看到包含设置 UI 元素的所有 UI* 文件。将得到您答案的特定文件是UIMachineSettingsSystem.cpp。从大约第 45 行开始(从修订版43459 开始),您可以看到以下代码:

/* Setup constants */
CSystemProperties properties = vboxGlobal().virtualBox().GetSystemProperties();
uint hostCPUs = vboxGlobal().host().GetProcessorCount();
mMinGuestCPU = properties.GetMinGuestCPUCount();
mMaxGuestCPU = RT_MIN (2 * hostCPUs, properties.GetMaxGuestCPUCount());

mMinGuestCPU变量和相关GetMinGuestCPUCount()方法(和/ mMaxGuestCPUGetMaxGuestCPUCount()应该相对简单——通常最小值为 1,最大值为主机上可用的物理/逻辑核心数。

因此,要回答您的问题 - 滑块的比例通常是可用内核数量的1 到2 倍。我强烈建议您下载源代码并深入研究计算这些数字的方法,并亲自了解它们是如何计算的以及所涉及的细微差别。具体vboxGlobal().host().GetProcessorCount()方法。

于 2013-06-30T16:20:22.740 回答