温馨提示×

linux cpuinfo如何解析

小樊
43
2026-10-14 01:03:24
栏目: 智能运维

在 Linux 系统中,/proc/cpuinfo 是内核向用户空间暴露的 CPU 硬件信息接口,解析它通常用于:

  • 获取 CPU 型号、核心数、线程数
  • 判断 NUMA / SMT(超线程)
  • 做性能调优、资源绑定、监控采集

下面从 结构说明 → 常见字段 → 解析方法 → 实战示例 逐步说明。


一、cpuinfo 基本结构

cat /proc/cpuinfo

每个 logical CPU 会以一段 processor : N 开始:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz
physical id     : 0
core id         : 0
cpu cores       : 20
siblings        : 40
...

⚠️ 注意:

  • processor 数量 = 逻辑 CPU 数
  • 一个物理 CPU 可能包含多个 core
  • 一个 core 可能包含多个 thread(超线程)

二、关键字段含义

1️⃣ 基础信息

字段 含义
processor 逻辑 CPU 编号(从 0 开始)
vendor_id CPU 厂商(GenuineIntel / AuthenticAMD)
cpu family / model CPU 微架构标识
model name 可读 CPU 型号

2️⃣ 物理 / 核心 / 线程

字段 含义
physical id 物理 CPU 编号
core id 物理核编号(同一 physical id 内唯一)
cpu cores 该物理 CPU 的 物理核心数
siblings 该物理 CPU 的 线程总数

判断公式:

  • 是否超线程:siblings > cpu cores
  • 每核线程数:siblings / cpu cores

3️⃣ 特性标志

flags : fpu vme de pse tsc msr pae mce cx8 ...

常见重要 flag:

  • lm → 64 位
  • ht → 支持超线程
  • vmx / svm → 虚拟化
  • avx2 / avx512 → 向量指令

三、如何解析(命令行)

1️⃣ 逻辑 CPU 数

nproc
# 或
grep -c "^processor" /proc/cpuinfo

2️⃣ 物理 CPU 数

grep "physical id" /proc/cpuinfo | sort -u | wc -l

3️⃣ 每颗 CPU 核心数

grep "cpu cores" /proc/cpuinfo | head -1

4️⃣ 是否开启超线程

echo $(( $(grep siblings /proc/cpuinfo | head -1 | awk '{print $3}') /
         $(grep "cpu cores" /proc/cpuinfo | head -1 | awk '{print $4}') ))

5️⃣ CPU 型号

grep "model name" /proc/cpuinfo | uniq

四、程序化解析(推荐方式)

✅ 用 Python 解析

import re

def parse_cpuinfo():
    cpus = []
    with open("/proc/cpuinfo") as f:
        info = {}
        for line in f:
            if not line.strip():
                cpus.append(info)
                info = {}
                continue
            k, _, v = line.partition(":")
            info[k.strip()] = v.strip()
    return cpus

cpus = parse_cpuinfo()
print("逻辑CPU数:", len(cpus))
print("CPU型号:", cpus[0]["model name"])

✅ 用 C 解析(性能场景)

FILE *fp = fopen("/proc/cpuinfo", "r");
char line[256];
while (fgets(line, sizeof(line), fp)) {
    if (strncmp(line, "processor", 9) == 0)
        logical_cpus++;
}
fclose(fp);

五、进阶:NUMA & lscpu

/proc/cpuinfo 不包含 NUMA 信息,推荐配合:

lscpu
lscpu --extended
numactl --hardware

六、注意事项(很重要)

❗ 不同架构字段不同:

  • x86:字段丰富
  • ARM:字段较少
  • 虚拟机:可能被限制

❗ 容器环境:

  • /proc/cpuinfo 可能是 宿主机信息
  • 应使用 cgroup / nproc

七、总结一句话

/proc/cpuinfo 是按“逻辑 CPU”组织的文本表,解析关键是理解 physical id / core id / cpu cores / siblings 的关系。

如果你有具体需求(比如:

  • 统计可用核数
  • 绑定 CPU
  • 性能分析
  • 容器 / K8s 场景)

可以告诉我,我可以直接给你 脚本或代码。

0 踩