#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org
以下是 CPU 中比较容易混淆的概念:
socket
可以理解为主板上的一个插座, 用来连接物理 CPU 芯片到主板上, 简单讲, 有多少个 socket 就有多少个物理 CPU.
core
core 的概念涉及到 多核心技术 是将多个一样的 CPU 放置于一个封装内(或直接将两个 CPU 做成一个芯片), 每个这样的 CPU 叫做一个 core, 每个 core 是一个的独立的 执行单元.
thread
thread 涉及到 超线程技术 , 简单的讲, 就是把两个逻辑内核模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算.
逻辑 CPU 数量
综上, CPU 的数量不能简单的通过物理 CPU 的数量(或者 socket 的数量) 来判断, 如果用了多核技术, 则需要计算全部 core 的数量, 如果用了超线程, 则需要加上 所有 CPU 线程. 所以每一个 CPU(包括 core 或者 thread) 都叫一个逻辑 CPU.
Linux 下的 CPU 计算
在 Linux 下, kernel 抛出了一个统计了 CPU 一般信息的文件 /proc/cpuinfo, 通过这个文件, 可以知道本机的 CPU 信息, 包括厂商, CPU 型号, CPU 缓存, 核心, 超线程等等信息.
下面以一台 intel 酷睿双核为例说明:
gentoo-company tmp # cat /proc/cpuinfo
processor : 0
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
processor : 1
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
我省略的不必要的输出, 对以上信息做一个解释
- processor
- 这个表示逻辑 CPU 的 ID
- physical id
- 物理 CPU(socket) 的 ID, 具有相同 physical id 的逻辑 CPU 在同一个 CPU 封装内.
- siblings
- 同一个 CPU 封装(socket)里的逻辑 CPU 数量, 这个数字表示在该物理 CPU 里面有多少个逻辑 CPU
- core id
- 核心 ID, 具有相同 core id 的逻辑 CPU 在同一个 core 里, 即是使用 了超线程的逻辑 CPU
- cpu cores
- CPU 核心数, 在该物理 CPU 内封装的 core 数目.
通过上面的说明, 该机器有一个物理 CPU(只有一个 physical id), 用了双核技术(cpu cores 为2), 没有使用超线程技术(没有相同的 core id)