當前位置: 華文問答 > 數碼

記憶體(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中數據寫回行中。而寫命令會改變數據,需要一個寫回的過程。所以還盡量要減少寫到讀的切換,在保證正確讀寫順序的基礎上。