首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VirtualBox:比起物理CPU核,分配更多的虚拟CPU核心是个坏主意吗?

VirtualBox:比起物理CPU核,分配更多的虚拟CPU核心是个坏主意吗?
EN

Unix & Linux用户
提问于 2016-11-25 06:05:26
回答 2查看 75.9K关注 0票数 53

VirtualBox:由于我有超线程化功能的CPU,我想知道:

按照以下警告(例如,简单地使用4个物理核心CPU的所有8个虚拟核),分配更多的虚拟CPU核心是否是一个坏主意?

谈话全文:

分配给虚拟机的虚拟CPU比主机系统上的物理CPU数量多(4)。这可能会降低虚拟机的性能。请考虑减少虚拟CPU的数量。

有人能对这个话题进行推理吗?

所讨论的CPU是Intel Core i7-4700HQ,方舟英特尔CPU基准

假设没有过时的HW,比如HDD (而不是SSD)和/或低内存(这里是16 4GB,这个VM的最小vm.swappiness是4GB)等等。

EN

回答 2

Unix & Linux用户

发布于 2017-06-18 23:20:07

作为一个OS设计人员,我完全同意测量的结果。在其他地方产生的关于这一主题的胡说八道令人难以置信。

将逻辑核的数目作为HW可以执行的并行线程/进程的数目。这是通过复制例如CPU核心的寄存器和指令指针来实现的。CPU核心本身现在决定使用哪个线程(指令指针)。它将决定使用另一个线程,因为当前线程的指令在缓存中不可用,需要从例如内存或L3缓存中获取。这种机制将在指令/秒或CPU性能方面产生10%-30%的潜在改善。

如果您使用一个线程运行一个应用程序,您将无法获得这一好处,但是如果您在两个高负载应用程序(例如,一个旧的HT )上运行,您将能够获得这些好处。当然,对于有多个线程的应用程序也是如此。我的Linux系统有200个线程,因此依赖于实际负载的一些好处总是存在的。所有这些注释都不需要虚拟化。

Virtualbox只限制每个虚拟机( VM )并行运行的线程数,但主机进程调度程序将更改逻辑处理器(S)和物理处理器(S),VM进程将在其中动态运行。如果在VM上运行高负载的应用程序,那么附加的逻辑核将给您10%-30%的好处。负载可以是单个多线程应用程序,也可以是一组不同的应用程序。

在使用VT或AMD-V的现代系统中,不存在使逻辑核数目最大化的性能损失,因为同时运行更多虚拟机也没有明显的性能损失。您的限制是CPU芯片的性能,因此您不能同时在3个VM上呈现视频,而不降低每个VM的速度,因为它们必须共享相同的物理CPU。

如果您在VM上呈现一个具有所有逻辑核的视频,那么您的主机系统可能会变得没有响应性,但是如果您在主机上运行了该呈现应用程序,您的主机系统可能会遇到几乎相同的问题。至少在VM中,您有一个选择,您可以通过将最大CPU负载限制在80%-90%,或者为此原因减少内核数量来解决它。

票数 27
EN

Unix & Linux用户

发布于 2018-05-11 10:34:49

我最好的两分钱是永远不要使用所有的核心/线程,只是让一个或两个主机。

因此,在您的情况下,给来宾一个6个核心,而不是第一个核心(因为主机上只有8个线程)。

如果主机上可用线程数(不要与内核混淆)为:

  • 如果< 2,最好不要使用虚拟机。
  • 如果2,在单核模式下使用虚拟机,或者冒险使用双核客户。
  • 如果> 2,最好使用公式

对于两个以上的线程,我倾向于使用以下公式:

  • N=主机的线程数
  • M=我想要运行的并发虚拟机的数量(假设均衡,每个客户的客户核心数目相同)
  • 如果主机只有4个或更少的线程,则为Formula=(N-1)/M
  • 如果主机有超过4个线程,Formula=(N-2)/M

我的经验告诉我,如果不超过这样的公式限制,那就容易得多,风险也小得多。

警告:不允许在运行客户端时更改客户核心的数量,但允许将CPU使用率从100%降低到75%或50%,不少于客户可能会失败。

因此,有时我倾向于在一个8线程主机上给两位客人6个6个核心(公式的数目就好像只有一个客户而不是两个客户),但限制他们的CPU速度的50% (因此两位来宾都可以使用CPU的1/2时间),但只有当我知道客户将运行的应用程序的并行率大于一,如图像比较/连接,等等。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/325932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档