国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

耐久性感知的持久性內(nèi)存異地更新

2022-03-09 05:41蔡長(zhǎng)興杜亞娟周泰宇
關(guān)鍵詞:持久性日志一致性

蔡長(zhǎng)興 杜亞娟 周泰宇

(武漢理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 武漢 430073)

隨著大數(shù)據(jù)時(shí)代的到來(lái)和人工智能技術(shù)的發(fā)展,海量數(shù)據(jù)存儲(chǔ)和處理需求推動(dòng)著計(jì)算機(jī)體系結(jié)構(gòu)的進(jìn)一步發(fā)展[1].大數(shù)據(jù)包含大量的、多種類的數(shù)據(jù),這些數(shù)據(jù)的價(jià)值密度更低,但對(duì)處理時(shí)效和精確性的要求更高[2].為了滿足這一需求,研究者們提出了持久性內(nèi)存系統(tǒng)(persistent memory, PM)[3-4]等新型存儲(chǔ)架構(gòu),如Intel公司最新推出的Optane[5]等,為傳統(tǒng)DRAM內(nèi)存構(gòu)建的計(jì)算機(jī)體系帶來(lái)巨大的變革.由于其非易失性、字節(jié)尋址、直接存取等優(yōu)良的特性[3,6-8],持久性內(nèi)存具有較高的研究?jī)r(jià)值和廣闊的應(yīng)用前景.然而,持久性內(nèi)存系統(tǒng)故障發(fā)生后,部分?jǐn)?shù)據(jù)持久保存在內(nèi)存中,使數(shù)據(jù)恢復(fù)時(shí)產(chǎn)生不一致問(wèn)題,從而導(dǎo)致嚴(yán)重錯(cuò)誤.因此,故障一致性(crash consistency)問(wèn)題是持久性內(nèi)存系統(tǒng)需要解決的重要問(wèn)題之一[9].

現(xiàn)有工作對(duì)持久性內(nèi)存系統(tǒng)故障一致性保證機(jī)制開(kāi)展了深入的研究,提出了日志、異地更新等技術(shù)[10-13].通過(guò)記錄日志或多版本寫的方式,使數(shù)據(jù)崩潰后仍可以恢復(fù)到一致性狀態(tài).然而,從時(shí)間和空間維度詳細(xì)分析異地更新等現(xiàn)有技術(shù),發(fā)現(xiàn)由于這些技術(shù)均引入了額外的寫操作,導(dǎo)致總線延遲高、寫放大等問(wèn)題,對(duì)持久性內(nèi)存系統(tǒng)的性能和壽命產(chǎn)生了一定的影響,從而導(dǎo)致了耐久性問(wèn)題,因此亟需得到改進(jìn).

為緩解上述問(wèn)題,本文提出了耐久性感知的持久性內(nèi)存異地更新機(jī)制(endurance aware out-of-place update for persistent memory, EAOOP).基于對(duì)持久性內(nèi)存系統(tǒng)硬件的改動(dòng),引入緩沖區(qū)提供耐久性感知的內(nèi)存管理,為異地更新提供地址映射,并充分利用帶寬寫回?cái)?shù)據(jù).為了提升持久性內(nèi)存的耐久性,故障一致性保證機(jī)制必須盡量減少對(duì)持久性內(nèi)存的寫入,本文運(yùn)用異地更新技術(shù),將劃分為原始數(shù)據(jù)區(qū)域和更新數(shù)據(jù)區(qū)域的持久性內(nèi)存交替使用,既保證了系統(tǒng)的故障一致性,又避免了冗余的數(shù)據(jù)合并操作,實(shí)現(xiàn)了對(duì)持久性內(nèi)存的耐久性感知.同時(shí),設(shè)計(jì)了輕量級(jí)垃圾回收,并與總線執(zhí)行解耦,極大減少額外寫放大和帶寬占用,從而降低了故障一致性保證對(duì)持久性內(nèi)存壽命和性能的影響.此外,本文還為該機(jī)制設(shè)計(jì)了系統(tǒng)恢復(fù)的方法,并詳細(xì)描述了讀寫訪問(wèn)請(qǐng)求的工作流程.最后,通過(guò)模擬實(shí)驗(yàn)驗(yàn)證了EAOOP機(jī)制的有效性.基于微基準(zhǔn)程序測(cè)試集和真實(shí)應(yīng)用程序測(cè)試集,在模擬器McSimA+上實(shí)現(xiàn)并測(cè)試EAOOP機(jī)制.

本文工作的主要貢獻(xiàn)有3個(gè)方面:

1) 分析了持久性內(nèi)存故障一致性保證機(jī)制的性能優(yōu)化問(wèn)題.

2) 設(shè)計(jì)了耐久性感知的持久性內(nèi)存異地更新機(jī)制,包括耐久性感知的持久性內(nèi)存管理和輕量級(jí)垃圾回收.

3) 實(shí)現(xiàn)并評(píng)估本文提出的機(jī)制,EAOOP的事務(wù)處理吞吐量提升了1.6倍,總線延遲和寫數(shù)量分別減少了27.3%和32.4%.

1 背景與研究動(dòng)機(jī)

存儲(chǔ)系統(tǒng)是馮·諾依曼計(jì)算機(jī)體系結(jié)構(gòu)中的重要組成部分.在傳統(tǒng)存儲(chǔ)架構(gòu)下,以動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dynamic random access memory, DRAM)為代表的傳統(tǒng)計(jì)算機(jī)內(nèi)存,因容量有限、能耗較高、與外存讀寫時(shí)延較長(zhǎng)等問(wèn)題[3],造成了輸入和輸出瓶頸[10],影響了大數(shù)據(jù)處理的效率和能耗,使得傳統(tǒng)的存儲(chǔ)系統(tǒng)已不能滿足現(xiàn)有需求.

以Hadoop和MongodDB等系統(tǒng)為代表的現(xiàn)有工作[14-16],嘗試從軟件或軟硬件結(jié)合層面改進(jìn)傳統(tǒng)計(jì)算機(jī)存儲(chǔ)架構(gòu),但其仍然是基于傳統(tǒng)的易失性內(nèi)存,性能瓶頸依然不可避免.近年來(lái),以自旋矩傳輸隨機(jī)存取存儲(chǔ)器(shared transistor technology random access memory, STT-RAM)[17]、電阻式隨機(jī)存取存儲(chǔ)器(resistive random access memory, ReRAM)[18]、相變化存儲(chǔ)器(phase change memory, PCM)[19]和3D-XPoint[20]等非易失性存儲(chǔ)介質(zhì)(non-volatile memory, NVM)為代表的持久性內(nèi)存的誕生和發(fā)展,以其擁有的非易失性、可字節(jié)尋址、隨機(jī)讀寫速度快、能耗低、可擴(kuò)展性強(qiáng)等特性,為傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)架構(gòu)帶來(lái)了機(jī)遇和挑戰(zhàn).2019年Intel公司推出了持久性內(nèi)存Optane DC Persistent Memory,更是加速了學(xué)術(shù)界和工業(yè)界對(duì)這一領(lǐng)域的關(guān)注.

持久性內(nèi)存兼具傳統(tǒng)內(nèi)存和外存設(shè)備的優(yōu)點(diǎn),既可以用作外存,也可以用作內(nèi)存.因?yàn)槠淇梢员淮鎯?chǔ)和加載指令直接訪問(wèn)[7,21-22],所以避免了開(kāi)銷較大的文件系統(tǒng)塊頁(yè)轉(zhuǎn)換等操作.采用持久性內(nèi)存單獨(dú)做主存,持久性內(nèi)存和DRAM的混合主存以及DRAM作為持久性內(nèi)存的緩存,成為持久性內(nèi)存系統(tǒng)這一新型存儲(chǔ)架構(gòu)設(shè)計(jì)的主要思路[23],如圖1所示:

Fig. 1 Three common structures of persistent memory system圖1 持久性內(nèi)存系統(tǒng)的3種常見(jiàn)結(jié)構(gòu)

然而,故障一致性問(wèn)題一直是持久性內(nèi)存系統(tǒng)發(fā)展的障礙.

1.1 故障一致性問(wèn)題

故障一致性指的是當(dāng)系統(tǒng)發(fā)生故障后,內(nèi)存中數(shù)據(jù)能恢復(fù)到故障發(fā)生前、最近的一個(gè)與系統(tǒng)其他位置數(shù)據(jù)都一致的狀態(tài).傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)架構(gòu)因?yàn)橐资詢?nèi)存的存在,當(dāng)系統(tǒng)發(fā)生故障時(shí),內(nèi)存中的數(shù)據(jù)即刻丟失.系統(tǒng)恢復(fù)后,內(nèi)存中沒(méi)有數(shù)據(jù),因此不需要考慮故障一致性的問(wèn)題.由于持久性內(nèi)存的非易失性,在系統(tǒng)斷電或崩潰等情況發(fā)生后,數(shù)據(jù)不會(huì)丟失.然而,留存的數(shù)據(jù)可能存在部分更新或懸空指針等問(wèn)題[24-25],從而引發(fā)系統(tǒng)產(chǎn)生嚴(yán)重的異常或錯(cuò)誤.

