lscpu 命令详解
更新时间:2026-09-17。「一个命令一个文档」系列,属于硬件与内核族。做绑核、配 NUMA、判断超线程、压测前先摸清 CPU 拓扑,lscpu 是最直接的只读总览。
数据来自 sysfs(/sys/devices/system/cpu)与 /proc/cpuinfo,安全无副作用。
一、常用法
bash
lscpu # 汇总信息
lscpu -e # 扩展表:每个逻辑 CPU 一行(CPU/CORE/SOCKET/NODE/ONLINE)
lscpu -e=CPU,CORE,SOCKET,NODE,CACHE # 只看指定列,定位超线程兄弟核/NUMA
lscpu -C # 只看缓存层级
lscpu -B # 兼容旧格式
lscpu | grep -Ei 'model name|^CPU\(s\)|Thread|Core|Socket|NUMA|MHz|Virtualiz'二、关键字段怎么读
| 字段 | 含义 / 排障用途 |
|---|---|
| Architecture | x86_64/aarch64,交叉编译/选包先看 |
| CPU(s) | 逻辑处理器总数(含超线程) |
| On-line CPU(s) list | 当前在线核(配合 chcpu) |
| Thread(s) per core | >1 即开了 SMT/超线程 |
| Core(s) per socket | 每颗物理核数 |
| Socket(s) | 物理 CPU 颗数 |
| NUMA node(s) / nodeX CPU(s) | NUMA 节点数与每节点包含的逻辑核(绑核/本地内存关键) |
| Model name / CPU MHz / BogoMIPS | 型号与频率(MHz 可能是当前/标称,别当恒定睿频) |
| L1d/L1i/L2/L3 cache | 缓存容量/共享关系 |
| Flags | 支持的指令集(avx2/avx-512/sse4_2/bmi2…,跑优化程序前核对) |
| Virtualization / Hypervisor | 是否虚拟机及类型 |
物理核数 = Socket × Core per socket;逻辑核数 = 物理核 × Thread per core。压测、算并行度时要明确你按的是物理核还是逻辑核,超线程兄弟核共享执行资源,不等于两颗独立核。
三、和绑核/NUMA 的配合
bash
lscpu -e=CPU,CORE,SOCKET,NODE # 找同一物理核的两个兄弟线程、某核属哪个 NUMA
numactl --cpunodebind=0 --membind=0 ./app # 核与内存在同一 NUMA node(见 numactl)
taskset -c 0-7 ./worker # 用逻辑 CPU 编号(即 lscpu 的 CPU 列)- 想让独占的计算线程避开超线程竞争:用
-e找出兄弟核,只取每核一个线程。 - 高性能网卡/RSS 队列、DPDK 轮询核的选择都以这里的 CPU 编号和 NUMA 归属为准(见 RSS)。
- 容器里 lscpu 显示的是宿主可见拓扑,但实际可用核受 cgroup cpuset/quota 限制,需结合
nproc(受 cgroup 影响)判断配额。
四、注意
- 云主机的 Model name 常是透传/伪装值,MHz/睿频未必真实,基准频率以厂商规格为准。
- Flags 决定能否运行含 AVX 等指令的二进制;
Illegal instruction先对照目标机 Flags。 - ARM 平台无传统 SMT/NUMA 形态时相关字段可能缺省。
相关命令
绑核用 taskset,NUMA 用 numactl/numastat,可用核数用 nproc,在线上下线核用 chcpu,PCI 设备 NUMA 归属用 lspci。
总结
lscpu 是读 sysfs/cpuinfo 的 CPU 拓扑只读总览:重点看 Socket×Core×Thread 三级数量(区分物理核与超线程)、NUMA nodeX CPU(s)(绑核与本地内存依据)、缓存层级与 Flags(指令集);lscpu -e=CPU,CORE,SOCKET,NODE 用逻辑 CPU 编号定位兄弟核与 NUMA 节点,是 taskset/numactl 绑核前的地图;容器中拓扑是宿主视角,实际配额还要看 cgroup 与 nproc。