我最近买了一台i5-9600K。它应该运行6个内核和6个线程(超线程),当我查看/proc/cpuinfo时,ht标志是打开的,检查像htop这样的工具只显示6个内核,如下图所示。
我使用了其他英特尔和AMD处理器,通常当产品上写着6 cores/6 threads时,总数量是12,但在这个例子中,我只看到了6。
我是错了还是有什么问题?
谢谢!

发布于 2019-12-02 16:17:38
如果你在你的CPU方舟页面上向下滚动,你会发现上面写着
英特尔超线程技术‡No .
您的CPU有六个核心,但它不支持超线程,所以您的htop显示是正确的。
Ark上的CPU规范显示了完整的线程计数,不涉及加法或乘法;例如,请参见Xeon E3-1245v3中具有超线程能力的CPU (四个核心,每个核心两个线程,总共八个线程)。
提供给底层CPUID标志的ht名称有点误导:在英特尔手册 (第3A卷,第8.6节)中,它被描述为“指示物理包何时能够支持英特尔超线程技术和/或多核”。因此,它的存在表明CPU支持超线程(即使它们被禁用),或者在同一个包中包含多个核心,或者两者兼而有之。要确定真正存在的是什么,您需要使用固件提供的信息枚举系统中的CPU,并使用所提供的信息来确定是否有多个逻辑核、有多少物理核、有多少套接字等等。根据CPU的不同,htop (和其他工具)中显示的“CPU”可以是线程(在超线程系统上)、物理核(在非超线程系统上),甚至是完整的包(在非超线程、单核系统上)。
Linux内核为您完成了所有这些检测,您可以使用例如lscpu看到结果。
至少您的CPU不受任何与超线程相关的漏洞的影响!
发布于 2019-12-03 07:06:45
在这种情况下,“线程”是“逻辑核”的同义词,即逻辑核的总量,而不管有多少物理核实现它们。不是多余的线。
您的CPU有6个逻辑核,因此在它上引导Linux可以“看到”6个CPU。
您的CPU有6个物理核,因此每个逻辑核本身都有一个完整的物理核,而不是有一对逻辑核与英特尔的SMT共享物理核,他们称之为超线程。
我使用过其他Intel和AMD处理器,通常当产品上显示6个内核/6个线程时,总数量为12。
需要引证。像2c4t这样的术语(2个物理核,4个逻辑核)多年来一直是所有体系结构的标准,而不仅仅是x86。
我从未见过任何被描述为“真正”内核+N“额外”线程的东西,因为这根本不是它的工作方式。这两个逻辑核都是“对称的”,这并不像一个必须特别启动。它们各自充当完整的CPU。(当一个人处于空闲的深度睡眠状态时,另一个人可以进入单线程模式并获得所有执行资源。当两人都睡着时,物理核心实际上可以睡觉)
有趣的事实:操作系统对超线程的支持让操作系统通过读取CPUID数据和/或APIC / LAPIC中断控制器之类的东西来告诉操作系统共享一个物理核心。一个不知道超线程的操作系统仍然会启动并查看CPU支持的多个逻辑核(BIOS中启用了HT),我认为一切都会正常工作,除了它可能会将2项任务调度到彼此竞争执行资源的核心上,而让其他物理内核空闲。
有些CPU有多个双向SMT.例如,Xeon有4路SMT (每个物理核有4个逻辑核)作为隐藏内存和ALU延迟的方法,并且在不需要大量无序执行资源的情况下获得很好的总吞吐量。
IBM在大型物理核上使用8路SMT。
发布于 2019-12-02 16:18:12
如果您查看其他处理器,例如英特尔的i7-10710u,这将显示为6个核心和12个线程,因此您的cpu似乎每个内核只有一个线程,而不是您所期望的2个线程。
https://unix.stackexchange.com/questions/555208
复制相似问题