圖2展示了持久性內(nèi)存系統(tǒng)故障一致性問(wèn)題原理.假設(shè)數(shù)據(jù)從緩存中被寫入到內(nèi)存時(shí),由一個(gè)指針來(lái)引用,如圖2(a)所示;將指針寫入內(nèi)存,如圖2(b)所示;在寫入數(shù)據(jù)之前,系統(tǒng)發(fā)生了故障,如圖2(c)所示;此時(shí)只有指針留在了內(nèi)存中,這個(gè)指針被稱為懸空指針,此時(shí)系統(tǒng)中的數(shù)據(jù)處于不一致?tīng)顟B(tài),在接下來(lái)的運(yùn)行中懸空指針可能會(huì)引起系統(tǒng)異?;蝈e(cuò)誤,如圖2(d)所示.

Fig. 2 Principle of crash consistency problem in persistent memory system圖2 持久性內(nèi)存系統(tǒng)故障一致性問(wèn)題原理

常見(jiàn)的持久性內(nèi)存系統(tǒng)故障一致性保證的方法在軟件層面有日志(logging)、寫時(shí)復(fù)制(copy-on-write)和日志結(jié)構(gòu)(log-structured)技術(shù):1)日志技術(shù)主要有重寫日志(redo log)和撤銷日志(undo log),事務(wù)會(huì)在數(shù)據(jù)被提交(commit)前,將數(shù)據(jù)的原始版本寫入撤銷日志,或?qū)?shù)據(jù)的更新版本寫入重寫日志,也可能同時(shí)保存2種日志;2)寫時(shí)復(fù)制技術(shù)的數(shù)據(jù)不在原始版本上更新,而是在新復(fù)制的版本上更新,更新后再刪除原始版本;3)日志結(jié)構(gòu)技術(shù)將更新后的數(shù)據(jù)以日志結(jié)構(gòu)附加到日志結(jié)構(gòu)中,寫入持久性內(nèi)存,并建立映射索引以便后續(xù)請(qǐng)求訪問(wèn).在硬件層面常見(jiàn)的有檢查點(diǎn)(checkpointing)和異地更新(out-of-place update)技術(shù):1)檢查點(diǎn)技術(shù)是程序執(zhí)行過(guò)程中的一個(gè)快照,保存了某一節(jié)點(diǎn)系統(tǒng)中各個(gè)位置的數(shù)據(jù)版本,系統(tǒng)崩潰后,通過(guò)比對(duì)檢查點(diǎn)中的數(shù)據(jù)可以快速將系統(tǒng)恢復(fù)到一致性狀態(tài);2)異地更新技術(shù)是將數(shù)據(jù)更新至持久性內(nèi)存的指定區(qū)域,它與寫時(shí)復(fù)制不同的是這種寫入是由硬件支持的.

由于持久性內(nèi)存自身讀寫不對(duì)稱、寫耐久性差等特性,上述經(jīng)典方法在開(kāi)銷和性能之間還未取得較好的平衡.于是,研究者們基于經(jīng)典方法開(kāi)展了深入的研究,提出了如Mnemosyne[26],Kiln[25],ThyNVM[27],HOOP[10]等工作,但還存在一定的不足.因此,充分利用持久性內(nèi)存特性,改進(jìn)現(xiàn)有的故障一致性保證機(jī)制,對(duì)于優(yōu)化持久性內(nèi)存系統(tǒng)的性能、引領(lǐng)下一代計(jì)算機(jī)存儲(chǔ)架構(gòu)革新具有重要意義[26].

1.2 故障一致性保證優(yōu)化

為了保證持久性內(nèi)存系統(tǒng)的故障一致性,研究者們?cè)诙鄠€(gè)方面提出了解決方案,這些機(jī)制雖然保證了故障一致性,但也不可避免地為持久性內(nèi)存帶來(lái)了開(kāi)銷,產(chǎn)生了性能上的下降,成為持久性內(nèi)存系統(tǒng)取代傳統(tǒng)計(jì)算機(jī)存儲(chǔ)架構(gòu)道路上的嚴(yán)重障礙.因此,在現(xiàn)有研究的基礎(chǔ)上,進(jìn)一步優(yōu)化故障一致性機(jī)制的性能是十分有必要的.

軟件透明的異地更新機(jī)制更能滿足更少開(kāi)銷和更高性能這一發(fā)展趨勢(shì).現(xiàn)有工作HOOP機(jī)制就是一種軟件透明的方案,采用硬件層面的優(yōu)化思想,通過(guò)異地更新方法為持久性內(nèi)存提供了硬件級(jí)別的故障一致性保證,使得其相較于傳統(tǒng)日志方案充分利用了持久性內(nèi)存寫入帶寬,提升了在故障一致性保證機(jī)制下持久性內(nèi)存系統(tǒng)的性能.然而,該機(jī)制為了輔助異地更新而提出的垃圾回收機(jī)制存在冗余寫入和總線占用的現(xiàn)象,引起了時(shí)間和空間維度的問(wèn)題,存在一定的優(yōu)化的空間.

從時(shí)間維度上來(lái)說(shuō),HOOP存在的問(wèn)題主要有總線延遲和寫延遲2個(gè)方面.首先,HOOP在執(zhí)行垃圾回收機(jī)制時(shí),后續(xù)的請(qǐng)求如果針對(duì)的是同一個(gè)數(shù)據(jù),那么該數(shù)據(jù)就需要等待垃圾回收?qǐng)?zhí)行結(jié)束后,才能更新到持久性內(nèi)存的異地(out-of-place, OOP)區(qū)域中,這個(gè)等待過(guò)程中,持久性內(nèi)存無(wú)法執(zhí)行讀取或?qū)懭氩僮?,從而產(chǎn)生了一定的總線延遲.其次,HOOP的垃圾回收機(jī)制雖然已經(jīng)相較于傳統(tǒng)的垃圾回收機(jī)制進(jìn)行改進(jìn),但是,該機(jī)制仍需要對(duì)OOP區(qū)域已更新的數(shù)據(jù)進(jìn)行掃描,再打包寫入到Home區(qū)域中,也就意味著在已更新的數(shù)據(jù)寫入持久性內(nèi)存后,持久性內(nèi)存中還會(huì)存在著與這些數(shù)據(jù)有關(guān)的再一次寫入.雖然掃描和打包操作能盡量減少再一次寫入的數(shù)據(jù)大小,但由于持久性內(nèi)存的讀寫不對(duì)稱問(wèn)題一直是影響性能的重要因素,這種寫入的存在必然對(duì)系統(tǒng)的執(zhí)行時(shí)間產(chǎn)生巨大的影響,因此由于垃圾回收帶來(lái)的寫延遲問(wèn)題也是需要優(yōu)化的重要問(wèn)題.

從空間維度上來(lái)說(shuō),HOOP主要存在的問(wèn)題有寫壽命和吞吐量2個(gè)方面.首先,由于持久性內(nèi)存的寫耐久性問(wèn)題,HOOP提出的機(jī)制存在寫放大問(wèn)題,數(shù)據(jù)首先寫入持久性內(nèi)存,接著會(huì)再參與到內(nèi)部的數(shù)據(jù)遷移中.這一機(jī)制的實(shí)現(xiàn),對(duì)持久性內(nèi)存的使用壽命會(huì)產(chǎn)生一定的影響,長(zhǎng)遠(yuǎn)來(lái)看,對(duì)于持久性內(nèi)存系統(tǒng)來(lái)說(shuō)是得不償失的,也不利于其進(jìn)一步推廣并替代傳統(tǒng)內(nèi)存系統(tǒng).其次,HOOP機(jī)制對(duì)系統(tǒng)的吞吐量存在不必要的影響,隨著垃圾回收時(shí)間間隔的增加,吞吐量也隨之增大后變小,說(shuō)明垃圾回收機(jī)制直接影響到了系統(tǒng)執(zhí)行,這對(duì)于持久性內(nèi)存系統(tǒng)來(lái)說(shuō)其實(shí)是一筆不劃算的開(kāi)銷.特別是對(duì)于不同微基準(zhǔn)測(cè)試集,HOOP的吞吐量閾值并不一致.雖然現(xiàn)有工作HOOP機(jī)制相較于現(xiàn)有研究,已經(jīng)在提升性能和減少開(kāi)銷上有了十分大的進(jìn)步(1.7倍和2.1倍),但是從時(shí)間維度和空間維度上來(lái)說(shuō),其存在總線延遲、寫延遲、寫壽命和吞吐量等問(wèn)題,還存在一定的優(yōu)化空間,需要通過(guò)進(jìn)一步減少寫數(shù)量,解耦總線執(zhí)行與垃圾回收來(lái)減少故障一致性保證機(jī)制帶來(lái)的開(kāi)銷,提升持久性內(nèi)存系統(tǒng)的性能.

