dmidecode -t memory 查 Speed: 字段得标称频率(如3200 MHz),需root权限;lshw -class memory 查 clock: 行得当前运行频率(如1600 MHz);/proc/meminfo 不含频率信息。

用 dmidecode 查内存频率(最准,需 root)
Linux 下查内存条标称频率,dmidecode 是唯一能读取 SPD(Serial Presence Detect)芯片原始数据的工具,结果直接来自硬件,不依赖内核或驱动估算。
实操建议:
- 运行
sudo dmidecode -t memory,找Speed:字段,单位是 MHz(如Speed: 3200 MT/s中的 3200 就是标称频率) - 注意区分
Configured Clock Speed:(主板实际配置的频率)和Speed:(内存颗粒设计频率),前者可能因 BIOS 设置或降频而低于后者 - 常见错误:普通用户直接执行报错
Permission denied—— 必须加sudo,因为访问 SMBIOS 表需要 root 权限 - 部分 ARM 或虚拟机环境不支持
dmidecode,会返回空或No SMBIOS nor DMI entry point found
lshw 看当前运行频率(反映真实工作状态)
lshw 不读 SPD,而是从内核 /sys 接口获取当前内存控制器报告的运行频率,更接近实际 DDR 总线速率。
实操建议:
- 执行
sudo lshw -class memory | grep -A 5 -B 5 clock,关注clock:行(单位 Hz,比如clock: 1600000000Hz即 1600 MHz) - 这个值受 BIOS 中 XMP/DOCP 启用状态、CPU 内存控制器限制、双通道是否启用等影响,可能低于
dmidecode显示的标称值 - 如果系统启用了内存超频但未生效,这里会暴露真实频率,比看 BIOS 更快验证配置是否落地
- 注意:某些老版本
lshw(如 Ubuntu 18.04 自带的)可能不显示clock字段,建议升级到 0.9.x 以上
避免被 cat /proc/meminfo 误导
/proc/meminfo 只提供内存容量、使用量、页缓存等运行时信息,**完全不包含频率、型号、时序等硬件参数**。很多人搜“linux 查内存”第一反应就是它,结果白忙活。
常见错误现象:
- 执行
cat /proc/meminfo | grep -i freq返回空 —— 正常,这个文件压根没存频率字段 - 误把
MemTotal:当成物理内存条数量或频率,其实只是总可用 RAM 大小(单位 kB) - 想通过
/sys/devices/system/memory/下的文件查频率?该路径只暴露热插拔和节点信息,无 SPD 数据
虚拟机里怎么办?
KVM/QEMU 虚拟机默认不透传 SPD 信息,dmidecode 和 lshw 都只能看到虚拟内存(如 Speed: Unknown 或固定值 667 MHz),不代表宿主机真实内存频率。
实操建议:
- 宿主机上查:在物理机运行
sudo dmidecode -t memory,这才是真实值 - 如果必须从虚拟机判断性能瓶颈,优先看
lscpu | grep -i memory中的NUMA node分布,再结合perf stat -e cycles,instructions,mem-loads,mem-stores观察访存延迟,比硬查频率更有意义 - QEMU 启动时加
-smbios type=17可模拟部分内存信息,但频率字段仍不可靠,不推荐用于生产环境校验
真正麻烦的是多插槽、混插不同频率内存条的情况——dmidecode 会列出每条的信息,但系统最终以最低频率同步运行,这时候得一条条核对 Speed: 字段,不能只扫一眼就下结论。










