读书人

DDR内存储器的终极优化

发布时间: 2013-03-28 10:20:24 作者: rapoo

DDR内存的终极优化
??????SDRAM内部L-Bank示意图,这是一个8X8的阵列,B代表L-Bank地址编号,C代表列地址编号,R代表行地址编号。如果寻址命令是B1、R2、C6,就能确定地址是图中红格的位置

图中标准CL=2,tAC是有关内部信号处理的周期,可以不用关心

??? 目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个Cache Line(即CPU内Cache的存储单位)的容量为准,一般为64字节。而现有的P-Bank位宽为8字节,那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。

????在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址(SDRAM与DDR SDRAM的突发传输对列寻址的操作数量有所不同,在此不再细说)。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。

DDR内存储器的终极优化

????突发连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输。

??? 在数据读取完之后,为了腾出读出放大器以供同一L-Bank内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行。还是以上面那个L-Bank示意图为例。当前寻址的存储单元是B1、R2、C6。如果接下来的寻址命令是B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务。但如果地址命令是B1、R4、C4,由于是同一L-Bank的不同行,那么就必须要先把R2关闭,才能对R4寻址。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(Row Precharge command Period,行预充电有效周期),单位也是时钟周期数。

DDR内存储器的终极优化

????本图为一个完整的从行寻址到行关闭的时序图,图中所表示的tRCD=2、CL=2、tRP=2

??? 从上图中我们还发现了一个在 DDR SDRAM 时代经常被人提起,也经常会在 BIOS 中出现的参数—— tRAS。tRAS 在内存规范中的解释是 ACTIVE to PRECHARGE command,即从行有效命令发出至预充电命令发出之间的间隔。这也是本专题第一部分中所要重要谈到的话题。在深入分析它之前,我们先了解一下哪些因素会影响到内存的性能。

?

?在讲完 SDRAM 的基本工作原理和主要操作之后,我们现在要重要分析一下 SDRAM 的时序与性能之间的关系,它不再局限于芯片本身,而是要从整体的内存系统去分析。这也是广大 DIYer 所关心的话题。比如 CL 值对性能的影响有多大几乎是每个内存论坛都会有讨论,今天我们就详细探讨一下。这里需要强调一点,对于内存系统整体而言,一次内存访问就是对一个页 (Page)的访问。由于在 P-Bank 中,每个芯片的寻址都是一样的,所以可以将页访问“浓缩”等效为对每芯片中指定行的访问,这样可能比较好理解。但为了与官方标准统一,在下文中会经常用页来描述相关的内容,请读者注意理解。

??? 可能很多人还不清楚页的概念,在这里有必要先讲一讲。从狭义上讲,内存芯片芯片中每个 L-Bank 中的行就是页,即一行为一页。但从广义上说,页是从整体角度讲的,这个整体就是内存子系统。

??? 对于内存模组,与之进行数据交换的单位就是 P-Bank 的位宽。由于目前还没有一种内存芯片是 64bit 位宽的,所以就必须要用多个芯片的位宽来集成一个 P-Bank。如我们现在常见的内存芯片是 8bit 位宽的,那么就需要 8 颗芯片组成一个 P-Bank 才能使系统正常工作。而 CPU 对内存的寻址,一次就是一个 P-Bank,P-Bank 内的所有芯片同时工作,这样对 P-Bank 内所有的芯片的寻址都是相同的。比如寻址指令是 B1、C2、R6,那么该 P-Bnak 内的芯片的工作状态都是打开 B1 的 L-Bank 的第 C2 行。好了,所谓广义上的页就是指 P-Bank 所包括的芯片内相同 L-Bank 内的相同工作行的总集合 。页容量对于内存子系统而言是一个很重要的指标。这个参数取决于芯片的容量与位宽的设计。由于与本文的关系不大,就不具体举例了。


DDR内存储器的终极优化

??? 早期 Intel 845 芯片组 MCH 的资料:它可以支持 2、4、8、16KB 的页容量

??? 总之,我们要知道,由于寻址对同一 L-Bank 内行地址的单一性,所以一个 L-Bank 在同一时间只能打开一个页面,一个具有 4 个 L-Bank 的内存芯片,可以打开 4 个页面。这样,以这种芯片组成的 P-Bank,也就最后具备了 4 个页面,这是目前 DDR SDRAM 内存模中每个 P-Bank 的页面最大值。

?

????L-Bank 交错自动预充电 / 读取时序图: L-Bank 0 与 L-Bank 3 实现了无间隔交错读取,避免了 tRP与tRCD对性能的影响 ,是最理想的状态

?

Intel 845 芯片组 MCH 的资料:其中表明它可以支持 24 个页面同时处于打开状态

?

BL与相应的工作领域

?

