我有一个带有VirtualBox的2.8四核i7。我可以选择为客户机分配最多4个内核,但我只做了两个。为客户分配更多核心有哪些优点/缺点?顺便说一句,我仍然可以在运行两个客户操作系统(Win 7和Ubuntu)的同时在Ultra设置上玩星际争霸2,同样适用于BFBC2(我的压力测试员)。 i7如何对核心的不均匀负载做出反应?
我有一个带有VirtualBox的2.8四核i7。我可以选择为客户机分配最多4个内核,但我只做了两个。为客户分配更多核心有哪些优点/缺点?顺便说一句,我仍然可以在运行两个客户操作系统(Win 7和Ubuntu)的同时在Ultra设置上玩星际争霸2,同样适用于BFBC2(我的压力测试员)。 i7如何对核心的不均匀负载做出反应?
Answers:
您分配给VM的“虚拟”核心可用于客户端操作系统内的多处理。如果仅为VM分配一个核心,则guest虚拟机操作系统不可能跨多个核心分配负载。那么让我们假设一些实际场景:
在这种情况下,客户操作系统将只能使用一个核心。因此,如果您运行的多线程应用程序在多个核心上可以很好地扩展,它仍然只能在一个核心上运行。因此,来宾操作系统上的所有线程必须共享一个物理核心。
在此设置中运行客户操作系统以完全加载CPU将产生~25%的主机操作系统CPU负载(主机上加载4个核心中的一个)。
当然,您仍然可以在主机操作系统中运行耗费CPU的任务,并使用剩余的3个核心。
在这种情况下,您可以在来宾VM中运行良好扩展的多线程应用程序,这可以充分利用所有4个虚拟CPU。 VirtualBox将使用4个物理内核来处理VM中安排的任务,因此主机CPU负载最多可达到100%的使用率。
这个问题的答案很大程度上取决于你想做什么。在某些情况下,将所有核心分配给VM或甚至运行多个VM(每个VM分配了全部CPU)可能很有用。在这种情况下,VM可以充分利用主机的整个处理能力。如果为VM分配的CPU数量多于实际存在的CPU数量,则VM将受到不同VM上的负载的影响。为了防止这种情况,您可能会将某些内核专用于特定的VM。例如,在4核心节点上运行2个具有2个CPU的VM可以帮助每个VM获得2个专用CPU(假设主机操作系统没有施加负载也占用了部分处理能力)。
这又取决于软件运行。如果运行空闲的VM(根本不运行CPU密集型程序),则此VM施加的负载将接近0%。如果所有VM都处于空闲状态,您甚至可以并行运行10个VM,并且仍然会遇到接近0%的主机CPU负载。
那么,CPU负载分配在很大程度上取决于特定于操作系统的内置组件,称为调度程序。对于Windows XP,调度程序尝试循环加载所有CPU内核。因此,在四核CPU上运行满负荷的单线程任务会在每个核心上产生~25%的负载。
不幸的是,这已被证明对现代CPU电源管理不利。对于现代系统来说,如果在第二个核心甚至涉及之前将一个核心加载到100%,这甚至是一个优势。原因在于,只要没有足够的负载来完全耗尽一个核心,其他核心就可以保持深度睡眠模式以节省能量并减少散热。
对于某些CPU,如英特尔酷睿i系列和较新的AMD(推土机),这更加有趣,因为如果仅使用核心的子集,则关闭未使用的核心。这降低了CPU的功耗。两者(英特尔和AMD)都开始使用热量和功耗预算,然后对活跃的核心进行超频。因此,这可以提供单线程应用程序(不能分布到多个内核以并行处理任务)。但是,当所有内核都处于活动状态时,大多数这些“增强”技术对处理能力的影响很小,因为“所有内核处于活动状态”的情况正是CPU所针对的情况。但是,当您关闭某些内核时,其余内核可以超频运行而不会导致芯片运行更热(或消耗更多功率),而不是所有内核都处于活动状态。
所以答案是你的核心i7可以很好地处理单核上的不均衡负载,甚至可以为单线程应用程序提供性能提升。然而,这种提升在几个百分点的范围内,而实际上可以在多个CPU内核之间分配负载的多线程应用程序可以通过因素(双核x2,四核四核......)得到提升。因此,与单线程结合时钟提升相比,多线程总是在组合CPU功率方面提供更多功率。