内存
内存
DIMM
DIMM(Dual In-line Memory Module)是 S(Single)IMM 进化而来的插槽,在很久以前内存条只有单面有颗粒和金手指。
后来处理器性能飞速增长,单面颗粒的位宽开始追不上 CPU 了,人们就想到了把运行内存条两面都加上 DRAM 颗粒,然后金手指和插槽两面都弄上金手指,这样就能同时读取两倍的数据,将位宽翻倍了,这个就是 DIMM 接口。
再后来处理器性能还在提升,系统程序越来越复杂,就要求越来越高的运行内存容量,由于 DIMM 插槽的位宽根据不同类型只有 32/64/72bit,主板上开始出现三个甚至四个 DIMM 槽,但是大家都知道运行内存是特别高频高速和处理器交互的东西,考虑到主板空间和总线的质量,运行内存插槽要离处理器很近并且数量不能很多(不然主板空间不够,而且距离最远的那个插槽信号质量会下降)。
SIMM
上面介绍过了,DIMM 的单面接口版本。
SO-DIMM
就是为了在笔记本和 NUC 迷你主机之类的地方使用,而把标准的 DIMM 插槽针脚改掉,整个接口变短变小。
RDIMM
就是普通内存条上有一个额外的芯片,用来缓存 CPU 发过来的指令,还有时钟,内存地址等等,增强负载能力和信号质量。这颗芯片也会用来做 ECC 校验,通常这种运行内存条上的颗粒都会很多。
LDIMM
普通内存条上多很多颗数据缓存芯片和一颗处理芯片,和机械硬盘缓存的作用差不多,不过是威力加强 x10 版,同样也是会有很多颗粒。
UDIMM
特调体质粗暴版运行内存条,没有任何缓冲时序调整控制等等,信号直接从 CPU 干到 DRAM 颗粒上,简单直接粗暴。这要求 CPU 到每个内存颗粒之间的距离相等,并行传输,同时颗粒体质要足够好满足 CPU 的速度,所以 UDIMM 容量低,频率低,造价还特别特别贵。通常用在军事,金融或者其他等等对一丁点延迟都非常敏感的地方。
频率/XMP
如果说容量是用户选择运行内存条时的第一反应,那么频率就是大部分用户用户接着会考虑的参数。大部分人都知道频率是越高越好,那么频率到底代表什么呢?简单来讲,运行内存的频率表示处理器每秒可以对内存颗粒读写多少次
,比如理想状态下 DDR4 3200Mhz 的内存条就能让 CPU 每秒读写 3200*100,0000 = 32,0000,0000 也就是 32 亿次,是不是很惊人。
结合上面学到的 64 位处理器,每次读写 64bit 数据,我们就能算出运行内存(单通道)大概的速度,32,0000,0000*64≈23.84GB/s,但内存延迟和通道数会影响读写次数,甚至不同主板还有供电的用料都会影响这个速度,DDR4 3200Mhz 双通道实际读写复制速度大概在 40GB/s 左右。
细心的朋友就会发现,好像这个频率只和 CPU 的处理能力有关,那么为什么要标注成运行内存的参数呢?答案是内存颗粒的体质,每个 DRAM 颗粒生产出来的时候里面晶体管的质量还有数量都不一样,所以就会导致不同 DRAM 颗粒每秒能让 CPU 读写的最高次数不一样
,再高就会导致数据读写失败甚至损坏 DRAM 的晶体管。
所以厂商通常会将同一批次不同体制的 DRAM 颗粒做成不同频率的运行内存条,体质好的就做成 3000Mhz,3200Mhz 甚至更高,当做高端运行内存条卖,体质不好的就做成 2400Mhz,2666Mhz 这种。这也是为什么我们经常会看见同一个牌子型号的运行内存条会有不同频率版本
。
而且厂商为了保证内存条能够稳定运行,通常标称的频率会低很多,而且主板厂商也没办法检测运行内存条颗粒的体质,为了稳定只能设定运行内存条插上去之后默认会运行在对应 DDR 代数最低的频率
,比如 DDR4 就是 2400Mhz,需要用户手动在 BIOS 里面调整到标称频率
。
另外不同处理器和主板对运行内存频率支持也有一个上限
,通常会在处理器或者主板说明书里面标注支持的内存频率,大家购买和使用的时候需要注意。
核心频率,工作频率和等效频率
实际上运行内存的频率还分为核心频率,工作频率和等效频率三种,一般我们在商品详情包装盒和普通软件里面看到的运行内存频率都是等效频率
。
核心频率就是运行内存控制器和电路的物理时钟频率
,比大家想象中小很多,一般只有 100Mhz~200Mhz,常见的有 133Mhz、166Mhz 和 200Mhz(这也是为啥我们经常看到运行内存频率有零有整的),从 DDR1 到现在 DDR4 核心频率基本没啥变化
。
上面我们介绍的 DDR 技术,通过它可以让运行内存一个 CPU 时钟周期发送两次数据,这样能让每个周期读写次数翻倍,这个 DDR 技术翻倍后的频率就是工作频率
,上面的常见核心频率就变成了 266Mhz,333Mhz,400Mhz。
上面我们还介绍到了数据预读取,等效频率就是指数据预读取后的效率,比如 DDR4 预读取 8bit,全部预测中的话就相当于每次核心频率读取 1bit 的 8 倍,所以 400Mhz 工作频率的等效频率就变成了 400*8=3200Mhz,也就是平常我们看到的频率参数了。
但现在我们很少看到 4000Mhz 以上的 DDR4 运行内存条,这一方面是因为频率太高,颗粒体质很少跟得上,另一方面则是预读取技术会让我们下面提到的时序变得越来越高,反而会降低运行内存条的综合性能。
像是 CPU-Z 这类的软件之所以会把运行内存频率显示的标注频率的一半,就是因为显示的是核心频率的等效频率而不是工作频率的等效频率。
时序
时序通常写成「CL16-17-17-35」这样的形式
,每个数字代表的意义要结合我们之前学到的 DRAM 颗粒的结构来看。所有数字的单位都是 CPU 时钟周期
,下面的 R 指的就是 Bank 里面的行(Row),C 就是列(Column)。
DRAM 颗粒 Bank 里面的储存单元是按照行列排列的,就跟围棋格子一样。
每次想要访问某个特定组成单元的时候,是先给指定行上的所有储存单元加上阈值电压,然后再检测这行对应列上的那个储存单元的值,将值发送给 Row Buffer。
第 1 个数字代表 CL(CAS Latency)
:就是内存控制器发出读写某一个数据的指令到 Row Buffer 准备好返回数据的延迟。第 2 个数字代表 RAS to CAS Delay(tRCD)
:这个数字代表的就是指定行上找到储存单元所在的对应列的时钟周期。第 3 个数字代表 RAS Precharge Time(tRP)
:就是给对应行加阈值电压然后电容充电的时钟周期。第 4 个数字代表 RAS Active Time(tRAS)
:就是保持目标行充电以确保读写成功的时间。
简单来讲就是第一个数字越低越好,基本上可以等于运行内存的等级,在此基础之上,剩下三个数字越低越好。