DDR内存的终极优化(转载)_第1页
DDR内存的终极优化(转载)_第2页
DDR内存的终极优化(转载)_第3页
DDR内存的终极优化(转载)_第4页
DDR内存的终极优化(转载)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DDR内存的终极优化(转载)2004年的春天,ZOL准时拉开了DDR400内存专题的序幕。在我们逐步向您展示其魅力之前,请先来了解一下优化内存的相关知识。也许您已经有所了解,但绝不是全部。希望这些内容对您今后的应用有所帮助。正文:有关内存优化的文章其实已经有很多了,可能大家都没觉得没什么了不起的,不就是那几个参数吗?这还用讲?但是,我相信90%以上的人并没有完全真正理解那些时序参数的含义。我敢说,目前很多的优化原则都是有问题的,甚至有误导的倾向!本人在此之前曾有一篇专门探讨内存原理与相关参数的大型专题(文章发表于《电脑高手》),其中所讲到的一些原理其实对优化就有很大的启发意义。的确,虽然在BIOS中就是那么几个可以调节的内存时序参数,但如果不正确了解它们的意思,并不是每个人都知道如何正确的调节。有人可能会说,这有什么难的,与时序相关的时序参数,肯定都是越小越好呀,错!这就是我今天要着重讲到的问题。1、认识内存相关工作流程与参数首先,我们还是先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述以SDRAM为例,因为时序图看起来会简单一些,但相关概念与DDRSDRAM的基本相同。SDRAM的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)叫什么呢?它就是逻辑Bank(LogicalBank,下文简称L-Bank)。SDRAM内部L-Bank示意图,这是一个8X8的阵列,B代表L-Bank地址编号,C代表列地址编号,R代表行地址编号。如果寻址命令是B1、R2、C6,就能确定地址是图中红格的位置目前的内存芯片基本上都是4个L-Bank设计,也就是说一共有4个这样的“表格”。寻址的流程也就是——先指定L-Bank地址,再指定行地址,然后指列地址最终的确寻址单元。在实际工作中,L-Bank地址与相应的行地址是同时发出的,此时这个命令称之为“行有效”或“行激活”(RowActive)。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址。根据相关的标准,从行有效到读/写命令发出之间的间隔被定义为tRCD,即RAStoCASDelay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲),大家也可以理解为行选通周期。tRCD是SDRAM的一个重要时序参数,可以通过主板BIOS经过北桥芯片进行调整。广义的tRCD以时钟周期(tCK,ClockTime)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100SDRAM(时钟频率等同于DDR-200),tRCD=2,代表20ns的延迟,对于PC133(时钟频率等于DDR-266)则为15ns。图中显示的是tRCD=3接下来,相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的I/O接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的CL(CASLatency,列地址脉冲选通潜伏期)。CL的数值与tRCD一样,以时钟周期数表示。如DDR-400,时钟频率为200MHz,时钟周期为5ns,那么CL=2就意味着10ns的潜伏期。不过,CL只是针对读取操作,对于SDRAM,写入是没有潜伏期的,对于DDRSDRAM,写入潜伏期在0.75至1.25个时针周期之间。图中标准CL=2,tAC是有关内部信号处理的周期,可以不用关心目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个CacheLine(即CPU内Cache的存储单位)的容量为准,一般为64字节。而现有的P-Bank位宽为8字节,那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(BurstLengths,简称BL)。在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址(SDRAM与DDRSDRAM的突发传输对列寻址的操作数量有所不同,在此不再细说)。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。突发连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输。在数据读取完之后,为了腾出读出放大器以供同一L-Bank内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行。还是以上面那个L-Bank示意图为例。当前寻址的存储单元是B1、R2、C6。如果接下来的寻址命令是B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务。但如果地址命令是B1、R4、C4,由于是同一L-Bank的不同行,那么就必须要先把R2关闭,才能对R4寻址。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(RowPrechargecommandPeriod,行预充电有效周期),单位也是时钟周期数。本图为一个完整的从行寻址到行关闭的时序图,图中所表示的tRCD=2、CL=2、tRP=2从上图中我们还发现了一个在DDRSDRAM时代经常被人提起,也经常会在BIOS中出现的参数——tRAS。tRAS在内存规范中的解释是ACTIVEtoPRECHARGEcommand,即从行有效命令发出至预充电命令发出之间的间隔。这也是本专题第一部分中所要重要谈到的话题。在深入分析它之前,我们先了解一下哪些因素会影响到内存的性能。在讲完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内的相同工作行的总集合。页容量对于内存子系统而言是一个很重要的指标。这个参数取决于芯片的容量与位宽的设计。由于与本文的关系不大,就不具体举例了。早期Intel845芯片组MCH的资料:它可以支持2、4、8、16KB的页容量总之,我们要知道,由于寻址对同一L-Bank内行地址的单一性,所以一个L-Bank在同一时间只能打开一个页面,一个具有4个L-Bank的内存芯片,可以打开4个页面。这样,以这种芯片组成的P-Bank,也就最后具备了4个页面,这是目前DDRSDRAM内存模中每个P-Bank的页面最大值。1、影响性能的主要时序参数在讲完内存的基本操作流程与相关的tRP、tRCD、CL、BL之后,我们就开始深入分析这些参数对内存性能的影响。所谓的影响性能是并不是指SDRAM的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是tRCD、CL和tRP。按照规定,每条正规的内存模组都应该在标识上注明这三个参数值,可见它们对性能的敏感性。以内存最主要的操作——读取为例。tRCD决定了行寻址(有效)至列寻址(读/写命令)之间的间隔,CL决定了列寻址到数据进行真正被读取所花费的时间,tRP则决定了相同L-Bank中不同工作行转换的速度。现在可以想象一下对某一页面进行读取时可能遇到的几种情况(分析写入操作时不用考虑CL即可):1、要寻址的行与L-Bank是空闲的。也就是说该L-Bank的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为tRCD+CL,这种情况我们称之为页命中(PH,PageHit)。2、要寻址的行正好是现有的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为CL,这就是所谓的背靠背(BacktoBack)寻址,我们称之为页快速命中(PFH,PageFastHit)或页直接命中(PDH,PageDirectHit)。3、要寻址的行所在的L-Bank中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是tRP+tRCD+CL,这种情况我们称之为页错失(PM,PageMiss)。显然,PFH是最理想的寻址情况,PM则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为PHR——PHRate、PFHR——PFHRate、PMR——PMRate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高PHR与PFHR,同时减少PMR,以达到提高内存工作效率的目的。二、增加PHR的方法显然,这与预充电管理策略有着直接的关系,目前有两种方法来尽量提高PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一L-Bank不同行寻址时发生冲突的可能性。但是,如果要在当前行工作完成后马上打开同一L-Bank的另一行工作时,仍然存在tRP的延迟。怎么办?此时就需要L-Bank交错预充电了。早期非常令人关注的VIA4路交错式内存控制,就是在一个L-Bank工作时,对另一个L-Bank进行预充电或者寻址(如果要寻址的L-Bank是关闭的)。这样,预充电与数据的传输交错执行,当访问下一个L-Bank时,tRP已过,就可以直接进入行有效状态了,如果配合得理想,那么就可以实现无间隔的L-Bank交错读/写(一般的,交错操作都会用到自动预充电),这是比PFH更好的情况,但它只出现在后续的数据不在同一页面的时时候。当时VIA声称可以跨P-Bank进行16路内存交错,并以LRU(LeastRecentlyUsed,近期最少使用)算法进行交错预充电/寻址管理。L-Bank交错自动预充电/读取时序图:L-Bank0与L-Bank3实现了无间隔交错读取,避免了tRP与tRCD对性能的影响,是最理想的状态三、增加PFHR的方法无论是自动预充电还是交错工作的方法都无法消除同行(页面)寻址时tRCD所带来的延迟。要解决这个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收工作命令,以达到背靠背的效果,此时就只剩下CL所造成的读取延迟了(写入时没有延迟)。如何做到这一点呢?这就是北桥芯片的责任了。现在我们就又接触到tRAS这个参数,在BIOS中所设置的tRAS是指行有效至预充电的最短周期,在内存规范中定义为tRAS(min),过了这个周期后就可以发出预充电指令。对于SDRAM和DDRSDRAM而言,一般是预充电命令至少要在行有效命令5个时钟周期之后发出,最长间隔视芯片而异(目前的DDRSDRAM标准一般基本在70000ns左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有70000ns的持续工作时间而不用进行预充电。显然,只要北桥芯片不发出预充电(包括允许自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有tRCD的延迟。可见,如果北桥芯片在能同时打开的行(页)越多,那么PFHR也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些SDRAM芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。Intel845芯片组MCH的资料:其中表明它可以支持24个页面同时处于打开状态但是,可同时打开的页数也是有限制的。从SDRAM的寻址原理讲,同一L-Bank中不可能有两个打开的行(读出放大器只能为一行服务),这就限制了可同时打开的页面总数。以SDRAM有4个L-Bank,北桥最多支持8个P-Bank(4条DIMM)为例,理论上最多只能有32个页面能同时处于打开的状态。而如果只有一个P-Bank,那么就只剩下4个页面,因为有几个L-Bank才能有同时打开几个行而互不干扰。Intel845的MHC虽然可以支持24个打开的页面,那也是指6个P-Bank的情况下(845MCH只支持6个P-Bank)。可见845已经将同时打开页数发挥到了极致。不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读/写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限的话(如果已经达到极限,就关闭有冲突的L-Bank内的页面即可),就需要一个替换策略,一般都是用LRU算法来进行,这与VIA的交错控制大同小异。回到正题,虽然tRAS代表的是最小的行有效至预充电期限,但一般的,北桥芯片一般都会在这个期限后第一时间发出预充电指令(自动预充电时,会在tRAS之后自动执行预充电命令),只有在与其他操作相冲突时预充电操作才被延后(比如,DDRSDRAM标准中规定,在读取命令发出后不能立即发出预充电指令)。因此,tRAS的长短一直是内存优化发烧友所争论的话题,在最近一两年,由于这个参数在BIOS选项中越来越普及,所以也逐渐被用户所关注。其实,在SDRAM时代就没有对这个参数有刻意的设定,在DDRSDRAM的官方组织JEDEC的相关标准中,也没有把其列为必须标明的性能参数(CL、tRCD、tRP才是),tRAS应该是某些主板厂商炒作出来的,并且在主板说明书上也注明越短越好。其实,缩小tRAS的本意在于,尽量压缩行打开状态下的时间,以减少同L-Bank下对其他行进行寻址时的冲突,从内存的本身来讲,这是完全正确的做法,符合内存性能优化的原则,但如果放到整体的内存系统中,伴随着主板芯片组内存页面控制管理能力的提升,这种做法可能就不见得是完全正确的,在下文中我们会继续分析tRAS的不同长短设置对内存性能所带来的影响。四、BL长度对性能的影响从读/写之间的中断操作我们又引出了BL(突发长度)对性能影响的话题。首先,BL的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的BL,这是厂商们经过多年的实践总结出来的。BL与相应的工作领域BL越长,对于连续的大数据量传输很有好处,但是对零散的数据,BL太长反而会造成总线周期的浪费,虽然能通过一些命令来进行终止,便也占用了控制资源。以P-Bank位宽64bit为例,BL=4时,一个突发操作能传输32字节的数据,为了满足CacheLine的容量需求,还得多发一次,如果是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等则可以算是相对参数。也正是由于这些相对参数的存在,才使得内存优化不再那么简单。好了,上面已经讲完基本的相关参数与原理,下面就结合实际来看看具体如何设置。目前,以Intel和NVIDIA为首的Intel与AMD平台都进入了双通道时代,这也是今后的主要潮流。所以我们这次也是以双方的双通道平台为试验平台,分别是875P和nForce2。鉴于AMD64离我们还比较远,因此我们没有在AMD64的双通道平台上进行测试。首先要讲明,Intel865/875的双通道与nForce2的双通道不是一码事。两者目前还没有可比性。简而言之,865/875只用一个128bit位宽的内存控制器控制两个通道,这就意味着发给两个通道的寻址指令是一模一样的,从而也要求组成双通道的内存模组的容量、位宽设计完全一样,因为不同位宽的芯片,寻址指令也不一样,而一个内存控制器是无法发出两套指令的。nForce2则是两个独立的控制器分别控制两个不同的通道,这样每个通道的内存模组的架构就可以不同,因为指令也是独立的。但是nForce2在双通道带宽合成方面会有比较大的麻烦,毕竟内存地址的转换是相当复杂的。所以,nForce2与865/875代表了两种设计。而这样的设计体现出来的内存配置也有了变化。在下文中,我们以875P平台为主nForce2平台为辅,来进行优化试验。先让我们看看875P内存页面控制方面的一些特点:Intel875P的页面控制特性,可以发现双通道与单通道时有所不同目前的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。首先们进行的是在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。二、ADIA323.93测试AIDIA323.93是一款兼系统资源查看与简单测试的软件,不过其内存带宽测试功能还是经常被人所用到。ADIA323.93的测试相对简单一些,从中可以发现2-3-3-5在少页面时读取性能要占优级,但到了16个页面时,被2-3-3-8反超,同时2-3-3-8一直保持着写入性能方面的优势。三、3DMark2001SE测试3DMark2001SE是一款老牌的D3D测试软件,虽然主要是考验显卡的能力,但由于内存子系统也是图形处理中的重要环节,所以在显卡处理能力很强大时,仍可以看出内存子系统的测试中的些微影响,而GF5900Ultra提供了很大的表现空间。其实,在测试中,两种时序下所体现的性能差异并不明显(也许这个测试对内存本来就不是很敏感),甚至可以怀疑是测试的误差。另外,在测试中我还发现一个现象,2-3-3-5的性能表现不稳定,有时会比2-3-3-8低出2、3百分,这可能是因为短tRAS造成了页面管理的不确定性(有时可以预充电,有时则要推迟)。相比下,2-3-3-8表现得相对稳定一些。不过,也能看出在页面增多的情况下,2-3-3-8有领先的趋势。四、AquaMark3.0测试AquaMark3.0与3DMark2001SE一样,只不过将测试平台指向了DX9,从中我们发现其与3DMark2001SE有相似的表现。在4、8页面时,2-3-3-8没有什么优势,在16页面时后来者居上。五、SandraStandard2004SP1测试这也是著名的测试软件了,经常能在网上看到网友在比试该软件所给出的内存带宽贴图。与前面的测试所体现出来的差不多,页面少的时候,2-3-3-5占先,页面多的时候,2-3-3-8会反超。六、ScienceMark2.0beta测试笔者认为ScienceMark是一个比较优秀的测试软件,测试的项目也比较多,而其所自带的内存测试功能也别具特色。ScienceMark的测试结果与前面所体现的不太一样,页面少的时候2-3-3-5反而更低,但两者都从页面数量的提高中获益。而且,值得注意的是,在8个页面时,2-3-3-8的表现最好,不光带宽领先,而且在延迟方面也有了大的进步。不过,在16页面时,2-3-3-8的延迟方面就全面落后了。我感觉ScienceMark采用了与众不同的测试逻辑与方法,但也从侧面反映了两种tRAS设置的一些差异。七、QuakeIIIArena1.32测试QuakeIII就不用我多说了,它的引擎效率极为出众,至今仍然是一款出色的测试软件,并且,它对内存的效率也是比较敏感的。是不是有些吃惊,随着页面的增加,2-3-3-5与2-3-3-8的性能都有较为明显的增长。难道是Q3很吃内存。我想应该不是,如果你打开任务管理器,就会发现Q3的内存占用量并不高,512MB已经能满足要求了。之所以能出现4、5帧的性能增长,原因除了1GB内存本身对WindowsXP更适合外,可能就在于页面的增多,提高了内存管理效率,进一步的降低了寻址冲突。而2-3-3-8的优势也在8个页面时开始发挥出来。在测试中,我们感觉到Q3对默认的HQ(800X600)模式似乎有着优化,它在测试中的表现最为稳定,而且性能提升显著。Fastest模式由于显卡基本上是在等内存提供“原料”,所以对内存的效率也非常的敏感。而在HQ(1280X1024)模式下处理的重任则落在了显卡身上,内存的供给倒是其次了。不过,与3DMark2001SE的表现相似,2-3-3-5的性能表现不是很稳定,有时5次测试结果中最好成绩与最差成绩会有比较大的差距,这可能也由于较短的行选通周期所带来的页面管理不确定性所造成的。八、nForce2平台下的测试升技的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那样的双通道,nForce2平台测试中的页面容量只有16KB,我们在P75P平台上进行的1.5GB单通道(页面容量降低为16KB)测试也反映出这一点,PCMark04的分值非常接近。另外,这可能也与nForce2的页面管理策略以及tRAS并不是越大越好有关。通过前面的技术分析,我们知道它是一个相对参数,不是说越大或者越小,性能就肯定会越好,它还要结合具体的情况而定,它应该与页面数、页面容量和芯片组的管理能力之间有一个比较好的平衡点。由于时间的关系,我们没有进行15以下的tRAS的测试,毕竟我们这次不是针对某一芯片组的优化探讨,而是从一个总体上讲述总的优化原则。但从一些论坛的反映来看,11似乎是一个比较好设置水平,普遍反映它比tRAS=5时的性能好好,有兴趣的朋友可以自己试试。九、BL与内存刷新率对性能的影响既然Q3对内存性能如此感冒,我们就在华硕的P4C800主板上进行了其他的实验——BL与内存刷新率的调整。下图就是P4C800的BIOS中内存设置的介面,P4P800与之相同。将ConfigureDRAMTimingbySPD设为Disable后,会出现BL(DRAMBurstLength)的调节选项,我们将其调成4,然后再进行Q3测试。测试的结果令人称奇。我们在2GB的内存容量下,Fastest模式下较原来的BL=8提高了两帧,HQ与HQ(1280X1024)模式下也都提高了1帧,这是很不错的成绩嘛。看到这里,可能会有人奇怪,不是听说BL越长越好吗?怎么会这样?其实,原因在上文已经讲到,当875组成双通道时,接口的位宽是128bit,合16个字节。而与CPU交换数据的基本单位是64字节,所以双通道时只需传输4个周期即可。因此,大多数情况下BL=4是双通道Pentium4主板的一个更佳的选择。BL=8虽然一次能传送128字节,但如果遇到不需要传送这么多的时候(小数据传输)反而会耽误时间。不过,在单通道主板或非875这种类型的双通道主板上,BL=8则是正确的选择。可见,BL这个参数,不能像CL那样可以予以定论。总之,如果是双通道Pentium4或AMD64的用户,当你的日常工作很普通,没有什么大数据量的读写应用,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(1280X1024)模式下也都再次提高了1帧。不过,当我们把刷新率再往高调,似乎就没有什么作用了。需要注意的是,刷新率不宜调得过长,否则可能会引起数据丢失,导致系统的不稳定,15.6μs应试是一个比较好的选择。另外,P4C800/P4P800中BIOS中的DRAMIdleTimer(空闲计时)对内存性能的影响并不大,建议设为Auto即可。在上文中,我们引入了很多鲜为人知的一些概念。由此我们会发现以往的优化原则基本上存在着很多盲目的成分。目前几乎所有的内存优化与测试文章(包括国外的一些知名网站)都告诉读者,只要是和内存沾边的时序参数,越小越好!但当你看过本文后,又会有何感想呢?显然,之前的优化原则并不严谨也缺乏科学的论证。在经历了优化实验后,我们可以试着总结其中的原因,以进一步探讨tRAS对内存性能所带来的影响。前文已经讲过,tRAS的本意是想尽量减少行寻址的冲突,降低PMR,但这是从内存芯片本身角度出发的,如果从内存子系统的全局考虑,它可能会减少背靠背操作的机率。下面是笔者根据JEDEC发布的DDRSDRAM官方标准制作的时序示意图。从中我们可以发现短tRAS在某些情况下性能表现不佳的原因。当BL=8、tRAS=5时,第二个可能出现的读取命令会因预充电而延后,使得连续突发传输无法进行,不能进行背靠背操作当BL=4、tRAS=5时,第三个可能出现的读取命令会因预充电而延后,使得连续突发传输无法进行,只完成了一次背靠背操作当BL=8、tRAS=8时,第二个读取指令会在预充电之前发出,并使预充电延后,从而完成了一次背靠背操作当BL=4、tRAS=8时,第三个读取指令会在预充电之前发出,从而完成了两次背靠背操作当BL=8、tRAS=5时,由于DDRSDRAM在写入时的时序限制,预充电最早可以出现的时间大大延长当BL=4、tRAS=5时,由于DDRSDRAM在写入时的时序限制,预充电最早可以出现的时间被延后至第8个时钟周期当BL=8、tRAS=8时,由于DDRSDRAM在写入时的时序限制,预充电最早可以出现的时间与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或AMD64的双通道平台,则还要除以2。比如两条单面256MB内存,就是2X4=8个页面,用在875上组成双通道就成了4个页面4、CL、tRCD、tRP为绝对性能参数,在任何平台下任何时候,都应该是越小越好,调节的优化顺序是CL→tRCD→tRP5、当内存页面数为4时,tRAS设置短一些可能会更好,但最好不要小于5。另外,短tRAS的内存性能相对于长tRAS可能会产生更大的波动性,对时钟频率的提高也相对敏感6、当内存页面数大于或等于8时,tRAS设置长一些会更好7、对于875和865平台,双通道时页面数达到8或者以上时,内存性能更好8、对于非双通道Pentium4与AMD64平台,tRAS长短之间的性能差异要缩小9、Pentium4或AMD64的双通道平台下,BL=4大多数情况下是更好的选择,其他情况下BL=8可能是更好的选择,请根据自己的实际应用有针对的调整10、适当加大内存刷新率可以提高内存的工作效率,但也可能降低内存的稳定性小提示:BIOS中内存相关参数的设置要领AutomaticConfiguration“自动设置”(可能的选项:On/Off或Enable/Disable)可能出现的其他描述为:DRAMAuto、TimingSelectable、TimingConfiguringBySPD等,如果你要手动调整你的内存时序,你应该关闭它,之后会自动出现详细的时序参数列表。BankInterleaving(可能的选项:Off/Auto/2/4)这里的Bank是指L-Bank,目前的DDRRAM的内存芯片都是由4个L-Bank所组成,为了最大限度减少寻址冲突,提高效率,建议设为4(Auto也可以,它是根据SPD中的L-Bank信息来自动设置的)。BurstLength“突发长度”(可能的选项:4/8)一般而言,如果是AMDAthlonXP或Pentium4单通道平台,建议设为8,如果是Pentium4或AMD64的双通道平台,建议设为4。但具体的情况要视具体的应用而定。CASLatency“列地址选通脉冲潜伏期”(可能的选项:1.5/2/2.5/3)BIOS中可能的其他描述为:tCL、CASLatencyTime、CASTimingDelay。不用多说,能调多短就调多短。CommandRate“首命令延迟”(可能的选项:1/2)这个选项目前已经非常少见,一般还被描述为DRAMCommandRate、CMDRate等。由于目前的DDR内存的寻址,先要进行P-Bank的选择(通过DIMM上CS片选信号进行),然后才是L-Bank/行激活与列地址的选择。这个参数的含义就是指在P-Bank选择完之后多少时间可以发出具体的寻址的L-Bank/行激活命令,单位是时钟周期。显然,也是越短越好。但当随着主板上内存模组的增多,控制芯片组的负载也随之增加,过短的命令间隔可能会影响稳定性。因此当你的内存插得很多而出现不太稳定的时间,才需要将此参数调长。目前的大部分主板都会自动设置这个参数,而从上文的ScienceMark2.0测试中,大家也能察觉到容量与延迟之间的关系。RASPrechargeTime“行预充电时间”(可能的选项:2/3/4)BIOS中的可能其他描述:tRP、RASPrecharge、Prechargetoactive。通过上文的讲述,大家现在应该明白它也是越小越RAS-to-CASDelay“行寻址至列寻址延迟时间”(可能的选项:2/3/4/5)BIOS中的可能其他描述:tRCD、RAStoCASDelay、ActivetoCMD等。数值越小越好。ActivetoPrechargeDelay“行有效至行预充电时间”(可能的选项:1……5/6/7……15)BIOS中的可能其他描述:tRAS、RowActiveTime、PrechargeWaitState、RowActiveDelay、RowPrechargeDelay等。根据上文的分析,这个参数要根据实际情况而定,具体设置思路见上文,并不是说越大或越小就越好。好了,到这里,有关内存优化的探讨就告一段落,即使知道了相关的原则与方法,下面就要选选合适的“武器”了,敬请期待本专题的第二部分:《19款内存横向测试》。接下来,相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的I/O接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的CL(CASLatency,列地址脉冲选通潜伏期)。CL的数值与tRCD一样,以时钟周期数表示。如DDR-400,时钟频率为200MHz,时钟周期为5ns,那么CL=2就意味着10ns的潜伏期。不过,CL只是针对读取操作,对于SDRAM,写入是没有潜伏期的,对于DDRSDRAM,写入潜伏期在0.75至1.25个时针周期之间。图中标准CL=2,tAC是有关内部信号处理的周期,可以不用关心目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个CacheLine(即CPU内Cache的存储单位)的容量为准,一般为64字节。而现有的P-Bank位宽为8字节,那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(BurstLengths,简称BL)。在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址(SDRAM与DDRSDRAM的突发传输对列寻址的操作数量有所不同,在此不再细说)。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。突发连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输。在数据读取完之后,为了腾出读出放大器以供同一L-Bank内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行。还是以上面那个L-Bank示意图为例。当前寻址的存储单元是B1、R2、C6。如果接下来的寻址命令是B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务。但如果地址命令是B1、R4、C4,由于是同一L-Bank的不同行,那么就必须要先把R2关闭,才能对R4寻址。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(RowPrechargecommandPeriod,行预充电有效周期),单位也是时钟周期数。本图为一个完整的从行寻址到行关闭的时序图,图中所表示的tRCD=2、CL=2、tRP=2从上图中我们还发现了一个在DDRSDRAM时代经常被人提起,也经常会在BIOS中出现的参数——tRAS。tRAS在内存规范中的解释是ACTIVEtoPRECHARGEcommand,即从行有效命令发出至预充电命令发出之间的间隔。这也是本专题第一部分中所要重要谈到的话题。在深入分析它之前,我们先了解一下哪些因素会影响到内存的性能。在讲完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内的相同工作行的总集合。页容量对于内存子系统而言是一个很重要的指标。这个参数取决于芯片的容量与位宽的设计。由于与本文的关系不大,就不具体举例了。早期Intel845芯片组MCH的资料:它可以支持2、4、8、16KB的页容量总之,我们要知道,由于寻址对同一L-Bank内行地址的单一性,所以一个L-Bank在同一时间只能打开一个页面,一个具有4个L-Bank的内存芯片,可以打开4个页面。这样,以这种芯片组成的P-Bank,也就最后具备了4个页面,这是目前DDRSDRAM内存模中每个P-Bank的页面最大值。1、影响性能的主要时序参数在讲完内存的基本操作流程与相关的tRP、tRCD、CL、BL之后,我们就开始深入分析这些参数对内存性能的影响。所谓的影响性能是并不是指SDRAM的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是tRCD、CL和tRP。按照规定,每条正规的内存模组都应该在标识上注明这三个参数值,可见它们对性能的敏感性。以内存最主要的操作——读取为例。tRCD决定了行寻址(有效)至列寻址(读/写命令)之间的间隔,CL决定了列寻址到数据进行真正被读取所花费的时间,tRP则决定了相同L-Bank中不同工作行转换的速度。现在可以想象一下对某一页面进行读取时可能遇到的几种情况(分析写入操作时不用考虑CL即可):1、要寻址的行与L-Bank是空闲的。也就是说该L-Bank的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为tRCD+CL,这种情况我们称之为页命中(PH,PageHit)。2、要寻址的行正好是现有的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为CL,这就是所谓的背靠背(BacktoBack)寻址,我们称之为页快速命中(PFH,PageFastHit)或页直接命中(PDH,PageDirectHit)。3、要寻址的行所在的L-Bank中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是tRP+tRCD+CL,这种情况我们称之为页错失(PM,PageMiss)。显然,PFH是最理想的寻址情况,PM则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为PHR——PHRate、PFHR——PFHRate、PMR——PMRate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高PHR与PFHR,同时减少PMR,以达到提高内存工作效率的目的。二、增加PHR的方法显然,这与预充电管理策略有着直接的关系,目前有两种方法来尽量提高PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一L-Bank不同行寻址时发生冲突的可能性。但是,如果要在当前行工作完成后马上打开同一L-Bank的另一行工作时,仍然存在tRP的延迟。怎么办?此时就需要L-Bank交错预充电了。早期非常令人关注的VIA4路交错式内存控制,就是在一个L-Bank工作时,对另一个L-Bank进行预充电或者寻址(如果要寻址的L-Bank是关闭的)。这样,预充电与数据的传输交错执行,当访问下一个L-Bank时,tRP已过,就可以直接进入行有效状态了,如果配合得理想,那么就可以实现无间隔的L-Bank交错读/写(一般的,交错操作都会用到自动预充电),这是比PFH更好的情况,但它只出现在后续的数据不在同一页面的时时候。当时VIA声称可以跨P-Bank进行16路内存交错,并以LRU(LeastRecentlyUsed,近期最少使用)算法进行交错预充电/寻址管理。L-Bank交错自动预充电/读取时序图:L-Bank0与L-Bank3实现了无间隔交错读取,避免了tRP与tRCD对性能的影响,是最理想的状态三、增加PFHR的方法无论是自动预充电还是交错工作的方法都无法消除同行(页面)寻址时tRCD所带来的延迟。要解决这个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收工作命令,以达到背靠背的效果,此时就只剩下CL所造成的读取延迟了(写入时没有延迟)。如何做到这一点呢?这就是北桥芯片的责任了。现在我们就又接触到tRAS这个参数,在BIOS中所设置的tRAS是指行有效至预充电的最短周期,在内存规范中定义为tRAS(min),过了这个周期后就可以发出预充电指令。对于SDRAM和DDRSDRAM而言,一般是预充电命令至少要在行有效命令5个时钟周期之后发出,最长间隔视芯片而异(目前的DDRSDRAM标准一般基本在70000ns左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有70000ns的持续工作时间而不用进行预充电。显然,只要北桥芯片不发出预充电(包括允许自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有tRCD的延迟。可见,如果北桥芯片在能同时打开的行(页)越多,那么PFHR也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些SDRAM芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。Intel845芯片组MCH的资料:其中表明它可以支持24个页面同时处于打开状态但是,可同时打开的页数也是有限制的。从SDRAM的寻址原理讲,同一L-Bank中不可能有两个打开的行(读出放大器只能为一行服务),这就限制了可同时打开的页面总数。以SDRAM有4个L-Bank,北桥最多支持8个P-Bank(4条DIMM)为例,理论上最多只能有32个页面能同时处于打开的状态。而如果只有一个P-Bank,那么就只剩下4个页面,因为有几个L-Bank才能有同时打开几个行而互不干扰。Intel845的MHC虽然可以支持24个打开的页面,那也是指6个P-Bank的情况下(845MCH只支持6个P-Bank)。可见845已经将同时打开页数发挥到了极致。不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读/写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限的话(如果已经达到极限,就关闭有冲突的L-Bank内的页面即可),就需要一个替换策略,一般都是用LRU算法来进行,这与VIA的交错控制大同小异。回到正题,虽然tRAS代表的是最小的行有效至预充电期限,但一般的,北桥芯片一般都会在这个期限后第一时间发出预充电指令(自动预充电时,会在tRAS之后自动执行预充电命令),只有在与其他操作相冲突时预充电操作才被延后(比如,DDRSDRAM标准中规定,在读取命令发出后不能立即发出预充电指令)。因此,tRAS的长短一直是内存优化发烧友所争论的话题,在最近一两年,由于这个参数在BIOS选项中越来越普及,所以也逐渐被用户所关注。其实,在SDRAM时代就没有对这个参数有刻意的设定,在DDRSDRAM的官方组织JEDEC的相关标准中,也没有把其列为必须标明的性能参数(CL、tRCD、tRP才是),tRAS应该是某些主板厂商炒作出来的,并且在主板说明书上也注明越短越好。其实,缩小tRAS的本意在于,尽量压缩行打开状态下的时间,以减少同L-Bank下对其他行进行寻址时的冲突,从内存的本身来讲,这是完全正确的做法,符合内存性能优化的原则,但如果放到整体的内存系统中,伴随着主板芯片组内存页面控制管理能力的提升,这种做法可能就不见得是完全正确的,在下文中我们会继续分析tRAS的不同长短设置对内存性能所带来的影响。四、BL长度对性能的影响从读/写之间的中断操作我们又引出了BL(突发长度)对性能影响的话题。首先,BL的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的BL,这是厂商们经过多年的实践总结出来的。BL与相应的工作领域BL越长,对于连续的大数据量传输很有好处,但是对零散的数据,BL太长反而会造成总线周期的浪费,虽然能通过一些命令来进行终止,便也占用了控制资源。以P-Bank位宽64bit为例,BL=4时,一个突发操作能传输32字节的数据,为了满足CacheLine的容量需求,还得多发一次,如果是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等则可以算是相对参数。也正是由于这些相对参数的存在,才使得内存优化不再那么简单。好了,上面已经讲完基本的相关参数与原理,下面就结合实际来看看具体如何设置。目前,以Intel和NVIDIA为首的Intel与AMD平台都进入了双通道时代,这也是今后的主要潮流。所以我们这次也是以双方的双通道平台为试验平台,分别是875P和nForce2。鉴于AMD64离我们还比较远,因此我们没有在AMD64的双通道平台上进行测试。首先要讲明,Intel865/875的双通道与nForce2的双通道不是一码事。两者目前还没有可比性。简而言之,865/875只用一个128bit位宽的内存控制器控制两个通道,这就意味着发给两个通道的寻址指令是一模一样的,从而也要求组成双通道的内存模组的容量、位宽设计完全一样,因为不同位宽的芯片,寻址指令也不一样,而一个内存控制器是无法发出两套指令的。nForce2则是两个独立的控制器分别控制两个不同的通道,这样每个通道的内存模组的架构就可以不同,因为指令也是独立的。但是nForce2在双通道带宽合成方面会有比较大的麻烦,毕竟内存地址的转换是相当复杂的。所以,nForce2与865/875代表了两种设计。而这样的设计体现出来的内存配置也有了变化。在下文中,我们以875P平台为主nForce2平台为辅,来进行优化试验。先让我们看看875P内存页面控制方面的一些特点:Intel875P的页面控制特性,可以发现双通道与单通道时有所不同目前的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。首先们进行的是在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。二、ADIA323.93测试AIDIA323.93是一款兼系统资源查看与简单测试的软件,不过其内存带宽测试功能还是经常被人所用到。ADIA323.93的测试相对简单一些,从中可以发现2-3-3-5在少页面时读取性能要占优级,但到了16个页面时,被2-3-3-8反超,同时2-3-3-8一直保持着写入性能方面的优势。三、3DMark2001SE测试3DMark2001SE是一款老牌的D3D测试软件,虽然主要是考验显卡的能力,但由于内存子系统也是图形处理中的重要环节,所以在显卡处理能力很强大时,仍可以看出内存子系统的测试中的些微影响,而GF5900Ultra提供了很大的表现空间。其实,在测试中,两种时序下所体现的性能差异并不明显(也许这个测试对内存本来就不是很敏感),甚至可以怀疑是测试的误差。另外,在测试中我还发现一个现象,2-3-3-5的性能表现不稳定,有时会比2-3-3-8低出2、3百分,这可能是因为短tRAS造成了页面管理的不确定性(有时可以预充电,有时则要推迟)。相比下,2-3-3-8表现得相对稳定一些。不过,也能看出在页面增多的情况下,2-3-3-8有领先的趋势。四、AquaMark3.0测试AquaMark3.0与3DMark2001SE一样,只不过将测试平台指向了DX9,从中我们发现其与3DMark2001SE有相似的表现。在4、8页面时,2-3-3-8没有什么优势,在16页面时后来者居上。五、SandraStandard2004SP1测试这也是著名的测试软件了,经常能在网上看到网友在比试该软件所给出的内存带宽贴图。与前面的测试所体现出来的差不多,页面少的时候,2-3-3-5占先,页面多的时候,2-3-3-8会反超。六、ScienceMark2.0beta测试笔者认为ScienceMark是一个比较优秀的测试软件,测试的项目也比较多,而其所自带的内存测试功能也别具特色。ScienceMark的测试结果与前面所体现的不太一样,页面少的时候2-3-3-5反而更低,但两者都从页面数量的提高中获益。而且,值得注意的是,在8个页面时,2-3-3-8的表现最好,不光带宽领先,而且在延迟方面也有了大的进步。不过,在16页面时,2-3-3-8的延迟方面就全面落后了。我感觉ScienceMark采用了与众不同的测试逻辑与方法,但也从侧面反映了两种tRAS设置的一些差异。七、QuakeIIIArena1.32测试QuakeIII就不用我多说了,它的引擎效率极为出众,至今仍然是一款出色的测试软件,并且,它对内存的效率也是比较敏感的。是不是有些吃惊,随着页面的增加,2-3-3-5与2-3-3-8的性能都有较为明显的增长。难道是Q3很吃内存。我想应该不是,如果你打开任务管理器,就会发现Q3的内存占用量并不高,512MB已经能满足要求了。之所以能出现4、5帧的性能增长,原因除了1GB内存本身对WindowsXP更适合外,可能就在于页面的增多,提高了内存管理效率,进一步的降低了寻址冲突。而2-3-3-8的优势也在8个页面时开始发挥出来。在测试中,我们感觉到Q3对默认的HQ(800X600)模式似乎有着优化,它在测试中的表现最为稳定,而且性能提升显著。Fastest模式由于显卡基本上是在等内存提供“原料”,所以对内存的效率也非常的敏感。而在HQ(1280X1024)模式下处理的重任则落在了显卡身上,内存的供给倒是其次了。不过,与3DMark2001SE的表现相似,2-3-3-5的性能表现不是很稳定,有时5次测试结果中最好成绩与最差成绩会有比较大的差距,这可能也由于较短的行选通周期所带来的页面管理不确定性所造成的。八、nForce2平台下的测试升技的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那样的双通道,nForce2平台测试中的页面容量只有16KB,我们在P75P平台上进行的1.5GB单通道(页面容量降低为16KB)测试也反映出这一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论