内存运行频率是由谁决定的?
重金买来的DDR4 4700内存为什么只能运行在2400Mhz?为什么CPU标称最大支持2400,却有很多主板号称支持高达3300的内存,难道内存控制器不是在CPU里面吗?如果CPU最大支持2400, 主板号称支持3300,我买的内存条号称支持4700,最终内存工作频率是多少呢?
这么多令人困扰但又十分有趣的问题!我相信大多数电脑玩家,包括很多老鸟都不能很笃定的回答这些个层层深入的问题。在假装镇定的胡乱回答后如果被追问为什么,好像只有尿遁一条路了。
作为最合适回答这个问题的BIOS/UEFI从业者,我们需要带领大家了解Intel/AMD和硬件提供商(包括主板和内存厂商)在产业链中扮演的角色。知道了这些,自然围绕内存的小伙伴们谁主导谁的问题就会水落石出了。
我的内存谁做主?
众所周知,现在内存控制器都被整合在CPU内部:
通过查询Intel官网(Intel® Product Specifications),我们就会发现即使最新的八代i7 CPU,它所标称的支持主频也不高:
而市场上的很多主板却号称支持更高的内存频率:
而内存标称的支持频率更高:
将这个支持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频率以上该主板也能够支持。
综合来看,CPU标称的是MRC承诺支持的最高频率,主板标称该主板可以达到的最高频率,而内存列出来该内存可以工作的所有频率。在我们这个例子中,如果用户不改动主板的BIOS选项,结果就是这三个值得最小那个,即2400,是最终工作频率。
那么我们买这么好的主板,这么贵的内存是不是一种浪费呢?小伙伴没就不能更快的吃鸡了吗?当然不是了。
超频和XMP
我们从前文可以判断出来,2400这个频率是最保守的频率,该频率经过CPU厂商、内存厂商和主板厂商三方反复验证,一定可以稳定工作,不会因为内存工作不稳定而死机或者丢失数据。对于2400之上的内存,CPU厂商并不做保证。
如果主板标称超过CPU最高支持频率,主板往往会提供超频选项,供激进的玩家挑战更快的内存速度。但玩家在挑战更高频率的时候,往往不得不在BIOS里面反复调整各种时序,并进行烤机来验证稳定性。不经过严格烤机的玩家经历了:更快->兴奋->更更快->更兴奋->更更更快->立刻死机->回退->偶尔死机->放弃,后往往对超频失去兴趣。而长时间的烤机也十分枯燥。
Intel感受到了这种市场的需求,在2007年9月推出XMP内存认证标准。详见:
Intel测试后会对内存厂商的XMP信息予以认证,并公布在官方网站上。解决了大部分超频的烦恼。
其他
超频对游戏的体验影响大吗?这是另一有趣的问题,我在参考资料2中列出了一篇有意思的文章,有兴趣的读者可以参考一二。
结论
相信通过本文,读者已经十分清楚围绕内存的各个部件的关系。授人以鱼不如授人以渔,希望通过这篇/这些篇文章,让大家不但知其然还知其所以然。最后大家可以一起思考几个有趣的问题:
1. 为什么只有X86的CPU有这么麻烦的MRC,ARM体系的内存初始化却非常的简单?
2. 为什么用同样的CPU,有的主板支持DDR3,有的主板却支持DDR4?
参考资料
[1]: https://en.wikipedia.org/wiki/Serial_presence_detect
[2]: https://techbuyersguru.com/gaming-ddr4-memory-2133-vs-26663200mhz-8gb-vs-16gb