最可靠的方式是用 sudo dmidecode -t memory 查 Speed 字段,它读取内存模组 SPD 芯片中固化的标称频率(如 3200 MT/s),反映设计能力而非实时运行频率,是 Linux 中获取该参数最权威的途径。

最可靠的方式是用 sudo dmidecode -t memory 查 Speed 字段,它读的是内存模组 SPD 芯片里存的标称频率(比如 3200 MT/s),不是实时运行频率,但这是你能在 Linux 里拿到的最接近“这根条子设计跑多快”的权威值。
为什么 dmidecode -t memory 是首选
它直接解析 BIOS/UEFI 固件写入 SMBIOS 表的原始 SPD 数据,其他工具(lshw、/proc/meminfo)要么字段缺失,要么容易误读。关键点:
-
Speed:行才是你要的频率,单位通常是MT/s(等效于 MHz),不是Configured Memory Speed(那是 BIOS 当前配置值,可能降频) - 必须加
sudo,普通用户无权限访问 SMBIOS 内存段 - 输出里出现
Speed: Unknown或全空,大概率是笔记本/虚拟机/老旧主板固件没填 SPD,不是命令错了 - 别被
Maximum Capacity、Form Factor这类字段干扰,它们和频率无关
lshw -class memory 怎么看才不误读
它比 dmidecode 输出更结构化,适合快速扫一眼,但要注意:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 它显示的
clock:值(如clock: 1600MHz)是内存总线时钟,DDR4-3200 实际对应的是 1600 MHz × 2 = 3200 MT/s,不能直接抄数字当标称频率 - 某些精简系统(Alpine、容器镜像)默认没装
lshw,得先apk add lshw或apt install lshw - 如果
clock显示为0或空白,说明内核没报告,此时应以dmidecode为准
哪些命令根本查不到频率
别浪费时间在这些上:
-
free -h和cat /proc/meminfo:只管容量和使用量,压根没有频率字段。看到网上说 “MemTotal是 32G 就代表 DDR5”,纯属混淆容量和带宽 -
lscpu | grep -i memory:输出的是 CPU 内存控制器支持的上限(如Memory controller: 3200 MHz),不代表插着的内存条真跑在这个频率 - 虚拟机里跑
dmidecode:KVM/VMware 默认不透传真实 SPD,结果基本是Not Specified或固定值(如667 MHz),宿主机上查才有意义
想看实时运行频率怎么办
dmidecode 的 Speed 是标称值,不是当前实际跑速。要确认 XMP/EXPO 是否生效、是否降频,得靠硬件支持的工具:
- 先检查 EDAC 模块是否加载:
lsmod | grep edac;没输出就试sudo modprobe edac_mce_amd(AMD)或edac_i7core(Intel) -
decode-dimms(来自i2c-tools)能读 SPD 并反推当前寄存器配置下的理论速率,但它也不是实时采样,依赖 SMBus 访问支持 - 真正实时 DRAM 时钟 Linux 内核不暴露,除非主板提供 hwmon 接口(极少见),否则只能靠
perf stat -e mem-loads,mem-stores间接评估带宽表现
真正麻烦的地方不在命令本身,而在 SPD 数据是否被 BIOS 正确写入——尤其是笔记本和 OEM 主板,经常留空 Speed: 字段。这时候再怎么换命令也没用,得看硬件层面有没有提供这个信息。

















