lscpu 是Linux系统中用于显示CPU架构信息的命令。它从/proc/cpuinfo和/sys/devices/system/cpu/等系统文件中收集信息,并以易读的格式显示CPU的详细规格。对于系统管理员、开发人员和性能调优人员来说,lscpu是了解系统硬件能力的重要工具。
lscpu [选项]
| 选项 | 说明 |
|---|---|
-a, --all |
显示所有CPU信息,包括在线和离线的CPU |
-b, --online |
只显示在线的CPU信息 |
-c, --offline |
只显示离线的CPU信息 |
-e, --extended [=列表] |
以扩展格式显示CPU信息,可指定显示的列 |
-p, --parse [=列表] |
以易于解析的格式输出,可指定显示的列 |
-s, --sysroot 目录 |
为收集数据指定一个系统根目录 |
-x, --hex |
以十六进制显示CPU掩码 |
-y, --physical |
显示物理ID信息 |
-J, --json |
以JSON格式输出 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
| 字段 | 说明 | 示例值 |
|---|---|---|
| Architecture | CPU架构类型 | x86_64, aarch64, armv7l |
| CPU op-mode(s) | CPU支持的操作模式 | 32-bit, 64-bit |
| Byte Order | 字节顺序 | Little Endian |
| CPU(s) | 逻辑CPU核心总数 | 8 |
| On-line CPU(s) list | 在线CPU列表 | 0-7 |
| Thread(s) per core | 每个物理核心的线程数(超线程) | 2 |
| Core(s) per socket | 每个插槽(CPU)的物理核心数 | 4 |
| Socket(s) | CPU插槽数(物理CPU数量) | 1 |
| NUMA node(s) | NUMA节点数 | 1 |
| Vendor ID | CPU制造商ID | GenuineIntel, AuthenticAMD |
| CPU family | CPU家族 | 6 (Intel), 23 (AMD Zen) |
| Model | CPU型号 | 158 (i7-8700K), 113 (Ryzen 7) |
| Model name | CPU型号名称 | Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz |
| Stepping | 步进版本(修订版本) | 10 |
| CPU MHz | CPU当前频率 | 3699.998 |
| CPU max MHz | CPU最大频率 | 4900.0000 |
| CPU min MHz | CPU最小频率 | 800.0000 |
| BogoMIPS | 粗略的MIPS值(用于校准延迟循环) | 7399.99 |
| Virtualization | 虚拟化技术支持 | VT-x, AMD-V |
| L1d cache | 一级数据缓存大小 | 32K |
| L1i cache | 一级指令缓存大小 | 32K |
| L2 cache | 二级缓存大小 | 256K |
| L3 cache | 三级缓存大小 | 12288K |
| NUMA node0 CPU(s) | NUMA节点0的CPU列表 | 0-7 |
| Flags | CPU支持的指令集和特性 | fpu vme de pse tsc msr pae mce cx8 apic ... |
显示CPU架构的基本信息:
# 显示CPU架构信息
lscpu
# 示例输出:
# Architecture: x86_64
# CPU op-mode(s): 32-bit, 64-bit
# Byte Order: Little Endian
# CPU(s): 8
# On-line CPU(s) list: 0-7
# Thread(s) per core: 2
# Core(s) per socket: 4
# Socket(s): 1
# NUMA node(s): 1
# Vendor ID: GenuineIntel
# CPU family: 6
# Model: 158
# Model name: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
# Stepping: 10
# CPU MHz: 3699.998
# CPU max MHz: 4900.0000
# CPU min MHz: 800.0000
# BogoMIPS: 7399.99
# Virtualization: VT-x
# L1d cache: 32K
# L1i cache: 32K
# L2 cache: 256K
# L3 cache: 12288K
# NUMA node0 CPU(s): 0-7
以扩展格式显示详细的CPU信息:
# 以扩展表格格式显示所有信息
lscpu -e
# 指定显示的列
lscpu -e=CPU,NODE,SOCKET,CORE,L1d,L1i,L2,L3
# 示例输出:
# CPU NODE SOCKET CORE L1d:L1i:L2:L3
# 0 0 0 0 0:0:0:0
# 1 0 0 0 0:0:0:0
# 2 0 0 1 1:1:1:0
# 3 0 0 1 1:1:1:0
# 4 0 0 2 2:2:2:0
# 5 0 0 2 2:2:2:0
# 6 0 0 3 3:3:3:0
# 7 0 0 3 3:3:3:0
以易于脚本解析的格式输出:
# 以易于解析的格式输出
lscpu -p
# 指定需要显示的列
lscpu -p=cpu,core,socket,node
# 示例输出:
# # The following is the parsable format, which can be fed to other
# # programs. Each different item in every column has an unique ID
# # starting from zero.
# # CPU,Core,Socket,Node
# 0,0,0,0
# 1,0,0,0
# 2,1,0,0
# 3,1,0,0
# 4,2,0,0
# 5,2,0,0
# 6,3,0,0
# 7,3,0,0
显示所有CPU信息,包括离线的CPU:
# 显示所有CPU信息(包括在线和离线)
lscpu -a
# 只显示在线CPU信息
lscpu -b
# 只显示离线CPU信息(通常为空,除非有CPU被禁用)
lscpu -c
以JSON格式输出CPU信息,便于编程处理:
# 以JSON格式输出
lscpu -J
# 示例输出(简化):
# {
# "lscpu": [
# {
# "field": "Architecture",
# "data": "x86_64"
# },
# {
# "field": "CPU op-mode(s)",
# "data": "32-bit, 64-bit"
# },
# ...
# ]
# }
# 结合jq工具处理JSON输出
lscpu -J | jq '.lscpu[] | select(.field == "Model name") | .data'
显示CPU的物理布局信息:
# 显示物理ID信息
lscpu -y
# 显示十六进制格式的CPU掩码
lscpu -x
# 查看CPU拓扑结构
lscpu --topology
# 查看CPU缓存信息
lscpu --cache
# 查看所有扩展信息
lscpu --extended
在脚本中提取特定的CPU信息:
#!/bin/bash
# 获取CPU核心总数
CPU_COUNT=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
echo "CPU核心总数: $CPU_COUNT"
# 获取物理核心数
PHYSICAL_CORES=$(lscpu | grep "Core(s) per socket" | awk '{print $4}')
SOCKETS=$(lscpu | grep "Socket(s)" | awk '{print $2}')
PHYSICAL_CORE_COUNT=$((PHYSICAL_CORES * SOCKETS))
echo "物理核心数: $PHYSICAL_CORE_COUNT"
# 获取线程数
THREADS_PER_CORE=$(lscpu | grep "Thread(s) per core" | awk '{print $4}')
echo "每个物理核心的线程数: $THREADS_PER_CORE"
# 检查是否启用超线程
if [ "$THREADS_PER_CORE" -gt 1 ]; then
echo "超线程已启用"
else
echo "超线程未启用"
fi
# 获取CPU型号
CPU_MODEL=$(lscpu | grep "Model name" | cut -d: -f2 | sed 's/^[ \t]*//')
echo "CPU型号: $CPU_MODEL"
# 获取CPU最大频率
CPU_MAX_MHZ=$(lscpu | grep "CPU max MHz" | awk '{print $4}')
echo "CPU最大频率: ${CPU_MAX_MHZ}MHz"
# 获取支持的指令集
CPU_FLAGS=$(lscpu | grep "Flags" | cut -d: -f2 | sed 's/^[ \t]*//')
echo "支持的指令集数量: $(echo $CPU_FLAGS | wc -w)"
# 检查是否支持虚拟化
if echo "$CPU_FLAGS" | grep -q "vmx\|svm"; then
echo "CPU支持硬件虚拟化"
else
echo "CPU不支持硬件虚拟化"
fi
# 检查是否支持AVX指令集
if echo "$CPU_FLAGS" | grep -q "avx"; then
echo "CPU支持AVX指令集"
fi
理解lscpu输出的拓扑结构:
# 对于典型的超线程CPU(如8核16线程):
# CPU(s): 16 ← 逻辑CPU总数(线程数)
# Thread(s) per core: 2 ← 每个物理核心有2个线程
# Core(s) per socket: 8 ← 每个插槽有8个物理核心
# Socket(s): 1 ← 有1个物理CPU插槽
#
# 计算公式:
# 逻辑CPU数 = Socket(s) × Core(s) per socket × Thread(s) per core
# = 1 × 8 × 2 = 16
# 对于双路服务器(2个CPU,每个14核28线程):
# CPU(s): 56 ← 逻辑CPU总数
# Thread(s) per core: 2 ← 超线程
# Core(s) per socket: 14 ← 每个CPU有14个物理核心
# Socket(s): 2 ← 2个物理CPU
#
# 逻辑CPU数 = 2 × 14 × 2 = 56
对于NUMA(非统一内存访问)系统:
# 查看NUMA信息
numactl --hardware
# 查看CPU与NUMA节点的映射
lscpu | grep -A1 "NUMA node"
# 对于多NUMA节点系统,输出可能如下:
# NUMA node(s): 2
# NUMA node0 CPU(s): 0-7,16-23
# NUMA node1 CPU(s): 8-15,24-31
# 这意味着:
# - 系统有2个NUMA节点
# - NUMA节点0包含CPU 0-7和16-23(共16个逻辑CPU)
# - NUMA节点1包含CPU 8-15和24-31(共16个逻辑CPU)
理解CPU缓存层次:
# 典型的现代CPU缓存层次:
# L1d cache: 32K ← 一级数据缓存(每个核心独立)
# L1i cache: 32K ← 一级指令缓存(每个核心独立)
# L2 cache: 256K ← 二级缓存(通常每个核心独立或共享)
# L3 cache: 12288K ← 三级缓存(通常所有核心共享)
# 查看详细的缓存信息
cat /sys/devices/system/cpu/cpu0/cache/index*/size
cat /sys/devices/system/cpu/cpu0/cache/index*/level
cat /sys/devices/system/cpu/cpu0/cache/index*/type
# 缓存速度:L1 > L2 > L3 > 内存
# 缓存容量:L1 < L2 < L3 < 内存
常见的CPU指令集标志及其含义:
| 标志 | 全称 | 说明 |
|---|---|---|
fpu |
Floating Point Unit | 浮点运算单元 |
vme |
Virtual Mode Extensions | 虚拟模式扩展 |
avx |
Advanced Vector Extensions | 高级向量扩展(256位SIMD) |
avx2 |
AVX2 Extensions | AVX2扩展(整数256位SIMD) |
avx512f |
AVX-512 Foundation | AVX-512基础指令集 |
sse |
Streaming SIMD Extensions | 流式SIMD扩展 |
sse2 |
SSE2 | 第二代SSE指令集 |
ssse3 |
Supplemental SSE3 | 补充SSE3指令集 |
vmx |
Virtual Machine Extensions | Intel虚拟化技术(VT-x) |
svm |
Secure Virtual Machine | AMD虚拟化技术(AMD-V) |
aes |
AES-NI | AES加密指令集 |
tsc |
Time Stamp Counter | 时间戳计数器 |
rdrand |
Random Number Generator | 硬件随机数生成器 |
rdseed |
RDSEED Instruction | 随机种子指令 |
smep |
Supervisor Mode Execution Protection | 内核模式执行保护 |
smap |
Supervisor Mode Access Protection | 内核模式访问保护 |
-a选项才能看到# 1. lscpu命令不存在
# 检查是否安装
which lscpu
# 安装(如果需要)
# Ubuntu/Debian: sudo apt-get install util-linux
# RHEL/CentOS: sudo yum install util-linux
# 2. 信息不完整或错误
# 直接查看原始数据文件
cat /proc/cpuinfo
ls /sys/devices/system/cpu/
# 3. 检查CPU热插拔状态
cat /sys/devices/system/cpu/cpu0/online # 1表示在线,0表示离线
# 4. 验证CPU频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
# 5. 检查CPU微码更新
dmesg | grep microcode
# 6. 查看CPU拓扑的另一种方式
find /sys/devices/system/cpu/ -type f -name "topology" -exec cat {} \;
# 7. 获取更详细的CPU信息
dmidecode -t processor