系统 1:笔记本

系统 1:笔记本

系统 1:笔记本

检测安装的CPU:

$ cat /proc/cpuinfo | grep "model name" | head -1
model name  : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz

数据表上说

  • 核心数 2
  • 线程数 4

检测核心和线程:

$ sudo dmidecode -t processor | grep -E '(Core Count|Thread Count)'
Core Count: 2
Thread Count: 4

结论:核心数和线程数适合带有数据表。

系统 2:台式电脑

检测安装的CPU:

$ cat /proc/cpuinfo | grep "model name" | head -1
model name  : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz

数据表上说

  • 核心数 4
  • 线程数 8

检测核心和线程:

$ sudo dmidecode -t processor | grep -E '(Core Count|Thread Count)'
Core Count: 4
Thread Count: 2

结论:核心数和线程数才不是与数据表相符。

问题

  • 如何阅读英特尔数据表和输出dmidecode
  • 我有多少个核心?
  • 每个核心有多少个线程?
  • 整个系统有多少个线程?

[编辑] 更新 1

桌上型电脑

$ lscpu | grep -i -E  "^CPU\(s\):|core|socket"
CPU(s):                8
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1

从下往上阅读:

  • 我有 1 个带有 4 个 cor 的套接字,每个 cor 有 2 个线程 => 总共有 8 个线程(CPU)

结论:核心数和线程数适合带有数据表。

笔记本

$lscpu | grep -i -E  "^CPU\(s\):|core|socket"
CPU(s):                4
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1

从下往上阅读:

  • 我有 1 个带有 2 个 cor 的套接字,每个 cor 有 2 个线程 => 总共 4 个线程(CPU)

结论:核心数和线程数适合带有数据表。

[编辑] 更新 2

$ sudo dmidecode -t processor
# dmidecode 2.12
SMBIOS 2.7 present.

Handle 0x0041, DMI type 4, 42 bytes
Processor Information
    Socket Designation: SOCKET 0
    Type: Central Processor
    Family: Core i7
    Manufacturer: Intel
    ID: C3 06 03 00 FF FB EB BF
    Signature: Type 0, Family 6, Model 60, Stepping 3
    Flags:
        FPU (Floating-point unit on-chip)
        VME (Virtual mode extension)
        DE (Debugging extension)
        PSE (Page size extension)
        TSC (Time stamp counter)
        MSR (Model specific registers)
        PAE (Physical address extension)
        MCE (Machine check exception)
        CX8 (CMPXCHG8 instruction supported)
        APIC (On-chip APIC hardware supported)
        SEP (Fast system call)
        MTRR (Memory type range registers)
        PGE (Page global enable)
        MCA (Machine check architecture)
        CMOV (Conditional move instruction supported)
        PAT (Page attribute table)
        PSE-36 (36-bit page size extension)
        CLFSH (CLFLUSH instruction supported)
        DS (Debug store)
        ACPI (ACPI supported)
        MMX (MMX technology supported)
        FXSR (FXSAVE and FXSTOR instructions supported)
        SSE (Streaming SIMD extensions)
        SSE2 (Streaming SIMD extensions 2)
        SS (Self-snoop)
        HTT (Multi-threading)
        TM (Thermal monitor supported)
        PBE (Pending break enabled)
    Version: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
    Voltage: 1.1 V
    External Clock: 100 MHz
    Max Speed: 7000 MHz
    Current Speed: 3700 MHz
    Status: Populated, Enabled
    Upgrade: Other
    L1 Cache Handle: 0x0004
    L2 Cache Handle: 0x0005
    L3 Cache Handle: 0x0006
    Serial Number: Not Specified
    Asset Tag: Fill By OEM
    Part Number: Fill By OEM
    Core Count: 4
    Core Enabled: 1
    Thread Count: 2
    Characteristics:
        64-bit capable

答案1

  • 请务必参考数据表
  • 我有相同的 CPU(K 版本,有时我会在空闲时间对 CPU 进行超频),并且有 4 个内核和 8 个线程,100%保证。
  • 通常每个核心有2个线程。
  • 我今天之前不知道 dmidecode :/

这是我在您的问题下作为评论写给您的。我还与您分享了一个链接,我很高兴您按照该页面中的说明解决了问题。

这是链接: http://fibrevillage.com/sysadmin/155-how-to-tell-if-cpu-hyperthreading-enabled-on-linux

我读过

注意:在旧机器上,dmidecode 可能不会提供 CPU 详细信息,例如核心数、线程数等。

但是 4770 并不是那么老,它仍然是一款出色的 CPU。

无论如何,还有其他解决方案,我很高兴其中一个对您有用!

具体来说: lscpu | grep -i -E "^CPU\(s\):|core|socket"

当然,我不会为此承担任何责任!我认为,如果你相信自己解决了问题,那么写下答案并关闭它就更好了!

答案2

首先,启用 HTT 意味着每个核心有两个线程。

现在,关于dmidecode输出,有些事情发生,因为它列出了 4 个核心、2 个线程输出,正如您最初引用的那样。

然而,你的全部dmidecode输出暗示了可以合理。

Core Count: 4
Core Enabled: 1
Thread Count: 2

现在,为什么说只启用了 1 个核心?我看到两个主要选项:

  • 仅启用了一个核心(最明显的原因)
    也许可以验证所有核心是否实际启用(UEFI/BIOS 设置),但其他工具的结果表明核心已启用。
  • 你的系统的 DMI 数据有问题

正如该工具的名称所示,输出dmidecode基于读取系统 DMI 数据并对其进行解码。因此,错误数据很可能不是由该dmidecode工具本身引起的,而是由系统的 DMI / SMBIOS 表包含不正确的值引起的。

至于数据表,可以相信芯片本身的功能,但它可能回答与您的环境中可用的内容略有不同的问题(因为存在可以启用/禁用某些功能的配置选项)。

相关内容