要准确获取物理内存条的标称频率和JEDEC时序,须直接读取SPD芯片:用sudo dmidecode -t memory查Speed:字段得标称频率(如3200 MT/s),用sudo decode-dimms读取完整JEDEC时序(CL、tRCD等),再以sudo lshw辅助定位插槽并交叉验证。

要准确获取 Linux 系统中已物理插入内存条的标称频率和 JEDEC 时序参数,必须绕过内核运行时抽象层,直接读取内存模组 SPD(Serial Presence Detect)芯片中的固化数据;/proc/meminfo、free、lscpu 等命令完全不包含这两类信息,查它们只会返回空或误导性字段。
用 dmidecode 查标称频率(最权威)
这一步输出的是内存条出厂时写入 SPD 的 JEDEC 标称值,不是当前运行频率,但它是你能拿到的唯一来自硬件本身的频率依据。
执行 sudo dmidecode -t memory,在每段以 Handle 开头的内存块中定位 Speed: 行——它单位通常是 MT/s(如 Speed: 3200 MT/s),对应 DDR4-3200 或 DDR5-4800 等标准命名。
注意:Speed: 字段可能显示 Unknown 或 Not Specified,这不是命令错误,而是 BIOS/UEFI 固件未填入 SPD 数据,常见于部分笔记本、老旧主板或虚拟机环境;此时该插槽无法通过此法确认频率。
别把 Configured Memory Speed: 当作标称值——它反映 BIOS 当前配置(可能因降频、XMP 未启用而低于 Speed:),只用于交叉验证。
用 decode-dimms 查完整 JEDEC 时序(唯一可靠来源)
decode-dimms 是 i2c-tools 套件中的专用工具,能通过 SMBus 直接读取 SPD EEPROM 中的原始 JEDEC 表格,包括 CL(CAS Latency)、tRCD、tRP、tRAS 等全部时序参数,且自动按 DDR 类型解析单位(纳秒 or 时钟周期)。
方法一:确认 I²C 总线可用并加载驱动
先运行 ls /dev/i2c*,若无输出,需加载内核模块:sudo modprobe i2c-dev;再检查 SMBus 控制器是否识别:sudo i2cdetect -l。
方法二:扫描并读取 SPD 数据
执行 sudo decode-dimms,它会自动枚举所有可访问的 DIMM 插槽,并为每根已插内存条打印完整的 JEDEC Timing Table,关键字段包括:Minimum Cycle Time (tCKmin)、CAS Latency (CL)、RAS# to CAS# Delay (tRCD)、RAS# Precharge (tRP)。
注意:decode-dimms 需要 root 权限和硬件 SMBus 支持;在多数现代台式主板上有效,在部分服务器或 ARM 平台可能因 I²C 权限或固件限制失败;若报错 “No SMBus adapter found”,说明底层总线未暴露或驱动未加载。
用 lshw 辅助定位插槽与类型(结构化补全)
lshw 不读 SPD,但它从内核 sysfs 提取插槽物理标识和内存控制器报告的当前总线时钟,适合快速确认哪根内存对应哪个 Slot 名称,并交叉比对 DDR 类型(DDR4/DDR5)是否与 decode-dimms 输出一致。
第一步:执行 sudo lshw -class memory | grep -A10 "slot\|size\|width\|description"
重点提取 slot: 字段(如 slot: DIMM_A1)和 description: memory:xxxxxx 节点路径,这些是物理插槽的稳定标识。
第二步:提取当前总线速率供参考
执行 sudo lshw -class memory | grep "clock:",得到类似 clock: 1600000000Hz 的输出——换算为 1600 MHz,即 DDR4-3200 的等效总线时钟(双倍数据速率);该值若明显低于 dmidecode 的 Speed:,说明 XMP/EXPO 未启用或存在降频。
第三步:将 lshw 的 slot: 与 dmidecode 的 Locator: 字段人工对齐,确保你查到的时序确实属于同一根物理内存条;不同主板 Locator 命名差异极大(如 CHANNELB-DIMM1、DIMM_U1),不能仅凭顺序推断。











