买内存条到底该看啥?——内存的频率与带宽
咱们都知道内存要大,可你知不知道,内存要发挥功力,更重要的是快!
内存频率和带宽,就像人的心跳和血管,直接关系到内存的性能。本文详细介绍了内存频率和带宽的基本概念、换算关系,看完你会对内存的提速秘籍一清二楚。
一、内存频率:内存的“心跳”
内存频率,就像人的心跳一样,它表示内存每秒可以蹦多少下,常以MHz(兆赫兹)或GHz(吉赫兹)为单位。内存频率越高,单位时间内传输的数据量就越大,内存的性能也就越强。
对于心跳,全世界都只一种理解,但是内存的频率则不同。内存有三种不同的蹦跶方式,产生了三种不同的频率。
1.1 内存的三种频率
1.1.1 核心频率:存储单元的蹦跶→存储单元频率
核心频率(Core Frequency),是指Cell阵列(Memory Cell Array,即内部电容)的刷新频率,它是内存的真实运行频率。每一次刷新,内存芯片可以读取或写入一个数据位(1-bit)。
核心频率指的是内存中的存储单元的心跳,存储单元是内存的核心,因此它的频率称为核心频率。
核心频率也称内部时钟频率或存储单元频率。由于存储单元频率这个词最能反映核心频率的本质,所以本文后面一律使用存储单元频率。
在DDR内存问世之前,内存频率只有这一种理解。随着DDR的出现,内存产生了新的蹦跶方式,就产生了新的内存频率。
1.1.2 工作频率:内存条的蹦跶→I/O频率
心脏的跳动频率和身体对外的输出频率可以是不一样的。
心脏每秒跳动60下,我可以每秒对你输出100拳。
存储单元就像心脏,内存条就像我们的身体。
工作频率(Operating Frequency)指内存条的跳动频率,也就是它对外输出的频率。
因为它是内存条输出接口的对外输出的频率,因此又称I/O频率或外部时钟频率。
实际上,工作频率并不一定是工作时的频率。
啥意思呢?内存的实际工作频率不单取决于内存条本身,还受内存控制器的影响。
内存控制器是独立于内存条存在的,一般集成在CPU里。内存条运行前,内存控制器会对其进行摸底:“老妹儿,哥哥为你检查身体!”
如果内存条的工作频率在内存控制器支持的最大频率范围内,就按工作频率运行。如果超出内存控制器支持的最大频率范围,就只能按内存控制器支持的最大频率运行。
所以,如果你买了个超牛的内存条,但是配上了一个老古董CPU,内存条是发挥不出威力来的。
对于工作频率,老金认为这个名起得也不咋地,所以后文全部改用更能反映其本质的“I/O频率”
1.1.3 等效频率:数据的蹦跶→数据传输频率
等效频率(Effective Frequency)是指内存条对外宣称的频率,因此又叫标称频率。比如DDR400、DDR2 800即指它们的等效频率为400MHz、800MHz,实际上它们的核心频率都是200MHz。
等效频率指的是每秒传送数据的次数,因此也称“数据传输频率”。后文全部将等效频率改称“数据传输频率”。
前面说的存储单元频率和I/O频率指的并不是每秒数据的传输次数,而是每秒的时钟脉冲数。时钟脉冲形如下图:
DDR(Double Data Rate SDRAM)内存采用了双倍速率传输技术,即在一个时钟周期(频率的倒数)内,它能够在时钟脉冲的上升沿和下降沿各传输一次数据。这与传统的SDRAM(Synchronous Dynamic Random Access Memory)不同,后者只在时钟脉冲的上升沿传输数据。
因为DDR内存在一个时钟周期内传输两次数据,所以传输数据次数是工作频率的两倍。
1.2 DDR内存的发展
1.2.1 DDR内存的两种技术
DDR内存的发展,主要依赖于两种技术:
- 双倍速率传输技术(DDR,Double Data Rate SDRAM):就是前面说的在时钟脉冲的上升沿和下降沿各传输一次数据。各代DDR都练就了此看家本领。
- 预读取(Prefetch)机制:从存储单元中预先读取多位数据。各代DDR的差异主要体现在预读取的数据位数不同。
1.2.2 预读取技术原理
预读取听起来挺高大上,实际上就是类似于工业生产中的提前建储。如果把数据看成一种商品就比较容易理解了。这时,存储单元就是生产工人;存储单元频率就是工人的工作效率,就是每秒生产多少件产品;存储单元的时钟周期就是生产周期,也就是生产一件商口的时间。
存储单元这名工人的生产效率只取决于它自身,在一个生产周期内只能生产1件产品。
现在要求在一个周期内生产3件产品,显然要3个工人同时生产才可以满足。买家只对工厂说话,只要按时交付3件产品就行,不管你多少工人生产。
各代DDR的生产交付关系如下:
对于上图中的输入输出框图,左边代表生产工人(存储单元),它们生产的产品通过输送线(内部数据总线,Int. Data Bus)集中放到仓库,然后由工厂的销售部门(数据接口,Data Queue Port)交付客户。输入有多个,输出只有一个,用计算机术语来说,这叫并行转串行(Parallel to Serial)。
DDR1相当于2个工人一起生产,DDR2为4个工人一起生产,DDR3为8个工人一起生产。人多力量大,所以输出越来越多。
1.2.3 各代DDR的差异
搞明白了上面两种技术,弄懂各代DDR的差异就不在话下了。
(1) SDRAM(Synchronous DRAM):同步动态随机存储器
对于SDR,只要求在一个周期(指存储单元自身的时钟周期)交1件产品(传输1次数据),因此它只需要1名工人(存储单元)就够了,不需要搞什么预读取。
正因为如此,SDR的存储单元频率(核心频率)、I/O频率(工作频率)、数据传输频率(等效频率)都是相同的,这也是它名字中有“同步”的原因。比如经典的PC133,三种频率都是133MHz。
(2)DDR(Double Date Rate SDRAM):双倍速率同步动态随机存储器
对于DDR,要求一个周期内交2件产品(传输2次数据),1名工人(存储单元)干不过来了,需要由2名工人同时生产(预读取2位)。
DDR也就是DDR1,在一个时钟周期内可以传2次数据,刚好满足。因此I/O频率并不需要增加,和存储单元频率一样即可满足。
(3)DDR2
DDR2要求一个周期内交4件产品(传输4次数据),需要由4名工人同时生产(预读取4位)。
DDR2也是在一个时钟周期内传2次数据,需要2个时钟周期才能传4次数据,因此I/O频率需要是存储单元频率的2倍。
(4)DDR3
DDR3要求一个周期内交8件产品(传输8次数据),需要由8名工人同时生产(预读取8位)。
DDR3也是在一个时钟周期内传2次数据,需要4个时钟周期才能传8次数据,因此I/O频率需要是存储单元频率的4倍。
各代内存的I/O频率如下图:
各代内存的存储单元频率、I/O频率、数据传输频率对应关系如下:
总结一下,在一个存储单元时钟周期内,各参数对应关系如下:
内存分类 | I/O周期数 | 预读位数 | 数据传输次数 |
---|---|---|---|
SDRAM | 1 | 无 | 1 |
DDR | 1 | 2 | 2 |
DDR2 | 2 | 4 | 4 |
DDR3 | 4 | 5 | 8 |
可见,预读几位就要在一个存储单元时钟周期内传几次数据。因此,对于DDR系列的内存,有:
数据传输频率
=
存储单元频率
×
预读取位数
I/O频率
=
数据传输频率
÷
2
。
\begin{aligned} &\text{数据传输频率}=\text{存储单元频率}\times \text{预读取位数} \\ &\text{I/O频率}=\text{数据传输频率}\div2。 \end{aligned}
数据传输频率=存储单元频率×预读取位数I/O频率=数据传输频率÷2。
这两个公式其实很好理解,第一个公式对应DDR的预读取技术,预读取n位就相当于n个工人同时干活,产品交付效率提高n倍。第二个公式对应DDR的双倍速率传输技术,一个I/O时钟周期传两次数据,所以数据传输频率是I/O频率的2倍。
下表列出了存储单元频率与各种内存数据传输频率的对应关系:
存储单元频率 | 数据传输频率(等效频率) |
---|---|
100MHz | DDR200、DDR2 400、DDR3 800、DDR4 1600 |
133MHz | DDR266、DDR2 533、DDR3 1067、DDR4 2133 |
150MHz | DDR4 2400 |
166MHz | DDR333、DDR2 667、DDR3 1333、DDR4 2666 |
200MHz | DDR400、DDR2 800、DDR3 1600、DDR4 3200 |
233MHz | DDR3 1887、DDR4 3733 |
266MHz | DDR2 1066、DDR3 2133、DDR4 4266 |
从表中可看出,内存的存储单元频率增长幅度很小,这是因为电容的刷新频率受制于制造工艺而很难取得突破,就像工人的劳动生产率很难提高一样。
二、内存带宽:数据的“高速公路”
内存带宽(Memory Bandwidth)就是内存条每秒钟能够传输的最大数据量,通常以GB/s(吉字节每秒)为单位。带宽越大,数据传输的速度就越快。
2.1 带宽的计算
带宽的大小还受数据总线位宽的影响。数据总线位宽决定了CPU与内存之间一次能够传输的数据量,例如,一个32位数据总线意味着每次传输可以携带32位(即4字节)的数据,一个64位数据总线则能够一次传输64位(即8字节)的数据。现在数据总线位宽都是64位。
因此,每钞钟传输数据的次数×每次传的位数(64位),就是每秒钟能传输的位数,再除以8就得到每秒钟传的字节数(1B=8bit)
根据以上算法,就可以写出不同造型的带宽公式:
公式1:
带宽
=
存储单元频率
×
预读取位数
×
总线位宽
/
8
带宽 = 存储单元频率 \times 预读取位数 \times 总线位宽 / 8
带宽=存储单元频率×预读取位数×总线位宽/8
公式2:
带宽
=
数据传输频率
×
总线位宽
/
8
带宽 = 数据传输频率 \times 总线位宽 / 8
带宽=数据传输频率×总线位宽/8
公式3:
带宽
=
I
/
O
频率
×
总线位宽
/
4
带宽 = I/O频率 \times 总线位宽 / 4
带宽=I/O频率×总线位宽/4
例如,一款频率为3200MHz、位宽为64位的DDR4内存。DDR4预读取16位, 存储单元频率为3200MHz/16=200MHz,I/O频率=3200MHz/2=1600MHz。带宽大约为:3200MHz×64位/8=25.6GB/s。当然,这只是理论上的最大值,实际带宽还会受到其他因素的影响。
不同的内存理论传输带宽:
内存类别 | 传输带宽 |
---|---|
DDR | DDR 266:2.1 GB/s DDR 333:2.6 GB/s DDR 400:3.2 GB/s |
DDR2 | DDR2 533:4.2 GB/s DDR2 667:5.3 GB/s DDR2 800:6.4 GB/s |
DDR3 | DDR3 1066:8.5 GB/s DDR3 1333:10.6 GB/s DDR3 1600:12.8 GB/s DDR3 1866:14.9 GB/s |
DDR4 | DDR4 2133:17 GB/s DDR4 2400:19.2 GB/s DDR4 2666:21.3 GB/s DDR4 3200:25.6 GB/s |
DDR5 | DDR5 4800:38.4 GB/s DDR5 5200:41.6 GB/s DDR5 5400:43.2 GB/s DDR5 5600:44.8 GB/s DDR5 6000:48.0 GB/s DDR5 6400:51.2 GB/s |
从 SDRAM-DDR 时代,数据总线位宽没有改变,都为 64bit,但是采用双通道技术,就相当于两根数据总线并传,等价于位宽翻倍,带宽自然也翻一倍。
例子:
DDR4 2400(存储单元频率 = 150MHz,预读 16bit)组成单通道 64bit 内存,带宽将达到150MHz*16bit*64bit/8 = 19.2GB/s,如果是双通道 DDR4 2400 内存规格(64bitX2),带宽则进一步上升到了150MHz*16bit*128bit/8 = 38.4GB/s
DDR4 3200(内存颗粒的物理频率 = 200MHz,预读 16bit)组成双通道 128bit 内存,带宽将达到200MHz*16bit*128bit/8 = 51.2GB/s,如果是四通道(256bit)DDR4 4266 内存规格(内存颗粒的物理频率 = 266MHz,预读16bit),带宽则进一步上升到了 266*16*256/8 = 136.2GB/s
2.2 带宽与性能的关系
CPU在运行过程中需要不断地从内存中读取数据和指令,CPU快的嗷嗷叫,内存老哥根本跟不上大哥的脚步,是地道的拖油瓶。
内存跑的越快,CPU等待的时间就越短,系统的整体性能自然就越高。
内存带宽代表内存老哥的跑步速度。天下武功,唯快不破,速度就是性能。
对于普通用户来说,咱们其实也不必把内存的各种频率了解的那么清楚,选内存条最简单有效的方法就是选择一款高带宽的,so easy!
2.3 带宽的提升方法
搞懂带宽的本质和计算公式,自然就能明白,提升内存带宽的方法主要有两种:
- 提高内存频率:不管是提高存储单元的频率,还是提高I/O频率,都可以实现最终数据传输频率的提升。不过,频率的提高并不是无限制的。随着频率的增加,内存的功耗和发热量也会相应增加,这可能导致其稳定性和寿命下降。
- 增加内存位宽:数据线位宽增加不了,就搞多通道。
附上有关内存的其他文章:
《内存泄漏简介:不断消耗资源的吞噬者》
《不堪回首的“内存”》
《内存原理:计算机存储的核心奥秘》
《内存的升级换代之路》
《跑道加一条,速度翻一倍:内存通道的提速秘密》
《内存条的构造、原理及性能参数》