杜亞娟 金凱倫 王子燁 寧新杰
1(武漢理工大學(xué)計算機與人工智能學(xué)院 武漢 430070)
2(武漢適庫科技有限公司 武漢 430065)
隨著大數(shù)據(jù)和人工智能時代的到來,數(shù)據(jù)呈現(xiàn)爆發(fā)式增長,對數(shù)據(jù)存儲的需求日益加劇?,F(xiàn)有的內(nèi)存技術(shù)已逐漸趨于集成密度的極限,在現(xiàn)有技術(shù)基礎(chǔ)上,無法持續(xù)擴展內(nèi)存容量。此外,若要提升存儲系統(tǒng)性能,須重點考慮現(xiàn)有外存技術(shù)與內(nèi)存技術(shù)之間巨大的性能差異。非易失性存儲器件(Non-Volatile Memory,NVM)的出現(xiàn),使容量密度和性能差異的問題有望得到解決。非易失性存儲是一種斷電后數(shù)據(jù)不會丟失的新型存儲技術(shù)。它具有可按字節(jié)尋址、能耗低、讀寫速度快等優(yōu)良特性,被廣泛研究的 NVM 有相變存儲器(Phase Change Memory,PCM/PRAM)、自旋轉(zhuǎn)移力矩存儲器(Spin Torque Transfer Memory,STT-RAM)、阻變存儲器(Resistive Memory,ReRAM)、鐵電存儲器(Ferroelectric Memory,F(xiàn)eRAM)等。這些存儲器有望替代傳統(tǒng)的動態(tài)隨機存儲器(Dynamic Random Access Memory,DRAM)內(nèi)存技術(shù)。閃存作為固態(tài)硬盤的主要介質(zhì),通常也被歸結(jié)為非易失性存儲器的一種。
但是,非易失性存儲器件還存在一些由介質(zhì)本身引起的不足,例如:(1)使用壽命有限,當(dāng)寫操作達(dá)到一定次數(shù)后,存儲的數(shù)據(jù)就不再可靠;(2)讀寫速度不對稱,讀速度往往大于寫速度;(3)存儲單元或存儲塊磨損不均衡,由于單元間的讀寫次數(shù)不同,引起磨損不均的問題;(4)當(dāng)存儲器損壞時,會卡在某個固定數(shù)值上,但由于存儲器的材料限制,有些錯誤不能修復(fù),因此,需要針對不同錯誤設(shè)計糾錯或降低錯誤的算法。
本文首先闡述了幾種常見的非易失性存儲器的存儲原理;其次,根據(jù)其特點對現(xiàn)有的一些改進(jìn)技術(shù)進(jìn)行討論;再次,討論它們在 3 種典型場景中的應(yīng)用情況;最后,對非易失性存儲器件的應(yīng)用前景進(jìn)行總結(jié)與展望。
本節(jié)將對幾種 NVM 的存儲原理進(jìn)行介紹,主要包括 PCM、STT-RAM、ReRAM、FeRAM和閃存存儲器。
PCM 由加熱器、硫化物和兩個電極組成,底層電極連接加熱器,加熱器連接硫化物(一般為 Ge2Sb2Te5[1]),硫化物再與頂層電極連接(如圖 1 所示)。硫化物經(jīng)過不同的加熱過程會得到兩個不同狀態(tài):當(dāng)對需要寫入的單元施加一個短卻高的電壓時,該硫化物會加熱到非晶體的狀態(tài)(600 ℃),此時,硫化物的電阻率較高,該過程對應(yīng)寫 0(重置操作);當(dāng)對硫化物施加一個長卻低的電壓時,該硫化物會轉(zhuǎn)化為晶體狀態(tài)(300 ℃),此時,硫化物的電阻率較低,該過程對應(yīng)寫 1(寫1 操作)。在兩種狀態(tài)之間,硫化物的電阻為102~104[1]。由于硫化物在兩個狀態(tài)下的阻值差異較大,當(dāng)選取其間不同的阻值時,就可以使用一個單元來存儲多于一個比特的數(shù)值。如選取其間的 4 個電阻值,就可以用來表示 00、01、10、11 這 4 個數(shù)值。由于 PCM 存在電阻漂移現(xiàn)象,所以選取的電阻值越多,電阻值之間的差異就越小,就越易發(fā)生錯誤。
圖1 PCM 構(gòu)造原理圖[1]Fig. 1 PCM structure schematic diagram[1]
與其他非易失性存儲器相比,PCM 的單元最小、擴展性最好,但是其壽命卻不是最好的。由于重置操作的高溫會使相變材料的體積發(fā)生變化,連續(xù)發(fā)生膨脹或收縮會導(dǎo)致接觸面不平,電極的接觸面積變小(接觸不好)。相變材料還可能與電極材料相互作用形成多余的化合物,從而導(dǎo)致相變材料被污染,縮短存儲器的壽命,即寫操作次數(shù)在 108~109之間。而 PCM 的寫入過程主要受寫 1 操作的影響,當(dāng)一個單元中存儲多個邏輯值時,需要進(jìn)行多次迭代,不同的迭代次數(shù)也會影響寫入時間。PCM 的讀延時在 20~60 ns 之間,寫延時在 20~150 ns 之間[1]。雖然 PCM 的功耗相對較低,但是讀寫動態(tài)能量較高,尤其是寫能量。
SST-RAM 由兩個磁鐵層和一個氧化物層組成,其中,兩個磁鐵層被氧化物層分開(如圖 2所示)。下方的磁鐵層有固定的磁化方向,一般將該層稱為參考層;上方的磁鐵層磁化方向可根據(jù)施加在比特線與源線之間的電壓改變,稱為自由層。當(dāng)需要寫入 0 時,在源線與比特線之間施加高正向電壓,導(dǎo)致自由層和參考層的磁化方向相同,呈現(xiàn)低電阻率;當(dāng)需要寫入 1 時,在源線與比特線之間施加高負(fù)向電壓,導(dǎo)致自由層和參考層的磁化方向相反,呈現(xiàn)高電阻率。
圖2 STT-RAM 構(gòu)造原理圖[1]Fig. 2 STT-RAM structure schematic diagram[1]
與其他技術(shù)相比,該技術(shù)更加成熟,且密度高、讀寫速度快、泄漏低、壽命長,寫操作次數(shù)可達(dá) 1012~1016。后續(xù)的自旋軌道矩存儲器(Spin Orbit Torque RAM,SOT-RAM)使用垂直翻轉(zhuǎn),并增加端分隔讀取和寫入操作的途徑,使得讀寫速度更快(讀延遲在 2~35 ns 之間,寫延時在 3~50 ns之間[1])。雖然 SOT-RAM 的靜態(tài)能耗較低、讀取時的動態(tài)能耗也低,但是寫入時的能耗很高。
STT-RAM 被視為最有可能替代緩存的技術(shù)。但仍有兩個不足之處,一是所使用材料具有熱不穩(wěn)定性,易造成數(shù)據(jù)丟失,這可能受連接、溫度、從寫入到最后一次讀取的時間、內(nèi)存單元數(shù)等因素的影響;二是高寫入電流會降低交合處的接觸程度,使得接觸面發(fā)生變形,限制 STT-RAM單元結(jié)構(gòu)的完整性。在對該設(shè)備進(jìn)行讀取時,需要注入一定的電流,故會對設(shè)備磁性有所影響。
ReRAM 屬于憶阻器設(shè)備,憶阻器可以根據(jù)施加電壓的大小、極性和持續(xù)時間改變它的阻值,在斷電時其阻值不會發(fā)生改變。當(dāng)憶阻器呈現(xiàn)低阻值時,認(rèn)為此時存儲的是 1;反之,存儲的是 0。ReRAM 的單元由兩個金屬導(dǎo)體和夾在導(dǎo)體之間的絕緣體或電阻材料構(gòu)成。其中,頂部和底部的兩個金屬導(dǎo)體一般使用 TiOx材料,也可使用如 ZrOx和 NiO 之類的材料。當(dāng)施加電壓會使單元中的絕緣體和電阻材料之間形成導(dǎo)電絲時,該單元為低電阻,即邏輯 1;當(dāng)連接頂部和底部的導(dǎo)電絲中斷時,該單元為高電阻,即邏輯0。ReRAM 構(gòu)造原理圖如圖 3 所示。
圖3 ReRAM 構(gòu)造原理圖[1]Fig. 3 ReRAM structure schematic diagram[1]
ReRAM 的能耗比 PCM 低,尤其是寫入時的能耗,集成的密度比 STT-RAM 高,且穩(wěn)定性好,最大寫入次數(shù)在 108~1011之間,其讀取速度也很快,讀取延遲近 10 ns,與 SRAM 相似,但其寫入性能較差,寫入延時近 50 ns[1]。
組成 FeRAM 的材料是一個晶體管和鐵電容器。其中,鐵電容器是由兩個金屬電極和Pb(Zrx,Ti1-x)O3(鋯鈦酸鉛薄膜)組成,鋯鈦酸鉛薄膜在兩個電極之間,用于存儲電荷。鋯鈦酸鉛薄膜具有鐵磁性,無須電荷即可保持極性,不同的極性可表示不同的邏輯值,故它具有非易失性。當(dāng)寫入 0 時,需要對板線施加強制脈沖;當(dāng)寫入 1 時,對位線施加強制脈沖。施加脈沖時,只須提供與電路供電電壓相同的電壓即可,可減小能耗。FeRAM 構(gòu)造原理圖如圖 4 所示。
圖4 FeRAM 構(gòu)造原理圖[1]Fig. 4 FeRAM structure schematic diagram[1]
FeRAM 比其他 NVM 提前進(jìn)入量產(chǎn),其讀取速度幾乎和 DRAM 相同,在 20~80 ns 之間;寫入速度較慢,在 50~75 ns 之間;能耗校低;不需要先擦除再進(jìn)行寫操作,且無須進(jìn)行刷新操作,最大寫入次數(shù)為 1014~1015[1]。由于該設(shè)備難以拓展,所以更適用于嵌入式設(shè)備。
閃存存儲器是所有 NVM 中最早投入使用的設(shè)備,也是最早研究、使用的設(shè)備。閃存存儲器的存儲單元由 PNP 型三極管組成,如圖 5 所示。
圖5 閃存存儲器構(gòu)造原理圖[1]Fig. 5 Flash structure schematic diagram[1]
理論上閃存存儲器可讀寫的次數(shù)為 106,其中,與非門閃存的讀寫次數(shù)在 104~105之間,讀速度在 15~34 μs 之間,寫速度在 200~500 μs之間,動態(tài)能量和泄漏功率都很低[1]。
由第 2 節(jié)可知,許多 NVM 的讀寫性能都具有不對稱性——讀取速度比寫入速度快很多,且讀寫能耗也不同。所以針對 NVM 的讀寫不對稱問題,有研究對 NVM 的讀寫性能進(jìn)行了改進(jìn)。NVM 的讀寫速度比傳統(tǒng)外存快,所以也有研究將NVM 集成到存儲系統(tǒng)中,以提升存儲器的整體讀寫性能。本節(jié)將對 NVM 的讀寫性能進(jìn)行介紹。
增加性能最直接的方法是一次性讀寫多條緩存行,但是一味地增加帶寬不僅會產(chǎn)生大量能量消耗,而且會增加硬件成本,壓縮/壓實能很好地解決這一問題。Palangappa 等[2]發(fā)現(xiàn)多級單元(一個單元里存放兩個比特)/三級單元(一個單元里存放 3 個比特)NVM 編程需要進(jìn)行迭代,造成了高能耗和高延遲,故提出壓縮擴展編碼技術(shù)。該編碼技術(shù)將頻繁模式壓縮(Frequently Pattern Compression,F(xiàn)PC)/基數(shù)-偏移量-立即數(shù)壓縮與(k,m)q擴展碼技術(shù)相結(jié)合,選擇性地將壓縮后的數(shù)據(jù)進(jìn)行拓展,確保拓展后的數(shù)據(jù)對應(yīng) MLC/TLC 單元的低編碼能量,以減少能量消耗和延時。(k,m)q擴展碼將一組占據(jù)m個存儲單元的信息(原始信息)映射為一組占據(jù)k個存儲單元的信息(映射后信息),k大于m。其中,原始信息中每個單元可以表示q個狀態(tài),映射后的信息只能表示q個狀態(tài)中p個能量較低的狀態(tài)。
Chen 等[3]將 NVM 作為塊設(shè)備使用。他們發(fā)現(xiàn)使用壓縮技術(shù)可以減少成本,但會增加延遲,而 NVM 具有細(xì)粒度讀寫這一優(yōu)勢,可根據(jù)這一優(yōu)勢優(yōu)化解壓縮、截斷糾錯碼(Error Correction Codes,ECC)、基于數(shù)據(jù)訪問位置的壓實、頁內(nèi)增量編碼 4 種技術(shù)。優(yōu)化解壓縮就是對壓縮與BCD 的解碼完整性檢查并行執(zhí)行,以隱藏解壓縮延遲。在 NVM 中,單個頁面受到單個長 ECC碼的保護(hù),但在訪問數(shù)據(jù)時,需要先根據(jù) ECC碼對數(shù)據(jù)進(jìn)行解碼或者編碼,導(dǎo)致 NVM 無法進(jìn)行細(xì)粒度的數(shù)據(jù)訪問,這消除了壓縮帶來的好處,為此截斷 ECC 被提出。截斷 ECC 就是截斷ECC 中的無效部分(假設(shè)系統(tǒng)使用n位 ECC 碼保護(hù)k位的數(shù)據(jù),但是使用n位 ECC 碼的前m位也能保護(hù)k位數(shù)據(jù),那么后面的n-m位就是無效部分),使 NVM 能進(jìn)行細(xì)粒度讀寫,從而減少延遲。Chen 等[3]發(fā)現(xiàn)壓實過程中的數(shù)據(jù)打包和垃圾回收會增加性能開銷,所以提出利用數(shù)據(jù)訪問的局部性,只將冷數(shù)據(jù)打包得較為緊湊,而熱數(shù)據(jù)打包得相對不那么緊湊。Chen 等[3]還發(fā)現(xiàn),數(shù)據(jù)塊的重寫有很強的相似性,而細(xì)粒度的寫可以減少寫的范圍,因此,提出了頁內(nèi)增量編碼。
Guo 等[4]利用數(shù)據(jù)分布特性獲取的動態(tài)模式來進(jìn)一步加大壓縮率,并借助多級單元/三級單元NVM 的不同數(shù)值寫入特性改進(jìn)寫入機制。利用該方法對運行時提取到的模式進(jìn)行分析,得到最常用的模式,將這些模式替換 FPC 的靜態(tài)模式,可提高壓縮算法的壓縮率。此外,該方法還拓展了數(shù)據(jù)模式的大小,即加大單個壓縮的粒度,以減少全 0 行的寫入比特數(shù),并根據(jù)拓展模式選擇合適的壓縮算法。對于三級單元 NVM,該方法在一個單元中存儲兩比特有效數(shù)據(jù),并在每兩比特有效數(shù)據(jù)的最高位前添加 0 或 1,從而擴展為三比特數(shù)據(jù)。加 0 還是加 1 取決于擴展后的三比特數(shù)據(jù)所需的編程能量大小,選取能量較小的三比特數(shù)據(jù)作為擴展數(shù)據(jù),由此減少寫入能量。
但也有一些技術(shù)會產(chǎn)生額外的延遲。低密度奇偶校驗(Low-Density Parity-Check,LDPC)是一種被廣泛應(yīng)用于閃存以提高糾錯能力的技術(shù),然而,LDPC 會導(dǎo)致讀取性能下降。有研究[5-8]針對 LDPC 進(jìn)行改進(jìn),通過減少解碼時間來提升性能。Du 等[9]發(fā)現(xiàn) LDPC 的讀取級別與延遲成正比,提出了一種多粒度 LDPC 讀取方法,來適應(yīng)每一層讀取級別的增加速度。Du 等[10]考慮將用于提高閃存壽命的刷新概念用來優(yōu)化閃存讀取性能。該方法利用數(shù)據(jù)讀取特性,提出了一種輕量級數(shù)據(jù)刷新方法輕量級數(shù)據(jù)刷新(Lightweight Data Refresh,LDR)——可以積極糾正讀取延遲較長的讀取熱點頁面中的錯誤,并將無錯誤數(shù)據(jù)重新編程到新頁面中。Du 等[11]為了避免不必要的重試讀取操作提出了延遲感應(yīng)的低密度奇偶校驗(Latency-aware Low-Density Parity-Check,LaLDPC)。由于在 SSD 中會在相當(dāng)長的一段時間內(nèi)都使用相同的讀等級,在此期間,同一頁中的所有讀取具有相同的讀取級別,LaLDPC 可利用讀取級別估計起始讀取電壓電平,并將其存儲在控制器的閃存轉(zhuǎn)換層中。Du 等[11]還提出一種新的緩存驅(qū)逐算法,以盡可能長時間地將具有高讀取級別的條目留在緩存中。還有一些研究[12-14]針對垃圾回收算法進(jìn)行改進(jìn),通過減少垃圾回收時某些操作的時間,來提升性能。
以上研究表明,當(dāng)使用不同的技術(shù)時,會伴隨多種性能降低的可能,如壓縮帶來的額外數(shù)據(jù)讀取和解壓縮延遲。當(dāng) NVM 作為內(nèi)存使用時有容量和持久性的優(yōu)勢,內(nèi)存缺頁的情況會減少,可以縮短下一級向內(nèi)存?zhèn)鬏敂?shù)據(jù)的時間;NVM作為外存時可以進(jìn)行細(xì)粒度訪問和達(dá)到較快的讀寫速度,來抵消壓縮帶來的負(fù)面影響。
由于 NVM 的性能介于 DRAM 內(nèi)存與外部存儲器之間,所以將 NVM 集成到存儲體系結(jié)構(gòu)中可提升存儲系統(tǒng)整體的性能[15-18]。Korgaonkar等[15]發(fā)現(xiàn)增加最后一級緩存的容量,可減少CPU 和內(nèi)存之間的性能差距,所以將 STT-RAM作為最后一級緩存,并設(shè)計了寫擁塞感知繞過和虛擬混合混存來消除大部分的正常寫和全部的冗余寫。Kommareddy 等[16]考慮到現(xiàn)在的應(yīng)用對內(nèi)存的需求很大,而 NVM 的速度不如傳統(tǒng)內(nèi)存,故設(shè)計了一個分片式 NVM 內(nèi)存——在每個計算節(jié)點中設(shè)置小型的基于高帶寬存儲器或者 DRAM的局部內(nèi)存,而這些節(jié)點共享一個大的 NVM 內(nèi)存。在分片式 NVM 的基礎(chǔ)上,系統(tǒng)管理方法也進(jìn)行了優(yōu)化,優(yōu)化后會將盡可能多的熱數(shù)據(jù)停留在局部內(nèi)存中,減少數(shù)據(jù)遷移時的沖突。Xu 等[19]研究了速度變化對 SSD 并行性能的影響,并建立一種新的具有閃存層信息意識的排隊時間估計模型,該模型評估 SSD 各個芯片的排隊時間,從而將請求定向到排隊時間最少的芯片。
Patil 等[20]比較了 4 種不同的 DRAM-NVM混合內(nèi)存系統(tǒng),其中,NVM 使用的是基于 PCM的設(shè)備。第一種是將 NVM 作為主存,并未用到 NVM 的非易失性;第二種是將 NVM 作為持久性存儲設(shè)備,DRAM 作為主存;第三種將DRAM 和 NVM 作為混存,一部分 NVM 作為主存,而 NVM 剩下的部分作為持久性存儲設(shè)備;第四種將 NVM 與 DRAM 都作為內(nèi)存,并統(tǒng)一尋址。最終發(fā)現(xiàn),當(dāng) DRAM 和 NVM 一起作為混存使用時,既可以保證 DRAM-NVM 混合內(nèi)存系統(tǒng)具有與傳統(tǒng)系統(tǒng)一樣的性能,又可以增加內(nèi)存容量。當(dāng) NVM 作為主存時(例如第一種和第三種情況),雖然會降低讀寫速度,但是能夠大量減少能量消耗。
Park 等[21]提出了一種基于多分區(qū)新內(nèi)存控制器和子系統(tǒng):將 DRAM 與 PCM 進(jìn)行集成,其中 DRAM 作為緩存以隱藏底層 PCM 模塊所施加的長延時,且支持持久性操作,分區(qū)的設(shè)計提供了非阻塞讀服務(wù)(允許在寫入內(nèi)存的同時進(jìn)行多個讀取操作,以減少讀寫延遲)。Li 等[22]將多級單元 PCM 作為塊設(shè)備集成到系統(tǒng)中,多級單元PCM 有兩種寫入操作,一種是快速但易失的寫入,另一種是慢速但非易失的寫入。該文基于這兩種寫入模式提出了一種編譯器定向雙寫方案。該方案首先對每個內(nèi)存寫入指令的壽命(從該指令寫入內(nèi)存到最后一次讀取所經(jīng)過的時間)進(jìn)行分析,然后根據(jù)分析結(jié)果選擇寫入模式,并根據(jù)寫入模式將指令插入要編譯的代碼,為每個內(nèi)存寫入指令選擇最佳寫入模式,以權(quán)衡寫入延時和停留時間。
Zhang 等[23]提出了一種原始誤碼率感知的多傳感方案,該方案可用于減少傳感和傳輸延遲,從而提高讀取性能。Li 等[24]發(fā)現(xiàn)選擇性地降低電壓可以減少讀取干擾,所以提出了一種讀取熱度感知降低電壓的方案,該方案在不違反可靠性要求的前提下,可提高存儲器性能。
上述研究表明,無論是將 NVM 集成作為混存還是主存,都會面臨性能上的挑戰(zhàn),在設(shè)計系統(tǒng)時,如何利用混合內(nèi)存或者混合緩存避免增加延時是關(guān)鍵。此外,在設(shè)計系統(tǒng)時,可以考慮利用 NVM 的非易失性、能耗低、易于集成等優(yōu)點來減少系統(tǒng)的性能開銷。
如第 1 節(jié)所述,每次寫入時,NVM 都會產(chǎn)生磨損,所以 NVM 的寫入次數(shù)有限,這是一個急需解決的問題。本節(jié)將從減少比特翻轉(zhuǎn)、減少寫入次數(shù)、糾錯碼、磨損均衡和其他技術(shù)這 5 個方面進(jìn)行討論。
根據(jù)不同 NVM 的寫入原理可以發(fā)現(xiàn),每次寫入都會對構(gòu)成 NVM 的寫入單元造成破壞,所以在單次寫入時,若能減少對每個單元的比特翻轉(zhuǎn)(置 0 或者置 1 操作),就可以增加 NVM 的壽命。Cho 等[25]提出的 Flip-N-Write 主要利用“讀-修改-寫”替換寫操作和選擇性翻轉(zhuǎn)?!白x-修改-寫”操作可以在舊數(shù)據(jù)和新數(shù)據(jù)的位邏輯值相同時,跳過寫入。在進(jìn)行選擇性翻轉(zhuǎn)時,統(tǒng)計在“讀-修改-寫”操作后寫入新數(shù)據(jù)時必須翻轉(zhuǎn)的位的數(shù)量,當(dāng)翻轉(zhuǎn)的位數(shù)超過存儲器字寬的一半時,就翻轉(zhuǎn)要寫入的新數(shù)據(jù),這樣位翻轉(zhuǎn)的數(shù)量就永遠(yuǎn)小于字寬的一半。改變字寬可以在不同程度上減少位翻轉(zhuǎn),字寬越小,減少效果越好。Chen 等[26]提出了一種壓縮技術(shù)——基于算術(shù)編碼的技術(shù),用合適的浮點數(shù)替換需要存儲的數(shù)據(jù),有效地減少了比特翻轉(zhuǎn)。即先統(tǒng)計寫入中不同字符出現(xiàn)的次數(shù),計算出現(xiàn)的概率,隨后在[0,1)區(qū)間內(nèi)尋找概率相應(yīng)的子區(qū)間,只需從子區(qū)間選擇一個浮點數(shù)表示該輸入即可。由此,算法可以從中挑選與舊數(shù)據(jù)相比翻轉(zhuǎn)位數(shù)最少的浮點數(shù)來替換輸入的新數(shù)據(jù),從而減少比特翻轉(zhuǎn)。
Dgien 等[27]提出的架構(gòu)使用 FPC 壓縮算法、一個比較器來減少比特寫入。首先使用 FPC 對寫入的數(shù)據(jù)進(jìn)行壓縮的同時,內(nèi)存控制器會讀取當(dāng)前位于內(nèi)存中目標(biāo)地址處的舊數(shù)據(jù)。然后當(dāng)壓縮完成時,比較器逐位對新舊數(shù)據(jù)進(jìn)行對比,以確定數(shù)據(jù)會發(fā)生翻轉(zhuǎn)的比特,寫入時只更新發(fā)生翻轉(zhuǎn)的比特的位置,以此減少位的寫入。Kargar等[28]提出將 DRAM 與 NVM 集成作為混合內(nèi)存的漢明樹,這是一種使用現(xiàn)有索引進(jìn)行擴充的輔助數(shù)據(jù)結(jié)構(gòu),可用于任何一種基于樹的數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)將兩種內(nèi)存映射到單個物理地址空間上,尋找與要寫入的新數(shù)據(jù)最相似的舊數(shù)據(jù)的位置,將寫操作定向到內(nèi)存位置,從而最大限度地減少位翻轉(zhuǎn)次數(shù)。
Bittman 等[29]分析了減少位翻轉(zhuǎn)對 NVM 性能的影響,并根據(jù)這些影響對異或鏈表、異或哈希表、異或紅黑樹這幾種減少位翻轉(zhuǎn)的技術(shù)進(jìn)行測試,并作討論。Bittman 等通過研究發(fā)現(xiàn),減少位翻轉(zhuǎn)可以對數(shù)據(jù)結(jié)構(gòu)設(shè)計、程序操作、混存層產(chǎn)生影響。異或鏈表是一種雙向鏈表設(shè)計,每個節(jié)點不存儲前一個節(jié)點和下一個節(jié)點的位置,而是存儲前一節(jié)點位置和下一節(jié)點位置的異或(頭尾節(jié)點存儲相鄰節(jié)點完整的指針值),可以利用異或結(jié)果減少位翻轉(zhuǎn)。異或哈希表是將異或鏈表運用到哈希的同列表中,此時運用的異或鏈表不存儲上一個節(jié)點和下一個節(jié)點的異或值,而是存儲當(dāng)前節(jié)點和下一個節(jié)點的異或值。此外,異或哈希表還允許下一個指針的最低有效位為 1 或者將數(shù)據(jù)指針設(shè)置為空來標(biāo)記空鏈表。異或紅黑樹與異或鏈表使用相同技術(shù)來減少位翻轉(zhuǎn)。
已有的減少位翻轉(zhuǎn)的技術(shù)都是先利用“讀-修改-寫”技術(shù),再通過改變寫入的數(shù)據(jù)或位置以減少位翻轉(zhuǎn)次數(shù)。如使用壓縮、擴展數(shù)據(jù)、翻轉(zhuǎn)數(shù)據(jù)、對特殊結(jié)構(gòu)進(jìn)行特定操作等技術(shù)改變寫入的數(shù)據(jù)?;蛟S還可以利用其他技術(shù)對數(shù)據(jù)進(jìn)行改變,從而減少位翻轉(zhuǎn)。鑒于 MLC NVM 的寫入特性,也有研究甚至忽略位翻轉(zhuǎn)數(shù)量,而是選擇幾個能量低的狀態(tài)進(jìn)行寫入,以減少寫入能量。
除減少每次寫入時需要修改的比特數(shù)之外,減少整體的寫入次數(shù)也是一種增加 NVM 壽命的方法。在 NVM 進(jìn)行集成時,許多研究都使用了緩存技術(shù)和寫回技術(shù),當(dāng)中央處理器發(fā)出存儲指令時,指令中要存儲的數(shù)據(jù)不會直接寫入 NVM,而是先將數(shù)據(jù)寫回緩存,等緩存溢出時,再寫回 NVM。由于數(shù)據(jù)的局部性,許多寫入都是對同一個緩存行進(jìn)行的,所以在該緩存行被驅(qū)逐出緩存前,所有對該緩存行的寫入都會在緩存中進(jìn)行合并,這樣可大量減少 NVM 的寫入次數(shù)。Qureshi 等[30]提出了將 DRAM 與 NVM 集成作為混合內(nèi)存的模型:將 DRAM 作為 NVM的緩沖,負(fù)責(zé)存儲熱頁,當(dāng)觸發(fā)缺頁時,處理程序只把獲取的頁面發(fā)送到 DRAM。只有當(dāng)頁面從DRAM 中被驅(qū)逐時,才會被寫入 NVM 中,并且該模型還在 DRAM 與 NVM 之間增加了寫緩存,當(dāng)數(shù)據(jù)從 DRAM 寫入 NVM 時,該模型使用緩存行粒度,僅將修改過的緩存行寫回 NVM,從而進(jìn)一步減少了寫次數(shù)。此外,還設(shè)計了頁面級的繞過技術(shù),當(dāng)頁面重用性很差時,不會被寫入NVM。
Ni 等[31]發(fā)現(xiàn),為了保證正常關(guān)機后系統(tǒng)的一致性而使用的日志記錄和影子分頁技術(shù),都會記錄同一頁面中不進(jìn)行操作的緩存行,會對NVM 造成額外的寫,所以提出了優(yōu)化的影子分頁技術(shù)——利用虛擬內(nèi)存的間接性來避免記錄實際數(shù)據(jù)。該技術(shù)在每個有效頁面都使用緊湊的緩存行級別的映射,使每個虛擬頁面與兩個物理頁面相關(guān)聯(lián),當(dāng)進(jìn)行寫入時,其中一個物理頁面存儲的是相關(guān)聯(lián)的虛擬頁面修改前的一致狀態(tài),而另一個物理頁面存儲的是相關(guān)聯(lián)的虛擬頁面在緩存行修改后的狀態(tài)。優(yōu)化后的影子分頁技術(shù),會大大減少額外寫操作。
Zhang 等[32]發(fā)現(xiàn)多級單元相變存儲器會出現(xiàn)電阻漂移現(xiàn)象,不同的寫入次數(shù)會產(chǎn)生不同的延遲和不同的停留時間。迭代次數(shù)越少,延時越短,出現(xiàn)電阻漂移的時間越短,停留時間也越短。對于頻繁寫入的區(qū)域而言,更新數(shù)據(jù)的時間短、次數(shù)多,所以僅需數(shù)據(jù)短時間的停留和快速地寫入。基于此,該文章分區(qū)域?qū)Φ螖?shù)進(jìn)行了研究,對于頻繁寫入的區(qū)域進(jìn)行迭代次數(shù)較少的寫入,對于不頻繁寫入的區(qū)域進(jìn)行迭代次數(shù)較多的寫入。
減少寫入次數(shù)的方法多種多樣,合并寫入就是常見的一種。除了減少正常寫入,有時系統(tǒng)和運行的程序中也會存在不需要的寫入,如果能探測到這種寫入并刪除,就可以減少寫入次數(shù)。
對于已經(jīng)出錯的單元,使用 ECC 技術(shù)能夠在一定錯誤率范圍內(nèi)進(jìn)行修正,從而使這些出錯的單元能夠重用,延長 NVM 的壽命,最常用的為BCH 碼。若要檢驗的錯誤數(shù)量為n,BCH 碼需要 1 個不會被分解的多項式(本原多項式p(x))和(n-1)個其余多項式(p3(x),p5(x)…p2n-3(x)),其余多項式在賦值xn后要能整除本原多項式,n對應(yīng)其余多項式的底標(biāo),即pn(xn)對本原多項式取余為 0,將本原多項式和其余多項式相乘就能得到編碼多項式。在發(fā)出信息時,發(fā)送的信息需要乘以編碼多項式,然后將相乘后的結(jié)果發(fā)出,需要檢驗時,將接收到的信息除以本原多項式,若余數(shù)為 0,就表明沒有出錯。根據(jù)余數(shù)的狀態(tài),進(jìn)行一系列較為復(fù)雜的運算,就可以檢測出具體出錯的地方。奇偶檢驗也是較常用的一種技術(shù),它利用冗余位(會根據(jù)數(shù)據(jù)位的數(shù)量而改變)進(jìn)行糾錯。奇校驗就是檢查發(fā)送信息中 1 的個數(shù),當(dāng)1 的個數(shù)為奇數(shù)時,就將冗余位設(shè)置為 0,否則設(shè)置為 1。漢明碼作為奇偶校驗的升級版,在編碼后的數(shù)據(jù)中,2 的冪次位上的數(shù)據(jù)為奇偶校驗位,其根據(jù)數(shù)據(jù)的二進(jìn)制索引位置,將數(shù)據(jù)與奇偶校驗位進(jìn)行對應(yīng),奇偶校驗針對分到數(shù)據(jù)中 1的個數(shù)置 1 或置 0。在檢驗錯誤時,只需要再次對數(shù)據(jù)進(jìn)行奇偶校驗,就可得到錯誤的位置。但是,使用 ECC 技術(shù)會帶來一些開銷,所以有研究利用 NVM 的特性對 ECC 進(jìn)行改進(jìn)。
Kwon 等[33]發(fā)現(xiàn)多級單元 NVM 由于電阻漂移會引入許多軟錯誤,所以需要 ECC 來進(jìn)行糾正。該文提出了一個可靠的多級單元 PCM 架構(gòu),其利用電阻漂移產(chǎn)生的數(shù)據(jù)相關(guān)性來減少ECC 開銷,并與 BCH 編碼技術(shù)相結(jié)合?;诙嗉?PCM 電阻漂移的特點——電阻漂移引起的狀態(tài)變化只會有一比特,且能確定是由什么狀態(tài)漂移成的什么狀態(tài)(通常電阻高的漂移稱作比它電阻低一級的狀態(tài)),該架構(gòu)生成 BCH 碼時只需要考慮其中一位。該架構(gòu)使用簡單的 2 比特到 1 比特狀態(tài)映射生成虛擬數(shù)據(jù),生成的數(shù)據(jù)大小僅為原始數(shù)據(jù)的一半,將生成的數(shù)據(jù)用于校驗,減少了由 BCH 碼產(chǎn)生的附加位。在進(jìn)行數(shù)據(jù)讀取時,BCH 碼會檢驗數(shù)據(jù),當(dāng)發(fā)現(xiàn)錯誤時,就可根據(jù)漂移的屬性來進(jìn)行還原。
Lu 等[34]發(fā)現(xiàn)使用 ECC 會產(chǎn)生大量的存儲空間,提出了漸進(jìn)式 ECC 技術(shù)。該技術(shù)只為每個數(shù)據(jù)字配備奇偶校驗位以檢測故障,當(dāng)檢查到數(shù)據(jù)字中第一個錯誤位時,才會對數(shù)據(jù)字配備ECC,并使用糾錯技術(shù)修復(fù)錯誤位,然后在 ECC DRAM 中分配該校驗條目。Kim 等[35]發(fā)現(xiàn)當(dāng)重復(fù)讀取 PCM 單元時,會發(fā)生讀取干擾,常規(guī)的解決方法是定期清理單元,但這種方式需要讀取計數(shù)器來計算每個字的讀取次,較為費時。針對常規(guī)解決方法的缺陷,該文提出了一種按需清理技術(shù),不需讀取計數(shù)器,可利用 ECC 來觀察單詞中發(fā)生錯誤的次數(shù),當(dāng)且僅當(dāng)錯誤的次數(shù)大于閾值時,才執(zhí)行清理來修復(fù)錯誤。
與其他技術(shù)相比,ECC 技術(shù)發(fā)展得較為完善,可在 SSD 中運用的 ECC 相關(guān)技術(shù)也可直接用于 NVM。對 NVM 而言,ECC 的問題就是占用內(nèi)存較多,或許可以考慮結(jié)合壓縮技術(shù)解決該問題。
在一個存儲部件中,不同單元的寫入次數(shù)是不一樣的,這取決于該單元中存儲數(shù)據(jù)的熱度。存儲熱數(shù)據(jù)的單元由于讀寫次數(shù)明顯高于存儲冷數(shù)據(jù)的單元,所以受到的磨損程度更大,損壞也越快。當(dāng)損壞塊超過一定數(shù)量時,該存儲器隨之損壞。磨損均衡技術(shù)就是盡可能地平均每一個單元的損壞程度,從而避免有的單元已經(jīng)損壞,但是仍有單元進(jìn)行讀寫的次數(shù)很少。磨損均衡算法的大體思想就是避免一直對同一個地址進(jìn)行數(shù)據(jù)寫入,該算法一般與壓縮技術(shù)相結(jié)合。Dgien 等[27]提出利用機會主義磨損均衡器來減少 NVM 單元的峰值位寫入,該方法通過壓縮技術(shù)獲得額外空間,并有條件地將壓縮數(shù)據(jù)寫入 NVM 整列字的另一端來減少磨損。
Liu 等[36]提出了一種基于空間遺忘壓縮和磨損均衡的內(nèi)存框架,通過壓縮后的可用內(nèi)存空間來實現(xiàn)塊內(nèi)磨損均衡策略。該框架在數(shù)據(jù)的初始存儲空間內(nèi),輪換壓縮數(shù)據(jù)塊的寫入位置,從而均衡每個 NVM 單元的寫入。其首先將內(nèi)存塊均勻地劃分為 4 個部分——“00”、“01”、“11”、“10”,然后利用地址旋轉(zhuǎn)算法從不同部分的起始字節(jié)開始存儲,從而達(dá)到均衡磨損的目的。具體存儲的開始位置由是否壓縮、前一個地址標(biāo)簽和壓縮數(shù)據(jù)的大小決定。該算法的原理是在上述 4 個開始地址之間迭代旋轉(zhuǎn)地址標(biāo)簽,為了減少磨損,迭代的順序為 00-01-11-10。
除上述方法外,還有一些可增加 NVM 設(shè)備壽命的方法。Soltani 等[37]提出了一種用于容忍 PCM 存儲加密數(shù)據(jù)時卡住故障的方法。該方法利用由高級加密標(biāo)準(zhǔn)(AES)編碼的加密數(shù)據(jù)的隨機特性以及旋轉(zhuǎn)移位操作,可使大量具有固定故障的存儲位置來正確存儲數(shù)據(jù)。一般地,若 PCM 已經(jīng)磨損,那么就會永久停留在 0 或1 上,而 AES 數(shù)據(jù)之間的隨機性很高,數(shù)據(jù)經(jīng)AES 加密后,就能將數(shù)據(jù)進(jìn)行循環(huán)移位或翻轉(zhuǎn),大概率地匹配已經(jīng)磨損單元的值。若生成的加密數(shù)據(jù)無法與磨損單元進(jìn)行匹配,也可以重新生成加密數(shù)據(jù)。
Liu 等[36]發(fā)現(xiàn)許多應(yīng)用程序的內(nèi)存塊通常包含大量的 0 字節(jié)和頻繁值,所以提出先將都是 0的重復(fù)數(shù)據(jù)刪除,再進(jìn)行頻繁值壓縮,以減少NVM 單個單元上的寫入次數(shù)。0 重復(fù)數(shù)據(jù)刪除就是使用比特圖去編碼和定位全是 0 的內(nèi)存塊,當(dāng)對應(yīng)塊全是 0 時,就將比特圖中對應(yīng)的位置置為 1。頻繁值壓縮就是找到內(nèi)存中應(yīng)用較頻繁的值,利用值碼對應(yīng)表對其進(jìn)行編碼(編碼長度小于值長度),當(dāng)進(jìn)行解壓縮時,就從值碼對應(yīng)表中尋找編碼對應(yīng)的值,從而進(jìn)行還原。
NVM 已經(jīng)被運用在多種應(yīng)用場景中。本節(jié)將對 NVM 的 3 種應(yīng)用場景進(jìn)行介紹,分別是日志結(jié)構(gòu)合并樹(Log Structured Merge Tree,LSMtree)、神經(jīng)網(wǎng)絡(luò)和語意事務(wù)。
Yao 等[38]使用 DRAM-NVM-SSD 的存儲結(jié)構(gòu),根據(jù) NVM 的特性,對基于 LSM-tree 的鍵值存儲進(jìn)行了改進(jìn)。LSM-tree 可存儲多級的鍵值項,每一級的數(shù)量呈指數(shù)增加。但是,基于LSM-tree 的鍵值存儲存在兩個明顯的缺陷,一是在 L0和 L1(最上面兩層)之間存在寫入停頓的現(xiàn)象,二是寫放大會隨著 LSM-tree 深度的增加而增加。寫入停頓會導(dǎo)致應(yīng)用層序吞吐量周期性地下降,直至接近于 0,導(dǎo)致長尾延時,降低用戶體驗感。產(chǎn)生寫入停頓的主要原因是 L0沒有排序,所以 L0與 L1之間的壓縮會涉及兩層的所有數(shù)據(jù)。針對該問題,Yao 等[38]提出了 4 種新的技術(shù):(1)將 L0從 SSD 移至 NVM 中,提出用矩陣容器重新定位和管理 NVM 中的 L0,由于 NVM具有按字節(jié)尋址和快速隨機訪問的能力,而改進(jìn)后的行表使用 NVM 頁作為基本單元,所以該結(jié)構(gòu)允許 L0和 L1之間更細(xì)粒度的數(shù)據(jù)遷移;(2)設(shè)計了新的列壓縮,通過在細(xì)粒度的鍵范圍內(nèi)壓縮 L0至 L1的數(shù)據(jù),減少壓縮的數(shù)據(jù)量;(3)增加每個級別的寬度,以減小 LSM-tree 的深度,從而減小了寫入放大;(4)針對矩陣容器引入跨行提示搜索,即在 L0對行表進(jìn)行排序,不同的行表使用不同的鍵范圍進(jìn)行覆蓋,在構(gòu)建行表時,為元數(shù)據(jù)排序數(shù)組中的每個元素添加向前指針,以保證足夠的讀取性能。改進(jìn)本身結(jié)構(gòu)后,利用NVM 的非易失性,將寫前日志寫入 NVM,數(shù)據(jù)寫入 DRAM。當(dāng)讀取數(shù)據(jù)時,由于 NVM 比傳統(tǒng)的外存設(shè)備的讀寫速度更快,所以讀取數(shù)據(jù)的時間也更短。Hu 等[39]針對壓縮給 LSM-tree 帶來的尾延遲進(jìn)行改進(jìn)分析,提出有限壓縮,即只允許部分層級參與壓縮來改善性能。
Yu 等[40]總結(jié)了利用 NVM 設(shè)備進(jìn)行神經(jīng)啟發(fā)計算的最新技術(shù)、挑戰(zhàn)和前景。神經(jīng)啟發(fā)架構(gòu)能夠有效解決片上存儲和片外存儲之間顯著的性能差異。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練分為離線訓(xùn)練(使用軟件進(jìn)行訓(xùn)練,利用一次性編程,將訓(xùn)練好的權(quán)重加載到神經(jīng)形態(tài)硬件的突觸陣列中,然后僅在硬件上進(jìn)行推理或分類)和在線訓(xùn)練(運行時,在神經(jīng)形態(tài)硬件上完成訓(xùn)練,權(quán)重是動態(tài)的)。NVM的集成密度高,利用它替代 SRAM,可將更多權(quán)重存儲在片上,從而減少對片外存儲器的訪問。利用 NVM 的電阻交叉桿替換 SRAM 陣列,還可進(jìn)行并行編程和加權(quán)求和,使存儲進(jìn)一步加速,從而有可能實現(xiàn)在線訓(xùn)練。PCM 在 0 和 1 兩種狀態(tài)下的電阻差異較大,所以可以充當(dāng)模擬突觸,該模型存在的問題是重置操作過程快,難以控制。由于 ReRAM 的寫 1 和寫 0 操作與 PCM相反,所以寫操作需要漸進(jìn)。FeRAM 組成的突觸件是一種三端結(jié)構(gòu),可將權(quán)重調(diào)諧和權(quán)重讀取路徑解耦,與 ReRAM 的模擬突觸器件相比,它有更大的開/關(guān)比、更短的編程脈沖寬度,以及更小的權(quán)重更新曲線變化。
Ramalhete 等[41]發(fā)現(xiàn)當(dāng)出現(xiàn)非破壞性故障時,將事物語義與持久技術(shù)相結(jié)合,數(shù)據(jù)能始終保持在持久性內(nèi)存中。Ramalhete 等[41]對柵欄、刷新的數(shù)量和內(nèi)存使用進(jìn)行了權(quán)衡,提出兩種新算法(Trinity 和 Quadra)用于持久性內(nèi)存上的持久事物。Quadra 將持久性柵欄數(shù)量的下限變低,并為每個修改的緩存線執(zhí)行一條刷新指令。Trinity為每個事物執(zhí)行兩條 Fences 操作,該算法易與基于細(xì)粒度鎖定的并發(fā)控制技術(shù)相結(jié)合,將其與事務(wù)鎖 II 算法適配集成在一起,可實現(xiàn)急切鎖定和直寫更新策略。此外,將 Trinity 和事務(wù)鎖 II 算法組合到持久性事物內(nèi)存中,從而為具有不相交訪問模式的數(shù)據(jù)結(jié)構(gòu)和工作負(fù)載提供了良好的可擴展性,并能對持久化線性事務(wù)實現(xiàn)鍵值存儲。
通過相關(guān)調(diào)查研究發(fā)現(xiàn),NVM 技術(shù)的應(yīng)用前景十分廣闊。然而,由于 NVM 的介質(zhì)特性、可靠性、持久性等特性,直接使用 NVM 或?qū)⑵渑c其他存儲設(shè)備進(jìn)行集成時,仍存在一定挑戰(zhàn)。此外,現(xiàn)有應(yīng)用大多基于傳統(tǒng)存儲器設(shè)計,更適用于傳統(tǒng)存儲系統(tǒng)。如何基于 NVM 的特性,設(shè)計適用于該硬件的應(yīng)用或軟件系統(tǒng),是當(dāng)前亟須考慮的問題。本文闡述了 NVM 的技術(shù)背景、現(xiàn)有優(yōu)化工作和應(yīng)用前景,為促進(jìn) NVM 的廣泛應(yīng)用和量產(chǎn)提供了強有力的支撐。
NVM 相關(guān)技術(shù)的未來發(fā)展趨勢主要總結(jié)為3 個方面:(1)新型或改進(jìn)后的 NVM 技術(shù)將大量涌現(xiàn)。在具體應(yīng)用中,由于現(xiàn)有的 NVM 技術(shù)仍存在一些不足,其發(fā)展之路任重道遠(yuǎn)。(2)結(jié)合NVM 設(shè)備特點,應(yīng)用應(yīng)針對 NVM 的特有訪問模式進(jìn)行革新。在讀寫延遲和功耗等方面,由于新型 NVM 技術(shù)與傳統(tǒng)存儲技術(shù)存在較大差異,改進(jìn)應(yīng)用訪問模式或?qū)O大挖掘 NVM 技術(shù)潛力。(3)存儲架構(gòu)的革新。當(dāng) NVM 技術(shù)發(fā)展到一定階段后,其性能和存儲容量優(yōu)勢極大凸顯,存儲架構(gòu)也將進(jìn)一步突破現(xiàn)有的馮·諾伊曼系統(tǒng)架構(gòu),如內(nèi)外存一體化技術(shù)、存算一體技術(shù)和內(nèi)存計算技術(shù)等新型存儲架構(gòu)將取得進(jìn)一步的發(fā)展。