2 EAOOP架構(gòu)設(shè)計(jì)

基于現(xiàn)有研究,本文提出一種耐久性感知的持久性內(nèi)存異地更新機(jī)制,如圖3所示.該機(jī)制基于對(duì)持久性內(nèi)存系統(tǒng)的硬件修改,采用持久性內(nèi)存作為主存,對(duì)原有持久性內(nèi)存系統(tǒng)的修改較少.在應(yīng)用了該機(jī)制的系統(tǒng)上可以直接運(yùn)行應(yīng)用程序,而不必像傳統(tǒng)機(jī)制一樣需要實(shí)現(xiàn)相應(yīng)的應(yīng)用程序接口,對(duì)于用戶更為友好和簡(jiǎn)單.

Fig. 3 Architecture design of EAOOP圖3 EAOOP架構(gòu)設(shè)計(jì)圖

首先,在緩存和持久性內(nèi)存之間加入了內(nèi)存控制器一層,該層是易失性的.接著,在內(nèi)存控制器中實(shí)現(xiàn)了持久化管理和地址映射,數(shù)據(jù)經(jīng)過(guò)內(nèi)存控制器中的持久化緩沖區(qū)和映射表處理后才能被讀寫.最后,在持久性內(nèi)存中實(shí)現(xiàn)了異地更新和垃圾回收.

各模塊的主要功能和原理為:

1) 持久化管理主要是在持久化緩沖區(qū)中進(jìn)行的,在該模塊中為數(shù)據(jù)持久化到持久性內(nèi)存中做好準(zhǔn)備.該過(guò)程將更新后準(zhǔn)備寫回的數(shù)據(jù)重新組成了緩存行后寫入持久性內(nèi)存,既保證了寫入的順序性,又減少了持久化過(guò)程中的順序保證和持久化帶寬開(kāi)銷.

2) 地址映射主要依靠的是映射表這一模塊,承擔(dān)了數(shù)據(jù)讀寫過(guò)程中的持久性內(nèi)存地址映射功能,幫助數(shù)據(jù)確定異地更新的地址和垃圾回收的時(shí)機(jī).同時(shí),它也與其他方法的實(shí)現(xiàn)有著密切的關(guān)系,可以將數(shù)據(jù)的地址映射關(guān)系信息記錄在此,服務(wù)持久性內(nèi)存數(shù)據(jù)的多版本管理.

3) 異地更新在持久化過(guò)程中實(shí)現(xiàn),持久性內(nèi)存被劃分為原始數(shù)據(jù)區(qū)域和更新數(shù)據(jù)區(qū)域,用于存放交替寫入持久性內(nèi)存的數(shù)據(jù).為了保證后續(xù)請(qǐng)求的正確訪問(wèn),在寫入持久性內(nèi)存之前,這些數(shù)據(jù)的映射關(guān)系已經(jīng)在系統(tǒng)中被記錄.

4) 垃圾回收在后臺(tái)運(yùn)行,主要處理持久性內(nèi)存中的“無(wú)效”數(shù)據(jù),同時(shí)會(huì)對(duì)映射表中的條目進(jìn)行修改.針對(duì)現(xiàn)有工作中存在的時(shí)間和空間維度的問(wèn)題,它既減少冗余寫入操作,又解耦了垃圾回收與總線執(zhí)行之間的關(guān)系,使得系統(tǒng)開(kāi)銷減少,性能提升.

由于持久化緩沖區(qū)的數(shù)據(jù)和映射表中的數(shù)據(jù)都在易失性的內(nèi)存控制器中,因此當(dāng)故障發(fā)生后,持久化緩沖區(qū)的數(shù)據(jù)和映射表中的數(shù)據(jù)將會(huì)丟失,使得持久性內(nèi)存中的數(shù)據(jù)出現(xiàn)不一致的問(wèn)題.因此,在一致性保證的基礎(chǔ)上,本文還實(shí)現(xiàn)了對(duì)系統(tǒng)的恢復(fù),主要在持久性內(nèi)存中進(jìn)行.同時(shí),該過(guò)程也能夠重建因故障丟失的映射表,在恢復(fù)結(jié)束后,服務(wù)持久化緩沖區(qū)中重新傳入后續(xù)請(qǐng)求.

3 關(guān)鍵技術(shù)

本節(jié)我們?cè)敿?xì)介紹EAOOP機(jī)制中的關(guān)鍵技術(shù).

3.1 耐久性感知的內(nèi)存管理

由于持久性內(nèi)存支持字節(jié)粒度尋址,可通過(guò)load或store指令直接訪問(wèn)內(nèi)存中的數(shù)據(jù),而不需要進(jìn)行頁(yè)交換(page swapping).本文充分利用了這一特性,通過(guò)引入易失性的內(nèi)存控制器,對(duì)持久性內(nèi)存進(jìn)行高效靈活的管理,主要包括持久化管理、地址映射和異地更新3個(gè)部分.

數(shù)據(jù)持久化過(guò)程指數(shù)據(jù)寫入持久性內(nèi)存的過(guò)程.確保數(shù)據(jù)不會(huì)發(fā)生不一致性的情況,是持久性內(nèi)存系統(tǒng)需要解決的基本問(wèn)題,其中最重要的是要保證寫入時(shí)的順序性.部分現(xiàn)有工作都將持久性內(nèi)存系統(tǒng)數(shù)據(jù)寫回粒度設(shè)定為緩存行粒度,然而寫入時(shí)數(shù)據(jù)如果不能完全占用緩存行,便會(huì)造成帶寬的浪費(fèi),這對(duì)于持久化管理來(lái)說(shuō)也是一種額外的開(kāi)銷,因此以緩存行粒度寫入(64 B)是最為高效的方式.

本文提出的持久化管理方案,在內(nèi)存控制器中加入持久化緩沖區(qū)模塊,所有從緩存寫回內(nèi)存的數(shù)據(jù),都需要經(jīng)過(guò)該模塊處理后,再寫入持久性內(nèi)存.在該模塊中,數(shù)據(jù)主要經(jīng)過(guò)了標(biāo)記、組合和寫回3個(gè)步驟:1)數(shù)據(jù)到達(dá)持久化緩沖區(qū)后,將為其添加元數(shù)據(jù),這一過(guò)程被稱為標(biāo)記.后續(xù)操作可以根據(jù)標(biāo)記判斷,數(shù)據(jù)即將寫入持久性內(nèi)存的哪一個(gè)區(qū)域,以及寫入的先后順序.2)標(biāo)記后的數(shù)據(jù)將被重新組合成緩存行,這個(gè)步驟的主要目的是為了充分利用寫入帶寬,減少寫入的次數(shù),提升吞吐量,如圖4所示.3)按照既定的順序,當(dāng)緩存行準(zhǔn)備好時(shí),持久化緩沖區(qū)將把數(shù)據(jù)按照順序,基于硬件的機(jī)制將數(shù)據(jù)刷新到持久性內(nèi)存的指定區(qū)域.

Fig. 4 Principle of combination圖4 組合原理圖

寫入持久性內(nèi)存時(shí),根據(jù)數(shù)據(jù)的元數(shù)據(jù),可以判斷持久性內(nèi)存即將寫入的區(qū)域.本文實(shí)現(xiàn)的思路并沒(méi)有將原始數(shù)據(jù)區(qū)域和更新數(shù)據(jù)區(qū)域從物理地址角度進(jìn)行劃分,而是通過(guò)元數(shù)據(jù)區(qū)分?jǐn)?shù)據(jù)寫入的區(qū)域.如算法1所示,首先檢查緩存行狀態(tài).如果無(wú)緩存行,則初始化新的緩存行;反之,如果緩存行還沒(méi)裝滿,則將數(shù)據(jù)繼續(xù)加入緩存行,等待緩存行裝滿后,再遍歷緩存行里的數(shù)據(jù).接著,根據(jù)數(shù)據(jù)的元數(shù)據(jù)的原始地址區(qū)域,在映射表中查找該條目的更新次數(shù).如果更新次數(shù)是奇數(shù),則更新的是更新地址區(qū)域的數(shù)據(jù);反之,如果更新次數(shù)是偶數(shù),則更新的是原始地址區(qū)域的數(shù)據(jù).最后,緩存行刷新結(jié)束后,將會(huì)向系統(tǒng)返回一個(gè)刷新結(jié)束的信號(hào),數(shù)據(jù)持久化的事務(wù)提交完成.

算法1.數(shù)據(jù)持久化算法.

輸入:已標(biāo)記好的數(shù)據(jù);

輸出:刷新結(jié)束.

① while緩存行大小<64 B do

② if緩存行大小=0 then

③ 初始化新的緩存行;

④ end if

⑤ 將標(biāo)記好的數(shù)據(jù)加入緩存行;

⑥ 緩存行大小+8;

⑦ end while

