VirtualBox:正如我所见超线程有能力的CPU,我想知道:
正如以下警告所示,分配比物理 CPU 核心数量更多的虚拟 CPU 核心是不是一个坏主意(例如,仅使用 4 个物理核心 CPU 的所有 8 个虚拟核心):
成绩单:
分配给虚拟机的虚拟 CPU 数量多于主机系统上的物理 CPU 数量 (4)。这可能会降低虚拟机的性能。请考虑减少虚拟CPU的数量。
有人可以对这个话题进行推理吗?
有问题的CPU是Intel Core i7-4700HQ,方舟英特尔,CPU基准测试
假设,没有过时的硬件,例如 HDD(而不是 SSD)和/或低 RAM(此处为 16GB,最低vm.swappiness
,此 VM 为 4GB),等等。
答案1
硬件/操作系统/软件
主持人:Linux Mint 18 Cinnamon 64 位(完全更新);内核版本 4.4.0-47-generic
客人:Windows 8.1 Pro 64位(完全更新)
处理器:英特尔酷睿 i7-4700HQ,(6MB 缓存,4 个物理核心,或 8 个使用超线程),CPU基准测试
虚拟盒子:版本5.1.10 r112026(Qt5.5.1)
嘉宾补充:已安装且是最新的
基准工具#1:WinRAR 版本 5.40 最终 64 位
基准工具 #2:VeraCrypt 版本 1.19 最终 64 位
准备
在这两种情况下,我都会在启动后等待,直到 CPU、RAM、磁盘驱动器稳定在接近零点的位置。
方法
- 克隆原始虚拟机以拥有两个相同的虚拟机。
- 对于第二次,我已经在这个答案的底部指出了重新启动禁用防病毒软件,并在这两种情况下将 WinRAR 从 Beta 版本更新为最终版本。
- 我已经做了与前面指出的相同的准备工作。
- 虚拟机在前台运行,没有任何其他占用 CPU 时间的应用程序运行,我已经禁用了我可以禁用的功能,以免测试受到影响。
- 为了包括系统内部或外部的潜在缓存,我连续运行了两次相同的测试。好处几乎没有。
结果
解压缩工具
4核心=>7.5分钟 (更短时间比较好)
WinRAR 与4启用核心,处理 1.5GiB7.5分钟。
8核心=>4.5分钟 (更短时间比较好)
WinRAR 与8启用核心,处理 1.5GiB4.5分钟。
维拉密码
4核心=>速度2.6GiB/秒(更高速度更好)
VeraCrypt 与4启用核心,硬件加速 AES (AES-NI)速度2.6GiB/秒。
8核心=>速度3.9GiB/秒(更高速度更好)
VeraCrypt 与8启用核心,硬件加速 AES (AES-NI)速度3.9GiB/秒。
结论
我可以根据需要运行尽可能多的测试。但我想,如果这两个,其中一个是相当复杂的压缩测试,第二个是一组相当复杂的加密测试,那还有什么意义。
两个基准都显示出明显的差异。我认为没有理由相信他们的结果不准确,因为我遵循了相当严格的准备和方法,而且这些测试是在 RAM 中进行的,以排除 I/O 瓶颈。从我的角度来看,问题中提到的警告可能适用于某些情况,但肯定不是全部。与您分享了这些相当显着的结果后,我确信您会同意我的观点,即在具有以下功能的现代 CPU 上,可能不应该如此认真地对待这个警告:超线程使用最新的 VirtualBox 版本。有一点可以肯定:在决定永久应用此设置之前,不要相信我的话,并在您自己的条件下进行测试。
新标杆
主持人+嘉宾:Linux Mint 19.2“蒂娜”-肉桂(64 位);两者都带有内核:5.3.0-24-generic
.
处理器:英特尔® 酷睿™ i7-7700HQ; 6 MB 缓存,高达 3.80 GHz,4 个物理核心,或 8 个使用超线程,CPU基准比较
虚拟盒子:版本 6.1.0 r135406 (Qt5.9.5)
嘉宾补充:已安装且是最新的
基准测试工具:VeraCrypt 版本 1.24 Hotfix1 64 位最终版(网页,直接 deb 下载链接)
制备及方法
与之前的基准相同。
结果
VeraCrypt 4 核 AES 加密
⟶ 速度 4.8 GiB/s (速度越高越好)
VeraCrypt 8 核 AES 加密(超线程发出警告)
⟶ 速度 7.2 GiB/s (速度越高越好)
结论
令人惊叹的 50% 性能提升超线程已启用,但遗憾的是仅适用于 AES,我将不得不运行一些更全面的测试。几天后就会带着结果回来。
答案2
作为一名操作系统设计师,我完全同意测量结果。其他地方关于这个主题的废话之多令人难以置信。
将逻辑核心的数量视为硬件可以执行的并行线程/进程的数量。这是通过复制CPU核心的寄存器和指令指针来实现的。 CPU 核心现在自行决定使用哪个线程(指令指针)。它将决定使用另一个线程,因为当前线程的指令在缓存中不可用,需要从内存或 L3 缓存中获取。此机制将使每秒指令数或 CPU 性能潜在提高 10%-30%。
如果您使用一个线程运行单个应用程序,您将无法获得这一好处,但如果您在旧的 HT Pentium 上运行两个高负载应用程序,您将能够获得这种好处。当然,对于具有多个线程的应用程序来说也是如此。我的 Linux 系统有 200 个线程,因此始终存在一些取决于实际负载的好处。所有这些评论都适用于没有虚拟化的情况。
Virtualbox 仅限制每个虚拟机 (VM) 可以并行运行的线程数量,但主机进程调度程序将更改逻辑处理器,从而更改 VM 进程动态运行的物理处理器。如果您在虚拟机上运行高负载应用程序,额外的逻辑核心将为您带来 10%-30% 的相同优势。负载可以是单个多线程应用程序或一组不同的应用程序。
在采用 VT-x 或 AMD-V 的现代系统上,最大化逻辑核心数量不会造成性能损失,因为同时运行更多虚拟机也不会造成明显的性能损失。您的限制是 CPU 芯片的性能,因此您无法同时在 3 个虚拟机上渲染视频而不降低每个虚拟机的速度,因为它们必须共享相同的物理 CPU。
如果您在存在所有逻辑核心的虚拟机上渲染视频,您的主机系统可能会变得无响应,但如果您确实在主机上运行该渲染应用程序,您将遇到几乎相同的问题。至少在 VM 中,您可以选择,可以通过将最大 CPU 负载限制为 80%-90% 或因此减少核心数量来解决这个问题。
答案3
我最好的两分钱是永远不要使用所有核心/线程,只让一两个用于主机。
因此,就您的情况而言,请为来宾提供六个核心,而不是第八个核心(因为主机上只有 8 个线程)。
如果主机上的可用线程数(不要与内核混淆)为:
- 如果 < 2,最好根本不使用虚拟机
- 如果是 2,则在单核模式下使用虚拟机,或者冒险使用双核来宾
- 如果 > 2,最好使用公式
对于两个以上的线程,我倾向于使用这个公式:
- N = 主机线程数
- M = 我想要运行的并发虚拟机数量(假设均衡,每个来宾的来宾核心数量相同)
- 如果主机只有 4 个或更少线程,则公式=(N-1)/M
- 如果主机有超过 4 个线程,则公式=(N-2)/M
我的经验告诉我,不超过这样的公式限制会更顺利,风险也更小。
警告:运行 guest 虚拟机时不允许更改 guest 核心数量,但允许将 CPU 使用率从 100% 降低到 75% 甚至 50%,不少于 guest 虚拟机可能会失败。
因此,有时我倾向于在 8 线程主机上为两个来宾提供 6 个 6 核(公式中的数量就好像只有一个来宾而不是两个来宾),但将它们限制为 CPU 速度的 50%(因此两个来宾都可以使用 1 /2 CPU 时间),但只有当我知道客人将运行并行比率大于 1 的应用程序时,例如图像比较/联合等。