分享

DDR内存的终极优化2——认清影响内存性能的关键

 Kinetis 2013-05-13

在讲完 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 的页面最大值。

1、影响性能的主要时序参数

    在讲完内存的基本操作流程与相关的 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 等则可以算是相对参数。也正是由于这些相对参数的存在,才使得内存优化不再那么简单。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多