⑧ for each數(shù)據(jù)in緩存行do

⑨ 查找映射表?xiàng)l目;

⑩ if更新次數(shù)%2=1 then

本文使用散列表生成映射表,如圖5所示.它包含了數(shù)據(jù)的原始區(qū)域地址、更新區(qū)域地址和更新次數(shù).它會(huì)隨著數(shù)據(jù)的更新和垃圾回收機(jī)制的執(zhí)行,不斷變化大小,但實(shí)際上在內(nèi)存控制器中只占用極少的空間.在系統(tǒng)崩潰時(shí),這一模塊會(huì)隨著故障一起丟失.而在系統(tǒng)恢復(fù)時(shí),映射表會(huì)根據(jù)持久性內(nèi)存中的新舊2個(gè)版本數(shù)據(jù)的映射關(guān)系再重建起來(lái).

本文提出的故障一致性保證的方案以異地更新為基礎(chǔ),它指的是數(shù)據(jù)在寫入持久性內(nèi)存時(shí),不更新原始地址上的數(shù)據(jù),而在新的地址寫入.在EAOOP機(jī)制下,每一次數(shù)據(jù)更新后的寫入?yún)^(qū)域?qū)τ诔志眯詢?nèi)存來(lái)說(shuō)是可預(yù)見(jiàn)的.如圖6所示,在數(shù)據(jù)第1次更新前或垃圾回收后,持久性內(nèi)存中的數(shù)據(jù)可能只有原始數(shù)據(jù)區(qū)域中的1個(gè)版本(A0).數(shù)據(jù)在第1次更新后和垃圾回收前,或系統(tǒng)恢復(fù)后,持久性內(nèi)存中可能同時(shí)存在當(dāng)前數(shù)據(jù)的2個(gè)版本,即新版本(A1)和舊版本(A0).當(dāng)該數(shù)據(jù)再一次更新時(shí),最新版本(A2)將會(huì)更新舊版本(A0),此時(shí)持久性內(nèi)存中留下的當(dāng)前數(shù)據(jù)的版本變成了最新版本(A2)和較新版本(A1).這種雙版本共存的狀態(tài)不會(huì)持續(xù)太長(zhǎng)時(shí)間,因?yàn)槌志眯詢?nèi)存目前價(jià)格較高,考慮到空間使用效率,垃圾回收之后會(huì)對(duì)更新數(shù)據(jù)區(qū)域的數(shù)據(jù)進(jìn)行處理,數(shù)據(jù)將回到只有1個(gè)版本(AN)留存的狀態(tài).

Fig. 5 Structure of mapping table圖5 映射表結(jié)構(gòu)圖

Fig. 6 Principle of out-of-place update mechanism圖6 異地更新機(jī)制原理圖

3.2 輕量級(jí)垃圾回收

本文提出的EAOOP機(jī)制將持久性內(nèi)存劃分為原始地址區(qū)域和更新地址區(qū)域2個(gè)區(qū)域,在每次寫回時(shí)將數(shù)據(jù)更新至其中一個(gè)區(qū)域,這意味著在一段時(shí)間內(nèi)這2個(gè)區(qū)域都分別保存了同一數(shù)據(jù)的不同版本,這一機(jī)制雖然保證了故障發(fā)生后,系統(tǒng)可以借助更新地址區(qū)域中的數(shù)據(jù)將持久性內(nèi)存中的數(shù)據(jù)恢復(fù)至一致性,但也一定程度上浪費(fèi)了持久性內(nèi)存的空間,在數(shù)據(jù)不斷更新的情況下是非常不經(jīng)濟(jì)的.

考慮到推廣應(yīng)用需求,現(xiàn)階段在持久性內(nèi)存的研究中,還需要盡可能地提高內(nèi)存空間的利用效率,同時(shí)減少對(duì)內(nèi)存壽命產(chǎn)生影響的操作.

本文設(shè)置被垃圾回收的數(shù)據(jù)是更新數(shù)據(jù)區(qū)域的數(shù)據(jù),因此原始數(shù)據(jù)區(qū)域的數(shù)據(jù)在垃圾回收之后,可以被系統(tǒng)當(dāng)作從未更新過(guò)的數(shù)據(jù)來(lái)使用.由于數(shù)據(jù)在寫入持久性內(nèi)存前,已經(jīng)在映射表中記錄了本次更新的次數(shù),因此可以根據(jù)更新次數(shù),以確定持久性內(nèi)存系統(tǒng)中垃圾回收機(jī)制開(kāi)始的時(shí)機(jī).

更新次數(shù)的選取只能是偶數(shù),因?yàn)檫@時(shí)最新版本的數(shù)據(jù)寫入的是原始數(shù)據(jù)區(qū)域,而更新數(shù)據(jù)區(qū)域中的數(shù)據(jù)是較舊版本的,因此這個(gè)時(shí)候更新數(shù)據(jù)區(qū)域中的數(shù)據(jù)可以被看作是無(wú)效數(shù)據(jù).而更新次數(shù)在垃圾回收中的閾值如果過(guò)大,持久性內(nèi)存系統(tǒng)將容納過(guò)多的數(shù)據(jù),顯然違背了高效利用內(nèi)存空間的初衷.如果過(guò)小,垃圾回收將進(jìn)行得過(guò)于頻繁,雖然對(duì)系統(tǒng)整體性能不會(huì)造成影響,但可以預(yù)見(jiàn)的是,這對(duì)持久性內(nèi)存的性能本身也是一種消耗.因此,本文將垃圾回收機(jī)制下的更新次數(shù)閾值設(shè)置為4,以確保垃圾回收機(jī)制在持久性內(nèi)存中高效進(jìn)行.

如算法2所示,輕量級(jí)垃圾回收的實(shí)現(xiàn)較為簡(jiǎn)單.當(dāng)映射表的條目更新后,如果該條目的更新次數(shù)達(dá)到閾值,則記錄映射表該條目的更新數(shù)據(jù)區(qū)域地址.接著,將更新數(shù)據(jù)區(qū)域地址上的數(shù)據(jù)刪除.然后,刪除映射表上該條目的記錄.最后,向系統(tǒng)返回該數(shù)據(jù)的垃圾回收已經(jīng)結(jié)束.

算法2.垃圾回收算法.

輸入:持久性內(nèi)存中的數(shù)據(jù);

輸出:垃圾回收結(jié)束.

① 映射表?xiàng)l目更新;

② if更新次數(shù)=閾值then

③ 記錄映射表該條目的更新數(shù)據(jù)區(qū)域地址;

④ 刪除更新數(shù)據(jù)區(qū)域地址上的數(shù)據(jù);

⑤ 刪除該條目;

⑥ end if

⑦ return垃圾回收結(jié)束.

3.3 系統(tǒng)恢復(fù)

在本文提出的EAOOP機(jī)制下,以數(shù)據(jù)寫入持久性內(nèi)存時(shí)系統(tǒng)發(fā)生故障為例.當(dāng)故障發(fā)生后,持久性內(nèi)存中可能存在同一數(shù)據(jù)的2個(gè)版本,分別分布在原始數(shù)據(jù)區(qū)域和更新數(shù)據(jù)區(qū)域2個(gè)區(qū)域中.其中某一個(gè)區(qū)域的數(shù)據(jù)更舊,在這次故障發(fā)生前一段時(shí)間內(nèi)數(shù)據(jù)是沒(méi)有變化的,而另一個(gè)區(qū)域中的數(shù)據(jù)在這次故障中受到了影響,可能存在部分更新的情況.另外,在內(nèi)存控制器中的持久化緩沖區(qū)和映射表在故障中完全丟失,因此可能存在故障發(fā)生后還沒(méi)有提交的事務(wù),同時(shí)映射關(guān)系目前已經(jīng)不存在了.

假設(shè)當(dāng)前持久性內(nèi)存中還存在未提交的事務(wù)產(chǎn)生的數(shù)據(jù),無(wú)論受到故障直接影響的是原始數(shù)據(jù)區(qū)域或更新數(shù)據(jù)區(qū)域,由于持久化緩沖區(qū)的數(shù)據(jù)在故障中已經(jīng)丟失,這部分?jǐn)?shù)據(jù)都應(yīng)當(dāng)被清除.對(duì)于已提交的事務(wù)產(chǎn)生的數(shù)據(jù),假設(shè)當(dāng)前受到故障直接影響的區(qū)域是原始數(shù)據(jù)區(qū)域,那么可以認(rèn)為當(dāng)前數(shù)據(jù)的狀態(tài),是經(jīng)過(guò)本文提出的輕量級(jí)垃圾回收機(jī)制處理后的數(shù)據(jù).由于其本身也是一致性的,此時(shí)更新數(shù)據(jù)區(qū)域中的數(shù)據(jù)就可以直接被刪除了.假設(shè)當(dāng)前受到故障直接影響的區(qū)域是更新數(shù)據(jù)區(qū)域,這部分?jǐn)?shù)據(jù)在原始數(shù)據(jù)區(qū)域中有更舊的版本.對(duì)于這種情況,在HOOP機(jī)制中是將OOP區(qū)域中數(shù)據(jù)打包后寫回到Home區(qū)域,但是這種方法也會(huì)對(duì)持久性內(nèi)存產(chǎn)生過(guò)量的寫,會(huì)加劇寫放大問(wèn)題.而本文提出的EAOOP機(jī)制更加靈活,可以通過(guò)重建映射表后重新加入映射關(guān)系將系統(tǒng)恢復(fù)至一致性.

