記憶體技術:DRAM、DDR 與新興記憶體
記憶體更新(refresh)
想像 DRAM 那些會漏的水桶:放著不管,滿桶會慢慢流光,直到你再也分不出 1 跟 0。於是一位不知疲倦的管理員按固定排程巡視每一排,把每一個目前是滿的桶再補滿——一遍又一遍、永無止境,只為了阻止存好的資料悄悄蒸發。記憶體更新(refresh)就是對每一個 DRAM 單元所做的這種無止盡的補水。
具體來說,DRAM 單元在幾毫秒內就會漏掉電荷,所以系統必須在固定的時間窗內更新每一列(常見是每 64 毫秒一次,高溫下則是 32 毫秒)。更新一列的意思是把它的內容讀進列緩衝區(感測的副作用會把電荷補回滿格),再原樣寫回去。記憶體控制器或晶片內部邏輯會逐列走過所有列,以滾動排程更新它們,讓任何單元都不會太久沒被更新。因為讀取本來就會感測並重寫,所以每一次普通存取也順帶把它碰到的那一列更新了。
為何重要與誠實的代價:更新是純粹的額外開銷——花的時間與能量不是為了算出任何東西,只是為了不讓記憶體遺忘。當一列正在被更新時,它無法服務普通請求,所以更新偷走一小片頻寬(百分之幾),而隨著晶片越來越密集、列數越來越多,這一片也會變大。這是 DRAM 與生俱來的稅之一,也正是 SRAM 所避開的——SRAM 永遠不需要更新,因為它的位元是被主動保持住的。
一顆有 8192 列、且全部必須每 64 毫秒更新一次的晶片,大約每 64 毫秒 / 8192、約每 7.8 微秒就發出一次更新。每次更新會短暫地擋住對該記憶庫的普通存取。
更新被攤在時間上,所以不會一次卡住全部——但它一直在運轉。
更新對你的程式是隱形的,也絕不會改動你的資料——但它不是免費的。隨著 DRAM 密度上升,更新開銷也增加,這正是不需更新的新興記憶體之所以吸引人的原因之一。
又称
另见