Intel 875P 的页面控制特性,可以发现双通道与单通道时有所不同

??? 目前的 875P 主板都是 4 条 DIMM 的设计,可以最大安装 4 条双 P-Bank 的内存模组,也就是说一共是 8 个 P-Bank,合 32 个页面。但从上图中可以发现,当为双通道时,最多可打开的页面数减半,变成 16 个,但页面容量则翻了一倍。这就是意味着,组成双通道在两条内存模组在控制器的眼中就是一条 128bit 位宽的模组,由于寻址指令相同,所以两个通道内的相同 P-Bank 里内存芯片在同一时间的工作行相同,这样便使可打开的页面数减少,但页容量增加。相反,如果是单通道,则与 845 主板一样,简单的累加各内存模组的页面就可以了,页面数量可以达到最多,但容量不会成倍增加。

??? 不要小看这点区别,页面的多少与容量关系到内存控制器能力的发挥。比如交错控制,如果有 32 个页面可供选择,绝对比 4 个页面时轻松一些,寻址冲突可以进一步减少,反过来,页面容量的提高,可以允许更长时间的背靠背式的寻址,这也对提高内存效率提供了帮助。关键就在于控制器怎么协调好页面数量与页面容量之间的关系。

DDR内存储器的终极优化

??? 从中可以发现,页面容量固定不变,页面数则成倍增加。在下面的优化实验中,我们主要考验页面数以及 tRAS 这个参数的不同设定在不同内存配置下对性能的影响。此外,我们还会讨论 BL、刷新周期等 BIOS 可能出现的调整参数对性能的影响。这里需要指出,本专题中(包括后面的内存测试),数字 A-B-C-D 分别对应的参数是: CL-tRCD-tRP-tRAS。

?

在上文中,我们引入了很多鲜为人知的一些概念。由此我们会发现以往的优化原则基本上存在着很多盲目的成分。目前几乎所有的内存优化与测试文章(包括国外的一些知名网站)都告诉读者,只要是和内存沾边的时序参数,越小越好!但当你看过本文后,又会有何感想呢?显然,之前的优化原则并不严谨也缺乏科学的论证。在经历了优化实验后,我们可以试着总结其中的原因,以进一步探讨 tRAS 对内存性能所带来的影响。

?

?

?

?

?

?

?

?

?

?

??? 当 BL=4、tRAS=8 时,预充电不会被拖后,而且之前有 4 个时钟周期可以接受写入指令,比 tRAS=5 多一个,增加了背靠背操作的机会。

?

?

??? 从以上的分析中,我们能发现一些 tRAS 对背靠背操作的一些影响(似乎对读取的影响比对写入的影响大一点,对于上文的 PCMark04 的详细测试数据,也可以发现这一点),但当 tRCD 越长,留给读 / 写命令至预充电命令之间的时间越短时,短 tRAS 相对于长 tRAS 的这方面差距才会慢慢变小。但是,我们不能抹杀短 tRAS 在降低 PMR 方面的贡献,尤其是当可供管理的页面较少时,短 tRAS 的优势就会比较明显。如果 tRAS 较长,页面关得慢,且总页面数量又少,很可能会出现芯片组周转不开从而增加 PMR 的情况。但当芯片组可控制的页面增多后,长 tRAS 在背靠背操作方面的优势就会逐渐显现,因为通过芯片组的调度,寻址冲突已经不再那么严重了。

?

?

??? 不过,有人可能会发现 BIOS 中往往不会提供相关的设置选项,或者提供的选项不够用怎么办(比如 875 支持 Tras=10,但 P4C800 和 P4P800 都只能到 8),这可怎么办呢?其实,除了 BIOS 可以调节内存的时序参数,有些软件也可以,如著名的 WPCREDIT,就可以更改某些芯片组的内存控制器的寄存器,但是,目前大众能了解的寄存设置情况只有 Intel 的芯片。所以,在此我也不打算详细介绍软件修改的方法,更何况 875/865 要想调出相关的设备寄存器还需要先改动其他的寄存器,比较麻烦,而且许多 875/865 主板是不可改的。至于其他的芯片组,大家可以通过在 BIOS 改变一些选项,然后用 CPU-Z 之类的软件导出寄存器,通过对比能发现一些不同,然后试着用 WPCREDIT 进行修改,但这么做会非常繁琐,并且在不知道寄存器的位数类型 (8、16 还 32bit)时,抱着“瞎猫碰死耗子”的心态去尝试会比较危险。所以,在此我只讲讲大概的方法,并不会提倡这种人工修改寄存器的方式。

?

?

??? 至此,我们可以总结出以下几点内存优化的原则和相关的技巧,供大家参考:

?

?

1、对内存的优化要从系统整体出发,不要局限于内存模组或内存芯片本身的参数,而忽略了内存子系统的其他要素