由于持久化過(guò)程是由持久化緩沖區(qū)進(jìn)行分配并寫入持久性內(nèi)存的,而持久化緩沖區(qū)中的數(shù)據(jù)在故障中已經(jīng)丟失,因此判斷故障發(fā)生時(shí)受到最直接影響的區(qū)域,依靠的是已寫入內(nèi)存的數(shù)據(jù)的元數(shù)據(jù)中的事務(wù)編號(hào).對(duì)于同一數(shù)據(jù),事務(wù)編號(hào)更大的區(qū)域被認(rèn)為是版本更新的區(qū)域,即在故障發(fā)生時(shí)受到直接影響的區(qū)域.在EAOOP機(jī)制下,原始數(shù)據(jù)區(qū)域中的數(shù)據(jù),在任何時(shí)刻都多于或等于更新數(shù)據(jù)區(qū)域.從更簡(jiǎn)單地實(shí)現(xiàn)系統(tǒng)恢復(fù)的角度,應(yīng)該以更新數(shù)據(jù)區(qū)域中的數(shù)據(jù)為主進(jìn)行恢復(fù),通過(guò)對(duì)其中的數(shù)據(jù)及其元數(shù)據(jù)進(jìn)行遍歷并建立散列表,表中包含原始數(shù)據(jù)區(qū)域地址、更新數(shù)據(jù)區(qū)域地址和事務(wù)編號(hào)(TxID)等標(biāo)記信息,幫助系統(tǒng)恢復(fù)機(jī)制高效地比較數(shù)據(jù)版本和執(zhí)行恢復(fù)操作.

基于上述分析,本文提出的EAOOP機(jī)制下系統(tǒng)恢復(fù)的實(shí)現(xiàn)如算法3所示.首先對(duì)更新數(shù)據(jù)區(qū)域中的數(shù)據(jù)進(jìn)行遍歷,將它們的元數(shù)據(jù)的原始數(shù)據(jù)區(qū)域地址、更新數(shù)據(jù)區(qū)域地址和事務(wù)編號(hào)記錄在散列表中.接著進(jìn)行恢復(fù)操作,如果該記錄的事務(wù)編號(hào)比對(duì)應(yīng)原始數(shù)據(jù)區(qū)域數(shù)據(jù)的事務(wù)編號(hào)更大,則說(shuō)明該記錄對(duì)應(yīng)的數(shù)據(jù)是更新版本的數(shù)據(jù),那么就要保留當(dāng)前更新數(shù)據(jù)區(qū)域數(shù)據(jù).同時(shí)將元數(shù)據(jù)中的映射關(guān)系寫入重建后的映射表,并將其中的更新次數(shù)設(shè)置為1.反之,則直接刪除更新數(shù)據(jù)區(qū)域?qū)?yīng)的數(shù)據(jù).如果此時(shí)所有恢復(fù)已經(jīng)結(jié)束,則刪除記錄了遍歷更新數(shù)據(jù)區(qū)域數(shù)據(jù)的散列表.反之,則繼續(xù)執(zhí)行下一條目的恢復(fù)程序直到結(jié)束.

算法3.系統(tǒng)恢復(fù)算法.

輸入:持久性內(nèi)存數(shù)據(jù);

輸出:恢復(fù)結(jié)束.

① 初始化恢復(fù)散列表;

② 初始化映射表;

③ for each數(shù)據(jù)in更新數(shù)據(jù)區(qū)域do

④ 在恢復(fù)散列表中記錄當(dāng)前數(shù)據(jù)元數(shù)據(jù)的原始數(shù)據(jù)區(qū)域地址、更新數(shù)據(jù)區(qū)域地址和事務(wù)編號(hào);

⑤ end for

⑥ for each條目in恢復(fù)散列表do

⑦ if原始數(shù)據(jù)區(qū)域地址中的數(shù)據(jù)存在 then

⑧ if事務(wù)編號(hào)<原始數(shù)據(jù)區(qū)域數(shù)據(jù)事務(wù)編號(hào)then

⑨ 刪除更新數(shù)據(jù)區(qū)域數(shù)據(jù);

Fig. 7 Write flow of EAOOP圖7 EAOOP機(jī)制寫流程圖

3.4 服務(wù)讀寫流程

為了服務(wù)一個(gè)內(nèi)存寫請(qǐng)求,EAOOP機(jī)制實(shí)現(xiàn)的寫流程如圖7所示.首先,數(shù)據(jù)會(huì)加入持久化緩沖區(qū).接著,查看映射表中是否有該數(shù)據(jù)的記錄.如果記錄存在,則將更新次數(shù)加1;如沒(méi)有記錄,則首先要在更新區(qū)域中為該數(shù)據(jù)指定一個(gè)更新的地址.同時(shí),在映射表中創(chuàng)建一條新的記錄,填入新的映射關(guān)系,并將更新次數(shù)設(shè)置為1.然后,持久化緩沖區(qū)會(huì)為數(shù)據(jù)添加元數(shù)據(jù),并為這些數(shù)據(jù)指定更新區(qū)域的地址.完成這些操作后,數(shù)據(jù)和元數(shù)據(jù)將被重新組合至緩存行中.當(dāng)緩存行中的數(shù)據(jù)數(shù)量沒(méi)有達(dá)到閾值時(shí),將會(huì)繼續(xù)重復(fù)執(zhí)行上述操作.當(dāng)緩存行中的數(shù)據(jù)達(dá)到閾值后,就會(huì)執(zhí)行寫入持久性內(nèi)存的操作.至此,寫請(qǐng)求完成.

為了服務(wù)一個(gè)內(nèi)存讀請(qǐng)求,本文設(shè)計(jì)的讀流程相對(duì)于寫更為簡(jiǎn)單,如圖8所示.當(dāng)處理器的讀請(qǐng)求在緩存中沒(méi)有命中時(shí),讀請(qǐng)求將會(huì)首先到達(dá)內(nèi)存控制器中的映射表.如果在映射表中無(wú)法查到想要訪問(wèn)的數(shù)據(jù),那么讀請(qǐng)求會(huì)前往持久性內(nèi)存中的原始區(qū)域,也就是請(qǐng)求本身的地址讀取相應(yīng)的數(shù)據(jù);反之,如果查到了想要訪問(wèn)的數(shù)據(jù)的記錄,那么將會(huì)根據(jù)更新次數(shù)來(lái)判斷最新版本的數(shù)據(jù)所處的位置.如果更新次數(shù)為偶數(shù),則不用變動(dòng)請(qǐng)求本身的地址,直接前往原始區(qū)域,也就是請(qǐng)求本身的地址讀取相應(yīng)的數(shù)據(jù);如果更新次數(shù)為奇數(shù),則前往映射表中該數(shù)據(jù)對(duì)應(yīng)的更新區(qū)域的地址讀取數(shù)據(jù)相應(yīng)的數(shù)據(jù).至此,讀請(qǐng)求完成.

Fig. 8 Read flow of EAOOP圖8 EAOOP機(jī)制讀流程圖

4 實(shí) 驗(yàn)

本節(jié)通過(guò)微基準(zhǔn)和真實(shí)應(yīng)用,對(duì)EAOOP機(jī)制及其他對(duì)比系統(tǒng)的性能進(jìn)行測(cè)試,包括事務(wù)處理吞吐量、總線延遲和寫數(shù)量等測(cè)試,并分析其性能表現(xiàn).

4.1 實(shí)驗(yàn)平臺(tái)

本文選取的對(duì)比系統(tǒng)是undo log,redo log,HOOP,EAOOP等,它們都是在McSimA+[28]這一模擬器上實(shí)現(xiàn),并進(jìn)行測(cè)試.模擬器的主要配置設(shè)置如表1所示.持久性內(nèi)存的相關(guān)時(shí)序特征如tRCD,tCL等參數(shù)設(shè)置與PCM相同.

Table 1 Configuration of Persistent Memory Simulator表1 持久性內(nèi)存模擬器配置表

本文采用的測(cè)試基準(zhǔn)程序分為微基準(zhǔn)程序和真實(shí)應(yīng)用程序,如表2所示.微基準(zhǔn)程序包含了Queue,Vector,Rbtree,Hashtable這4種通用的微基準(zhǔn)測(cè)試集.在本文的實(shí)驗(yàn)中,主要通過(guò)模擬Insert和Update的操作以測(cè)試系統(tǒng)性能.

