温馨提示×

Linux CPUInfo怎样分析内存控制器

小樊
32
2025-11-29 07:47:44
栏目: 智能运维

Linux 下用 cpuinfo 分析内存控制器的方法

核心思路

  • 内存控制器在现代 x86_64 平台通常由 CPU 集成,其拓扑与 NUMA 节点一一对应。通过 lscpu 可直接读出 NUMA node(s),一般可视为内存控制器(或内存通道组)的数量;而 /proc/cpuinfo 提供每个逻辑 CPU 的 physical id、core id、siblings、cpu cores 等字段,可据此判断 Socket 数量超线程,从而间接推断内存通道与内存控制器的布局。注意:/proc/cpuinfo 不直接显示内存频率、通道数、槽位等细节,这些需借助其他工具补充。

从 cpuinfo 推断内存控制器与通道布局

  • 基本拓扑
    • 物理 CPU 数量:cat /proc/cpuinfo | grep “physical id” | sort -u | wc -l
    • 每颗物理 CPU 的核心数:cat /proc/cpuinfo | grep “cpu cores” | uniq
    • 逻辑 CPU 数量:cat /proc/cpuinfo | grep “processor” | wc -l
    • 超线程判断:若 siblings == cpu cores 则未启用超线程;若 siblings > cpu cores 则启用超线程(每个物理核心对应多个逻辑处理器)。这些字段仅用于 CPU 侧推断,内存控制器数量仍以 NUMA 节点为准。
  • 与内存控制器的对应关系
    • 内存控制器数量通常 ≈ NUMA node(s)(lscpu 输出),每个 NUMA 节点通常对应一组内存通道与本地内存。
    • 双路(2×Socket) 常见平台中,若 NUMA node(s)=2,多为每路各集成 1 个内存控制器;若 NUMA node(s)=4,常见为每路 2 个内存控制器(即每路双通道/更多通道的拓扑)。最终仍以主板与 CPU 规格为准。

补充命令与字段解读

  • 快速查看内存控制器与拓扑
    • 查看 NUMA 与插槽:lscpu(关注 NUMA node(s)Socket(s)Thread(s) per coreCore(s) per socket、以及 NUMA node0/1 CPU(s) 的分布)。
    • 查看内存硬件细节(型号、频率、槽位):sudo dmidecode -t memory(关注 Size、Type、Speed、Configured Clock Speed、Locator、Bank Locator 等)。
    • 查看内存总体使用:cat /proc/meminfofree
  • 关键字段含义
    • physical id:物理插槽 ID(同一值属于同一颗物理 CPU)。
    • core id:物理核心 ID(同一物理 CPU 内唯一)。
    • cpu cores:每颗物理 CPU 的核心数。
    • siblings:每颗物理 CPU 的逻辑处理器数(线程数)。
    • 关系:总逻辑 CPU = 物理 CPU 数 × 每颗核心数 × 每核线程数

示例分析

  • 示例 A(2 路 24 核/路,HT 开启,NUMA=2)
    • lscpu 输出:Socket(s)=2Core(s) per socket=24Thread(s) per core=2NUMA node(s)=2
    • 推断:物理 CPU 数 2;每路 24 核/48 线程2 个 NUMA 节点 ≈ 2 个内存控制器(每路 1 个)。
  • 示例 B(2 路 24 核/路,HT 开启,NUMA=4)
    • lscpu 输出:Socket(s)=2Core(s) per socket=24Thread(s) per core=2NUMA node(s)=4
    • 推断:物理 CPU 数 2;每路 48 线程4 个 NUMA 节点 ≈ 4 个内存控制器(每路 2 个,常见为每路双通道或更多通道的布局)。

0