?

?

2、目前的芯片组都具备多页面管理的能力,所以如果可能,请尽量选择双 P-Bank 的内存模组以增加系统内存的页面数量。但怎么分辨是单 P-Bank 还是双 P-Bank 呢?就目前市场上的产品而言 ,256MB 的模组基本都是单 P-Bank 的,双面但每面只有 4 颗芯片的也基本上是单 P-Bank 的,512MB 的双面模组则基本都是双 P-Bank的

?

?

3、页面数量的计算公式为: P-Bank 数量 X4,如果是 Pentium4 或 AMD 64 的双通道平台,则还要除以 2。比如两条单面 256MB 内存,就是 2X4=8 个页面,用在 875 上组成双通道就成了 4 个页面

?

?

4、CL、tRCD、tRP 为绝对性能参数,在任何平台下任何时候,都应该是越小越好,调节的优化顺序是 CL → tRCD → tRP

?

?

5、当内存页面数为 4 时 ,tRAS 设置短一些可能会更好,但最好不要小于 5。另外,短 tRAS 的内存性能相对于长 tRAS 可能会产生更大的波动性,对时钟频率的提高也相对敏感

?

?

6、当内存页面数大于或等于 8 时,tRAS 设置长一些会更好

?

?

7、对于 875 和 865 平台,双通道时页面数达到 8 或者以上时,内存性能更好

?

?

8、对于非双通道 Pentium4 与 AMD 64 平台,tRAS 长短之间的性能差异要缩小

?

?

9、Pentium4 或 AMD 64 的双通道平台下 ,BL=4 大多数情况下是更好的选择,其他情况下 BL=8 可能是更好的选择,请根据自己的实际应用有针对的调整

?

?

10、适当加大内存刷新率可以提高内存的工作效率,但也可能降低内存的稳定性

?

小提示:BIOS中内存相关参数的设置要领

Automatic Configuration“自动设置”(可能的选项:On/ Off或Enable/Disable)

??? 可能出现的其他描述为:DRAM Auto、Timing Selectable、Timing Configuring By SPD等,如果你要手动调整你的内存时序,你应该关闭它,之后会自动出现详细的时序参数列表。

Bank Interleaving(可能的选项:Off/Auto/2/4)

??? 这里的Bank是指L-Bank,目前的DDR RAM的内存芯片都是由4个L-Bank所组成,为了最大限度减少寻址冲突,提高效率,建议设为4(Auto也可以,它是根据SPD中的L-Bank信息来自动设置的)。

Burst Length“突发长度”(可能的选项:4/8)

????一般而言,如果是AMD Athlon XP或Pentium4单通道平台,建议设为8,如果是Pentium4或AMD 64的双通道平台,建议设为4。但具体的情况要视具体的应用而定。

CAS Latency “列地址选通脉冲潜伏期”(可能的选项:1.5/2/2.5/3)

??? BIOS中可能的其他描述为:tCL、CAS Latency Time、CAS Timing Delay。不用多说,能调多短就调多短。

Command Rate“首命令延迟”(可能的选项:1/2)

??? 这个选项目前已经非常少见,一般还被描述为DRAM Command Rate、CMD Rate等。由于目前的DDR内存的寻址,先要进行P-Bank的选择(通过DIMM上CS片选信号进行),然后才是L-Bank/行激活与列地址的选择。这个参数的含义就是指在P-Bank选择完之后多少时间可以发出具体的寻址的L-Bank/行激活命令,单位是时钟周期。显然,也是越短越好。但当随着主板上内存模组的增多,控制芯片组的负载也随之增加,过短的命令间隔可能会影响稳定性。因此当你的内存插得很多而出现不太稳定的时间,才需要将此参数调长 。目前的大部分主板都会自动设置这个参数,而从上文的ScienceMark 2.0测试中,大家也能察觉到容量与延迟之间的关系。

RAS Precharge Time “行预充电时间”(可能的选项:2/3/4)

??? BIOS中的可能其他描述:tRP、RAS Precharge、Precharge to active。通过上文的讲述,大家现在应该明白它也是越小越

RAS-to-CAS Delay“行寻址至列寻址延迟时间”(可能的选项:2/3/4/5)

??? BIOS中的可能其他描述:?tRCD、RAS to CAS Delay、Active to CMD等。数值越小越好。

Active to Precharge Delay“行有效至行预充电时间”(可能的选项:1……5/6/7……15)

??? BIOS中的可能其他描述:tRAS、Row Active Time、Precharge Wait State、Row Active Delay、Row Precharge Delay等。根据上文的分析,这个参数要根据实际情况而定,具体设置思路见上文,并不是说越大或越小就越好。

读书人网 >编程

热点推荐