Table 2 Configuration of Evaluation Benchmarks表2 測(cè)試基準(zhǔn)程序配置表

本文選取的真實(shí)應(yīng)用程序是STREAM[29]和PARSEC-3.0[30].STREAM是由美國(guó)弗吉尼亞大學(xué)開(kāi)發(fā)的一種內(nèi)存系統(tǒng)基準(zhǔn)測(cè)試工具,本文主要針對(duì)Add操作進(jìn)行了測(cè)試.PARSEC-3.0是由美國(guó)普林斯頓大學(xué)開(kāi)發(fā)的一種經(jīng)典的內(nèi)存系統(tǒng)基準(zhǔn)測(cè)試套件,本文采用了streamcluster進(jìn)行測(cè)試.

為了使測(cè)試結(jié)果簡(jiǎn)潔直觀,本文以u(píng)ndo log為基線,對(duì)所有的測(cè)試結(jié)果及其圖片進(jìn)行了歸一化處理.

4.2 微基準(zhǔn)程序性能

1) 事務(wù)處理吞吐量

本文提出的EAOOP機(jī)制所應(yīng)用的系統(tǒng)相對(duì)于undo log,redo log,HOOP機(jī)制各自系統(tǒng)的事務(wù)處理吞吐量平均分別提升了95.5%,71.2%,9.6%.因?yàn)閡ndo log需要寫入大量的日志,而持久化順序保證使得寫回的次數(shù)更多,帶寬沒(méi)有得到充分地利用,事務(wù)處理吞吐量也因此最低.而redo log的持久化順序保證雖然沒(méi)有undo log那么嚴(yán)格,但是也因?yàn)槿罩镜拇嬖冢仨氃诟聰?shù)據(jù)的同時(shí)向持久性內(nèi)存中寫入大量的日志,總線上下一次更新的請(qǐng)求也因此受到了影響,事務(wù)處理吞吐量也因此不高.HOOP機(jī)制通過(guò)異地更新機(jī)制而避免了向持久性內(nèi)存中寫入過(guò)量的日志等內(nèi)容,同時(shí)在數(shù)據(jù)寫回前將數(shù)據(jù)打包成了2條緩存行,保證了寫入的帶寬,但由于異地更新而引入的垃圾回收機(jī)制在執(zhí)行過(guò)程中,后續(xù)的請(qǐng)求將無(wú)法訪問(wèn)正在被執(zhí)行的數(shù)據(jù),只能等待垃圾回收結(jié)束以后,才能從Home區(qū)域中訪問(wèn)最新版本的數(shù)據(jù),這對(duì)于系統(tǒng)的事務(wù)處理吞吐量也產(chǎn)生了一定的影響.EAOOP機(jī)制解耦了系統(tǒng)執(zhí)行與垃圾回收之間的關(guān)系,當(dāng)后續(xù)請(qǐng)求訪問(wèn)最新版本數(shù)據(jù)時(shí),正在執(zhí)行垃圾回收進(jìn)程的是較舊版本的數(shù)據(jù),同時(shí)在寫入時(shí)采用了數(shù)據(jù)重組寫回技術(shù),充分地利用了寫回帶寬,因此系統(tǒng)的事務(wù)處理吞吐量相對(duì)更高.

Fig. 9 Transaction throughput on micro-benchmarks圖9 微基準(zhǔn)下事務(wù)處理吞吐量圖

2) 總線延遲

本文提出的EAOOP機(jī)制所應(yīng)用的系統(tǒng)相對(duì)于undo log,redo log,HOOP機(jī)制各自系統(tǒng)的總線延遲平均分別減少了46.8%,28.8%,3.9%.因?yàn)閡ndo log需要嚴(yán)格的持久化順序保證,數(shù)據(jù)寫入持久性內(nèi)存必須等待日志寫入的事務(wù)提交后才能進(jìn)行,由于持久性內(nèi)存寫延遲顯著,總線延遲也因此最高.而redo log只需要保證持久化過(guò)程中,日志先提交即可更新下一次數(shù)據(jù),總線延遲因此相較undo log更低一些.HOOP機(jī)制在內(nèi)存控制器中,通過(guò)OOP緩沖區(qū)對(duì)數(shù)據(jù)的打包,以及內(nèi)存切片內(nèi)部數(shù)據(jù)塊之間的連接,實(shí)現(xiàn)了對(duì)持久化順序性的保證,因此總線延遲相對(duì)較少,但是數(shù)據(jù)必須要等待垃圾回收的結(jié)束才能寫回到Home區(qū)域,這一階段對(duì)總線的占用以及讀請(qǐng)求的等待增加了其總線延遲.本文提出的EAOOP機(jī)制首先是將持久化順序性保證在持久化緩沖區(qū)中生成緩存行時(shí)就完成了,避免了反復(fù)的寫入,以致于增加總線上的負(fù)擔(dān).其次,對(duì)于讀請(qǐng)求只需要在映射表中查詢1次就可確定讀取地址,而非HOOP機(jī)制中需要在映射表和寫回緩沖區(qū)中多次尋址.同時(shí),垃圾回收機(jī)制的執(zhí)行對(duì)總線上正在執(zhí)行的讀寫請(qǐng)求沒(méi)有影響,因此總線延遲相對(duì)更低.

Fig. 10 Critical path latency on micro-benchmarks圖10 微基準(zhǔn)下總線延遲圖

Fig. 11 Write number on micro-benchmarks圖11 微基準(zhǔn)下寫數(shù)量圖

3) 寫數(shù)量

本文提出的EAOOP機(jī)制所應(yīng)用的系統(tǒng)相對(duì)于undo log,redo log,HOOP機(jī)制各自系統(tǒng)的寫數(shù)量平均分別減少了41.5%,37.8%,18.5%.undo log和redo log由于持久化過(guò)程中需要向持久性內(nèi)存寫入日志,因此產(chǎn)生了大量的寫,其中redo log由于持久化順序性保證的需求相對(duì)不嚴(yán)格,寫入持久性內(nèi)存的次數(shù)相對(duì)沒(méi)有undo log頻繁,因此寫數(shù)量相對(duì)較少.雖然HOOP機(jī)制沒(méi)有大量日志寫入,但是其中的垃圾回收機(jī)制會(huì)將OOP區(qū)域的數(shù)據(jù)寫回到Home區(qū)域,這部分寫入依舊是較大的開(kāi)銷,增加了寫數(shù)量.程序執(zhí)行過(guò)程中,EAOOP機(jī)制對(duì)于持久性內(nèi)存的寫入主要是在數(shù)據(jù)從緩存持久化到持久性內(nèi)存的階段,而其他時(shí)間對(duì)于持久性內(nèi)存是沒(méi)有寫入的,這得益于本文提出的輕量級(jí)垃圾回收機(jī)制,對(duì)于在異地更新中暫時(shí)無(wú)效的數(shù)據(jù)及時(shí)地處理,相較于HOOP機(jī)制進(jìn)一步減少了對(duì)持久性內(nèi)存寫入的數(shù)量.

4.3 真實(shí)應(yīng)用程序性能

1) 事務(wù)處理吞吐量

EAOOP機(jī)制的事務(wù)處理吞吐量分別提升了14.8%,14.8%,1.9%,6.9%.STREAM的吞吐量提升效果比PARSEC更多的原因以及STREAM隨數(shù)據(jù)集增大性能提升變化不大的原因可能是由于STREAM應(yīng)用程序本身局部性較小,減少了垃圾回收機(jī)制對(duì)后續(xù)更新請(qǐng)求的影響,但并沒(méi)有顯著增加因此而帶來(lái)的操作數(shù).在PARSEC的小數(shù)據(jù)集上提升效果不夠明顯的原因可能是需要聚類的數(shù)據(jù)量少,需要的操作和內(nèi)存訪問(wèn)也較少.隨著數(shù)據(jù)集的增大,需要的操作和訪存次數(shù)也增多,充分體現(xiàn)EAOOP機(jī)制的帶寬優(yōu)勢(shì).

Fig. 12 Transaction throughput on real-world applications圖12 真實(shí)應(yīng)用下事務(wù)處理吞吐量圖

2) 總線延遲

EAOOP機(jī)制的總線延遲在真實(shí)應(yīng)用程序測(cè)試集上分別減少了14.1%,13.5%,0.6%,7.8%.在PARSEC上運(yùn)行小數(shù)據(jù)集時(shí),總線延遲幾乎沒(méi)有減少的原因可能是對(duì)持久性內(nèi)存的訪問(wèn)較少,且局部性較高,后續(xù)請(qǐng)求在訪問(wèn)內(nèi)存時(shí)受到HOOP中垃圾回收機(jī)制的影響也減少,因此性能提升不夠明顯.而隨著數(shù)據(jù)集的增大,后續(xù)請(qǐng)求增多,針對(duì)同一數(shù)據(jù)更新而被迫等待更新的數(shù)據(jù)增多,總線延遲也進(jìn)一步增大.而STREAM應(yīng)用程序得益于EAOOP機(jī)制將垃圾回收機(jī)制與總線執(zhí)行解耦,處理對(duì)持久性內(nèi)存的后續(xù)訪問(wèn)更加快速,使得其總線執(zhí)行性能提升明顯.

