在Linux系统中如何查看vCPU对应的物理核心数?

在 Linux 系统中,vCPU(虚拟 CPU)与物理核心的映射关系取决于虚拟化环境(如 KVM、VMware、Xen 等)以及 guest 操作系统内部的配置。以下是几种常用方法:


✅ 方法一:使用 lscpu(推荐)

lscpu | grep -E "Socket|Core|Thread|CPU(s)"

输出示例:

Architecture:          x86_64
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
  • 关键信息
    • Socket(s):物理插槽数
    • Core(s) per socket:每个插槽的物理核心数
    • CPU(s):当前系统识别的总 vCPU 数(可能包含超线程或 SMT)
    • Thread(s) per core > 1,说明启用了超线程(SMT),此时一个物理核可模拟多个逻辑处理器。

⚠️ 注意:在虚拟机中,lscpu 显示的是 guest 视角 的逻辑拓扑,不一定反映宿主机真实物理结构。例如,宿主机是 2 核 4 线程,但 VM 可能被配置为 4 vCPU(对应 2 物理核 + 超线程)。


✅ 方法二:查看 /proc/cpuinfo

grep -E "physical id|core id|siblings|processor" /proc/cpuinfo | paste - - - - | sort -u

更直观的方式(逐行分析):

for i in $(seq 0 $(($(nproc)-1))); do
  echo "vCPU $i:"
  grep -E "^(processor|core id|physical id)$" /proc/cpuinfo | sed -n "$((i*3+1)),$((i*3+3))p"
done
  • physical id:对应物理 CPU 插槽(socket)
  • core id:该 vCPU 所在的物理核心编号
  • processor:vCPU 编号(逻辑 CPU)

👉 通过统计相同 physical id + core id 的组合数,可判断哪些 vCPU 共享同一物理核心。


✅ 方法三:结合宿主机信息(需 host 权限)

如果你能访问宿主机(如 KVM/QEMU),可在 host 端 执行:

# 查看宿主机真实拓扑
lscpu -e | awk '{print $1, $2, $3}' | head
# 或使用 virsh 查看 VM 配置
virsh dominfo <vm-name>
virsh vcpuinfo <vm-name>

virsh vcpuinfo 会列出每个 vCPU 绑定的宿主节点(numa/node)和亲和性设置,有助于判断是否跨核/跨 socket。


🔍 补充说明

场景 说明
未启用超线程 1 vCPU ≈ 1 物理核心(理想情况)
启用超线程 1 物理核 → 2 vCPU(逻辑线程),Thread(s) per core = 2
NUMA 绑定 vCPU 可能固定在某 NUMA 节点,影响性能
容器环境(Docker/Podman) 通常只看到分配的 vCPU 数,无法直接获知底层物理映射(依赖 cgroup + host 配置)

🛠️ 实用脚本:统计每核上的 vCPU 数量

#!/bin/bash
declare -A core_map
while IFS= read -r line; do
  if [[ $line =~ ^processor ]]; then
    vcpu=${line##*: }
  elif [[ $line =~ ^core id ]]; then
    core=${line##*: }
  elif [[ $line =~ ^physical id ]]; then
    socket=${line##*: }
    key="${socket}-${core}"
    ((core_map[$key]++))
  fi
done < /proc/cpuinfo

echo "物理核心 -> vCPU 数量分布:"
for key in "${!core_map[@]}"; do
  printf "%s: %d vCPUsn" "$key" "${core_map[$key]}"
done

如你有具体虚拟化平台(如 VMware ESXi、OpenStack、KubeVirt)或想进一步分析性能瓶颈,可提供更多信息,我可给出针对性建议。