通过 CPUInfo 了解 Linux 系统的实用指南
一 核心概念与快速认知
- 在 Linux 中,CPU 的详细信息来自内核虚拟文件 /proc/cpuinfo;每条 processor 记录对应一个逻辑处理器。结合 physical id、core id、cpu cores、siblings 等字段,可判断物理 CPU 数量、每颗 CPU 的物理核心数、是否启用超线程以及逻辑处理器总数。另可用 lscpu 获取结构化的 CPU 架构与拓扑信息,便于快速核对。必要时再配合 top/htop、mpstat 观察运行时负载与瓶颈。
二 关键字段速查
| 字段 |
含义 |
典型用途 |
| processor |
逻辑处理器编号 |
统计逻辑 CPU 数量 |
| physical id |
物理 CPU 插槽 ID |
统计物理 CPU 数量 |
| core id |
物理核心 ID(在同一物理 CPU 内) |
统计每颗 CPU 的物理核心数 |
| cpu cores |
每颗物理 CPU 的物理核心数 |
与 siblings 对比判断是否启用超线程 |
| siblings |
同一物理 CPU 上的逻辑处理器数 |
与 cpu cores 对比判断是否启用超线程 |
| model name |
CPU 型号与标称频率 |
识别处理器代次与能力 |
| cpu MHz |
当前运行主频(动态) |
观察调频/降频状态 |
| cache size |
缓存大小 |
粗略评估数据命中率潜力 |
| flags |
指令集与特性(如 sse、avx、vmx/svm、lm) |
判断应用/编译优化与 64 位支持 |
| address sizes |
物理/虚拟地址位数 |
了解寻址能力 |
| 说明:/proc/cpuinfo 中每个逻辑处理器都会输出一段信息;lscpu 则以表格汇总 Architecture、CPU(s)、Thread(s) per core、Core(s) per socket、Socket(s)、NUMA node(s)、L1d/L1i/L2/L3 等,便于一眼看清拓扑。 |
|
|
三 常用命令与一键计算
- 查看原始明细
- 统计与计算
- 物理 CPU 数量:cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l
- 逻辑 CPU 数量:cat /proc/cpuinfo | grep “processor” | sort -u | wc -l
- 每颗物理 CPU 的物理核心数:cat /proc/cpuinfo | grep “cpu cores” | sort | uniq
- CPU 型号:cat /proc/cpuinfo | grep “model name” | cut -f2 -d: | uniq -c
- 当前主频:cat /proc/cpuinfo | grep “cpu MHz” | uniq
- 是否支持 64 位:grep -q ‘lm’ /proc/cpuinfo && echo “支持 64 位” || echo “不支持 64 位”
- 判断是否启用超线程(在同一颗物理 CPU 上对比):
- cat /proc/cpuinfo | egrep “cpu cores|siblings” | sort | uniq
- 若 siblings 是 cpu cores 的 2 倍,通常表示启用超线程;相等则未启用
- 结构化查看
- lscpu(关注:Architecture、CPU(s)、Thread(s) per core、Core(s) per socket、Socket(s)、NUMA node(s)、L1d/L1i/L2/L3、CPU MHz/CPU max MHz/CPU min MHz)
- 快速核对脚本
- echo “物理CPU: $(grep -c ‘^physical id’ /proc/cpuinfo | sort -u)”;
echo “逻辑CPU: $(grep -c ‘^processor’ /proc/cpuinfo)”;
echo “型号: $(grep -m1 ‘model name’ /proc/cpuinfo | cut -d: -f2-)”;
echo “64位: $(grep -q ‘lm’ /proc/cpuinfo && echo 是 || echo 否)”
以上命令覆盖了日常巡检所需的关键信息,且便于在脚本中自动化采集。
四 读懂结果与常见判断
- 拓扑计算
- 逻辑 CPU 总数 = Socket(s) × Core(s) per socket × Thread(s) per core(等价于 lscpu 的 CPU(s))
- 每颗物理 CPU 的物理核心数 = Core(s) per socket
- 是否启用超线程 = Thread(s) per core == 2(或 siblings ≈ 2 × cpu cores)
- 示例
- lscpu 显示:Socket(s)=2,Core(s) per socket=8,Thread(s) per core=2
- 则:物理 CPU=2,每颗物理 CPU 核心=8,逻辑 CPU=2×8×2=32,且启用超线程
- 虚拟化与云环境提示
- 在虚拟机/云主机中,/proc/cpuinfo 与 lscpu 反映的是被分配的 vCPU 拓扑;可能看到 Hypervisor vendor(如 KVM)等字段。做容量与性能评估时需结合宿主机与虚拟化策略理解这些数值。
五 进阶 从 CPUInfo 到性能与优化
- 运行时频率与调频
- 观察 cpu MHz 的动态变化,配合 lscpu 的 CPU max MHz/CPU min MHz 了解调频范围;必要时用 cpupower 查看/调整策略(如 performance/powersave)。
- 负载与瓶颈定位
- 用 top/htop 快速看占用最高的进程;用 mpstat -P ALL 检查各逻辑 CPU 利用率是否均衡,识别单核热点。
- 亲和性与调度优化
- 使用 taskset/numactl 做 CPU 亲和性绑定与 NUMA 亲和,减少跨核/跨 NUMA 迁移开销,提升缓存命中与延迟表现。
- 指令集与编译优化
- 通过 flags 确认是否支持 SSE/AVX/AVX2/AVX-512 等特性,据此选择编译器选项(如 -mavx2)与优化路径,充分发挥硬件能力。