Fig. 13 Critical path latency on real-world applications圖13 真實(shí)應(yīng)用下總線延遲圖

Fig. 14 Write number on real-world applications圖14 真實(shí)應(yīng)用下寫數(shù)量圖

3) 寫數(shù)量

EAOOP機(jī)制的寫數(shù)量分別減少了7.4%,7.5%,26.1%,28.7%.這是由于HOOP中的垃圾回收機(jī)制為持久性內(nèi)存帶來(lái)了大量的寫,對(duì)于PARSEC這種應(yīng)用程序來(lái)說(shuō),在持久性內(nèi)存中的針對(duì)同一數(shù)據(jù)的更新次數(shù)更多,因此開(kāi)銷減少更多.而STREAM應(yīng)用程序的局部性較小,則垃圾回收寫入的數(shù)量在總的寫數(shù)量中的占比也更少,隨著數(shù)據(jù)集的增大,減少效果也不明顯,因此其寫數(shù)量的減少比例沒(méi)有PARSEC應(yīng)用程序大.

從實(shí)驗(yàn)結(jié)果可以看出,無(wú)論是微基準(zhǔn)程序,還是真實(shí)應(yīng)用程序上,本文提出的EAOOP機(jī)制在事務(wù)處理吞吐量、總線延遲和寫數(shù)量等方面始終具有更低的開(kāi)銷和更高的性能.平均而言,事務(wù)吞吐量增加了1.6倍,總線延遲和寫數(shù)量分別減少了27.3%和32.4%.

5 相關(guān)工作

本節(jié)從基于應(yīng)用、軟件和硬件的持久性內(nèi)存故障一致性保證機(jī)制3方面介紹相關(guān)工作.

1) 應(yīng)用層面基于具體場(chǎng)景,如特定的硬件模塊、索引結(jié)構(gòu)、數(shù)據(jù)類型等,將軟件和硬件機(jī)制結(jié)合,開(kāi)展針對(duì)性地優(yōu)化,使持久性內(nèi)存系統(tǒng)在故障一致性得到保證的前提下,性能在具體應(yīng)用方面得到顯著提升.

Zhao等人[25]提出了一種持久性內(nèi)存系統(tǒng)Kiln.針對(duì)現(xiàn)有持久性機(jī)制對(duì)性能影響過(guò)大的問(wèn)題,通過(guò)緩存設(shè)計(jì)了數(shù)據(jù)原子就地更新(atomic in-place update)和即時(shí)清理的提交(clean-on-commit)方法,降低了持久化開(kāi)銷.Zhao等人[31]提出了一種混合持久性內(nèi)存管理機(jī)制FIRM.針對(duì)現(xiàn)有讀寫調(diào)度機(jī)制只適用于非持久性應(yīng)用,造成了系統(tǒng)效率低下,同時(shí)無(wú)法有效處理密集流式寫數(shù)據(jù)的問(wèn)題,允許跨內(nèi)存庫(kù)更新持久內(nèi)存,同時(shí)設(shè)計(jì)了持久感知存儲(chǔ)調(diào)度系統(tǒng),從而顯著提高系統(tǒng)的并行性能.Kim等人[32]提出了一種基于持久性RAM的寫前日志機(jī)制NVWAL.針對(duì)持久性內(nèi)存中SQLite存在的順序控制和頻繁刷新帶來(lái)的開(kāi)銷,以及內(nèi)外存粒度不匹配的問(wèn)題,首先設(shè)計(jì)了寫前日志(write-ahead logging).接著,通過(guò)修改B樹(shù)結(jié)構(gòu),實(shí)現(xiàn)字節(jié)粒度差分日志,減少了日志I/O開(kāi)銷.然后,通過(guò)用戶堆管理各個(gè)元素塊和頁(yè)的狀態(tài),減少了內(nèi)核管理的開(kāi)銷.最后,設(shè)計(jì)了事務(wù)感知的存儲(chǔ)持久保證機(jī)制,將順序控制范圍擴(kuò)大到一組寫,減少了持久化開(kāi)銷.Hwang等人[33]提出了一種可忍耐瞬時(shí)不一致性的B+樹(shù).針對(duì)與緩存行粒度不匹配的故障原子寫,以及持久化過(guò)程中的順序控制開(kāi)銷過(guò)高的問(wèn)題,設(shè)計(jì)了一種FAST&FAIR算法.它分別實(shí)現(xiàn)了數(shù)據(jù)的就地更新(in-place update),以及無(wú)需日志記錄或?qū)憰r(shí)拷貝情況下的B+樹(shù)再平衡.同時(shí),設(shè)計(jì)了無(wú)鎖搜索算法,隔離了讀事務(wù),以允許系統(tǒng)對(duì)同一個(gè)樹(shù)節(jié)點(diǎn)的并發(fā)訪問(wèn),從而優(yōu)化了讀寫不對(duì)稱問(wèn)題.Cohen等人[34]提出了一種細(xì)粒度檢查點(diǎn)與緩存行日志結(jié)合的機(jī)制INCLL.針對(duì)持久化過(guò)程中數(shù)據(jù)更新順序保證延遲,從而導(dǎo)致總線執(zhí)行被阻礙的問(wèn)題,以及檢查點(diǎn)粒度和系統(tǒng)停頓開(kāi)銷過(guò)大的問(wèn)題,在Masstree這一數(shù)據(jù)結(jié)構(gòu)上設(shè)計(jì)了細(xì)粒度的檢查點(diǎn).同時(shí),將undo日志嵌入到Masstree葉節(jié)點(diǎn)的緩存行中,顯著降低了日志記錄和刷新緩存的成本.

這一類方法的優(yōu)點(diǎn)是性能較傳統(tǒng)故障一致性保證的方法提升較大,方案更加靈活多變;缺點(diǎn)是對(duì)硬件架構(gòu)和系統(tǒng)軟件的設(shè)計(jì)與結(jié)合機(jī)制更加復(fù)雜,需要考慮更多因素,實(shí)際應(yīng)用中面向的對(duì)象具有較大的局限性.

2) 軟件層面主要圍繞事務(wù)性內(nèi)存系統(tǒng)來(lái)開(kāi)展設(shè)計(jì),在持久性內(nèi)存系統(tǒng)中,研究者們主要依托日志、寫時(shí)復(fù)制和日志結(jié)構(gòu)等技術(shù),開(kāi)展了相關(guān)的研究.

Volos等人[26]提出了基于持久性事務(wù)內(nèi)存的系統(tǒng)Mnemosyne.針對(duì)如何創(chuàng)建和管理非易失性內(nèi)存,以及如何確保故障一致性,在內(nèi)存中設(shè)計(jì)了一個(gè)持久化區(qū)域?qū)崿F(xiàn)了對(duì)內(nèi)存的用戶模式訪問(wèn),同時(shí)設(shè)計(jì)了持久化原語(yǔ)pstatic支持持久性內(nèi)存編程.它的持久化內(nèi)存事務(wù)還支持創(chuàng)建和修改持久化數(shù)據(jù)結(jié)構(gòu),從而實(shí)現(xiàn)了一致性更新.Liu等人[11]提出了基于持久性事務(wù)內(nèi)存的系統(tǒng)DudeTM.針對(duì)現(xiàn)有事務(wù)的撤銷日志和重做日志中,存在的持久化內(nèi)存柵欄(mfence)保證開(kāi)銷,將2種日志模式結(jié)合.同時(shí)把事務(wù)分解為3個(gè)異步操作:①在影子內(nèi)存(shadow memory)中創(chuàng)建日志并更新數(shù)據(jù);②將日志寫入持久性內(nèi)存中;③在持久性內(nèi)存中更新數(shù)據(jù).Nalli等人[35]提出了基于持久性事務(wù)內(nèi)存的系統(tǒng)HOPS.通過(guò)設(shè)計(jì)WHISPER這一持久性內(nèi)存系統(tǒng)測(cè)試基準(zhǔn)套件,得出了現(xiàn)有軟件事務(wù)性內(nèi)存系統(tǒng)的4點(diǎn)結(jié)論.同時(shí)將持久化過(guò)程中的flush和mfence操作改進(jìn)為ofence和dfence操作,減少了強(qiáng)制刷新的開(kāi)銷,并實(shí)現(xiàn)了持久性和順序性的解耦,在保證一致性的同時(shí)降低了開(kāi)銷.Gu等人[36]提出了基于持久性事務(wù)內(nèi)存的系統(tǒng)Pisces.針對(duì)現(xiàn)有的持久性事務(wù)內(nèi)存編程模型對(duì)實(shí)際較多的讀操作優(yōu)化較少,進(jìn)而影響讀的效率的問(wèn)題,以及嚴(yán)格的持久化順序限制了并行操作,從而導(dǎo)致的擴(kuò)展性問(wèn)題,提出了改進(jìn)的MVCC機(jī)制DVCC.在增加了快照隔離(snapshot isolation)的同時(shí),減少了遍歷數(shù)據(jù)對(duì)象的開(kāi)銷.同時(shí)設(shè)計(jì)了3級(jí)commit機(jī)制,將數(shù)據(jù)對(duì)象的持久化和程序執(zhí)行的過(guò)程分離,使得事務(wù)commit的效率對(duì)總線上的程序運(yùn)行不會(huì)產(chǎn)生阻塞.Krishnan等人[37]提出了基于持久性事務(wù)內(nèi)存的系統(tǒng)TimeStone.針對(duì)現(xiàn)有持久性事務(wù)內(nèi)存存在的寫放大問(wèn)題和擴(kuò)展性瓶頸,設(shè)計(jì)了TOC Logging機(jī)制.它分別在易失性內(nèi)存中記錄事務(wù)日志(TLog),在非易失性內(nèi)存中記錄操作(OLog)和檢查點(diǎn)(CLog),從而減小了日志的體積和總的寫入開(kāi)銷.同時(shí)引入了MVCC機(jī)制,允許事務(wù)在一定范圍內(nèi)并行運(yùn)行,擴(kuò)大了系統(tǒng)的運(yùn)行規(guī)模.

