lscpu 輸出一堆數字,到底幾顆物理 CPU?幾核心?有沒有超執行緒?本文提供三條指令精準辨識 CPU 拓撲,並解釋 /proc/cpuinfo 關鍵欄位含義。
| 術語 | 定義 | 查看方式 |
|---|---|---|
| Physical CPU (Socket) | 主板插槽數量 | physical id 去重計數 |
| Cores per Socket | 單顆 CPU 核心數 | cpu cores 欄位 |
| Logical CPU (vCPU) | OS 可見的邏輯處理器 | processor 計數 |
| Hyper-Threading (HT) | 單核心雙執行緒 | Logical = Physical × Cores × 2 |
grep 'physical id' /proc/cpuinfo | sort -u | wc -l
# 輸出範例:2 → 兩顆物理 CPU
grep 'cpu cores' /proc/cpuinfo | uniq | awk -F': ' '{print $2}'
# 輸出範例:8 → 每顆 8 核心
grep -c '^processor' /proc/cpuinfo
# 或
nproc
# 輸出範例:32 → 2 × 8 × 2 = 32(已開啟 HT)
#!/bin/bash
# cpu_topology.sh
phy=$(grep 'physical id' /proc/cpuinfo | sort -u | wc -l)
cores=$(grep 'cpu cores' /proc/cpuinfo | uniq | awk -F': ' '{print $2}')
logical=$(grep -c '^processor' /proc/cpuinfo)
ht=$(( logical == phy * cores * 2 ? "YES" : "NO" ))
echo "================ CPU Topology ================"
echo "Physical CPUs (Sockets) : $phy"
echo "Cores per Socket : $cores"
echo "Logical CPUs (vCPUs) : $logical"
echo "Hyper-Threading Enabled : $ht"
echo "=============================================="
# 詳細核心對應關係
echo -e "\nCore ↔ Thread mapping:"
lscpu -p=CPU,Core,Socket,Node | tail -n +4 | sort -n | column -t
================ CPU Topology ================
Physical CPUs (Sockets) : 2
Cores per Socket : 10
Logical CPUs (vCPUs) : 40
Hyper-Threading Enabled : YES
==============================================
Core ↔ Thread mapping:
CPU Core Socket Node
0 0 0 0
1 0 0 0 ← 同核心雙執行緒
2 1 0 0
3 1 0 0
...
38 9 1 1
39 9 1 1
| 欄位 | 含義 | 用途 |
|---|---|---|
processor | 邏輯 CPU 編號 (0..N-1) | 綁定執行緒親和性 taskset -c |
physical id | 物理 CPU 插槽編號 | 跨 NUMA 節點調度 |
core id | 核心編號(在同一 physical id 內唯一) | 識別 HT 姊妹執行緒 |
cpu cores | 該物理 CPU 總核心數 | 驗證規格一致性 |
siblings | 該物理 CPU 總邏輯 CPU 數 | siblings = cpu cores × (HT?2:1) |
flags | CPU 特性旗標 | ht 表示支援超執行緒 |
model name | 處理器型號 | 對照廠商規格表 |
logical = physical × cores,減少緩存爭用,適合高頻交易、HPCcpu: "2" 代表 2 vCPU(邏輯核心),需知曉底層 HT 狀態評估實際算力numactl --hardware 確認 Node 分佈,避免跨節點記憶體存取結語: 三條指令、一個腳本,徹底搞清 CPU 拓撲。下次採購、授權、調優、排程,直接產出 cpu_topology.sh 報告,專業又高效。