Linux无内存带宽利用率百分比指标,需用perf采集uncore事件或Intel PCM工具获取DDR读写带宽(GB/s),二者均依赖CPU微架构支持且不可混用。

Linux 系统中没有现成的“内存带宽利用率”百分比指标,/proc/meminfo、free、vmstat 这些命令只反映内存容量使用和页面活动,完全不涉及 DDR 总线上的实际数据吞吐。要查看内存总线带宽(单位 GB/s)和硬件层面的利用率,必须依赖 CPU 提供的底层性能计数器,核心方法只有两类:用 perf 直接采集 uncore 事件,或用 Intel PCM 工具链中的 pcm-memory.x。
确认 CPU 架构与支持的内存控制器事件
不同 Intel 微架构(如 Skylake、Ice Lake、Sapphire Rapids)使用的 uncore 事件编码不同,硬套命令会报错 event is not supported。先运行:
sudo perf list | grep -i "memory\|imc"
重点关注类似 uncore_imc_00/event=0x04,umask=0x0f/(DDR 读)和 uncore_imc_00/event=0x05,umask=0x0f/(DDR 写)的条目。若无输出,说明当前内核或 perf 版本未启用 uncore 支持,需检查 CONFIG_PERF_EVENTS_INTEL_UNCORE=y 是否开启。
用 perf 实时测量 DDR 实际读写带宽
以 1 秒为周期采样 5 秒为例(需 root 权限):
sudo perf stat -e uncore_imc_00/event=0x04,umask=0x0f/,uncore_imc_00/event=0x05,umask=0x0f/ -I 1000 -a sleep 5
输出中每行两列数字分别代表该秒内读/写的字节数。换算为 MB/s:数值 ÷ 1024²;换算为 GB/s:÷ 1024³。多路服务器需手动添加 uncore_imc_01、uncore_imc_02 等设备名,并分别解析。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
用 pcm-memory.x 快速获取聚合带宽摘要
这是最接近“开箱即用”的方案,但仅适用于 Intel 平台且版本敏感:
- 下载匹配 CPU 型号的 Intel PCM(如 Sapphire Rapids 需 v5.13+,旧版会显示 0 或 Failed to detect memory controller)
- 运行
sudo ./pcm-memory.x 1,顶部显示 Max Memory Bandwidth(理论峰值),下方实时刷新 MEM READ / MEM WRITE 列,单位为 GB/s - 注意:它自动聚合所有内存通道,但不区分 NUMA 节点,也无法体现跨节点访问带来的隐性竞争与延迟升高
别把内存用量和带宽混为一谈
- free -h 显示 available 接近 0 ≠ 带宽打满:一个只占 2GB 物理内存的数据库进程,做密集随机 buffer pool 访问,照样能跑满 DDR 带宽
- vmstat 的 bi/bo 是块设备 I/O,si/so 是 swap 换入换出,两者都和内存控制器的数据传输速率无关
- 真正决定带宽压力的是 DRAM cycle 数、memory controller queue depth 这类硬件级信号,只能靠 perf 或 PCM 获取
不复杂但容易忽略

