軟件層面的方案總是會(huì)為持久性內(nèi)存帶來(lái)過(guò)量的寫,從追求更高的性能、更低的開(kāi)銷的角度來(lái)說(shuō),這一類型的方案代價(jià)較大.

3) 硬件層面主要是采用了軟件透明的思想,即在不需要修改應(yīng)用程序的情況下,為其提供由持久性內(nèi)存系統(tǒng)支持的故障一致性保證.

Kannan等人[38]提出了一種軟件透明的混合內(nèi)存系統(tǒng)NVM-Checkpointing.通過(guò)將操作系統(tǒng)中的檢查點(diǎn)技術(shù)引入到持久性內(nèi)存系統(tǒng)中,同時(shí)采用Shadow Buffering將部分?jǐn)?shù)據(jù)緩存到DRAM中,從而加快訪存速度,并解決了NVM寫入慢的問(wèn)題.此外,通過(guò)引入虛擬機(jī)遷移中常用的Pre-Copy機(jī)制,將DRAM中的部分?jǐn)?shù)據(jù),先于檢查點(diǎn)創(chuàng)建時(shí)間點(diǎn)寫入檢查點(diǎn)區(qū)域,從而緩解了檢查點(diǎn)帶來(lái)的系統(tǒng)暫停.Ren等人[27]提出了一種軟件透明的混合內(nèi)存系統(tǒng)ThyNVM.針對(duì)頁(yè)粒度和塊粒度、非易失和易失性內(nèi)存的性能差異,設(shè)計(jì)了雙模式檢查點(diǎn)(dual-scheme checkpointing)技術(shù),減少了因檢查點(diǎn)產(chǎn)生的系統(tǒng)停頓.同時(shí)設(shè)計(jì)了協(xié)調(diào)不同粒度模式、轉(zhuǎn)換數(shù)據(jù)狀態(tài)的管理方法,使得系統(tǒng)始終可以自動(dòng)權(quán)衡最佳模式.Wei等人[39]提出了一種軟件透明的混合內(nèi)存系統(tǒng)NICO.針對(duì)檢查點(diǎn)創(chuàng)建和數(shù)據(jù)對(duì)象映射帶來(lái)的性能開(kāi)銷問(wèn)題,以及傳統(tǒng)持久化方法帶來(lái)的性能浪費(fèi)問(wèn)題,在持久化內(nèi)存系統(tǒng)中設(shè)計(jì)了持久化緩沖區(qū),將持久化操作放在后臺(tái)進(jìn)行.同時(shí)設(shè)計(jì)了輕量級(jí)檢查點(diǎn)機(jī)制,加之寫合并機(jī)制,只需要刷新和修改小部分?jǐn)?shù)據(jù)即可實(shí)現(xiàn)一致性保證.Nguyen等人[40]提出了一種軟件透明的持久性內(nèi)存系統(tǒng)PiCL.針對(duì)現(xiàn)有軟件事務(wù)接口、持久化對(duì)象和多版本管理的性能損耗、日志隨機(jī)訪問(wèn),從而產(chǎn)生NVM開(kāi)銷過(guò)大和局部性較低的問(wèn)題,設(shè)計(jì)了多版本undo日志方法,允許多個(gè)時(shí)間周期并行執(zhí)行undo日志.同時(shí),設(shè)計(jì)了緩存驅(qū)動(dòng)的日志機(jī)制,以優(yōu)化傳統(tǒng)的日志讀寫順序.最后,通過(guò)異步緩存掃描方法將機(jī)制整合,減少了一致性保證開(kāi)銷.Cai等人[13]提出了一種軟件透明的混合內(nèi)存系統(tǒng)HOOP.針對(duì)現(xiàn)有軟件事務(wù)方法在NVM上的大量寫入和帶寬利用等問(wèn)題,設(shè)計(jì)了異地更新機(jī)制.它利用OOP緩沖區(qū),將更新后的數(shù)據(jù)打包后寫入NVM,減小了數(shù)據(jù)體積并增加NVM帶寬利用率.同時(shí)設(shè)計(jì)了OOP區(qū)域和Home區(qū)域,利用垃圾回收機(jī)制更新持久性內(nèi)存中的數(shù)據(jù),保證了故障一致性.

硬件層面的方案雖然依賴于架構(gòu)的特性,但更加靈活,可以充分發(fā)揮持久性內(nèi)存的優(yōu)點(diǎn),也能彌補(bǔ)軟件層面對(duì)順序性和持久化過(guò)程改進(jìn)能力不足的問(wèn)題,同時(shí)也因其不需要用戶層面的應(yīng)用程序?qū)iT去適配接口而減輕了程序員的壓力,更具研究?jī)r(jià)值和應(yīng)用空間.

6 結(jié) 論

現(xiàn)有研究中,針對(duì)持久性內(nèi)存系統(tǒng)的故障一致性保證機(jī)制,還存在時(shí)間和空間維度的不足,在未來(lái)持久性內(nèi)存系統(tǒng)有望大規(guī)模推廣應(yīng)用的前景下,還存在一定的優(yōu)化空間.針對(duì)這一問(wèn)題,本文提出了耐久性感知的持久性內(nèi)存異地更新機(jī)制,通過(guò)耐久性感知的內(nèi)存管理機(jī)制,保證了系統(tǒng)的故障一致性,通過(guò)輕量級(jí)垃圾回收機(jī)制,進(jìn)一步減少了系統(tǒng)開(kāi)銷和空間浪費(fèi).此外,本文還設(shè)計(jì)了系統(tǒng)恢復(fù)機(jī)制和讀寫流程.測(cè)試結(jié)果表明,EAOOP機(jī)制下的系統(tǒng)從時(shí)間維度和空間維度優(yōu)化了現(xiàn)有研究,具有更高的性能和更少的開(kāi)銷.未來(lái),將考慮通過(guò)基于Optane系列持久性內(nèi)存的真實(shí)硬件測(cè)試,進(jìn)一步驗(yàn)證該機(jī)制的優(yōu)異性能.

作者貢獻(xiàn)聲明:蔡長(zhǎng)興提出了算法思路、實(shí)驗(yàn)并撰寫論文;杜亞娟指導(dǎo)研究方案設(shè)計(jì)并修改論文;周泰宇協(xié)助設(shè)計(jì)實(shí)驗(yàn)方案.

猜你喜歡
持久性日志一致性
商用車企業(yè)的3C零部件一致性管控新模式
離散異構(gòu)線性多智能體系統(tǒng)的輸出一致性
商用車CCC認(rèn)證一致性控制計(jì)劃應(yīng)用
一名老黨員的工作日志
讀扶貧日志
基于Paxos的分布式一致性算法的實(shí)現(xiàn)與優(yōu)化
雅皮的心情日志
雅皮的心情日志
鋼鐵行業(yè)持久性有機(jī)污染物的生成與控制研究
淺議城市照明建設(shè)應(yīng)注意的問(wèn)題
乌兰浩特市| 阿合奇县| 进贤县| 清原| 日土县| 上杭县| 隆德县| 阜南县| 禹州市| 五常市| 孟津县| 西昌市| 乌苏市| 北辰区| 元朗区| 包头市| 友谊县| 富裕县| 丰镇市| 左权县| 杨浦区| 瓦房店市| 宁晋县| 嘉黎县| 浠水县| 海兴县| 古丈县| 门头沟区| 榕江县| 定襄县| 诸城市| 阿合奇县| 闽侯县| 伽师县| 鸡西市| 南乐县| 梓潼县| 蒙自县| 岑巩县| 湘阴县| 宜都市|