| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
有关内存优化的文章其实已经有很多了,可能大家都没觉得没什么了不起的,不就是那几个参数吗?这还用讲?但是,我相信 90% 以上的人并没有完全真正理解那些时序参数的含义。我敢说,目前很多的优化原则都是有问题的,甚至有误导的倾向! 中国网管论坛bbs.bitsCN.com
本人在此之前曾有一篇专门探讨内存原理与相关参数的大型专题(文章发表于《电脑高手》),其中所讲到的一些原理其实对优化就有很大的启发意义。的确,虽然在 BIOS 中就是那么几个可以调节的内存时序参数,但如果不正确了解它们的意思,并不是每个人都知道如何正确的调节。有人可能会说,这有什么难的,与时序相关的时序参数,肯定都是越小越好呀,错!这就是我今天要着重讲到的问题。 网管bitscn_com
1、认识内存相关工作流程与参数 网管bitscn_com
首先,我们还是先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述以SDRAM为例,因为时序图看起来会简单一些,但相关概念与DDR SDRAM的基本相同。
网管bitscn_com
SDRAM的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)叫什么呢?它就是逻辑Bank(Logical Bank,下文简称L-Bank)目前的内存芯片基本上都是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。
接下来,相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的 I/O 接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的 CL(CAS Latency,列地址脉冲选通潜伏期)。CL 的数值与 tRCD 一样,以时钟周期数表示。如 DDR-400,时钟频率为 200MHz,时钟周期为 5ns,那么 CL=2 就意味着 10ns 的潜伏期。不过 ,CL 只是针对读取操作,对于 SDRAM,写入是没有潜伏期的,对于 DDR SDRAM,写入潜伏期在 0.75 至 1.25 个时针周期之间。 网管论坛bbs_bitsCN_com
目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个Cache Line(即CPU内Cache的存储单位)的容量为准,一般为64字节。而现有的P-Bank位宽为8字节,那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。
网管bitscn_com
在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址(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,行预充电有效周期),单位也是时钟周期数。 网管联盟bitsCN@com
还有一个在 DDR SDRAM 时代经常被人提起,也经常会在 BIOS 中出现的参数—— tRAS。tRAS 在内存规范中的解释是 ACTIVE to PRECHARGE command,即从行有效命令发出至预充电命令发出之间的间隔。这也是本专题第一部分中所要重要谈到的话题。在深入分析它之前,我们先了解一下哪些因素会影响到内存的性能。
在讲完 SDRAM 的基本工作原理和主要操作之后,我们现在要重要分析一下 SDRAM 的时序与性能之间的关系,它不再局限于芯片本身,而是要从整体的内存系统去分析。这也是广大 DIYer 所关心的话题。比如 CL 值对性能的影响有多大几乎是每个内存论坛都会有讨论,今天我们就详细探讨一下。这里需要强调一点,对于内存系统整体而言,一次内存访问就是对一个页 (Page)的访问。由于在 P-Bank 中,每个芯片的寻址都是一样的,所以可以将页访问“浓缩”等效为对每芯片中指定行的访问,这样可能比较好理解。但为了与官方标准统一,在下文中会经常用页来描述相关的内容,请读者注意理解。
网管联盟bitsCN@com
可能很多人还不清楚页的概念,在这里有必要先讲一讲。从狭义上讲,内存芯片芯片中每个 L-Bank 中的行就是页,即一行为一页。但从广义上说,页是从整体角度讲的,这个整体就是内存子系统。 中国网管论坛bbs.bitsCN.com
对于内存模组,与之进行数据交换的单位就是 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 的页容量 中国网管联盟bitsCN.com
总之,我们要知道,由于寻址对同一 L-Bank 内行地址的单一性,所以一个 L-Bank 在同一时间只能打开一个页面,一个具有 4 个 L-Bank 的内存芯片,可以打开 4 个页面。这样,以这种芯片组成的 P-Bank,也就最后具备了 4 个页面,这是目前 DDR SDRAM 内存模中每个 P-Bank 的页面最大值。
网管论坛bbs_bitsCN_com
1、影响性能的主要时序参数
在讲完内存的基本操作流程与相关的 tRP、tRCD、CL、BL 之后,我们就开始深入分析这些参数对内存性能的影响。所谓的影响性能是并不是指 SDRAM 的带宽,频率与位宽固定后,带宽也就不可更改了。但这是理想的情况,在内存的工作周期内,不可能总处于数据传输的状态,因为要有命令、寻址等必要的过程。但这些操作占用的时间越短,内存工作的效率越高,性能也就越好。 网管联盟bitsCN@com
非数据传输时间的主要组成部分就是各种延迟与潜伏期。通过上文的讲述,大家应该很明显看出有三个参数对内存的性能影响至关重要,它们是 tRCD、CL 和 tRP。按照规定,每条正规的内存模组都应该在标识上注明这三个参数值,可见它们对性能的敏感性。
以内存最主要的操作——读取为例。tRCD 决定了行寻址(有效)至列寻址(读 / 写命令)之间的间隔 ,CL 决定了列寻址到数据进行真正被读取所花费的时间,tRP 则决定了相同 L-Bank 中不同工作行转换的速度。现在可以想象一下对某一页面进行读取时可能遇到的几种情况(分析写入操作时不用考虑 CL 即可): 网管u家u.bitsCN.com
1、要寻址的行与 L-Bank 是空闲的。也就是说该 L-Bank 的所有行是关闭的,此时可直接发送行有效命令,数据读取前的总耗时为 tRCD+CL,这种情况我们称之为页命中 (PH,Page Hit)。 网管联盟bitsCN_com
2、要寻址的行正好是现有的工作行,也就是说要寻址的行已经处于选通有效状态,此时可直接发送列寻址命令,数据读取前的总耗时仅为 CL,这就是所谓的背靠背 (Back to Back)寻址,我们称之为页快速命中(PFH,Page Fast Hit)或页直接命中(PDH,Page Direct Hit)。 网管联盟bitsCN@com
3、要寻址的行所在的 L-Bank 中已经有一个行处于活动状态(未关闭),这种现象就被称作寻址冲突,此时就必须要进行预充电来关闭工作行,再对新行发送行有效命令。结果,总耗时就是 tRP+tRCD+CL,这种情况我们称之为页错失 (PM,Page Miss)。
中国网管论坛bbs.bitsCN.com
显然,PFH 是最理想的寻址情况,PM 则是最糟糕的寻址情况。上述三种情况发生的机率各自简称为 PHR —— PH Rate、PFHR —— PFH Rate、PMR —— PM Rate。因此,系统设计人员(包括内存与北桥芯片)都尽量想提高 PHR 与 PFHR,同时减少 PMR,以达到提高内存工作效率的目的。
二、增加 PHR 的方法 网管联盟bitsCN@com
显然,这与预充电管理策略有着直接的关系,目前有两种方法来尽量提高 PHR。自动预充电技术就是其中之一,它自动的在每次行操作之后进行预充电,从而减少了日后对同一 L-Bank 不同行寻址时发生冲突的可能性。但是,如果要在当前行工作完成后马上打开同一 L-Bank 的另一行工作时,仍然存在 tRP 的延迟。怎么办? 此时就需要 L-Bank 交错预充电了。 网管联盟bitsCN_com
早期非常令人关注的VIA 4路交错式内存控制,就是在一个L-Bank工作时,对另一个L-Bank进行预充电或者寻址(如果要寻址的L-Bank是关闭的)。这样,预充电与数据的传输交错执行,当访问下一个L-Bank时,tRP已过,就可以直接进入行有效状态了,如果配合得理想,那么就可以实现无间隔的L-Bank交错读/写(一般的,交错操作都会用到自动预充电),这是比PFH更好的情况,但它只出现在后续的数据不在同一页面的时时候。当时VIA声称可以跨P-Bank进行16路内存交错,并以LRU(Least Recently Used,近期最少使用)算法进行 交错预充电/寻址管理。 网管论坛bbs_bitsCN_com
三、增加 PFHR 的方法 网管u家u.bitsCN.com
无论是自动预充电还是交错工作的方法都无法消除同行(页面)寻址时tRCD 所带来的延迟。要解决这个问题,就要尽量让一个工作行在进行预充电前尽可能多的接收工作命令,以达到背靠背的效果,此时就只剩下 CL 所造成的读取延迟了(写入时没有延迟)。
如何做到这一点呢?这就是北桥芯片的责任了。现在我们就又接触到 tRAS 这个参数,在 BIOS 中所设置的 tRAS 是指行有效至预充电的最短周期,在内存规范中定义为 tRAS(min),过了这个周期后就可以发出预充电指令。对于 SDRAM 和 DDR SDRAM 而言,一般是预充电命令至少要在行有效命令 5 个时钟周期之后发出,最长间隔视芯片而异(目前的 DDR SDRAM 标准一般基本在 70000ns 左右),否则工作行的数据将有丢失的危险。那么这也就意味着一个工作行从有效(选通)开始,可以有 70000ns 的持续工作时间而不用进行预充电。显然,只要北桥芯片不发出预充电(包括允许自动预充电)的命令,行打开的状态就会一直保持。在此期间的对该行的任何读写操作也就不会有 tRCD 的延迟。可见,如果北桥芯片在能同时打开的行(页)越多,那么 PFHR 也就越大。需要强调的是,这里的同时打开不是指对多行同时寻址(那是不可能的),而是指多行同时处于选通状态。我们可以看到一些 SDRAM 芯片组的资料中会指出可以同时打开多少个页的指标,这可以说是决定其内存性能的一个重要因素。 网管u家u.bitsCN.com
但是,可同时打开的页数也是有限制的。从 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 已经将同时打开页数发挥到了极致。 网管u家u.bitscn@com
不过,同时打开页数多了,也对存取策略提出了一定的要求。理论上,要尽量多地使用已打开的页来保证最短的延迟周期,只有在数据不存在(读取时)或页存满了(写入时)再考虑打开新的指定页,这也就是变向的连续读 / 写。而打开新页时就必须要关闭一个打开的页,如果此时打开的页面已是北桥所支持的最大值但还不到理论极限的话 (如果已经达到极限,就关闭有冲突的L-Bank内的页面即可),就需要一个替换策略,一般都是用 LRU 算法来进行,这与 VIA 的交错控制大同小异。 网管联盟bitsCN_com
回到正题,虽然 tRAS 代表的是最小的行有效至预充电期限,但一般的,北桥芯片一般都会在这个期限后第一时间发出预充电指令(自动预充电时,会在tRAS之后自动执行预充电命令),只有在与其他操作相冲突时预充电操作才被延后(比如,DDR SDRAM 标准中规定,在读取命令发出后不能立即发出预充电指令)。因此,tRAS 的长短一直是内存优化发烧友所争论的话题,在最近一两年,由于这个参数在 BIOS 选项中越来越普及,所以也逐渐被用户所关注。其实,在 SDRAM 时代就没有对这个参数有刻意的设定,在 DDR SDRAM 的官方组织 JEDEC 的相关标准中,也没有把其列为必须标明的性能参数 (CL、tRCD、tRP 才是),tRAS 应该是某些主板厂商炒作出来的,并且在主板说明书上也注明越短越好。
其实,缩小 tRAS 的本意在于,尽量压缩行打开状态下的时间,以减少同 L-Bank 下对其他行进行寻址时的冲突,从内存的本身来讲,这是完全正确的做法,符合内存性能优化的原则,但如果放到整体的内存系统中,伴随着主板芯片组内存页面控制管理能力的提升,这种做法可能就不见得是完全正确的,在下文中我们会继续分析 tRAS 的不同长短设置对内存性能所带来的影响。
四、BL 长度对性能的影响 网管下载dl.bitscn.com
从读 / 写之间的中断操作我们又引出了 BL(突发长度)对性能影响的话题。首先,BL 的长短与其应用的领域有着很大关系,下表就是目前三个主要的内存应用领域所使用的 BL,这是厂商们经过多年的实践总结出来的。 网管联盟bitsCN_com
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 好呢?并不能统一而论,这在下文会分析到。
网管bitscn_com
到此,大家应该有一些优化的眉目了吧。我们可以先做一下界定,任何情况下,只要数值越小或越大(单一方向),内存的性能会越好的参数为 绝对参数 ,而数值越小或越大对性能的影响不固定的参数则为 相对参数。那么,CL、tRCD、tRP 显然就是绝对参数,任何情况下减少它们的周期绝对不会错。而且从上文的分析可以发现 ,从重要性来论,优先优化的顺序也是 CL → tRCD → tRP,因为 CL 的遇到的机会最多,tRCD 其次,tRP 如果页面交错管理的好,大多不受影响。而 BL、tRAS 等则可以算是相对参数。也正是由于这些相对参数的存在,才使得内存优化不再那么简单。
|
0
|
评论加载中…