CPU 与调度60 条

lscpu 查看 CPU 拓扑

输出 CPU 架构、插槽/核/超线程数、频率、缓存与 NUMA 信息;核对物理核与逻辑核的基础命令。

lscpu 是什么

lscpu 是 util-linux 提供的 CPU 拓扑查看工具,数据来自 /proc/cpuinfo 与 /sys/devices/system/cpu 下的信息。它把插槽数、每插槽核心数、每核心线程数、NUMA 节点、各级缓存与虚拟化标识整理成一份可读的摘要,是核对物理核与逻辑核的基础命令。排查性能问题时先看它,才能判断「CPU 不够」到底是核心数不足、超线程被当成物理核用,还是跨 NUMA 访存造成的。

基本信息

适用平台Linux,util-linux 软件包提供
数据来源/proc/cpuinfo 与 /sys/devices/system/cpu 下的 sysfs 节点
关键字段Socket(s)、Core(s) per socket、Thread(s) per core、CPU(s)、NUMA node(s)
扩展视图lscpu -e 每个逻辑核一行,含所属插槽、核心与 NUMA 节点
脚本化输出lscpu -p 逗号分隔,lscpu -J 输出 JSON
注意点容器内通常显示宿主拓扑,与容器可用 CPU 无关

典型使用场景

  • 规划并发度:进程数、线程池、压测并发都建立在真实可用核数之上
  • 判断是否启用超线程:线程数是核心数的两倍时,计算密集任务不宜按逻辑核数规划
  • NUMA 相关排查:内存带宽与访存延迟异常时先确认节点分布与绑定情况
  • 实例规格核对:云主机声称的核数与 lscpu 输出不一致时先确认是哪一层的差异
  • 性能基线记录:装机或交付时固化一份拓扑信息,便于后续对比

常用与关键字段

常用与关键字段
lscpu                                       # 完整拓扑摘要
lscpu | grep -E 'Socket|Core|Thread|NUMA|Model name'   # 只看关键行
lscpu -e | head                             # 每个逻辑核一行的扩展视图
lscpu -p | head                             # 逗号分隔输出,便于脚本解析
nproc                                       # 进程当前可用的处理单元数,与拓扑不同
cat /sys/fs/cgroup/cpu.max 2>/dev/null      # 容器配额下的可用算力限制

关键字段读法

字段含义判读要点
CPU(s)逻辑核总数含超线程,不等于物理核数
Thread(s) per core每核心线程数为 2 表示开启了超线程,计算密集任务要打折
Core(s) per socket每插槽物理核心数乘插槽数才是物理核总数
Socket(s)物理插槽数量双路机器的 NUMA 节点常与插槽对应
NUMA node(s)NUMA 节点数跨节点访存延迟明显,绑定策略要按节点规划
容器里 lscpu 显示的是宿主机的拓扑信息,和容器能用的 CPU 没有直接关系。容器实际可用的核数要看 cgroup 的 cpu.max 与 cpuset 配置,用 nproc 得到的结果更贴近进程真实可见的 CPU 数。
频率字段是当前值或基础频率的快照,负载变化时会浮动。要评估持续负载下的实际频率与降频情况,应使用 turbostat 或 cpupower 这类专门的观察工具。

易错点

  • 把 CPU(s) 当物理核数:开启超线程时逻辑核数是物理核的两倍,按逻辑核规划计算任务会高估算力
  • 在容器里用 lscpu 推断可用算力:显示的是宿主拓扑,需要看 cgroup 配额
  • 忽略 NUMA 分布:跨节点访存会带来额外延迟,内存密集型服务需要绑定规划
  • 只看一次频率快照判断性能:实际频率随负载波动,需要持续采样
  • 不记录交付基线:后续出现性能回归时缺少可对比的拓扑信息

数据来源与参考

  • man 1 lscpu(util-linux)
  • Linux 内核 Documentation/admin-guide/cputopology
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