真實系統、效能與前沿

持久記憶體

數十年來電腦一直活在一道鮮明的分界中:快速的記憶體(RAM)一斷電就被抹除,而緩慢的儲存(磁碟或固態硬碟)會保住你的資料、但存取慢得多。程式不斷在這道鴻溝之間搬運資料。持久記憶體是一種較新的硬體,把界線模糊化:它幾乎和 RAM 一樣快、像 RAM 一樣接在記憶體匯流排上,卻又像儲存那樣在斷電時保住內容。彷彿你的書桌能記住整夜留在上頭的一切,無須先歸檔進櫃子。

技術上,CPU 能用普通的載入與儲存指令逐位元組地直接讀寫持久記憶體,而不必透過檔案系統對磁碟發出緩慢、以區塊為單位的讀寫。這壓掉了整整一層:一個資料結構可以就住在持久記憶體裡,重開機或當機後仍然在那兒,無須另外的存檔步驟。但這份能力帶來一個微妙的危險。CPU 的快取仍坐在記憶體前面,所以一次寫入可能滯留在揮發性的快取中、在當機時遺失,儘管程式以為它已被儲存。因此軟體必須使用特殊的刷新與排序操作,依正確的順序把資料一路逼到耐久的媒介上,這要做對其實相當棘手——一個只完成一半的更新,可能讓持久資料結構以普通記憶體絕不會有的方式毀損。

誠實的定位是:持久記憶體並不會神奇地讓「防當機程式設計」變免費;它改變了難處所在之處。作業系統與檔案系統必須重新設計,以安全地揭露可逐位元組定址的持久性,而應用程式必須謹慎地推理耐久性與排序。它是一個真正的前沿,重新思考了那道古老的「記憶體對儲存」邊界,但它在移除舊有的緩慢鴻溝之際,也加入了新的失效模式。

一個資料庫把它的索引放在持久記憶體裡。突然斷電後機器重開機,索引就這麼完好地在那兒,無須從磁碟緩慢重載——前提是資料庫用了刷新指令,依序把每次更新一路逼到耐久媒介上。少了那些刷新,更新途中的一次當機可能讓索引悄無聲息地毀損。

像 RAM 一樣快、又能斷電不失——但只有在寫入依正確順序刷新時才成立。

持久記憶體不會讓耐久性自動成立。由於 CPU 快取坐在它前面,除非軟體明確地刷新並排序,否則一次寫入可能在當機時遺失——這是一個新的、容易出錯的毀損來源。

又稱
storage-class memorynon-volatile memoryNVM儲存級記憶體