我最近购买了一个i5-9600K。它应该运行 6 个核心和 6 个线程(超线程),当我查看/proc/cpuinfo
标志ht
是否打开时,并检查类似仅显示 6 个核心的工具htop
,如下图所示。
我使用过其他 Intel 和 AMD 处理器,通常当产品显示6 cores/6 threads
总量为时12
,但在本例中我只看到6
。
我错了还是可能有什么问题?
谢谢你!
答案1
如果您向下滚动你的CPU的方舟页面,你会看到它说
英特尔® 超线程技术 ‡ 否
您的CPU有六个核心,但不支持超线程,因此您的htop
显示是正确的。
Ark上的CPU规格显示的是完整的线程数,不涉及加法或乘法;参见例如至强 E3-1245v3对于支持超线程的 CPU(四个核心,每个核心两个线程,总共八个线程)。
底层 CPUID 标志的名称ht
有些误导:英特尔的手册(第 3A 卷,第 8.6 节),它被描述为“设置后表明物理封装能够支持英特尔超线程技术和/或多核”。因此,它的存在表明 CPU 支持超线程(即使它们被禁用),或在同一包中包含多个内核,或两者兼而有之。要确定真正存在的内容,您需要使用固件提供的信息枚举系统中的 CPU,并使用给出的信息来确定是否有多个逻辑核心、有多少个物理核心、有多少个插槽等根据 CPU 的不同,htop
(和其他工具)中显示的“CPU”可以是一个线程(在超线程系统上)、一个物理核心(在非超线程系统上),甚至是一个完整的包(。在非超线程、单核系统上)。
Linux 内核会为您完成所有这些检测,您可以使用例如 来查看结果lscpu
。
至少您的 CPU 不会受到任何与超线程相关的漏洞的影响!
答案2
在这种情况下,“线程”是“逻辑核心”的同义词,即全部的逻辑核心的数量,无论有多少物理核心实现它们。不是额外的线程。
您的 CPU 有 6 个逻辑核心,因此在其上启动 Linux 会“看到” 6 个 CPU。
你的CPU有6个物理核心,所以每个逻辑核心都有一个完整的物理核心,而不是有一对逻辑核心与Intel的共享一个物理核心表面贴装技术,他们称之为超线程。
我使用过其他 Intel 和 AMD 处理器,通常当产品说 6 核/6 线程时,总数是 12
[需要引用]。诸如 2c4t(2 个物理核心,4 个逻辑核心)之类的术语多年来一直是所有架构(而不仅仅是 x86)的标准。
我从未见过任何被描述为 N 个“真实”核心 + N 个“额外”线程的东西,因为这根本不是它的工作原理。两个逻辑核心都是“对称”的,不需要专门启动一个。它们各自充当完整的 CPU。 (当一个处于空闲深度睡眠时,另一个可以进入单线程模式并获取所有执行资源。当两者都睡眠时,物理核心实际上可以睡眠)
有趣的事实:操作系统对超线程的支持让操作系统可以通过读取 CPUID 数据和/或 APIC / LAPIC 中断控制器内容来判断哪些逻辑核心共享物理核心。不知道超线程的操作系统仍然会启动并查看 CPU 支持的逻辑核心数量(在 BIOS 中启用了 HT),我认为一切都会正常工作,除了它可能会将 2 个任务安排到与其他核心竞争的核心上互相争夺执行资源,同时让其他物理核心空闲。
某些 CPU 具有超过 2 路 SMT。例如,Xeon Phi 具有 4 路 SMT(每个物理核心 4 个逻辑核心),作为隐藏内存和 ALU 延迟的一种方式,并在无需大量乱序执行资源的情况下获得良好的总吞吐量。
IBM POWER 在大型物理核心上使用 8 路 SMT。
答案3
如果你看看其他处理器,例如i7-10710u来自 Intel 的信息显示为 6 个核心和 12 个线程,因此看来您的 cpu 每个核心只有 1 个线程,而不是您期望的 2 个线程。