内存运行频率是由谁决定的?


内存运行频率是由谁决定的?

文章插图
 
重金买来的DDR4 4700内存为什么只能运行在2400Mhz?为什么CPU标称最大支持2400,却有很多主板号称支持高达3300的内存,难道内存控制器不是在CPU里面吗?如果CPU最大支持2400,主板号称支持3300,我买的内存条号称支持4700,最终内存工作频率是多少呢?
这么多令人困扰但又十分有趣的问题!我相信大多数电脑玩家,包括很多老鸟都不能很笃定的回答这些个层层深入的问题 。在假装镇定的胡乱回答后如果被追问为什么,好像只有尿遁一条路了 。
作为最合适回答这个问题的BIOS/UEFI从业者,我们需要带领大家了解Intel/AMD和硬件提供商(包括主板和内存厂商)在产业链中扮演的角色 。知道了这些,自然围绕内存的小伙伴们谁主导谁的问题就会水落石出了 。
我的内存谁做主?众所周知,现在内存控制器都被整合在CPU内部:
内存运行频率是由谁决定的?

文章插图
 
通过查询Intel官网(Intel® Product Specifications),我们就会发现即使最新的八代i7 8650 CPU,它所标称的支持主频也不高(8700稍高些):
内存运行频率是由谁决定的?

文章插图
 
而市场上的很多主板却号称支持更高的内存频率:
内存运行频率是由谁决定的?

文章插图
 
而内存标称的支持频率更高:
内存运行频率是由谁决定的?

文章插图
 
将这个支持4000的内存,插在支持3200的主板上,配上仅仅最高2400的i7 CPU,最后到底内存工作在哪个频率呢?要回答这个看似矛盾的问题,我们的要从围绕内存的硬件厂商合作关系说起 。
业态一款CPU标称支持的内存频率是由硬件和软件两方面所决定的 。硬件的限制自不待言,软件在这里却扮演更重要的角色 。这里的软件就是指BIOS里面的内存初始化参考代码(MRC,Memory Reference Code) 。它一般由CPU厂商(Intel/AMD)开发,并经过大量测试 。MRC在运行的时候会读取内存条上SPD(serial presence detect)的信息:
内存运行频率是由谁决定的?

文章插图
内存条上的SPD rom
SPD的读取方式是通过SMBus,一种I2C总线的扩展 。SMbus的地址在很多Intel的平台上是A0、A2、A4和A6(四根DIMM的情况) 。详细SMBus的内容我们今后再单独介绍,本文就不再赘述了 。
SPD里面记录了DIMM的厂商的ID,型号等等信息,这就是为什么MRC会知道内存是哪家厂商生产的 。MRC后来会通过BIOS的其他部分将该信息通过SMBIOS表信息告诉操作系统,这样大家才能在系统信息里面看到内存型号 。不法经销商有时会通过刷新SPD内容欺骗MRC,进而欺骗消费者 。
SPD里面还记录了内存重要的时序信息 。关于时序等信息,请参考我的知乎文章和参考资料1(注意1中缺乏DDR4的内容) 。我们也可以用Rw-everything软件来查看SPD的内容 。下面就是我的台式机DIMM0 (A0)的SPD信息:
内存运行频率是由谁决定的?

文章插图
 
内存运行频率是由谁决定的?

文章插图
 
从中除了看到我还在用DDR3(没钱升级)这个屌丝信息之外,还有内存型号和rank等等信息 。重要的是SPD包含几组时序信息,包括该DIMM在标准电压下支持的各个频率对应的最低时序要求 。
【内存运行频率是由谁决定的?】MRC会根据该信息,结合CPU当时对各个频率的支持程度(会逐渐提高),进行内存的Training,最后得到一个能保证稳定工作的最高频率 。这就是最终内存工作频率 。CPU厂商在发布MRC的时候,只会保证支持该CPU确定支持的标称最高频率,在第八代i7那个例子中,就是2400了 。于此同时还会公布一个兼容性列表,指导相关小伙伴 。
看起来似乎没有主板厂商什么事了,其实不尽然 。CPU厂商会给主板等厂商一个硬件设计参考文档,里面详细规定了各种线路的长度,距离等等信息 。这样才能保证这种高速信号的信号完整性,这其中就包括了内存的总线 。主板厂商必须遵循该文档,作为最低要求,才能支持CPU标称的内存频率,如果要做的更好,必须优化线路,来保证更高频率的信号完整性 。
于此同时,一些主板厂商还会与BIOS提供商一起工作,增加标准电压之外的选项,还可以单独调节各种时序,进行超频 。在我们主板那个例子中,3300频率以上该主板也能够支持 。


推荐阅读