我试图在VB IRC频道中得到这个问题的答案,我看了看堆栈交换,stackoverflow,超级用户和其他地方。答案很接近,但不是我想知道的。
这只是一个好奇心问题,不是必需品。我只是想知道事情是如何运作的。它与任何错误,增强请求或安全问题无关。如果您觉得这个论坛不是获得答案的地方,请转介我到正确的地点。谢谢。 (虽然很难让人想象VBox自己的论坛可能是错误的地方,但我没有看到我的具体问题的答案或者发布到适当类别的地方。)无论发生什么,请不要关闭我的问题至少没有指向更好的资源(我讨厌这种情况发生!)。再次感谢。
现在,问题是:virtualbox的主机驱动程序如何计算要提供的虚拟CPU总数?
(请注意,我不会回复那些没有真正阅读过问题的人的答案,或者至少首先要求进一步澄清。我认为这是一个非常直截了当的问题。)
让我打破这个问题,尽可能准确,简洁地说明我真正要问的问题。我很想知道VirtualBox HOST软件(无论可能是哪个部分)如何确定配置界面上出现多少VIRTUAL CPU,用户可以选择将多少个VCPU应用于特定虚拟机。
我不是在问:我一般都不是在询问虚拟化硬件的奇迹等等。我理解多个内核和多线程,VTx等。我不是要问有多少我应该用于特定的VM或应用程序。我不是在我的问题中请求帮助配置任何特定的VM。我不是要求任何人问我为什么需要知道 - 我已经告诉过你了;我只是好奇。如果我的具体问题不感兴趣,那很好。同样,这只是一个简单,直截了当的问题:VBox如何得出这个数字?
我已经知道:至少在一般情况下,答案是物理CPU的2倍;好吧,如果是这样,为什么2x而不是3x或其他一些乘数呢? (我知道小数量的数据不适用于奇数个核心或线程;我只是尽可能通用。)例如,在我的Phenom II X6上,VirtualBox向我提供了多达12个VCPU。如果答案是线程,那么,这是不可能的,因为我的特定Thuban没有线程(一些Thubans做,有些不做)。然而,我的Thuban所拥有的是超传输,而不是超线程。同样,我的旧Phenom II X2将在Virtualbox中允许4个VCPU。
我已经阅读了上述网站上的众多回复,告诫用户不要为每个VM使用多个VCPU,因为这会增加开销(首先,您必须运行IOAPIC,这会带来性能损失)。我也读过这个问题听起来像我的帖子,但他们最终没有给出答案。
答案是某种西格玛总和还是对数公式?它是否足以超越此论坛的格式化功能?很难想象为什么要回答这个问题是如此困难,我认为这个问题会被多次提出并回答。我真的想知道为什么它通常是2倍;为什么那是“魔术”号码。如果我阅读了源代码(假设这是可用的),那么评论会解释原因吗?
我会非常欣赏和欣赏阅读和回答这个问题的灵魂,而不是其他一些没有被问到的问题。我也希望你不要把我转到IRC黑暗和敌对的渠道;在IRC上有一些非常反社会的实体,其言论让我想起了一些关于犯罪心理的诽谤。请注意,我说“有些” - 那里也有乐于助人的人。对抗并不意味着;我只是讨厌去IRC了。如果你知道IRC上有一个特别有用的缺口,我也会很感激。
顺便说一下,我一直在谷歌搜索这个和其他问题的答案,阅读SO,SE和SU板,我看到有些人回答完全无关的答案。这就是我听起来像是一种刺耳的声调的原因。这是我的第一篇文章,我希望这个回复比我在IRC上的一些经验更积极。答案 0 :(得分:4)
您似乎在问“VirtualBox GUI如何计算系统设置下处理器滑块的可用范围?”
因为VirtualBox是open source(并且非常干净,编写良好的源代码),所以深入研究代码并研究答案并不难。深入到/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()
方法(以及mMaxGuestCPU
/ GetMaxGuestCPUCount()
)应该相对简单 - 通常在最小值时为1,最大值为主机上可用的物理/逻辑核心数。
因此,要回答您的问题 - 滑块的比例通常是1到两倍可用的核心数。我强烈建议您下载源代码并深入研究计算这些数字的方法,并亲自了解它们的计算方法和所涉及的细微差别。特别是vboxGlobal().host().GetProcessorCount()
方法。