在 Linux 系统中,/proc/cpuinfo 是内核向用户空间暴露的 CPU 硬件信息接口,解析它通常用于:
下面从 结构说明 → 常见字段 → 解析方法 → 实战示例 逐步说明。
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 数| 字段 | 含义 |
|---|---|
| processor | 逻辑 CPU 编号(从 0 开始) |
| vendor_id | CPU 厂商(GenuineIntel / AuthenticAMD) |
| cpu family / model | CPU 微架构标识 |
| model name | 可读 CPU 型号 |
| 字段 | 含义 |
|---|---|
| physical id | 物理 CPU 编号 |
| core id | 物理核编号(同一 physical id 内唯一) |
| cpu cores | 该物理 CPU 的 物理核心数 |
| siblings | 该物理 CPU 的 线程总数 |
判断公式:
siblings > cpu coressiblings / cpu coresflags : fpu vme de pse tsc msr pae mce cx8 ...
常见重要 flag:
lm → 64 位ht → 支持超线程vmx / svm → 虚拟化avx2 / avx512 → 向量指令nproc
# 或
grep -c "^processor" /proc/cpuinfo
grep "physical id" /proc/cpuinfo | sort -u | wc -l
grep "cpu cores" /proc/cpuinfo | head -1
echo $(( $(grep siblings /proc/cpuinfo | head -1 | awk '{print $3}') /
$(grep "cpu cores" /proc/cpuinfo | head -1 | awk '{print $4}') ))
grep "model name" /proc/cpuinfo | uniq
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"])
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);
/proc/cpuinfo 不包含 NUMA 信息,推荐配合:
lscpu
lscpu --extended
numactl --hardware
❗ 不同架构字段不同:
❗ 容器环境:
/proc/cpuinfo 可能是 宿主机信息cgroup / nproc
/proc/cpuinfo是按“逻辑 CPU”组织的文本表,解析关键是理解physical id / core id / cpu cores / siblings的关系。
如果你有具体需求(比如:
可以告诉我,我可以直接给你 脚本或代码。