肖仁智 馮 丹, 胡燏翀 張曉祎 程良鋒
1(華中科技大學(xué)武漢光電國家研究中心 武漢 430074)2(華中科技大學(xué)計算機科學(xué)與技術(shù)學(xué)院 武漢 430074)3(深圳華中科技大學(xué)研究院 廣東深圳 518061)
隨著新型非易失內(nèi)存技術(shù)的發(fā)展,涌現(xiàn)出了眾多的非易失內(nèi)存存儲器,如相變內(nèi)存PCM[1]、自旋轉(zhuǎn)移力矩磁隨機存取存儲器STT-MRAM[2]、電阻式隨機存儲器ReRAM[3]以及憶阻器(memristor)[4]等,這些非易失內(nèi)存(non-volatile memory, NVM)以其非易失、低靜態(tài)功耗、高密度、字節(jié)尋址以及就地更新等特性受到了學(xué)術(shù)界和工業(yè)界的廣泛研究.NVM也被稱作存儲級內(nèi)存(storage-class memory, SCM)、持久內(nèi)存(persistent memory, PM)或非易失隨機訪問內(nèi)存(non-volatile random access memory, NVRAM),本文統(tǒng)一稱為NVM.由于這些優(yōu)良特性,NVM可以連接到內(nèi)存總線上,應(yīng)用程序可以通過loadstore指令來訪問NVM上的數(shù)據(jù).因此,在未來的計算機系統(tǒng)中,采用NVM技術(shù)代替DRAM作主存或NVM與DRAM共同作為主存,這已被廣泛地討論并研究[5-15].如圖1所示,NVM構(gòu)建主存主要有3種類型[16]:僅NVM的單層主存、NVM和DRAM的混合主存以及DRAM作為NVM的緩存.NVM最獨特的特性是非易失性,即寫到NVM的數(shù)據(jù)在斷電時不丟失.之前的工作如BPFS[17],PMFS[18],NV-heaps[19],Mnemosyne[20],Quartz[21]等,假定NVM能夠保證8 B的原子寫,NVM的更新粒度為緩存行大小,通常為64 B.當(dāng)前的處理器架構(gòu)沒有提供有序的內(nèi)存寫原語[8].由于CPU緩存的易失性和NVM之間更新粒度不匹配,并且當(dāng)前處理器或內(nèi)存控制器可能重排序內(nèi)存寫以便進一步優(yōu)化程序性能,所以當(dāng)系統(tǒng)故障時的部分更新可能導(dǎo)致不一致性情況的發(fā)生.因此NVM系統(tǒng)面臨的最棘手的問題之一是數(shù)據(jù)一致性[22],即系統(tǒng)在意外崩潰或斷電重啟之后數(shù)據(jù)的正確性.
Fig. 1 NVM builds three architectures ofmain memory[16]圖1 NVM構(gòu)建主存的3種結(jié)構(gòu)[16]
非易失內(nèi)存中數(shù)據(jù)一致性問題已被廣泛地研究[8-14,17-18,23-28].由于NVM具有非易失特性,在系統(tǒng)故障時,保證易失性的CPU緩存和非易失內(nèi)存之間的數(shù)據(jù)一致性是必須的.NVM的一致性基本需求是確保內(nèi)存寫的持久性和順序性.然而,當(dāng)前處理器沒有保證有序的內(nèi)存寫操作原語,只提供了緩存行刷新(CLFLUSH)和內(nèi)存柵欄(MFENCE)指令.緩存行刷新指令CLFLUSH功能:給定一個內(nèi)存地址,CLFLUSH指令使得包含該內(nèi)存地址的緩存行失效,并且在系統(tǒng)中進行廣播到所有的CPU核中;如果特定的緩存行是臟的,它將在失效前寫回內(nèi)存.內(nèi)存柵欄MFENCE功能:MFENCE指令保證在程序順序中的MFENCE之前發(fā)出的所有內(nèi)存讀取和內(nèi)存寫入比在MFENCE指令之后的任何讀取或?qū)懭胫白優(yōu)槿挚梢?即優(yōu)先寫入到非易失內(nèi)存中).但是,僅靠MFENCE指令不會寫回任何臟的緩存行.多個CLFLUSH指令可能并行執(zhí)行.然而,臟緩存行(dirty cache lines)可能以任意順序?qū)懟?為了確保2個臟緩存行的寫回順序,需要MFENCE指令來使得CLFLUSH刷新有序.因此,可以在CLFLUSH指令之間插入MFENCE指令以便確保臟的緩存行寫回順序[9].
然而,CLFLUSH和MFENCE的指令的序列化操作導(dǎo)致了大的開銷.另一個重要的方面是維持一致性的寫大小,假設(shè)NVM的故障原子寫(failure-atomic write)粒度為8 B,寫粒度小于8 B的更新,可以直接應(yīng)用原子8 B寫;但是當(dāng)NVM寫單元大于8 B時,需要依賴于傳統(tǒng)方法如日志或?qū)憰r拷貝(copy-on-write, COW)等機制維持數(shù)據(jù)一致性.然而,日志或?qū)憰r拷貝(COW)機制存在雙倍寫問題,這增加了緩存行刷新的開銷和大量的NVM寫操作[21].因此,我們需要在保證一致性的前提下盡量減少維護NVM中數(shù)據(jù)一致性帶來的開銷.
表1列舉了DRAM和3種新型非易失內(nèi)存器件的主要指標(biāo).從表1可以看出,NVM技術(shù)如PCM在密度和讀速度方面具有很好的優(yōu)勢.然而非易失內(nèi)存NVM具有2方面局限性:1)有限的寫耐久性,比如PCM的寫耐久性為108~109擦除次數(shù)[29],在反復(fù)寫同一個存儲單元情況下,存儲器會很快失效;2)讀寫不對稱性,比如PCM寫延遲大于DRAM,PCM的寫延遲大約是DRAM的2~15倍,而讀延遲是DRAM的2~6倍[29].因此,除了減少NVM一致性開銷,還需要盡可能減少NVM的有限的寫入耐久性和讀寫不對稱的影響[5-7,30-31],從而提高NVM系統(tǒng)的壽命和性能.
Table 1 Comparison of Features Between New Non-volatile Memory and Traditional Memory Devices[29]表1 新型非易失內(nèi)存與傳統(tǒng)易失性內(nèi)存器件的特征比較[29]
近年來,保證NVM數(shù)據(jù)一致性成為了NVM的研究熱點,無論是從基于NVM的持久索引、文件系統(tǒng)還是從持久性事務(wù)等方面均存在數(shù)據(jù)一致性問題,并且已經(jīng)得到不少的研究和關(guān)注.鑒于PCM技術(shù)最成熟、容量也最大,而ReRAM實際容量小且處于實驗室階段,因此,本文的主要關(guān)注點是如何使得基于以PCM為主的NVM系統(tǒng)面臨故障時,確保數(shù)據(jù)一致性的同時盡可能降低一致性維護帶來的額外開銷.
近年來,基于NVM的內(nèi)存索引的數(shù)據(jù)一致性工作得到了廣泛的關(guān)注和研究.B+Tree以及變體由于高效的范圍掃描操作和相對好的對數(shù)級查詢能力被廣泛應(yīng)用[9,11,15],而散列索引[23-25,32-37]因為常量級的查詢時間而被廣泛應(yīng)用,基數(shù)樹[13,38]和紅黑樹[14]等樹結(jié)構(gòu)與NVM的結(jié)合也引發(fā)了關(guān)注和研究,不同內(nèi)存索引的混合以便充分發(fā)揮各自索引的優(yōu)勢而屏蔽各自索引的劣勢,比如HiKV[26]的數(shù)據(jù)一致性研究.接下來從Tree索引、散列索引以及混合索引等方面分別介紹相關(guān)的數(shù)據(jù)一致性工作.
NVM和Tree索引結(jié)構(gòu)相結(jié)合的持久索引的一致性研究得到了廣泛關(guān)注[8-14].然而以PCM為主NVM具有有限的寫耐久性和讀寫不對稱性,在保證基于NVM的Tree索引結(jié)構(gòu)如B-Tree或B+Tree及其變體[8-12]、基數(shù)樹[13]以及紅黑樹[14]等的數(shù)據(jù)一致性的基本前提下,減少一致性開銷的同時需要盡量避免NVM寫以便延長NVM壽命和提高索引結(jié)構(gòu)的整體讀寫性能.
針對當(dāng)前處理器或內(nèi)存控制器能夠重排序?qū)懖⑶姨幚砥鞑荒芴峁┯行虻膬?nèi)存寫原語操作問題,伊利諾伊大學(xué)Venkataraman等人[8]提出了基于NVM的一致且持久的B-Tree變體CDDS B-Tree,它通過采用64 b無符號整數(shù)的版本化機制,當(dāng)CDDS B-Tree的一個樹節(jié)點更新時,它創(chuàng)建了更新條目的一個有版本信息的副本而不是原地重寫該條目,這保證了可恢復(fù)性和一致性.通過8 B原子更新而無需日志或?qū)憰r拷貝操作實現(xiàn)一致性保障.CDDS B-Tree的節(jié)點條目保持有序性以便支持折半查找提高讀性能.然而,有序的節(jié)點在插入或刪除階段帶來了許多條目移動開銷,這導(dǎo)致了許多額外的NVM寫,從而降低了NVM的壽命.插入或刪除過程也遭受了許多死節(jié)點和死條目的影響.由于CDDS B-Tree調(diào)用了昂貴的MFENCE和CLFLUSH指令數(shù)量同節(jié)點內(nèi)需要重排序的條目數(shù)量相等,因此CDDS B-Tree的插入和搜索性能相對較差.最后需要注意的是CDDS B -Tree中的B -Tree指代的是將值僅存儲在葉子節(jié)點中的B+Tree.
針對撤銷-重做日志和影子技術(shù)確保一致性帶來的雙倍寫問題,中國科學(xué)院計算技術(shù)研究所的Chen等人[9]在先前PCM友好的B+Trees的數(shù)據(jù)庫算法工作[16]基礎(chǔ)上,進一步提出了基于NVM寫原子的B+Trees變體wB+-Trees,它通過bitmap的原子更新來提交絕大部分的改變,除了有時候當(dāng)葉子節(jié)點分裂時需要使用重做日志機制確保一致性,采用了僅追加更新的策略.wB+-Trees通過采用葉子節(jié)點條目的無序性來減少插入過程中寫次數(shù),而刪除過程僅僅更新bitmap區(qū)域.為了確保好的搜索性能,wB+-Trees工作通過添加slot array來維持節(jié)點中索引條目的有序性,帶有slot array的非葉子節(jié)點支持折半查找,從而能夠提供O(logn)的查找性能.slot array存儲了鍵的有序索引,由于索引比實際的鍵和指針都小,幾個鍵索引可以通過8 B的原子寫操作進行原子更新.wB+-Trees提出使用8 B的bitmap來更新節(jié)點容量,當(dāng)使用了bitmap時,wB+-Trees需要至少使用4個緩存行刷新,如果采用了slot array,那么緩存行的刷新數(shù)量可以降到2個.雖然相對于CDDS B-Tree的緩存行刷新數(shù)急劇下降,但是B+tree帶來了間接開銷.然而,當(dāng)葉子節(jié)點分裂操作時依舊需要昂貴的日志機制或?qū)憰r拷貝來確保一致性,這帶來額外的NVM寫開銷.
針對CPU和內(nèi)存控制器可能會重排序內(nèi)存寫以及MFENCE&CLFLUSH指令帶來的顯著開銷等問題,新加坡數(shù)據(jù)存儲研究所A-STAR的Yang等人[10]提出了基于NVM的一致且緩存優(yōu)化的B+Tree變體NV-Tree,它通過采用僅追加寫策略減少了昂貴的MFENCE和CLFLUSH指令數(shù)量.NV-Tree通過選擇執(zhí)行數(shù)據(jù)一致性來減少一致性開銷,即通過維持存放于NVM中的葉子節(jié)點等關(guān)鍵數(shù)據(jù)(critical data)的一致性保障,而對存放于DRAM中的中間節(jié)點(IN)的可重構(gòu)數(shù)據(jù)(reconstructable data)無需做一致性保證,因為內(nèi)部節(jié)點可以通過一致性的葉子節(jié)點(LN)來重構(gòu).由于追加更新葉子節(jié)點策略以及只有葉子節(jié)點保存在NVM中,NV-Tree只需要2個緩存行刷新,其中一個用于條目(entry)更新,另一個用于條目數(shù)(nElements)的更新,結(jié)果性能得到了提升.同時也帶來了2個問題:1)葉子節(jié)點依舊保持無序;2)內(nèi)部節(jié)點在系統(tǒng)故障時可能會丟失.通過保持葉子節(jié)點條目的無序性并進行原子性的更新,而對內(nèi)部節(jié)點保持有序能夠支持好的搜索性能.最后是對內(nèi)部節(jié)點以緩存優(yōu)化的組織方式來提高緩存局部性,即具體采用連續(xù)的內(nèi)存空間,通過偏移(offset)而非指針來定位內(nèi)部節(jié)點,所有的節(jié)點都以緩存行對齊方式存儲.然而,由于NV-Tree需要所有的內(nèi)部節(jié)點存儲在連續(xù)的內(nèi)存塊,那么每一個葉子節(jié)點的父節(jié)點的分裂操作將導(dǎo)致整個內(nèi)部節(jié)點的重構(gòu)操作.并且,NV-Tree在DRAM中保存內(nèi)部節(jié)點的方式在系統(tǒng)故障時需要一定的時間來恢復(fù).
針對NVM讀寫不對稱性問題(主要是延遲方面)以及現(xiàn)有的B+Tree變體工作存在持久內(nèi)存泄露問題以及數(shù)據(jù)恢復(fù)弱點,德國德累斯頓工業(yè)大學(xué)的Oukid等人[11]提出了基于NVM和DRAM混合內(nèi)存的持久并發(fā)B-Tree變體FPTree,它將內(nèi)部節(jié)點保存在易失性的DRAM中而葉子節(jié)點保存在非易失性的NVM中;FPTree通過一個字節(jié)指紋(fingerprints)來減少緩存行的刷新,指紋是每個葉子節(jié)點中鍵的1 B散列.在查找搜索鍵之前先掃描指紋來限制需要查找鍵的數(shù)量,結(jié)果降低了緩存行失效率;FPTree使得葉子節(jié)點中的條目無序,內(nèi)部節(jié)點中的條目保持有序.同NV-Tree一樣,F(xiàn)PTree也采用選擇持久化(selective persistence)機制降低數(shù)據(jù)一致性開銷,即將葉子節(jié)點等主要數(shù)據(jù)存儲在NVM中并保證葉子節(jié)點一致性,而將內(nèi)部節(jié)點等非主要數(shù)據(jù)存儲在DRAM中且不保證內(nèi)部節(jié)點一致性.通過選擇并發(fā)性機制即對內(nèi)部節(jié)點采用硬件事務(wù)內(nèi)存(HTM)而葉子節(jié)點采用細粒度鎖確保并發(fā);最后通過持久性指針來解決內(nèi)存泄漏問題.雖然FPTree顯示比NVTree更好的性能,但是當(dāng)系統(tǒng)故障時也需要重構(gòu)存放在DRAM中的內(nèi)部節(jié)點.
針對易失性CPU緩存與NVM之間以緩存行粒度而非頁粒度作為數(shù)據(jù)傳輸單元,但是故障原子寫單元為8 B而非64 B的緩存行大小,該粒度不匹配問題已經(jīng)引發(fā)了廣泛的研究,即基于塊的數(shù)據(jù)結(jié)構(gòu)如B+Tree重新設(shè)計以便匹配字節(jié)尋址的NVM.然而,各種B+Tree變體降低了B+Tree在NVM中的效率.韓國蔚山國家科學(xué)技術(shù)研究所(UNIST)Hwang等人[12]提出了基于NVM的可忍受瞬態(tài)不一致性的持久B+Tree變體FAST& FAIR,它通過采用插入過程故障原子移動(failure-atomic shift, FAST)解決了粒度不匹配問題,在FAST的8 B存儲(store)指令和故障原子的原地再平衡(failure-atomic in-place rebalance, FAIR)機制可以確保B+Tree從一致性狀態(tài)轉(zhuǎn)換到另一種一致性狀態(tài);或者在寫線程更改樹節(jié)點不成功時,F(xiàn)AST中的8 B的存儲操作序列和FAIR算法可保證任何讀線程不會訪問到不一致的樹節(jié)點.通過讀操作容忍臨時的不一致性可以有效避免昂貴的寫時拷貝、日志機制,甚至讀取鎖存器的必要性,以便讀取事務(wù)可以是非阻塞的即無鎖查詢.
當(dāng)前基于NVM的Tree索引結(jié)構(gòu)一致性研究主要基于B-Tree或B+Tree變體,如CDDS B-Tree[8],wB+Trees[9],NV-Tree[10],F(xiàn)PTree[11],F(xiàn)AST&FAIR[12]等.然而也有研究開展了基于NVM的基數(shù)樹(radix tree)變體WORT[13]和紅黑樹CRB-Tree[14]的一致性工作研究.
針對當(dāng)前的處理器經(jīng)常以緩存行粒度重排序內(nèi)存寫操作并且需要采用MFENCE和CLFLUSH指令執(zhí)行內(nèi)存寫的有序性,但是MFENCE和CLFLUSH指令是引發(fā)性能下降的主要因素[9-11,39],韓國蔚山國家科學(xué)技術(shù)研究所(UNIST)的Lee等人[13]指出了現(xiàn)有NVM的B-Tree變體通過削弱原始B-Tree的某個關(guān)鍵特征如保持節(jié)點中鍵的有序性.此外,8 B原子更新寫不足以處理節(jié)點分裂涉及多個節(jié)點更新粒度,該分裂操作仍然需要日志機制保持一致性.而radix tree不需要鍵比較,并且插入或刪除操作僅需單個8 B更新操作而不再需要樹結(jié)構(gòu)的再平衡操作如B-Tree分裂或合并操作所引發(fā)的節(jié)點粒度更新,表明了基數(shù)樹(radix tree)比B -Tree更適用于NVM.由于原始基數(shù)樹已知糟糕的內(nèi)存利用率和緩存效率使其不能直接適應(yīng)NVM.為了克服這個局限,基數(shù)樹采用了路徑壓縮優(yōu)化,路徑壓縮將多個樹節(jié)點合并成單個節(jié)點以便形成唯一的搜索路徑.雖然路徑壓縮顯著地提升了基數(shù)樹的性能,但是它涉及節(jié)點分裂和合并操作是對NVM有害的.因此,韓國蔚山國立科學(xué)技術(shù)研究所(UNIST)的Lee等人[13]提出了基于NVM寫優(yōu)化的基數(shù)樹變體WORT,它通過采用8 B故障原子寫更新(failure-atomic write per update)而無需通過日志或?qū)憰r拷貝機制來確保一致性,并且所開發(fā)的故障原子路徑壓縮機制的基數(shù)樹不僅能夠確保故障一致性,而且同現(xiàn)有的路徑壓縮機制的基數(shù)樹有一樣的內(nèi)存節(jié)省效果.對于WORT中的節(jié)點分裂和合并操作,通過添加MFENCE和CLFLUSH持久操作確保故障原子寫的同時最小化NVM寫次數(shù)以及MFENCE和CLFLUSH指令操作次數(shù).文獻[13]表明了radix tree是適合于NVM的數(shù)據(jù)結(jié)構(gòu),并且提出了優(yōu)化的radix tree變體WORT和WOART以及ART+COW,后2種是基于自適應(yīng)的基數(shù)樹(adaptive radix tree, ART),ART[38]解決了搜索性能和節(jié)點利用率之間的平衡,通過采用自適應(yīng)的節(jié)點類型轉(zhuǎn)換能夠根據(jù)節(jié)點利用率來動態(tài)地改變樹節(jié)點的大小,能夠進一步提高基數(shù)樹(radix tree)的空間利用率.并且指出了ART中寫時拷貝開銷顯著地小于B -Tree及其變體中的寫時拷貝開銷.
針對大多數(shù)當(dāng)前的內(nèi)存數(shù)據(jù)結(jié)構(gòu)都會出現(xiàn)一致性問題,新加坡數(shù)據(jù)存儲研究所A-STAR的Wang等人[14]首先將計算機系統(tǒng)中廣泛使用的重要內(nèi)存結(jié)構(gòu)紅黑樹(RB樹)引入基于NVM的系統(tǒng),并開展了一致性研究工作.由于紅黑樹具有漫長而復(fù)雜的更新過程,因此基于NVM的RB樹很容易出現(xiàn)不一致的問題.他們提出了一種基于NVM的一致性紅黑樹CRB-Tree,其中包含一種名為cascade-versioning的新技術(shù).所提出的CRB-Tree具有2個特點:1)總是一致且可擴展的;2)在系統(tǒng)崩潰之后不需要恢復(fù)過程.實驗結(jié)果表明,基于NVM的CRB -Tree不僅獲得較低的空間開銷和數(shù)據(jù)一致性的目的,而且有著與普通易失性紅黑樹相當(dāng)?shù)男阅?
散列算法因其常量級的查詢性能而被廣泛使用[23-25,36-37].然而基于NVM的散列索引將面臨系統(tǒng)故障時數(shù)據(jù)一致性問題.因為由散列索引固有的散列沖突問題而造成過多的寫操作,所以需要在保證基于散列索引結(jié)構(gòu)的數(shù)據(jù)一致性的同時減少NVM的寫.美國NEC實驗室的Debnath等人[36]提出了基于PCM寫友好的布谷鳥散列變體PFHT,PFHT提供了布谷鳥散列的優(yōu)勢,比如高效的內(nèi)存利用率以及保證的查詢時間;并且它通過限制主表剔除次數(shù)為1,顯著地減少了傳統(tǒng)布谷鳥散列算法因散列沖突導(dǎo)致的大量NVM寫.華中科技大學(xué)的Zuo等人[37]提出了一種基于NVM的成本高效的寫入友好路徑散列方案Path Hashing,它通過新穎的散列沖突解決方法位置共享技術(shù),避免了插入和刪除過程中額外的NVM寫操作.雖然PFHT和Path Hashing都減少了NVM寫次數(shù),但是它們都沒有保證數(shù)據(jù)的一致性.接下來將對現(xiàn)有的基于散列的一致性工作展開介紹如組散列(Group Hashing)[23],Level Hashing[24],NVLH[25].
針對先前的基于NVM的散列工作如PFHT和Path Hashing等既不考慮高速緩存行刷新(CLFLUSH)和內(nèi)存柵欄(MFENCE)的成本,也不維護系統(tǒng)在意外故障時的數(shù)據(jù)一致性,華中科技大學(xué)Zhang等人[23]首先提出了基于NVM的寫入高效且一致的散列方案為Group Hashing.組散列背后的基本思想是降低一致性成本,同時在出現(xiàn)意外系統(tǒng)故障時保證數(shù)據(jù)一致性.組散列主要貢獻有2個:1)使用8 B故障原子寫入來保證數(shù)據(jù)的一致性,從而消除了對NVM的雙倍寫入,因此降低了散列表結(jié)構(gòu)的一致性成本;2)為了提高CPU緩存效率,組散列利用了一種新穎的組共享(group sharing)技術(shù),它將散列表分成組,并且在每個組中部署一個連續(xù)的內(nèi)存空間來處理散列沖突,從而減少CPU緩存缺失,因此組散列在請求延遲方面獲得更高的性能.
針對基于NVM的數(shù)據(jù)一致性和硬件限制的要求,最初為DRAM設(shè)計的傳統(tǒng)索引技術(shù)在NVM中變得低效.為了有效地索引NVM中的數(shù)據(jù),華中科技大學(xué)Zuo等人[24]提出了一種基于NVM的寫優(yōu)化和高性能的散列索引方案Level Hashing,它具有低開銷的一致性保證和成本高效的resize操作.Level Hashing提供基于共享的2級(two-level)散列表,在最壞的情況下實現(xiàn)恒定的時間復(fù)雜度的搜索、插入、刪除以及更新操作,并且很少引起額外的NVM寫入.為了保證低開銷的一致性,Level Hashing利用無日志一致性方案進行插入、刪除和resize操作,并采用機會無日志方案進行更新操作.為了經(jīng)濟高效地調(diào)整此散列表的大小,Level Hashing利用了原地調(diào)整大小的方案,只需要重新傳輸13的桶(bucket)而不是整個表,因此減少重新散列的桶數(shù)并提高調(diào)整大小的性能.
針對現(xiàn)有的工作沒有研究線性散列的全面設(shè)計和優(yōu)化以便充分利用NVM,而基于NVM的線性散列算法需要保證數(shù)據(jù)的一致性,香港城市大學(xué)的Wan等人提出了基于NVM的持久且崩潰一致的線性散列NVLH[25].NVLH基于操作系統(tǒng)的直接訪問(DAX)功能,允許應(yīng)用程序通過內(nèi)存映射直接訪問NVM.NVLH通過高速緩存行刷新指令(CLFLUSH)或弱有序高速緩存行刷新指令(如Intel處理器上的CLFLUSHOPT和CLWB)和內(nèi)存柵欄(MFENCE)的組合來完成NVM數(shù)據(jù)更新的持久化.為了支持崩潰一致性(crash consistency),NVLH采用基于撤銷日志(undo logging)的事務(wù)實現(xiàn),在事務(wù)修改原始值(original values)之前將相應(yīng)的原始值存儲到undo日志中.
針對現(xiàn)有基于DRAM和NVM的混合內(nèi)存系統(tǒng)的鍵值存儲的索引設(shè)計未能充分利用混合內(nèi)存特定的性能特征,比如DRAM的快速寫入、NVM的慢寫入以及DRAM和NVM中的相似的讀性能.中國科學(xué)院計算技術(shù)研究所的Xia等人[26]提出了一個基于NVM和DRAM混合內(nèi)存的鍵值存儲HiKV,其核心思想是在混合內(nèi)存中構(gòu)建混合索引.為了有效支持豐富的鍵值操作,HiKV利用了散列索引和B+Tree索引的獨特優(yōu)點.HiKV在NVM中構(gòu)建并保持散列索引,以保留其快速索引搜索的固有能力.HiKV在DRAM中構(gòu)建B+-Tree索引以支持范圍掃描,并避免長時間NVM寫入以保持2個索引的一致性.此外,HiKV將差異并發(fā)方案應(yīng)用于混合索引,并采用有序?qū)懭胍恢滦詠泶_保崩潰一致性.
目前基于NVM的一致性持久索引主要有基于Tree索引結(jié)構(gòu)的研究(如CDDS B-Tree[8],wB+Trees[9],NV-Tree[10],F(xiàn)PTree[11],F(xiàn)AST&FAIR[12],WORT[13],CRB-Tree[14])和基于散列索引結(jié)構(gòu)研究(如Group Hashing[23],Level Hashing[24],NVLH[25])以及混合索引HiKV[26].已有研究HiKV[26]提出了B+Tree和散列的混合索引結(jié)構(gòu),并對混合索引結(jié)構(gòu)實現(xiàn)了一致性.為了克服日志機制或?qū)憰r拷貝等雙倍寫開銷,許多工作均采用8 B故障原子寫方式確保一致性[8-13,23-24],通過弱化B+Tree葉子節(jié)點中條目的有序性或減少散列沖突帶來的條目移動[23-25,36]可以進一步降低NVM寫;通過選擇持久化方式[10-11]可以減少一致性開銷;通過結(jié)合不同的數(shù)據(jù)結(jié)構(gòu)的優(yōu)勢如混合索引[26]設(shè)計低開銷的一致性研究.
傳統(tǒng)基于DRAM和磁盤的文件系統(tǒng)采用檢查點機制、Journaling技術(shù)、寫時拷貝或日志技術(shù)保障系統(tǒng)崩潰時的數(shù)據(jù)一致性.然而,NVM有著DRAM的性能和磁盤的持久性,學(xué)術(shù)界和工業(yè)界越來越多地開展基于NVM的文件系統(tǒng)研究[17-18,27-28,40-45].由于性能原因,當(dāng)今內(nèi)存控制器或CPU會重排序內(nèi)存寫操作,從而會造成NVM寫的不一致性情況發(fā)生.針對一致性問題,我們從NVM作為直接內(nèi)存文件系統(tǒng)(如BPFS[17],PMFS[18],F(xiàn)CFS[27])、NVM和DRAM混合內(nèi)存文件系統(tǒng)(如NOVA[28]和HMVFS[43])以及NVM做元數(shù)據(jù)緩存方面文件系統(tǒng)(如FSMAC[44]和Fine-grained Metadata Journaling[45])的一致性工作展開論述.
針對傳統(tǒng)的shadow paging文件系統(tǒng)如ZFS和WAFL,對文件系統(tǒng)的更新會觸發(fā)從更改位置到文件系統(tǒng)樹根節(jié)點之間一連串的更新,即迭代更新問題.微軟研究院Condit等人[17]提出了字節(jié)尋址持久內(nèi)存文件系統(tǒng)BPFS,采用DRAM模擬的字節(jié)尋址持久的PCM內(nèi)存技術(shù)能夠消除許多傳統(tǒng)易失和非易失存儲之間的不同,并且提出的短路影子分頁(short-circuit shadow paging, SCSP)新技術(shù)能夠提供細粒度的寫時拷貝并且提供文件系統(tǒng)的任何級別的小更新,SCSP技術(shù)克服了傳統(tǒng)的shadow paging技術(shù)帶來的從更改位置到文件系統(tǒng)樹根節(jié)點之間一連串的更新問題,從而降低了更新的成本.SCSP技術(shù)通過2種簡單的硬件原語使之成為可能:原子的8 B寫以及epoch barrier.原子的8 B寫(atomic 8-byte write)允許BPFS通過寫單值到NVM以便提交更改,從而文件系統(tǒng)數(shù)據(jù)在斷電或故障的時候不會造成不一致.而epoch barriers維護BPFS中NVM寫之間的順序性約束,同時BPFS依然可以使用L1和L2 Cache來提高性能.
針對傳統(tǒng)的基于磁盤的文件系統(tǒng)存在雙份拷貝開銷問題,即:1)從塊設(shè)備(block device)到頁高速緩存(page cache);2)從頁高速緩存到用戶緩沖(user buffer).Intel公司的Dulloor等人[18]提出了輕量級的持久內(nèi)存文件系統(tǒng)PMFS,它可以不通過塊層直接訪問PM設(shè)備,并且它遵守POSIX接口以便支持傳統(tǒng)的應(yīng)用程序.該輕量級的文件系統(tǒng)以及優(yōu)化的內(nèi)存映射IO無需在DRAM和輔助存儲中拷貝數(shù)據(jù),從而避免了雙倍拷貝開銷.然而,PMFS主要解決3個挑戰(zhàn):1)有序性和持久性等一致性問題;2)如何保護PM免受流浪寫;3)如何驗證以及判斷一致性測試的正確性.PMFS利用處理器的分頁和內(nèi)存排序功能進行優(yōu)化,例如細粒度日志(fine-grained logging)用于一致性;透明大頁面支持用于更快的內(nèi)存映射IO.為了提供強大的一致性保證,PMFS只需要一個簡單的硬件原語pm_wbarrier,它用于提供軟件執(zhí)行寫PM的耐久性和有序性保證.最后,PMFS使用處理器的現(xiàn)有功能來保護PM免受流浪寫(stray writes),從而提高可靠性.
針對現(xiàn)有的應(yīng)用程序的故障一致性更新(failure-consistent update)協(xié)議主要為磁盤存儲系統(tǒng)做優(yōu)化,然而這些協(xié)議的實現(xiàn)沒有全面理解底層文件系統(tǒng)的持久性,它們過多的數(shù)據(jù)拷貝導(dǎo)致面向NVM的文件系統(tǒng)面臨易錯和較差性能的問題,清華大學(xué)的Ou等人[27]提出了一種針對NVM優(yōu)化的新型文件系統(tǒng)FCFS,它提供了一系列易于使用的基于文件的接口,以便為應(yīng)用程序提供正確性和高性能,并且持久更新其數(shù)據(jù)到NVM.具體而言,F(xiàn)CFS基于一致性語義使應(yīng)用程序能夠有效且有選擇性地更新多個存儲在NVM的文件.為此,F(xiàn)CFS采用NVM優(yōu)化的寫優(yōu)先日志機制,通過充分利用NVM的字節(jié)可尋址性和高并發(fā)屬性來降低一致性成本,但是不依賴于頁面緩存層技術(shù).首先,混合細粒度日志(hybrid fine-grained logging)將文件系統(tǒng)元數(shù)據(jù)日志和數(shù)據(jù)日志分離,以避免錯誤共享日志數(shù)據(jù),并在復(fù)制成本和日志跟蹤開銷之間實現(xiàn)良好的權(quán)衡.文件系統(tǒng)元數(shù)據(jù)采用字節(jié)級回滾日志,從而消除高額的元數(shù)據(jù)索引開銷;而文件系統(tǒng)數(shù)據(jù)采用緩存行粒度的重做日志,以便平衡數(shù)據(jù)拷貝和索引開銷.其次,并行選擇性檢查點(concurrently selective checkpointing)允許并行執(zhí)行異步檢查點并使用最少的數(shù)據(jù)副本以提高其效率.
針對于現(xiàn)有的NVM文件系統(tǒng)要么具有相似的軟件開銷,要么無法提供應(yīng)用程序所需的強一致性保證問題,美國加州大學(xué)圣地亞哥分校的Xu等人[28]提出了一個基于混合易失和非易失內(nèi)存的日志結(jié)構(gòu)、POSIX文件系統(tǒng)NOVA,它擴展LFS并充分利用NVM的優(yōu)勢,旨在最大限度地提高混合內(nèi)存系統(tǒng)的性能,同時提供強的一致性保證.NOVA采用傳統(tǒng)的日志結(jié)構(gòu)文件系統(tǒng)技術(shù)來利用NVM提供的快速隨機訪問.特別是,它為每個inode維護單獨的日志以提高并發(fā)性,并將文件數(shù)據(jù)存儲在日志之外,以最小化日志大小并降低垃圾收集成本.NOVA的日志提供元數(shù)據(jù)、數(shù)據(jù)和內(nèi)存映射(mmap)的原子性,日志結(jié)構(gòu)技術(shù)(log-structuring)用于單個日志結(jié)構(gòu)更新,輕量級日志結(jié)構(gòu)(journaling)用于多個日志結(jié)構(gòu)更新,寫時拷貝用于文件數(shù)據(jù).
針對基于NVM的內(nèi)存文件系統(tǒng)的現(xiàn)有方法側(cè)重于對內(nèi)存的低開銷訪問,并且僅保證數(shù)據(jù)和元數(shù)據(jù)之間的一致性.上海交通大學(xué)的Zheng等人[43]提出了一種基于NVM和DRAM混合內(nèi)存的有效的版本控制文件系統(tǒng)HMVFS,它解決了基于NVM的內(nèi)存文件系統(tǒng)的連續(xù)快照之間一致性的問題.HMVFS可以有效地實現(xiàn)容錯,并且對IO性能的影響很小.為了強一致性保證,HMVFS采用分層文件系統(tǒng)樹(stratified file system tree, SFST)表示整個文件系統(tǒng)的快照,并且快照的原子性操作得到保證.HMVFS在故障恢復(fù)過程幾乎沒有redo或undo開銷.HMVFS充分利用NVM的字節(jié)尋址特性以字節(jié)粒度更新樹元數(shù)據(jù),采用日志結(jié)構(gòu)的方式對文件更新避免了寫放大,提高了NVM的寫耐久性.
針對傳統(tǒng)文件系統(tǒng)將元數(shù)據(jù)存放在DRAM中并周期性地寫回磁盤,而元數(shù)據(jù)的更新頻繁并且每次只更新很小一部分.華中科技大學(xué)Chen等人[44]提出了一種基于NVM的文件系統(tǒng)元數(shù)據(jù)加速器FSMAC,通過有效地利用NVM的優(yōu)點來優(yōu)化元數(shù)據(jù)訪問.FSMAC解耦數(shù)據(jù)和元數(shù)據(jù)IO路徑,在運行時將數(shù)據(jù)放在磁盤上而元數(shù)據(jù)放在NVM上.因此,從IO總線塊中訪問數(shù)據(jù),并且以字節(jié)尋址方式從內(nèi)存總線訪問元數(shù)據(jù).元數(shù)據(jù)訪問得到顯著加速,并且消除了元數(shù)據(jù)IO,因為NVM中的元數(shù)據(jù)不再定期刷回磁盤.FSMAC引入了一種結(jié)合了細粒度版本控制和事務(wù)處理的輕量級一致性機制.
針對傳統(tǒng)日志機制以4KB的塊來存儲文件系統(tǒng)的元數(shù)據(jù),從而造成了NVM空間的浪費以及寫入放大問題.新加坡數(shù)據(jù)存儲研究所A-STAR的Chen等人[45]提出了一種基于NVM的細粒度的元數(shù)據(jù)日志機制(fine-grained metadata journaling),以充分利用低延遲字節(jié)可尋址的NVM,從而顯著降低傳統(tǒng)Journaling的開銷.新的日志格式采用128 B的inode大小粒度來順序記錄到NVM,通過對頭尾指針以8 B原子更新的方式標(biāo)志事務(wù)的結(jié)束.因此,由于減少了對NVM的有序?qū)懭肓?,可以減少日志記錄的開銷,但由于該日志機制只把元數(shù)據(jù)記錄到日志空間,所以并不能給文件系統(tǒng)帶來最強的一致性級別保證.
充分利用NVM的字節(jié)尋址特性,BPFS提出細粒度的寫時拷貝機制,克服迭代更新問題,因此減少了額外的NVM寫[17].為了平衡索引和數(shù)據(jù)拷貝開銷,F(xiàn)CFS對文件系統(tǒng)元數(shù)據(jù)和數(shù)據(jù)分別采用不同粒度的日志機制,如對元數(shù)據(jù)采用字節(jié)級回滾日志、對數(shù)據(jù)采用緩存行粒度重做日志[27].充分利用DRAM和NVM各自的優(yōu)勢,保障數(shù)據(jù)一致性的同時最大限度地提高混合內(nèi)存文件系統(tǒng)的性能[28,43].NOVA對不同的更新采用不同的一致性技術(shù),即對單個日志結(jié)構(gòu)更新采用日志結(jié)構(gòu)技術(shù),對多個日志結(jié)構(gòu)更新采用輕量級日志結(jié)構(gòu),對文件數(shù)據(jù)更新采用寫時拷貝[28].HMVFS解決了連續(xù)快照間一致性,對元數(shù)據(jù)更新采用字節(jié)粒度,而對文件更新采用日志結(jié)構(gòu)方式[43].為了減少傳統(tǒng)文件系統(tǒng)元數(shù)據(jù)寫入放大問題并提高元數(shù)據(jù)訪問效率,采用NVM存儲元數(shù)據(jù)來優(yōu)化元數(shù)據(jù)的訪問效率[44-45].總的來說,面向NVM的文件系統(tǒng)可以有效地利用NVM的字節(jié)尋址特性,減少元數(shù)據(jù)管理開銷,對文件系統(tǒng)元數(shù)據(jù)和數(shù)據(jù)采用不同適配粒度的一致性機制,確保數(shù)據(jù)一致性的同時盡量減少NVM寫.
為保證NVM數(shù)據(jù)一致性的關(guān)鍵是要確保有序的持久化操作.不再考慮持久索引層面和文件系統(tǒng)層面可能相關(guān)工作,本節(jié)只從基于NVM的持久性事務(wù)層面的一致性相關(guān)文獻出發(fā),并將這些文獻劃分為實現(xiàn)一致性的3個角度,分別為基于事務(wù)[19-20,46-53]、持久性模型[54-62]、檢查點[63-65]和日志機制[66-72].
事務(wù)概念主要來自于數(shù)據(jù)庫,有ACID四大屬性,其中A,C,I,D分別代表原子性(atomicity)、一致性(consistency)、隔離性(isolation)以及持久性(durability).傳統(tǒng)事務(wù)是針對于CPU-DRAM-HDD架構(gòu)設(shè)計的,新型NVM具有DRAM的性能和磁盤的持久性,需要重新設(shè)計基于NVM的事務(wù)機制.保證NVM的事務(wù)中數(shù)據(jù)一致性依然要確保有序的持久化操作.基于新型編程接口的事務(wù)一致性研究現(xiàn)已開展,如NV-Heaps[19]和Mnemosyne[20].
針對易失性和非易失性區(qū)域之間指針安全錯誤問題,加州大學(xué)圣地亞哥分校的Coburn等人[19]提出了一個基于NVM的輕量級高性能的持久對象系統(tǒng)NV-Heaps,它提供了事務(wù)語義,同時防止了這些錯誤并提供了易于使用和推理的持久性模型.為了指針安全,NV-Heaps提供了引用計數(shù)的NVM空間分配機制,并且它通過undo日志和事務(wù)內(nèi)存結(jié)合的方式提供數(shù)據(jù)一致性功能.
針對如何在NVM持久化數(shù)據(jù)并保證其數(shù)據(jù)一致性問題,威斯康星大學(xué)麥迪遜分校的Volos等人[20]提出了一個基于NVM的簡單的編程模型Mnemosyne.Mnemosyne解決了2個挑戰(zhàn):如何創(chuàng)建和管理此類內(nèi)存,以及如何確保出現(xiàn)故障時的數(shù)據(jù)一致性.Mnemosyne通過內(nèi)存映射方式將NVM空間直接映射到用戶的地址空間中,用戶可以使用關(guān)鍵字“pstatic”對NVM空間中的數(shù)據(jù)進行持久化定義或聲明.Mnemosyne同NV-Heaps一樣采用事務(wù)內(nèi)存結(jié)合日志的方式確保一致的更新.然而與NV-Heaps不同,Mnemosyne采用的是redo日志.
惠普實驗室的Volos等人[46]發(fā)現(xiàn)現(xiàn)有的基于內(nèi)核的組件堆棧非常適合磁盤,不必要地限制了基于NVM的文件系統(tǒng)的設(shè)計和實現(xiàn).他們提出了一種靈活的文件系統(tǒng)架構(gòu)Aerie,利用攔截系統(tǒng)調(diào)用用戶庫libFS,直接讓用戶應(yīng)用程序訪問NVM.為了避免直接訪問模式下的并發(fā)訪問和控制問題,Aerie在用戶態(tài)實現(xiàn)了受信任的文件系統(tǒng)服務(wù)(trusted file-system service, TFS)提供并發(fā)訪問和鎖機制.Aerie提供與Mnemosyne一樣的持久性原語和redo日志來提供數(shù)據(jù)一致性保證.
由于嚴格的持久性模型帶來了性能下降,基于NVM的降低順序性開銷的工作已經(jīng)展開[47,49].
針對遵守嚴格的持久性內(nèi)存寫入順序會顯著降低系統(tǒng)性能的問題,清華大學(xué)的Lu等人[47]提出了一種基于NVM的松散順序一致性(LOC)的新機制,它滿足持久性內(nèi)存寫入的排序要求,其性能下降明顯低于最先進的機制.LOC由2個關(guān)鍵技術(shù)組成:1)通過消除在事務(wù)結(jié)束時執(zhí)行持久性提交記錄寫入的需要,Eager Commit減少了事務(wù)中寫入的提交開銷.他們通過確保將必要的元數(shù)據(jù)信息靜態(tài)地以數(shù)據(jù)塊方式寫入內(nèi)存中來確定恢復(fù)期間所有已提交事務(wù)的狀態(tài)來實現(xiàn)此目的.2)Speculative Persistence通過允許推測性地寫入NVM來放寬事務(wù)之間的寫入順序.只有在關(guān)聯(lián)的事務(wù)提交后,才能使推測性寫入對軟件可見.要啟用此功能,LOC機制需要跟蹤已提交的事務(wù)ID并支持CPU緩存中的多版本控制.
針對現(xiàn)有事務(wù)更新對塊存儲的優(yōu)化而不適合字節(jié)尋址方式,英國愛丁堡大學(xué)的Chatzistergiou等人[48]提出了一種基于NVM的用戶模式庫方法REWIND,用于直接從使用命令式通用語言編寫的用戶代碼管理事務(wù)更新.REWIND依賴于支持自身可恢復(fù)操作的日志的自定義持久內(nèi)存數(shù)據(jù)結(jié)構(gòu).該方案還采用了非臨時更新、持久性內(nèi)存柵欄和輕量級日志記錄(lightweight logging)的組合確保數(shù)據(jù)一致性.
針對現(xiàn)有基于NVM的事務(wù)系統(tǒng)中有些不必要的順序性控制限制了事務(wù)系統(tǒng)的性能問題,密歇根大學(xué)的Kolli等人[49]提出一種基于NVM的高效事務(wù)編程模型Eager Sync,通過推遲提交事務(wù)(deferring commit transactions)機制避免順序性約束帶來的關(guān)鍵路徑過長問題,其核心思想是一個事務(wù)在修改完數(shù)據(jù)之后釋放相應(yīng)的鎖,這樣可以減少順序性限制,從而提高事務(wù)系統(tǒng)的性能.
Intel公司的Doshi等人[50]提出了一個非侵入式內(nèi)存控制器,它使用后端操作來實現(xiàn)輕量級故障原子性WrAP.通過將同步持久內(nèi)存操作移動到后臺,可以最大限度地降低性能開銷.該解決方案通過將隔離和并發(fā)驅(qū)動的原子性與故障原子性和持久性分離,避免了昂貴的軟件干預(yù),并且不需要更改前端緩存層次結(jié)構(gòu).
基于NVM的數(shù)據(jù)一致性需要有序的持久化操作.一致性開銷包含了順序化開銷和持久化開銷,如前面降低順序化開銷的工作[47,49],降低持久化的開銷工作也已經(jīng)展開了研究[51-53].
針對現(xiàn)有事務(wù)系統(tǒng)采用撤消日志記錄(undo logging)或重做日志記錄(redo logging)來保證一致性,但undo logging和redo logging有各自的缺點.清華大學(xué)的Liu等人[51]提出了基于NVM的崩潰一致的持久事務(wù)系統(tǒng)DudeTM,它結(jié)合撤消日志記錄和重做日志記錄方法以便充分利用undo和redo的優(yōu)點并且避免它們的不足.具體實現(xiàn)上,DudeTM使用影子DRAM將持久事務(wù)的執(zhí)行分解為3個完全異步的步驟(perform,persist,reproduce),同時規(guī)避了undo logging的多次MFENCE操作以及redo logging的額外日志索引操作.DudeTM的優(yōu)點是只需要最少的內(nèi)存柵欄(MFENCE)和無需讀取內(nèi)存的指令.此外,DudeTM還可以支持現(xiàn)有的硬件事務(wù)內(nèi)存(HTM).
針對現(xiàn)有的原子性方法如undo logging和寫時拷貝COW都需要在關(guān)鍵路徑中產(chǎn)生額外的數(shù)據(jù)拷貝,從而顯著增加事務(wù)的延遲.加州大學(xué)圣地亞哥分校的Memaripour等人[52]提出了一種基于NVM的事務(wù)更新的新方法Kamino-Tx,而無需在關(guān)鍵路徑中復(fù)制任何數(shù)據(jù).Kamino-Tx提供原子就地更新,避免在關(guān)鍵路徑中創(chuàng)建數(shù)據(jù)項的拷貝,同時使用異步維護的數(shù)據(jù)項拷貝提供崩潰一致性.但Kamino-Tx必須克服2個重要的安全挑戰(zhàn),并盡量減少NVM存儲開銷.他們提出了一種更動態(tài)的方法來維護額外的數(shù)據(jù)副本,以減少存儲開銷.
美國威斯康星大學(xué)麥迪遜分校的Nalli等人[53]提出了一種放手持久化系統(tǒng)(hands-off persistence system, HOPS).基于NVM的應(yīng)用程序通過在寫入NVM之間插入排序點來確保持久性數(shù)據(jù)的一致性,從而允許構(gòu)建更高級別的事務(wù)機制.該工作提出了一個名為WHISPER的PM基準(zhǔn)套件,其中包括收集的10個NVM應(yīng)用程序,以涵蓋所有當(dāng)前的NVM接口如直接訪問NVM、通過文件系統(tǒng)接口訪問NVM以及通過使用NVM事務(wù)庫方式訪問NVM.通過對WHISPER定量分析揭示了4個結(jié)論:1)NVM感知應(yīng)用程序只有4%的數(shù)據(jù)寫入NVM,其余寫入易失性內(nèi)存DRAM;2)軟件事務(wù)通常用5~50個有序點(ordering points)實現(xiàn);3)75%的epoch更新恰好是一個64 B大小緩存行;4)80%的epoch取決于來自同一線程的先前的epoch,而少數(shù)epoch取決于來自其他線程的epoch.根據(jù)這些結(jié)論的分析,他們提出了HOPS來跟蹤硬件中NVM的更新.當(dāng)前的硬件設(shè)計要求應(yīng)用程序在每個epoch結(jié)束時強制刷新數(shù)據(jù)到NVM.HOPS為應(yīng)用程序提供高級ISA原語,并分離持久性和順序性約束.
基于NVM硬件的降低持久化的工作已經(jīng)展開了研究WSP[54]和Kiln[55].
針對基于NVM的用戶級持久堆需要大量修改應(yīng)用程序,并且仍然具有顯著的運行開銷.微軟研究院劍橋部的Narayanan等人[54]提出了全系統(tǒng)持久性(WSP)作為替代方案.由于NVM技術(shù)允許內(nèi)存狀態(tài)近乎瞬時恢復(fù)而避免傳統(tǒng)基于DRAM-HDD系統(tǒng)的后端磁盤存儲恢復(fù)壓力,WSP針對的是所有內(nèi)存都是NVM的全內(nèi)存系統(tǒng),它透明地恢復(fù)應(yīng)用程序的整個狀態(tài),使故障顯示為掛起恢復(fù)事件.通過使用“故障時刷新(flush on fail)”消除了運行時間開銷:處理器寄存器中的瞬態(tài)狀態(tài)和高速緩存僅在發(fā)生故障時使用系統(tǒng)電源的剩余能量刷新到NVM.
針對以前的基于NVM的設(shè)計使用日志記錄或?qū)憰r拷貝機制來更新持久性數(shù)據(jù),然而系統(tǒng)性能大約是沒有持久性機制支持的系統(tǒng)的一半性能.賓夕法尼亞州立大學(xué)Zhao等人[55]提出了一種采用NVM作為高速緩存的LLC(last level cache)的NVM內(nèi)存系統(tǒng)Kiln,其性能非常接近沒有一致性支持的NVM內(nèi)存系統(tǒng).Kiln采用非易失性高速緩存和非易失性內(nèi)存來實現(xiàn)原子就地更新(atomic in-place updates),嚴格控制NVM的寫入順序而無需日志或?qū)憰r拷貝機制.Kiln具有許多實際優(yōu)勢:簡單直觀的抽象接口、微架構(gòu)級別優(yōu)化、從故障中快速恢復(fù),以及消除對NVM的冗余寫入.雖然Kiln能夠在沒有l(wèi)ogging或copy-on-write機制的情況下實現(xiàn)一致性,并且它接近無一致性支持的原始NVM內(nèi)存系統(tǒng),但是采用NVM作為LLC cache需要傳統(tǒng)易失性緩存架構(gòu)做出大量的修改.
基于NVM控制器的有序性方面已經(jīng)展開了研究,如3.1節(jié)中WrAP[50]和接下來要講的2個工作分別是FIRM[56]和NVM Duet[57].
針對持久性內(nèi)存的應(yīng)用程序與傳統(tǒng)(非持久性)應(yīng)用程序具有非常不同的內(nèi)存訪問特性,持久性應(yīng)用程序會帶來大量額外的寫,在傳統(tǒng)的內(nèi)存控制方案下讀寫分配的公平行和并行性效率都不能得到保證.賓夕法尼亞州立大學(xué)Zhao等人[56]提出了一種基于DRAM和NVM混合內(nèi)存的公平和高性能的內(nèi)存控制方案FIRM,該系統(tǒng)運行持久性和非持久性應(yīng)用程序.FIRM包含3個主要想法:1)FIRM將請求源分類為非密集型、流式、隨機和持久性,并為每個請求源形成批量請求;2)FIRM跨多個bank的持久內(nèi)存更新,因此提高了bank級并行性,從而提高了持久內(nèi)存訪問的存儲器帶寬利用率;3)FIRM以最小化總線周轉(zhuǎn)和寫入隊列排放的方式批量調(diào)度來自不同源的讀取和寫入請求.
針對未來NVM將同時扮演易失性工作內(nèi)存和持久性內(nèi)存的雙重角色,任何只考慮單一方面的統(tǒng)一架構(gòu)將得到次優(yōu)設(shè)計.國立臺灣大學(xué)的Liu等人[57]提出了一種新穎的統(tǒng)一易失性工作內(nèi)存(working memory)和持久存儲(persistent store)內(nèi)存架構(gòu)NVM Duet,它為persistent store提供了所需的一致性和持久性保證,當(dāng)NVM作為易失性工作內(nèi)存時將放寬一致性和持久性約束,它采用跨層(cross-layer)設(shè)計方法來實現(xiàn)設(shè)計目標(biāo).NVM Duet包含一個硬件軟件接口,使內(nèi)存控制器能夠區(qū)分每次訪問的用例,這是一種新穎的內(nèi)存調(diào)度程序,旨在充分利用地址流中存在的bank級并行性,同時遵循程序員指定的寫入順序.保證NVM作為persistent store的一致性以及雙保留PCM架構(gòu),滿足持久內(nèi)存的持久性要求,同時放寬NVM作為易失性working memory的持久性要求,以換取寫延遲減少.
針對限制NVM寫入順序會限制NVM寫入并發(fā)性并降低吞吐量,從而使得需要新的內(nèi)存接口來最小化描述寫入約束并允許高性能和高并發(fā)數(shù)據(jù)結(jié)構(gòu).密歇根大學(xué)的Pelley等人[58]提出了一種新的持久內(nèi)存接口Strand Persistency,它建立在內(nèi)存一致性上.與內(nèi)存一致性類似,通過減少NVM寫入約束,寬松的持久性模型可大大提高系統(tǒng)吞吐量.Strand Persistency還概述了可能的內(nèi)存持久化模型的設(shè)計空間,并實現(xiàn)了2種持久性隊列.
針對當(dāng)前的持久性障礙將高速緩存行刷新添加到關(guān)鍵路徑導(dǎo)致大的緩存行刷新開銷,愛丁堡大學(xué)的Joshi等人[59]提出了有效的持久性障礙(efficient persist barrier),可以減少關(guān)鍵路徑中發(fā)生的緩存行刷新次數(shù).為了確保持久狀態(tài)的一致性,需要從緩存中定期刷新臟緩存行,并按持久性模型指定的順序進行持久化.Efficient persist barrier可以實現(xiàn)2種持久性模型:BEP(buffered epoch persistency);以及在具有硬件插入障礙的批量模式下的BSP(buffered strict persistency).
持久內(nèi)存系統(tǒng)要求持久有序約束以保證故障時數(shù)據(jù)的正確恢復(fù).基于軟件的持久性和易失性執(zhí)行相分離的方面已開展了研究[50,53,60-61].其中WrAP[50]和HOPS[53]已在3.1節(jié)中介紹過,接下來只介紹DPO[60]和TC.
針對當(dāng)前的內(nèi)存系統(tǒng)沒有提供有序內(nèi)存寫保證以及緊耦合強制執(zhí)行順序性和持久性寫入NVM對于許多可恢復(fù)軟件系統(tǒng)而言沒有必要.密歇根大學(xué)的Kolli等人[60]提出了一種基于NVM的委托持久化排序(delegated persistent ordering, DPO),其中排序要求明確地傳達給NVM控制器,完全從易失性執(zhí)行和高速緩存管理中解耦NVM寫入排序特性.在ARMv7這種寬松內(nèi)存一致性模型系統(tǒng)中,委托排序(delegated ordering)實現(xiàn)了緩存嚴格持久性語義(relaxed consistency buffered strict persistency, RCBSP),RCBSP將持久性排序從線程執(zhí)行中分離.委托排序明確地公開排序約束,它成功地將持久性強制執(zhí)行和緩存管理完全解耦.NVM內(nèi)存控制器接管持久性排序約束以便最大化提高調(diào)度的靈活性.
針對維持NVM的數(shù)據(jù)持久性方案要么產(chǎn)生很大的性能開銷,要么需要對現(xiàn)有架構(gòu)進行大量修改.國立臺灣大學(xué)的Lai等人[61]提出了一種基于NVM的持久性內(nèi)存加速器設(shè)計,它通過硬件保證NVM數(shù)據(jù)的持久性,同時保持緩存層次結(jié)構(gòu)和內(nèi)存控制器操作不變.非易失性事務(wù)高速緩存(transaction cache, TC)與高速緩存層次結(jié)構(gòu)保持備用版本的數(shù)據(jù)更新,并且在不影響原始處理器執(zhí)行路徑的情況下鋪設(shè)新的持久路徑.在TC中采用先進先出(FIFO)的隊列方式保證持久性內(nèi)存寫的有序性.TC的設(shè)計實現(xiàn)了接近沒有持久性保證的性能.
針對最近的工作提出了持久性模型作為內(nèi)存一致性的擴展,以指定這種排序,那么考慮到持久存儲組的原子性和順序約束,是否有可能存在新的保證語言級持久性模型的分類.密歇根大學(xué)的Kolli等人[62]提出了一種基于NVM的C++11的語言級持久性模型ARP(acquire-release persistency).ARP擴展了語言級內(nèi)存模型,保證了持久寫入的順序.他們描述如何將為ARP編寫的代碼編譯為最先進的ISA級別持久性模型.然后,考慮對ISA級別持久性模型的增強,該模型可以區(qū)分正確同步所需的內(nèi)存一致性約束,但不需要正確的恢復(fù).
檢查點技術(shù)也是保障數(shù)據(jù)一致性的很好方式,每一次檢查點都被認為系統(tǒng)一次有效的一致性狀態(tài).故障發(fā)生后,檢查點之后的數(shù)據(jù)更新都會被拋棄以便恢復(fù)到最近一次檢查點狀態(tài),因此檢查點技術(shù)可以有效地減少檢查點之間數(shù)據(jù)一致性更新的數(shù)量.基于NVM的檢查點技術(shù)研究已經(jīng)開展了[63-65].基于軟件透明的崩潰一致性檢查點技術(shù)如ThyNVM[64],NICO[65].
針對如何在下一代高端機器中使用非易失性內(nèi)存(NVM)來提供頻繁、低開銷的檢查點.通過調(diào)整現(xiàn)有的多級檢查點技術(shù),喬治亞理工學(xué)院的Kannan等人[63]設(shè)計了名為NVM檢查點(NVM-check-points)的新方法,可以在本地和遠程節(jié)點NVM上有效地存儲檢查點,檢查點頻率由故障模型引導(dǎo).為了降低開銷,NVM檢查點減少了新的預(yù)復(fù)制機制所使用的NVM和互連帶寬,該機制在本地檢查點啟動之前逐漸將檢查點數(shù)據(jù)從DRAM移動到NVM.NVM-checkpoints通過限制在檢查點時移動的瞬時數(shù)據(jù)量來減少本地檢查點成本,從而釋放應(yīng)用程序使用的帶寬.NVM-checkpoints將NVM視為內(nèi)存而不是RAM磁盤,因此可以推廣預(yù)復(fù)制以直接將數(shù)據(jù)移動到遠程NVM.
針對基于NVM的系統(tǒng)需要在斷電或系統(tǒng)崩潰的情況下保證一致的內(nèi)存狀態(tài)(即崩潰一致性),然而為了保證崩潰的一致性,大多數(shù)先前的工作需要依賴程序員區(qū)分持久和瞬態(tài)內(nèi)存數(shù)據(jù),并且在更新持久內(nèi)存數(shù)據(jù)時使用專用軟件接口,從而使得持久內(nèi)存的采用可能會受到很大限制.清華大學(xué)Ren等人[64]提出了一種硬件輔助DRAM+NVM混合持久內(nèi)存設(shè)計ThyNVM(transparent hybrid NVM),它支持混合內(nèi)存系統(tǒng)中內(nèi)存數(shù)據(jù)的軟件透明崩潰一致性.為了有效地實施崩潰一致性,他們設(shè)計了一種新的雙方案檢查點(dual-scheme checkpointing)機制,它有效地將檢查點時間與應(yīng)用程序執(zhí)行時間重疊.關(guān)鍵的新穎性是以協(xié)調(diào)的方式實現(xiàn)多粒度,即高速緩存行或頁粒度的數(shù)據(jù)檢查點.由于檢查點導(dǎo)致的應(yīng)用程序停頓時間與用于檢查點的元數(shù)據(jù)的硬件存儲開銷之間存在折中,并且這兩者都由檢查點數(shù)據(jù)的粒度決定.為了獲得最佳權(quán)衡,ThyNVM使檢查點粒度適應(yīng)數(shù)據(jù)的寫入局部性特征,并協(xié)調(diào)多粒度更新的管理.
針對現(xiàn)有研究提出的具有軟件透明崩潰一致性保證的持久內(nèi)存設(shè)計,以減少程序員在利用NVM時的手動努力,但由于創(chuàng)建檢查點導(dǎo)致的性能開銷,使得這些設(shè)計不是最理想的.華中科技大學(xué)的Wei等人[65]提出了一種基于NVM的非侵入式內(nèi)存控制器設(shè)計NICO,它使用后端操作來實現(xiàn)軟件透明的崩潰一致性,同時最小化檢查點開銷.通過將數(shù)據(jù)持久化操作移至后臺,NICO完全將數(shù)據(jù)持久化操作與易失性執(zhí)行和緩存管理分離.為了有效地實施崩潰一致性,NICO采用了一種輕量級的檢查點方案,在創(chuàng)建NVM數(shù)據(jù)的一致性快照(snapshot)時,只需要刷新和修改非常少量的數(shù)據(jù).
漢陽大學(xué)的Hwang等人[66]開發(fā)了一個基于堆的持久對象存儲(HEAPO)來管理NVM中的持久對象.HEAPO定義了自己的持久堆布局、持久對象格式、命名空間組織、對象共享和保護機制,以及基于撤消日志的崩潰恢復(fù),所有這些都是為NVM有效定制.HEAPO采用輕量級和靈活的層,以利用類似DRAM的NVM訪問延遲.為了實現(xiàn)這一目標(biāo),文獻[66]的作者開發(fā)了:1)NVM的本地管理層,以消除in-core和磁盤之間的元數(shù)據(jù)副本冗余;2)可擴展對象格式;3)基于trie的全局命名空間和本地命名空間的緩存;4)靜態(tài)地址綁定;5)僅用于撤銷的崩潰恢復(fù)的最小日志機制.由于HEAPO庫使用鎖同步對共享對象元數(shù)據(jù)的訪問,因此可以保證共享持久對象的更新一致性.HEAPO使用基于軟件的方法如CLFLUSH和MFENCE進行NVM寫的有序性保證.
基于故障原子區(qū)(failure-atomic sections, FASEs)的鎖機制工作有Atlas[67]和JUSTDO logging[68].基于日志實現(xiàn)一致性工作有3.1節(jié)介紹的NV-Heaps,以及接下來將介紹的Atlas[67],JUSTDO logging[68],ATOM[69],Proteus[70],undo+redo logging[71],EAPR[72]等.其中,采用undo日志的有Atlas,ATOM;基于redo日志的有3.1節(jié)介紹的Mnemosyne,結(jié)合undo和redo logging的工作有3.1節(jié)的DudeTM和下面的undo+redo logging工作,而JUSTDO logging是基于resumption的恢復(fù)方式.
針對如何確保NVM中數(shù)據(jù)在故障時的一致性.惠普實驗室的Chakrabarti等人[67]提出了基于NVM日志的一致性鎖機制Atlas,它為基于鎖的代碼添加了持久性語義,通常允許即使在出現(xiàn)故障時也能自動維護一個全局一致的狀態(tài).Atlas識別了現(xiàn)有的關(guān)鍵區(qū)代碼的故障原子區(qū)(failure-atomic sections, FASEs)并描述了一個基于undo日志的實現(xiàn),可用于在故障后恢復(fù)一致性狀態(tài).對于嵌套鎖,只有先持久化內(nèi)部關(guān)鍵區(qū)后才能持久化外層關(guān)鍵區(qū).對于同步鎖,只有持久化所有關(guān)鍵區(qū)才算整個持久化完成.
針對基于NVM的數(shù)據(jù)在故障時不一致,傳統(tǒng)日志記錄(logging)方法需要將log從易失性CPU cache刷新到NVM導(dǎo)致了額外的時間和內(nèi)存開銷,而持久緩存(persistent cache)可以消除刷新的需要,但是傳統(tǒng)的undo或redo logging管理開銷依然存在.惠普實驗室的Izraelevitz等人[68]提出了一種基于NVM的新的故障原子日志機制JUSTDO logging,可以大大減少日志的內(nèi)存占用,簡化日志管理,并實現(xiàn)快速并行故障后恢復(fù).JUSTDO logging與傳統(tǒng)的undo和redo logging不同,不會舍棄在故障原子區(qū)(FASEs)中所做的更新,而是在最后一條store指令處重新執(zhí)行每個被中斷的FASE,直到執(zhí)行FASE完成.與Atlas一樣,JUSTDO logging將FASE定義為受一個或多個互斥鎖保護的最外層臨界區(qū).
針對通過用于撤銷日志(undo log)的流存儲(streaming stores)來進行軟件日志(software logging)或依靠CLFLUSH和MFENCE組合的重做日志(redo log)等現(xiàn)有技術(shù),它們浪費了寶貴的執(zhí)行周期來實現(xiàn)日志記錄(logging).愛丁堡大學(xué)的Joshi等人[69]提出了一種基于NVM的撤消日志記錄(undo logging)的硬件日志管理器ATOM,它可以執(zhí)行關(guān)鍵路徑之外的logging操作.ATOM通過2種方式在硬件中透明地執(zhí)行日志記錄:1)將日志寫入與數(shù)據(jù)存儲耦合;2)在同一存儲控制器中共存數(shù)據(jù)及其相應(yīng)的日志條目.因此,ATOM不僅可以最大限度地減少數(shù)據(jù)移動,而且可以在內(nèi)存控制器中執(zhí)行在關(guān)鍵路徑之外的日志到數(shù)據(jù)的排序約束.
針對基于NVM持久事務(wù)引入的高日志開銷,北卡羅來納州立大學(xué)的Shin等人[70]提出了一種基于NVM新的硬件日志記錄方法Proteus,它用于持久事務(wù),實現(xiàn)了先前軟件和硬件方法的有利特性.與軟件一樣,Proteus沒有限制可用的事務(wù)或日志數(shù)量等硬件限制,而且像硬件一樣,它的開銷非常低.Proteus引入了2條新指令:log-load通過加載原始數(shù)據(jù)創(chuàng)建日志條目;log-flush將日志條目寫入NVM.Proteus主要在core內(nèi)添加硬件支持,以管理這些指令的執(zhí)行以及l(fā)ogging操作和數(shù)據(jù)更新之間的關(guān)鍵有序要求.Proteus通過明智的接口設(shè)計避免了對事務(wù)大小或數(shù)量的任何限制:軟件仍然可以控制分配日志區(qū)域,硬件可以將更新日志的成本保持在較低水平.
針對大多數(shù)先前的NVM設(shè)計通過仔細控制寫NVM順序帶來次優(yōu)性能的問題,一些研究如軟件日志(software logging)或硬件日志(hardware logging)方案放松了這種寫控制,但這些方案要么需要在處理器中添加昂貴的NVM高速緩存,要么因為無法提供足夠的內(nèi)存讀帶寬給關(guān)鍵讀取操作而回退到低性能模式.加州大學(xué)圣克魯茲分校的Ogleari等人[71]提出了基于NVM的硬件撤銷+重做日志記錄方案undo+redo logging來放寬這種寫順序控制.該方案通過利用商業(yè)緩存中使用的回寫、寫分配策略來維護數(shù)據(jù)持久性.此外,他們在硬件中開發(fā)緩存強制回寫機制,以顯著降低強制寫入數(shù)據(jù)到NVM的性能和能量開銷.與軟件方法相比,undo+redo logging還提供了強大的一致性保證.
針對大多數(shù)現(xiàn)有的頁面置換方法都側(cè)重于延長NVM內(nèi)存系統(tǒng)的使用壽命,而NVM內(nèi)存系統(tǒng)要么考慮能耗成本,要么處理由系統(tǒng)故障引起的一致性錯誤,電子科技大學(xué)的Zhan等人[72]提出了一種基于NVM-DRAM混合主存儲系統(tǒng)的頁面替換方法稱為能量感知頁面替換EAPR,用于低功耗和一致性保證.EAPR利用頁面分組策略來提高NVM和DRAM之間的遷移效率.選擇頁面組根據(jù)其與能量相關(guān)的替代度進行遷移.為保證頁面遷移過程的一致性,EAPR在頁面替換階段和事務(wù)提交階段設(shè)計了2種一致性保證方案.EAPR不是直接刪除日志,而是通過在提交應(yīng)用程序的事務(wù)之后修改日志的數(shù)據(jù)結(jié)構(gòu)來保證混合內(nèi)存系統(tǒng)的一致性.
數(shù)據(jù)一致性的2個基本要素是順序化和持久化,那么降低順序化開銷或持久化開銷也就等于降低了數(shù)據(jù)一致性維護開銷.降低軟件持久化開銷的工作有NV-Heaps[19],Mnemosyne[20],REWIND[48],DudeTM[51],Kamino-TX[52],HOPS[53],Heapo[66]等,降低硬件持久化開銷的工作有WSP[54],Kiln[55],Strand Persistency[58],efficient persist barrier[59],ARP[62],ATOM[69]等,降低硬件順序化開銷的工作有LOC[47],Eager Sync[49],Strand Persistency[58],DPO[60]等.基于檢查點機制的數(shù)據(jù)一致工作有NVM-checkpoints[63],ThyNVM[64],NICO[65]等,基于日志機制的數(shù)據(jù)一致性工作有Heapo[66],JUSTDO logging[68],undo+redo logging[71]等.總的來說,面向NVM的持久性事務(wù)要減少數(shù)據(jù)一致性開銷,要么降低順序化開銷[47,49,58,60],要么降低持久化開銷[19-20,48,51-55,58-59,62],考慮到NVM有限寫耐久性和讀寫不對稱性,需要確保NVM中數(shù)據(jù)一致性并減少NVM寫,從而提高面向NVM的持久性事務(wù)的性能.
非易失內(nèi)存NVM同時具有DRAM的性能和磁盤的非易失特性,由于保存在非易失內(nèi)存中的數(shù)據(jù)永久保存,因此傳統(tǒng)基于易失性DRAM的數(shù)據(jù)結(jié)構(gòu)需要重新設(shè)計以便充分利用NVM的非易失、低靜態(tài)功耗、高密度以及字節(jié)尋址等特性,需要確保NVM中數(shù)據(jù)一致性前提下并且盡量避免或減少NVM有限寫耐久性以及讀寫不對稱的影響.
1) 混合內(nèi)存索引一致性
HiKV實現(xiàn)了散列和B+Tree混合索引的一致性研究,未來有可能會考慮紅黑樹、前綴樹、散列結(jié)構(gòu)、B-Tree或B+Tree及其變體等其他多種數(shù)據(jù)結(jié)構(gòu)的混合索引.混合索引的一致性研究需要保證一致性的同時最大化地利用各種數(shù)據(jù)結(jié)構(gòu)索引的優(yōu)勢并避免它們的不足.
2) 開發(fā)新的一致性的持久內(nèi)存索引
雖然Tree和散列2種數(shù)據(jù)結(jié)構(gòu)研究的比較多.未來也可能會出現(xiàn)更多的數(shù)據(jù)結(jié)構(gòu)與NVM結(jié)合做數(shù)據(jù)一致性研究工作,比如日志結(jié)構(gòu)合并樹(log-structured merge-tree,LSM-Tree)、跳表(skiplist)等.
3) NVM介質(zhì)內(nèi)部差異性的影響
由于NVM具有有限的寫入耐久性和讀寫延遲及能耗的不對稱性,需要我們在保證數(shù)據(jù)一致性前提下,盡可能減少NVM系統(tǒng)的寫次數(shù)、延遲及能耗.因為當(dāng)前基于NVM持久索引的一致性研究并未考慮底層存儲介質(zhì)單元的差異性,比如PCM存在SLC和MLC在可靠性和耐久性以及性能間的不同,所以基于PCM的內(nèi)存索引一致性研究需要進一步設(shè)計針對特定介質(zhì)差異化引發(fā)對一致性機制的重新設(shè)計.雖然當(dāng)前PCM最成熟,單片容量也最大,基于NVM的數(shù)據(jù)一致性工作主要針對PCM而設(shè)計,未來隨著ReRAM技術(shù)的進一步發(fā)展成熟,那么基于ReRAM的一致性持久索引工作或許會得到眾多關(guān)注.
大部分NVM數(shù)據(jù)一致性工作主要只考慮NVM的非易失和寫耐久性特性,很少考慮具體的底層存儲介質(zhì)如PCM分為SLC和MLC,而SLC PCM又存在寫0、寫1的延遲和能耗的不對稱性,SLC和MLC之間也有不同,那么如何結(jié)合具體底層存儲單元的數(shù)據(jù)一致性研究工作依然具有深入的研究空間.
1) NVM介質(zhì)內(nèi)部差異性對文件系統(tǒng)的影響
NVM在文件系統(tǒng)主要以3種方式存在:①NVM作為內(nèi)存設(shè)備,通過傳統(tǒng)VFS路徑的文件系統(tǒng)如BPFS[17],PMFS[18],F(xiàn)CFS[27],NOVA[28],SCMFS[40],HiNFS[42]等;②NVM作為塊設(shè)備的文件系統(tǒng)如Shortcut-JFS[73],On-demand Snapshot[74]等;③使用用戶庫方式繞過VFS直接訪問NVM的文件系統(tǒng)如Aerie[46]等.NVM介質(zhì)內(nèi)部差異性將會影響原有針對NVM共性而設(shè)計的文件系統(tǒng)研究工作,需要重新設(shè)計新的一致性研究方案.
2) NVM介質(zhì)內(nèi)部差異性對持久性事務(wù)的影響
基于NVM的持久性事務(wù)一致性工作分別為降低持久化開銷和降低順序化開銷.降低NVM持久化開銷的工作有DudeTM[51],Kamino-TX[52],HOPS[53],WSP[54],Kiln[55]等,降低順序化的開銷工作的有Mnemosyne[20],LOC[47],Eager Sync[49],HOPS[53],Strand Persistency[58],DPO[60]等.這些工作主要針對NVM共性設(shè)計,由于以PCM為主的NVM介質(zhì)存在內(nèi)部差異性,基于NVM的持久性事務(wù)的數(shù)據(jù)一致性研究需要針對不同的存儲介質(zhì)單元采用不同的策略保障一致性,同時盡可能提升NVM系統(tǒng)的性能和壽命并降低能耗和讀寫延遲.
以PCM為代表的非易失內(nèi)存(NVM)具有非易失、高密度以及低靜態(tài)功耗,使得NVM成為DRAM的有力替代者或與DRAM共同作為系統(tǒng)主存.新型存儲器給系統(tǒng)結(jié)構(gòu)和軟件設(shè)計帶來了新的機遇和挑戰(zhàn).由于現(xiàn)代處理器或內(nèi)存控制器可能會重排序內(nèi)存寫,因此,系統(tǒng)故障時的部分更新或重排序?qū)憰?dǎo)致NVM中數(shù)據(jù)的不一致性問題.當(dāng)前基于NVM的數(shù)據(jù)一致性被廣泛研究,我們從持久索引層面、文件系統(tǒng)層面和持久性事務(wù)等方面分別介紹了相關(guān)工作,并且給出了未來基于NVM數(shù)據(jù)一致性方面可能重要的研究發(fā)展方向.NVM固有的缺點如PCM讀寫延遲高、讀寫不對稱和有限的擦寫次數(shù)等,需要研究人員在性能和開銷之間尋找最佳的平衡點.為了充分利用NVM實現(xiàn)更好的數(shù)據(jù)一致性,可能需要從應(yīng)用層、軟件層以及硬件層等多角度多層面協(xié)同設(shè)計.