首先需要明确:在 Linux 系统的 /proc/cpuinfo 文件中,processor 字段并非随意定义,它实际上是区分系统中每个逻辑处理单元的唯一标识符。编号从 0 开始依次递增,0、1、2……直至覆盖系统中所有的逻辑 CPU 资源。

1. 逻辑处理核心的唯一标识
processor 编号相当于每个逻辑处理器的“身份凭证”。无论是物理核心,还是通过超线程技术虚拟产生的逻辑核心,每个逻辑 CPU 都会被分配一个独一无二的编号。简单举例:单核 CPU 仅有一个逻辑核心,那么 processor 编号就是 0;双核 CPU 则包含两个逻辑核心,编号分别为 0 和 1。
2. 与物理/逻辑 CPU 的对应关系
- 单核无超线程:此时
processor的编号数量直接等于物理 CPU 的核心数。例如一颗单核单线程的 CPU,自然只有processor 0这一个编号。 - 多核无超线程:情况类似。比如四核 CPU,
processor编号为 0 到 3,每个编号对应一个物理核心。 - 多核有超线程:这是最值得深入分析的场景。
processor的总数等于物理 CPU 个数 × 每颗物理 CPU 的核心数 × 2。举例来说,假设有 2 颗物理 CPU,每颗 4 核并支持超线程,那么processor编号范围就是 0 到 15,共计 16 个逻辑核心。换言之,每个物理核心在此被分割为两个逻辑核心。
3. 结合其他字段解读硬件配置
要完整理解硬件拓扑,仅看 processor 远不够,需将其与 physical id(物理 CPU 封装编号)以及 core id(物理核心编号)联合分析:
- 凡是
physical id相同的processor,均归属于同一颗物理 CPU。 - 若两个
processor不仅physical id相同,连core id也一样,则说明它们来自同一个物理核心——超线程技术将该核心拆分为多个逻辑核心,因此它们的core id一致,但processor编号不同。
举例说明:若在 /proc/cpuinfo 中观察到 physical id 包含 0 和 1(表示 2 颗物理 CPU),core id 包含 0、1、2、3(每颗 4 核),且系统支持超线程,那么 processor 编号将为 0 到 15(2×4×2)。此时,processor 0 和 processor 8 实际上同属于第一颗物理 CPU 的第 0 个核心——只是超线程将同一核心划分成了两个逻辑核心。
