正确熟悉时序参数
注:本文为 《速度与优化并进 DDR之巅峰对决——内存横向评测兼谈内存优化》专题的第一部分
有关内存优化的文章其实已经有很多了,可能大家都没觉得没什么了不起的,不就是那几个参数吗?这还用讲?但是,我相信 90% 以上的人并没有完全真正理解那些时序参数的含义。我敢说,目前很多的优化原则都是有问题的,甚至有误导的倾向!
本人在此之前曾有一篇专门探讨内存原理与相关参数的大型专题,其中所讲到的一些原理其实对优化就有很大的启发意义。的确,虽然在 BIOS 中就是那么几个可以调节的内存时序参数,但假如不正确了解它们的意思,并不是每个人都知道如何正确的调节。有人可能会说,这有什么难的,与时序相关的时序参数,肯定都是越小越好呀,错!这就是我今天要着重讲到的问题。
真正熟悉时序参数
首先,我们还是先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述以 SDRAM 为例,因为时序图看起来会简单一些,但相关概念与 DDR SDRAM 的基本相同。
SDRAM 的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行 (Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元 , 那么这个表格(存储阵列)叫什么呢?它就是逻辑 Bank(Logical Bank,下文简称 L-Bank)。
SDRAM 内部 L-Bank 示意图,这是一个 8X8 的阵列 ,B 代表 L-Bank 地址编号,C 代表列地址编号,R 代表行地址编号。假如寻址命令是 B1、R2、C6,就能确定地址是图中红格的位置
目前的内存芯片基本上都是 4 个 L-Bank 设计,也就是说一共有 4 个这样的“表格”。寻址的流程也就是——先指定 L-Bank 地址,再指定行地址,然后指列地址最终的确寻址单元。
在实际工作中,L-Bank 地址与相应的行地址是同时发出的,此时这个命令称之为“行有效”或“行激活”(Row Active)。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读 / 写命令”来表示列寻址。根据相关的标准,从行有效到读 / 写命令发出之间的间隔被定义为 tRCD,即 RAS to CAS Delay(RAS 至 CAS 延迟 ,RAS 就是行地址选通脉冲,CAS 就是列地址选通脉冲),大家也可以理解为行选通周期。tRCD 是 SDRAM 的一个重要时序参数,可以通过主板 BIOS 经过北桥芯片进行调整。广义的 tRCD 以时钟周期 (tCK,Clock Time)数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于 PC100 SDRAM(时钟频率等同于 DDR-200),tRCD=2,代表 20ns 的延迟,对于 PC133(时钟频率等于 DDR-266)则为 15ns。
图中显示的是 tRCD=3
接下来,相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的 I/O 接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常闻名的 CL(CAS Latency,列地址脉冲选通潜伏期)。CL 的数值与 tRCD 一样,以时钟周期数表示。如 DDR-400,时钟频率为 200MHz,时钟周期为 5ns,那么 CL=2 就意味着 10ns 的潜伏期。不过 ,CL 只是针对读取操作,对于 SDRAM,写入是没有潜伏期的,对于 DDR SDRAM,写入潜伏期在 0.75 至 1.25 个时针周期之间。
图中标准 CL=2,tAC 是有关内部信号处理的周期,可以不用关心
目前内存的读写基本都是连续的,因为与 CPU 交换的数据量以一个 Cache Line(即 CPU 内 Cache 的存储单位)的容量为准,一般为 64 字节。而现有的 P-Bank 位宽为 8 字节,那么就要一次连续传输 8 次,这就涉及到我们也经常能碰到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度 (Burst Lengths,简称 BL)。
在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读 / 写操作而不再需要控制器连续地提供列地址 (SDRAM 与 DDR SDRAM 的突发传输对列寻址的操作数量有所不同,在此不再细说)。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是 tRCD+CL)外,其后每个数据只需一个周期的即可获得。
突发连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与 BL 相同)即可做到连续的突发传输
在数据读取完之后,为了腾出读出放大器以供同一 L-Bank 内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行。还是以上面那个 L-Bank 示意图为例。当前寻址的存储单元是 B1、R2、C6。假如接下来的寻址命令是 B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务。但假如地址命令是 B1、R4、C4,由于是同一 L-Bank 的不同行,那么就必须要先把 R2 关闭,才能对 R4 寻址。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是 tRP(Row PRecharge command Period,行预充电有效周期),单位也是时钟周期数。
本图(可点击放大)为一个完整的从行寻址到行关闭的时序图,图中所表示的 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 内的相同工作行的总集合 。页容量对于内存子系统而言是一个很重要的指标。这个参数取决于芯片的容量与位宽的设计。由于与本文的关系不大,就不具体举例了。
早期 Intel 845 芯片组 MCH 的资料:它可以支持 2、4、8、16KB 的页容量
总之,我们要知道,由于寻址对同一 L-Bank 内行地址的单一性,所以一个 L-Bank 在同一时间只能打开一个页面,一个具有 4 个 L-Bank 的内存芯片,可以打开 4 个页面。这样,以这种芯片组成的 P-Bank,也就最后具备了 4 个页面,这是目前 DDR SDRAM 内存模中每个 P-Bank 的页面最大值。
一、影响性能的主要时序参数
在讲完内存的基本操作流程与相关的 tRP、tRCD、CL、BL 之后,我们就开始深入分析这些参数对内存性能的影响。所谓的影响性能是并不是指 SDRAM 的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。
非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是 tRCD、CL 和 tRP。按照规定,每条正规的内存模组都应该在标识上注明这三个参数值,可见它们对性能的敏感性。
以内存最主要的操作——读取为例。tRCD 决定了行寻址(有效)至列寻址(读 / 写命令)之间的间隔 ,CL 决定了列寻址到数据进行真正被读取所花费的时间,tRP 则决定了相同 L-Bank 中不同工作行转换的速度。现在可以想象一下对某一页面进行读取时可能碰到的几种情况(分析写入操作时不用考虑 CL 即可):
1、要寻址的行与 L-Bank 是空闲的。也就是说该 L-Bank 的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为 tRCD+CL,这种情况我们称之为页命中 (PH,Page Hit)。
2、要寻址的行正好是现有的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为 CL,这就是所谓的背靠背 (Back to Back)寻址,我们称之为页快速命中(PFH,Page Fast Hit)或页直接命中(PDH,Page Direct Hit)。
3、要寻址的行所在的 L-Bank 中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是 tRP+tRCD+CL,这种情况我们称之为页错失 (PM,Page Miss)。
显然,PFH 是最理想的寻址情况,PM 则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为 PHR —— PH Rate、PFHR —— PFH Rate、PMR —— PM Rate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高 PHR 与 PFHR,同时减少 PMR,以达到提高内存工作效率的目的。
二、增加 PHR 的方法
显然,这与预充电治理策略有着直接的关系,目前有两种方法来尽量提高 PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一 L-Bank 不同行寻址时发生冲突的可能性。但是,假如要在当前行工作完成后马上打开同一 L-Bank 的另一行工作时,仍然存在 tRP 的延迟。怎么办? 此时就需要 L-Bank 交错预充电了。
早期非常令人关注的VIA 4路交错式内存控制,就是在一个L-Bank工作时,对另一个L-Bank进行预充电或者寻址(假如要寻址的L-Bank是关闭的)。这样,预充电与数据的传输交错执行,当访问下一个L-Bank时,tRP已过,就可以直接进入行有效状态了,假如配合得理想,那么就可以实现无间隔的L-Bank交错读/写(一般的,交错操作都会用到自动预充电),这是比PFH更好的情况,但它只出现在后续的数据不在同一页面的时时候。当时VIA声称可以跨P-Bank进行16路内存交错,并以LRU(Least Recently Used,近期最少使用)算法进行 交错预充电/寻址治理。
点击查看大图
L-Bank 交错自动预充电 / 读取时序图: L-Bank 0 与 L-Bank 3 实现了无间隔交错读取,避免了 tRP与tRCD对性能的影响 ,是最理想的状态
三、增加 PFHR 的方法
无论是自动预充电还是交错工作的方法都无法消除同行(页面)寻址时tRCD 所带来的延迟。要解决这个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收工作命令,以达到背靠背的效果,此时就只剩下 CL 所造成的读取延迟了(写入时没有延迟)。
如何做到这一点呢?这就是北桥芯片的责任了。现在我们就又接触到 tRAS 这个参数,在 BIOS 中所设置的 tRAS 是指行有效至预充电的最短周期,在内存规范中定义为 tRAS(min),过了这个周期后就可以发出预充电指令。对于 SDRAM 和 DDR SDRAM 而言,一般是预充电命令至少要在行有效命令 5 个时钟周期之后发出,最长间隔视芯片而异(目前的 DDR SDRAM 标准一般基本在 70000ns 左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有 70000ns 的持续工作时间而不用进行预充电。显然,只要北桥芯片不发出预充电(包括答应自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有 tRCD 的延迟。可见,假如北桥芯片在能同时打开的行(页)越多,那么 PFHR 也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些 SDRAM 芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。
Intel 845 芯片组 MCH 的资料:其中表明它可以支持 24 个页面同时处于打开状态
但是,可同时打开的页数也是有限制的。从 SDRAM 的寻址原理讲,同一L-Bank 中不可能有两个打开的行(读出放大器只能为一行服务),这就限制了可同时打开的页面总数。以 SDRAM 有 4 个 L-Bank,北桥最多支持 8 个 P-Bank(4 条 DIMM)为例,理论上最多只能有 32 个页面能同时处于打开的状态。而假如只有一个 P-Bank,那么就只剩下 4 个页面,因为有几个 L-Bank 才能有同时打开几个行而互不干扰 。Intel 845 的 MHC 虽然可以支持 24 个打开的页面,那也是指 6 个 P-Bank 的情况下(845MCH 只支持 6 个 P-Bank)。可见 845 已经将同时打开页数发挥到了极致。
不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读 / 写。而打开新页时就必须要关闭一个打开的页,假如此时打开的页面已是北桥所支持的最大值但还不到理论极限的话 (假如已经达到极限,就关闭有冲突的L-Bank内的页面即可),就需要一个替换策略,一般都是用 LRU 算法来进行,这与 VIA 的交错控制大同小异。
回到正题,虽然 tRAS 代表的是最小的行有效至预充电期限,但一般的,北桥芯片一般都会在这个期限后第一时间发出预充电指令(自动预充电时,会在tRAS之后自动执行预充电命令),只有在与其他操作相冲突时预充电操作才被延后(比如,DDR SDRAM 标准中规定,在读取命令发出后不能立即发出预充电指令)。因此,tRAS 的长短一直是内存优化发烧友所争论的话题,在最近一两年,由于这个参数在 BIOS 选项中越来越普及,所以也逐渐被用户所关注。其实,在 SDRAM 时代就没有对这个参数有刻意的设定,在 DDR SDRAM 的官方组织 JEDEC 的相关标准中,也没有把其列为必须标明的性能参数 (CL、tRCD、tRP 才是),tRAS 应该是某些主板厂商炒作出来的,并且在主板说明书上也注明越短越好。
其实,缩小 tRAS 的本意在于,尽量压缩行打开状态下的时间,以减少同 L-Bank 下对其他行进行寻址时的冲突,从内存的本身来讲,这是完全正确的做法,符合内存性能优化的原则,但假如放到整体的内存系统中,伴随着主板芯片组内存页面控制治理能力的提升,这种做法可能就不见得是完全正确的,在下文中我们会继续分析 tRAS 的不同长短设置对内存性能所带来的影响。
四、BL 长度对性能的影响
从读 / 写之间的中断操作我们又引出了 BL(突发长度)对性能影响的话题。首先,BL 的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的 BL,这是厂商们经过多年的实践总结出来的。
BL与相应的工作领域
BL 越长,对于连续的大数据量传输很有好处,但是对零散的数据,BL 太长反而会造成总线周期的浪费,虽然能通过一些命令来进行终止,便也占用了控制资源。以 P-Bank 位宽 64bit 为例 ,BL=4 时,一个突发操作能传输 32 字节的数据,为了满足 Cache Line 的容量需求,还得多发一次,假如是 BL=8,一次就可以满足需要,不用再次发出读取指令。而对于 2KB 的数据 ,BL=4 的设置意味着要每隔 4 个周期发送新的列地址,并重复 63 次。而对于 BL=256,一次突发就可完成,并且不需要中途再进行控制,但假如仅传输 64 字节,就需要额外的命令来中止 BL=256 的传输。而额外的命令越多,越占用内存子系统的控制资源,从而降低总体的控制效率。从这可以看出 BL 对性能的影响因素,这也是为什么 PC 上的内存子系统的 BL 一般为 4 或 8 的原因。但是不是 8 比 4 好,或者 4 比 8 好呢?并不能统一而论,这在下文会分析到。
到此,大家应该有一些优化的眉目了吧。我们可以先做一下界定,任何情况下,只要数值越小或越大(单一方向),内存的性能会越好的参数为 绝对参数 ,而数值越小或越大对性能的影响不固定的参数则为 相对参数。那么,CL、tRCD、tRP 显然就是绝对参数,任何情况下减少它们的周期绝对不会错。而且从上文的分析可以发现 ,从重要性来论,优先优化的顺序也是 CL → tRCD → tRP,因为 CL 的碰到的机会最多,tRCD 其次,tRP 假如页面交错治理的好,大多不受影响。而 BL、tRAS 等则可以算是相对参数。也正是由于这些相对参数的存在,才使得内存优化不再那么简单。
有关内存原理、工作流程与相关参数就先讲到这,假如有爱好进一步了解 DDR SDRAM 的原理可以浏览《存储时代》的内存专题。
双通道时代的优化思路
好了,上面已经讲完基本的相关参数与原理,下面就结合实际来看看具体如何设置。
目前,以 Intel 和 NVIDIA 为首的 Intel 与 AMD 平台都进入了双通道时代,这也是今后的主要潮流。所以我们这次也是以双方的双通道平台为试验平台,分别是 875P 和 nForce 2。鉴于 AMD 64 离我们还比较远,因此我们没有在 AMD 64 的双通道平台上进行测试。
首先要讲明,Intel 865/875 的双通道与 nForce 2 的双通道不是一码事。两者目前还没有可比性。简而言之 ,865/875 只用一个 128bit 位宽的内存控制器控制两个通道,这就意味着发给两个通道的寻址指令是一模一样的,从而也要求组成双通道的内存模组的容量、位宽设计完全一样,因为不同位宽的芯片,寻址指令也不一样,而一个内存控制器是无法发出两套指令的 。nForce2 则是两个独立的控制器分别控制两个不同的通道,这样每个通道的内存模组的架构就可以不同,因为指令也是独立的。但是 nForce 2 在双通道带宽合成方面会有比较大的麻烦,究竟内存地址的转换是相当复杂的。所以,nForce 2 与 865/875 代表了两种设计。而这样的设计体现出来的内存配置也有了变化。在下文中,我们以 875P 平台为主 nForce 2 平台为辅,来进行优化试验。
先让我们看看 875P 内存页面控制方面的一些特点:
Intel 875P 的页面控制特性,可以发现双通道与单通道时有所不同
目前的 875P 主板都是 4 条 DIMM 的设计,可以最大安装 4 条双 P-Bank 的内存模组,也就是说一共是 8 个 P-Bank,合 32 个页面。但从上图中可以发现,当为双通道时,最多可打开的页面数减半,变成 16 个,但页面容量则翻了一倍。这就是意味着,组成双通道在两条内存模组在控制器的眼中就是一条 128bit 位宽的模组,由于寻址指令相同,所以两个通道内的相同 P-Bank 里内存芯片在同一时间的工作行相同,这样便使可打开的页面数减少,但页容量增加。相反,假如是单通道,则与 845 主板一样,简单的累加各内存模组的页面就可以了,页面数量可以达到最多,但容量不会成倍增加。
不要小看这点区别,页面的多少与容量关系到内存控制器能力的发挥。比如交错控制,假如有 32 个页面可供选择,绝对比 4 个页面时轻松一些,寻址冲突可以进一步减少,反过来,页面容量的提高,可以答应更长时间的背靠背式的寻址,这也对提高内存效率提供了帮助。要害就在于控制器怎么协调好页面数量与页面容量之间的关系。
从中可以发现,页面容量固定不变,页面数则成倍增加。在下面的优化实验中,我们主要考验页面数以及 tRAS 这个参数的不同设定在不同内存配置下对性能的影响。此外,我们还会讨论 BL、刷新周期等 BIOS 可能出现的调整参数对性能的影响。这里需要指出,本专题中(包括后面的内存测试),数字 A-B-C-D 分别对应的参数是: CL-tRCD-tRP-tRAS。
QQread.com 推出各大专业服务器评测 linux服务器的安全性能 SUN服务器 HP服务器 DELL服务器 IBM服务器 联想服务器 浪潮服务器 曙光服务器 同方服务器 华硕服务器 宝德服务器双通道优化实战测试(上)
首先们进行的是在 875P 上的全面测试实验,此时我们将在 BIOS 默认的参数基础上进行调校,PAT 与 HT 均为打开状态 ,BL=8,刷新周期设为 Auto,时序方面分别设定为 2-3-3-5 和 2-3-3-8。
一、PCMark04 测试
PCMark04 具有一个比较专业且全面的内存测试功能,但普通的内存测试项目只有 16 个,本次我们通过高级设置调出全部的 44 项测试选项。通过上面的成绩可以发现 ,2-3-3-8 一直比 2-3-3-5 的性能要好,并且随着页面数量的增加,这种优势也更大。我们选择 2-3-3-8 得分最高的 1GB 配置下的成绩具体列出来,大家可以从中看出一些特点。
从中可以看出,2-3-3-8 取得了大多数测试的胜利,虽然有些测试成绩差异很小,应该属于测试误差范围之内,但我们可以发现这种领先呈“块状”分布,所以也应该有一定的代表性,尤其是“块拷贝(读后写)”,2-3-3-8 的性能明显占优。而且除了随机访问性能以外 ,2-3-3-8 在大容量数据传输方面都要好于 2-3-3-5。
二、ADIA32 3.93 测试
AIDIA32 3.93 是一款兼系统资源查看与简单测试的软件,不过其内存带宽测试功能还是经常被人所用到。
ADIA32 3.93 的测试相对简单一些,从中可以发现 2-3-3-5 在少页面时读取性能要占优级,但到了 16 个页面时,被 2-3-3-8 反超,同时 2-3-3-8 一直保持着写入性能方面的优势。
三、3DMark 2001SE 测试
3DMark2001SE 是一款老牌的 D3D 测试软件,虽然主要是考验显卡的能力,但由于内存子系统也是图形处理中的重要环节,所以在显卡处理能力很强大时,仍可以看出内存子系统的测试中的些微影响,而 GF5900Ultra 提供了很大的表现空间。
其实,在测试中,两种时序下所体现的性能差异并不明显(也许这个测试对内存本来就不是很敏感),甚至可以怀疑是测试的误差。另外,在测试中我还发现一个现象 ,2-3-3-5 的性能表现不稳定,有时会比 2-3-3-8 低出 2、3 百分,这可能是因为短 tRAS 造成了页面治理的不确定性(有时可以预充电,有时则要推迟)。相比下 ,2-3-3-8 表现得相对稳定一些。不过,也能看出在页面增多的情况下,2-3-3-8 有领先的趋势。
四、AquaMark 3.0 测试
AquaMark 3.0 与 3DMark 2001SE 一样,只不过将测试平台指向了 DX9,从中我们发现其与 3DMark 2001SE 有相似的表现。在 4、8 页面时 ,2-3-3-8 没有什么优势,在 16 页面时后来者居上。
双通道优化实战测试(下)
五、Sandra Standard 2004 SP1 测试
这也是闻名的测试软件了,经常能在网上看到网友在比试该软件所给出的内存带宽贴图。
与前面的测试所体现出来的差不多,页面少的时候,2-3-3-5 占先,页面多的时候,2-3-3-8 会反超。
六、ScienceMark 2.0beta 测试
笔者认为 ScienceMark 是一个比较优秀的测试软件,测试的项目也比较多,而其所自带的内存测试功能也别具特色。
ScienceMark 的测试结果与前面所体现的不太一样,页面少的时候 2-3-3-5 反而更低,但两者都从页面数量的提高中获益。而且,值得注重的是,在 8 个页面时 ,2-3-3-8 的表现最好,不光带宽领先,而且在延迟方面也有了大的进步。不过,在 16 页面时,2-3-3-8 的延迟方面就全面落后了。我感觉 ScienceMark 采用了与众不同的测试逻辑与方法,但也从侧面反映了两种 tRAS 设置的一些差异。
七、Quake III Arena 1.32 测试
Quake III 就不用我多说了,它的引擎效率极为出众,至今仍然是一款出色的测试软件,并且,它对内存的效率也是比较敏感的。
是不是有些吃惊,随着页面的增加,2-3-3-5 与 2-3-3-8 的性能都有较为明显的增长。难道是 Q3 很吃内存。我想应该不是,假如你打开任务治理器,就会发现 Q3 的内存占用量并不高 ,512MB 已经能满足要求了。之所以能出现 4、5 帧的性能增长,原因除了1GB内存本身对Windows xp更适合外,可能就在于页面的增多,提高了内存治理效率,进一步的降低了寻址冲突。而 2-3-3-8 的优势也在 8 个页面时开始发挥出来。
在测试中,我们感觉到 Q3 对默认的 HQ(800X600)模式似乎有着优化,它在测试中的表现最为稳定,而且性能提升显著 。Fastest 模式由于显卡基本上是在等内存提供“原料”,所以对内存的效率也非常的敏感。而在 HQ(1280X1024)模式下处理的重任则落在了显卡身上,内存的供给倒是其次了。不过,与 3DMark 2001SE 的表现相似 ,2-3-3-5 的性能表现不是很稳定,有时 5 次测试结果中最好成绩与最差成绩会有比较大的差距,这可能也由于较短的行选通周期所带来的页面治理不确定性所造成的。
八、nForce 2 平台下的测试
升技的 AN7 主板可调节的 tRAS 范围出奇的大,最高可到 15,最低达到 1。我们选择了 3 和 15 两个较为极端的参数进行了对比测试,测试结果与 875P 平台相差不多,但优劣并不是很明显。以下是 PCMark04 的测试结果。
AIDA32 的测试只在 1GB 容量下进行,2-3-3-15 的读 / 写速度(MB/s)为 2991/1135,2-3-3-3 时为 2950/1080。在 Q3 的测试中 ,1.5GB 时,2-3-3-15 出现了稍微明显的领先(约一帧)。1GB 时,两者的表现基本持平。
对于这个表现,笔者认为首先可能因为是页面容量不够大所至,由于不像 875P 那样的双通道,nForce 2 平台测试中的页面容量只有 16KB,我们在 P75P 平台上进行的 1.5GB 单通道(页面容量降低为 16KB)测试也反映出这一点 ,PCMark04 的分值非常接近。另外,这可能也与 nForce2 的页面治理策略以及 tRAS 并不是越大越好有关。通过前面的技术分析,我们知道它是一个相对参数,不是说越大或者越小,性能就肯定会越好,它还要结合具体的情况而定,它应该与页面数、页面容量和芯片组的治理能力之间有一个比较好的平衡点。由于时间的关系,我们没有进行 15 以下的 tRAS 的测试,究竟我们这次不是针对某一芯片组的优化探讨,而是从一个总体上讲述总的优化原则。但从一些论坛的反映来看 ,11 似乎是一个比较好设置水平,普遍反映它比 tRAS=5 时的性能要好,有爱好的朋友可以自己试试。
九、BL 与内存刷新率对性能的影响
既然 Q3 对内存性能如此感冒,我们就在华硕的 P4C800 主板上进行了其他的实验—— BL 与内存刷新率的调整。下图就是 P4C800 的 BIOS 中内存设置的介面 ,P4P800 与之相同。
将 Configure DRAM Timing by SPD 设为 Disable 后,会出现 BL(DRAM Burst Length)的调节选项 ,我们将其调成 4,然后再进行 Q3 测试。
测试的结果令人称奇。我们在 2GB 的内存容量下,Fastest 模式下较原来的 BL=8 提高了两帧 ,HQ 与 HQ(1280 X 1024)模式下也都提高了 1 帧,这是很不错的成绩嘛。看到这里,可能会有人希奇,不是听说 BL 越长越好吗?怎么会这样?其实,原因在上文已经讲到,当 875 组成双通道时,接口的位宽是 128bit,合 16 个字节。而与 CPU 交换数据的基本单位是 64 字节,所以双通道时只需传输 4 个周期即可。因此,大多数情况下 BL=4 是双通道 Pentium4 主板的一个更佳的选择。BL=8 虽然一次能传送 128 字节,但假如碰到不需要传送这么多的时候(小数据传输)反而会耽误时间。不过,在单通道主板或非 875 这种类型的双通道主板上 ,BL=8 则是正确的选择。可见,BL 这个参数,不能像 CL 那样可以予以定论。总之,假如是双通道 Pentium4 或 AMD 64 的用户,当你的日常工作很普通,没有什么大数据量的读写应用 ,BL=4 可能会比较适合,假如经常进行大规模数据处理,可能 BL=8 反而更好。后来,在进一步的 Q3 测试中,我们还发现小 tRAS 似乎更适合采用短 BL,大 tRAS 则与长 BL 是个好的组合。
接着我们在 BIOS 设置中打开图中画红圈的内存刷新率选项。其中除了 AUTO 之外,还有 15.6 μ s、7.8 μ s、64 μ s、64T 几个选项。不明白意思的人,可能就会想肯定是越小越好,其实不然。
目前市场上的内存模组基本都是采用 32M × 8bit 的 256Mb 芯片,这类芯片的刷新设计都是 8K/64ms,也就是说刷新周期是 7.8125 μ s,意味着每隔 7.8125 μ s 刷新一行,此时假如赶上要进行操作就只能自认倒霉,所以加大刷新间隔将有助于降低“自认倒霉”的概率。主板 BIOS 中所提供的就是这一选项,其中的 64T,笔者分析 T 可能是指时钟周期,假如是 DDR-400 的话 ,T 就是 5ns,64T 就是 320ns,这是非常短的,而此次测试所使用的内存正常情况下是 7.8 μ s 的刷新率,那么我们就可以调高一倍至 15.6 μ s。
测试的结果,Q3 在 Fastest 模式下,在 BL=4 的基础上再次增加 3 帧的的成绩,HQ 与 HQ(1280 X 1024)模式下也都再次提高了 1 帧。不过,当我们把刷新率再往高调,似乎就没有什么作用了。需要注重的是,刷新率不宜调得过长,否则可能会引起数据丢失,导致系统的不稳定 ,15.6 μ s 应试是一个比较好的选择。另外,P4C800/P4P800 中 BIOS 中的 DRAM Idle Timer(空闲计时)对内存性能的影响并不大,建议设为 Auto 即可。
小资料:内存是怎么刷新的
之所以称为 DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最重要的操作。
刷新操作与预充电中重写的操作一样,都是用芯片内的读出放大器先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有 L-Bank 中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank 预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。
那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是 64ms(毫秒 ,1/1000 秒),也就是说每一行刷新的循环周期是 64ms。这样刷新速度就是:行数量 /64ms。我们在看内存规格时,经常会看到 4096 Refresh Cycles/ 64ms 或 8192 Refresh Cycles/64ms 的标识,这里的 4096 与 8192 就代表这个芯片中每个 L-Bank 的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化 ,4096 行时为 15.625 μ s(微秒,1/1000 毫秒),8192 行时就为 7.8125 μ s。目前,256Mbit 的芯片基本都是 8K/64ms 的刷新设计。
刷新操作分为两种:自动刷新(Auto Refresh,简称 AR)与自刷新 (Self Refresh,简称 SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于 AR,SDRAM 内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说 CAS 在 RAS 之前有效。所以 ,AR 又称 CBR(CAS Before RAS,列提前于行定位)式刷新。由于刷新涉及到所有 L-Bank,因此在刷新过程中,所有 L-Bank 都停止工作,而每次刷新所占用的时间为 9 个时钟周期 (PC133 标准),之后就可进入正常的工作状态,也就是说在这 9 个时钟期间内,所有工作指令只能等待而无法执行。64ms 之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对 SDRAM 的性能造成影响,但这是没办法的事情,也是 DRAM 相对于 SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。
QQread.com 推出各大专业服务器评测 Linux服务器的安全性能 SUN服务器 HP服务器 DELL服务器 IBM服务器 联想服务器 浪潮服务器 曙光服务器 同方服务器 华硕服务器 宝德服务器
单/双通道内存优化总结
在上文中,我们引入了很多鲜为人知的一些概念。由此我们会发现以往的优化原则基本上存在着很多盲目的成分。目前几乎所有的内存优化与测试文章(包括国外的一些知名网站)都告诉读者,只要是和内存沾边的时序参数,越小越好!但当你看过本文后,又会有何感想呢?显然,之前的优化原则并不严谨也缺乏科学的论证。在经历了优化实验后,我们可以试着总结其中的原因,以进一步探讨 tRAS 对内存性能所带来的影响。
前文已经讲过,tRAS 的本意是想尽量减少行寻址的冲突,降低 PMR,但这是从内存芯片本身角度出发的,假如从内存子系统的全局考虑,它可能会减少背靠背操作的机率。下面是笔者根据 JEDEC 发布的 DDR SDRAM 官方标准制作的时序示意图。从中我们可以发现短 tRAS 在某些情况下性能表现不佳的原因。
当 BL=8、tRAS=5 时,第二个可能出现的读取命令会因预充电而延后,使得连续突发传输无法进行,不能进行背靠背操作
当 BL=4、tRAS=5 时,第三个可能出现的读取命令会因预充电而延后,使得连续突发传输无法进行,只完成了一次背靠背操作
当 BL=8、tRAS=8 时,第二个读取指令会在预充电之前发出,并使预充电延后,从而完成了一次背靠背操作
当 BL=4、tRAS=8 时,第三个读取指令会在预充电之前发出,从而完成了两次背靠背操作
当 BL=8、tRAS=5 时,由于 DDR SDRAM 在写入时的时序限制,预充电最早可以出现的时间大大延长
当 BL=4、tRAS=5 时,由于 DDR SDRAM 在写入时的时序限制,预充电最早可以出现的时间被延后至第 8 个时钟周期
当 BL=8、tRAS=8 时,由于 DDR SDRAM 在写入时的时序限制,预充电最早可以出现的时间与 Tras=5 时一样
当 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等。根据上文的分析,这个参数要根据实际情况而定,具体设置思路见上文,并不是说越大或越小就越好。
好了,到这里,有关内存优化的探讨就告一段落,既然知道了相关的原则与方法,下面就要选选合适的“武器”了,接下来就是本专题的第二部分: DDR 巅峰对决之 19 款内存横向测试。 (若想就相关话题进行深入讨论,欢迎访问《存储时代》论坛)