当前位置: 华文问答 > 数码

内存(DRAM)的连续读写速度和随机读写速度是一样的吗?

2019-05-20数码

内存每一个bank只有一个buffer,读写都要通过这个buffer来进行,这个buffer只能装载内存的一行,也叫page。

存在buffer中的行的状态称为page opened,而同一bank其他行的状态称为page closed。

如果到来的命令正好是访问当前open状态的行,那么这叫page hit,只需要一个cas命令(列选择,既读或者写)即可完成操作。

如果所有行处于close状态,这叫page miss,需要先发一个ras命令,也叫active命令,行选择。然后再发cas命令完成操作。

如果当前访问的行和open状态的行不是同一行,那么这叫page conflict。需要先发一个pre-charge命令,关闭当前open的行,然后再ras命令,最后cas命令完成操作。

所以memory controller主要使用两种page策略,open page 和close page。open page,顾明思议,读写后不会立刻进行pre-charge,这种策略对连续地址读写方式更友好,但一旦出现page conflict,受到的影响就很明显。而close page则是每次读写后立刻pre-charge,这样每次到来的命令都是page miss,不会出现page conflict,对随机读写更加友好。

一般来说,连续命令以连续地址操作较多,所以一般性能好优化好的memory controller采用open page方式的占多数,需要对命令进行重排序,再调度,保持同一地址的读写顺序,pre-charge预测等等优化,还要采取对应的地址映射方式(这块挺复杂,简单的说,可以把collum地址映射到地址的低位,采用CS interleave,把bank group和bank地址映射到低位,bank group比bank更低为好),目的是增加page hit,减少page conflict。

close page方式是结构相对简单的memory controller主要采用。所以连续地址读写和随机地址读写的速度,根据memory controller采用的page策略有关,当然大部分是连续地址读写速度更快带宽更高。

另外,从读命令到写命令所用切换时间比从写到读少,这是因为数据操作其实主要在buffer中进行,如果前一个是读,读命令不会影响数据,buffer中数据始终和open的行中数据保持一致,所以pre-charge的时候不需要把buffer中数据写回行中。而写命令会改变数据,需要一个写回的过程。所以还尽量要减少写到读的切换,在保证正确读写顺序的基础上。