我有一个带超线程的四核 i7 处理器(8 个逻辑内核),当我将虚拟机配置为使用 8 个处理器时,VirtualBox 给了我一个警告,说我只有四个内核(这是真的),这可能会导致性能问题。但是超线程是一个硬件特性,所以操作系统看到 8 个内核,它会向所有 8 个内核发送指令。 如果将其设置为 4 会导致 VM 使用 2 个内核(4 个线程)而不是 4 个并发线程(在所有 4 个内核上) )?我收到的警告是否考虑了我的机器具有超线程?
假设我们有两个 CPU,一个是带有 4 个内核的四核 3.2 Ghz,我们有一个带有 2 个内核的双核 3.2 Ghz,每个内核中有 2 个线程(超线程)。我作为程序员的假设是,4 核 4 线程的执行速度应该比 2 核 4 线程快,因为第二个 CPU 需要在线程之间切换以模拟 4 个内核,而第一个 CPU 不需要像每个内核那样执行这样的切换核心可以独立和单独执行。
我想确认我的假设是正确的,如果不是,请解释为什么一个比另一个好。
以下是维基百科上对超线程的解释:
对于物理上存在的每个处理器内核,操作系统寻址两个虚拟(逻辑)内核并在可能的情况下在它们之间共享工作负载。
我想知道为什么我们没有为每个物理核心提供 3 或 4 个逻辑核心的超线程?
我有一台配备 Intel i5 M430 2.27GHz 的笔记本电脑。CPU 有两个真正的内核,但它也有某种虚拟化,因此 Windows 将其视为 4 核。
在真正的双核 CPU 中,单线程程序将在 2.27GHz 的单核中运行。对?
我的问题是,在我的 4 核 CPU 中,相同的程序以 1.13 GHz 的速度运行?(2.27 / 2) 我的意思是,为了模拟 4 核 CPU,每个真实核心的频率被分成两部分?
我需要知道以最大速度运行 CPU 饥渴的程序。如果我运行该程序的两个实例,我会以两倍的速度完成数据处理,因为我有两个真正的内核。但是,如果我启动 4 个实例,我将完成 4 倍的处理速度,或者这个“2 个额外的虚拟内核”是否是英特尔的另一个引人注目的功能?
更新:
我使用CPU Overload来启动 2 和 3 个 CPU 密集型线程。在 Resource Monitor 中,“CPU-Total”图表分别显示只有 50% 和 75% 的利用率。
我有一个 Intel 混合 CPU (Alder Lake)。这意味着它有一定数量的 P 核心和一定数量的 E 核心。此外,P 核是超线程的。
任务管理器和其他性能和温度监控程序以数字形式报告所有这些 CPU 核心(或硬件线程,包括 HT),不区分类型。例如,在 8P+8E CPU 上,此类工具报告的“核心”总数为 24 个,编号为 0 到 23。
如何判断每个物理核心对应哪种类型?如果我注意到“CPU 5”的利用率为 100%,那么它是 P 核还是 E 核?如果是 P 核,那么与之配对的 HT 核是哪个编号?
我有一个带有 2 个物理内核的 i7,因为超线程 Windows 7 报告 4 个内核(至少在任务管理器中)。我的问题是,在 VMWare Player 中为 VM 分配内核时,它是从 4 个超线程内核池中获取还是从 2 个物理内核中获取?
奇怪的是,尽管主机上只有 2 个物理内核和 4 个带有超线程的内核,但它允许我最多选择 8 个内核。
因此,如果我说,这里 Mr.VM 使用 1 个核心,它会使用 4 个“核心”中的 1 个还是 2 个物理核心中的 1 个?在第一种情况下,我会给它 1/2 的内核,在第二种情况下,如果超线程内核包含在可用内核池中,我会给它 1/4 的内核。
编辑:这是 VMWare Player 文档所说的:
使用虚拟对称多处理
使用虚拟对称多处理 (SMP),您可以为至少具有两个逻辑处理器的任何主机上的虚拟机分配最多八个处理器。
以下都被认为具有两个或多个逻辑处理器:
注意:在超线程单处理器主机上,具有 Virtual SMP 的虚拟机的性能可能低于正常水平。使用 VMware Player,您可以同时启动和运行多个双处理器虚拟机。
我刚刚在 Heise Online 上阅读了一篇文章(看表格,其余的是德语),其中声称超线程会减慢单线程程序的速度,尽管它们不使用内核的第二个线程。也就是说,如果您在 BIOS 中禁用 HT,单线程应用程序的运行速度会稍快一些。
这是真的还是测量误差?有没有人有关于基准的来源,这些基准断言相同?
我在 Intel Xeon E3-1231v3 CPU(Haswell,4 个物理内核,8 个逻辑内核)上运行 Windows 10 (1607 )。
当我第一次在这台机器上安装 Windows 7 时,我可以观察到八个逻辑核心中有四个被停放,直到应用程序需要超过 4 个线程。可以使用 Windows 资源监视器检查内核是否已停放(示例)。据我了解,这是在物理内核之间保持线程平衡的一项重要技术,如Microsoft 网站上所述:“ Core Parking 算法和基础结构还用于平衡 Windows 7 客户端系统上的逻辑处理器之间的处理器性能包含英特尔超线程技术的处理器。 ”
但是升级到Windows 10后,我注意到没有核心停车位。所有逻辑核心始终处于活动状态,当您使用少于四个线程运行应用程序时,您可以看到调度程序如何在所有逻辑 CPU 核心之间平均分配它们。Microsoft 员工已确认在 Windows 10 中禁用了 Core Parking。
但我想知道为什么?这是什么原因?是否有替代品,如果是,它看起来如何?Microsoft 是否实施了新的调度程序策略,使核心停车位过时了?
附录:
下面是一个示例,说明 Windows 7 中引入的核心停车如何提高性能(与尚没有核心停车功能的 Vista 相比)。您可以看到,在 Vista 上,HT(超线程)会损害性能,而在 Windows 7 上则不会:
(来源)
我尝试启用此处提到的 Core Parking ,但我观察到 Core Parking 算法不再支持超线程。它停放了 4、5、6、7 核,而它应该停放了 1、3、5、7 核,以避免将线程分配给同一个物理核。Windows 以两个连续索引属于同一个物理内核的方式枚举内核。很奇怪。微软似乎从根本上搞砸了。而没有人注意到...
此外,我使用 4 个线程进行了一些 …
我的处理器有 4 个物理核心。每个核心最多 8 个虚拟核心。以下是否适用:
如果启用超线程,则需要 4x 2 = 8 个逻辑核心。这意味着 8 x 8 = 64 个最大虚拟核心
如果未启用超线程,则最大虚拟核心数为 4 x 8 = 32。 或者总是 4x8=32 个虚拟核心?
我的 CPU 有 2 个内核,所以我可以在/proc/cpuinfo.
但是,我想知道支持超线程(或类似技术)的/proc/cpuinfoCPU是否会为每个内核或每个线程(或称之为兄弟)提供 CPU 信息?
我只知道如果 CPU 支持 HT,Windows 任务管理器会给出每个线程的 CPU 使用情况统计。
hyper-threading ×10
cpu ×5
performance ×3
dual-core ×1
hyper-v ×1
linux ×1
multi-core ×1
quad-core ×1
virtualbox ×1
windows ×1
windows-10 ×1
x86 ×1