我们且看下图(此篇紧跟上一篇):
在这里插入图片描述
可以看到两点:1. 不同的refresh mode,tRFC会不一样。这个跟每种refresh mode下的刷新策略有关
2. 不同的density,不同的memory size, tRFC也会不一样

我们先看第二个问题,**为啥不同的density,tRFC会不一样?**我们先看下面DDR4的spec:(4Gb vs 8Gb vs 16Gb: row的条数在翻倍) 在这里插入图片描述
DDR4是通过增加row的条数来扩充density的。所以row的条数的翻倍,直接导致要刷新一轮所有array的时间增加。所以在tREFI跟tREF不变的情况下,row增加,想要在相同时间相同次数内把row刷完,唯一可以做的,就是增加一次REF command里面刷新的row的条数,这个时候,tRFC的时间就会随着density的增加而增加。

那么仔细研究会发现,tRFC又不是成倍的增加。4Gb vs 8Gb vs 16Gb, 或者上面图中DDR5的tRFC spec,也不是随着density增加一倍而增加一倍的tRFC,为什么呢?如果只是简单的翻倍tRFC时间内刷新row的条数,tRFC应该也会翻倍才对

tRFC的增加是有代价的。refresh的command严重影响DRAM的performance,导致访问DRAM的latency增加的原因就是因为tRFC. 我们当然希望容量的增加是不要以牺牲性能为代价。假如一个tRFC时间内做了四次ACT+PRE(4*tRC), 那么row增加一倍的话,可以单纯增加到8tRC,那么tRFC可能就由195ns增加到390ns! , 但是也可以通过一次ACT开多条row来实现(这个地方不meet interface上的ACT command的spec,需要DRAM内部地址decode来实现). 假如4次tRC时间内,其实可以刷8条row/16条row呢?

拿DDR3 8个bank而言,假如REF是打开所有的bank的某条row的。那么默认就是一次开8(bank)4条row(tRC). 当density翻倍,就可以开88条row来实现。side effect是同时开更多的row会造成功耗过大,内部power drop等过大,在兼容tRFC跟功耗、power等方面做了取舍。所以我们可以用8(bank)*8条row的方式来做,但是bank之间是错开打开bank。这样的话,tRFC会稍微增加(增加的时间是每个bank错开的时间), 功耗也会下降(避免同时打开过多的row,要知道IDD5B是个很大功耗消耗). 这就是trade off的艺术。DDR4亦然,DDR5既通过增加row的方式来增加density,也通过增加bank数量来增加density,所以道理亦然。

tREF/tREFI/tRFC三者时间的关系就是如此了,互相影响着彼此。我们也有说到tRFC对DRAM性能的坏处:此处我们也有讨论到一部分了,就是容量的增加,tRFC会增加,这部分的增加其实是会影响DRAM性能,增加访问DRAM的latency的,但是为了不要让性能影响的太多,tRFC也并没有随着density的翻倍而成倍增加. 我们后面再单独讨论refresh对系统性能的影响以及一些应对的措施,且在后面的专栏里面在专门分享。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