亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        新型內(nèi)存硬件環(huán)境中的事務(wù)管理系統(tǒng)綜述

        2023-03-27 13:39:22梁文凱李詩逸王鴻鵬
        關(guān)鍵詞:一致性機(jī)制

        胡 浩 梁文凱 李詩逸 王鴻鵬,2 夏 文,2

        1(哈爾濱工業(yè)大學(xué)(深圳)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 廣東深圳 518055)

        2(廣東省安全智能新技術(shù)重點(diǎn)實(shí)驗(yàn)室(哈爾濱工業(yè)大學(xué)(深圳))廣東深圳 518055)

        事務(wù)作為支撐大型復(fù)雜場(chǎng)景的技術(shù)基石,以一個(gè)有限邏輯執(zhí)行單元為現(xiàn)代應(yīng)用技術(shù)服務(wù)提供強(qiáng)有力的可靠性保障[1].事務(wù)是構(gòu)建數(shù)據(jù)管理應(yīng)用的核心,后來這一理念被廣泛運(yùn)用于數(shù)據(jù)庫系統(tǒng)中,為數(shù)據(jù)操作提供完整性、一致性、并發(fā)性和恢復(fù)性4 個(gè)基本屬性[2].傳統(tǒng)的事務(wù)管理系統(tǒng)以硬盤(機(jī)械硬盤(hard disk drive,HDD)和固態(tài)硬盤(solid state drive,SSD))為數(shù)據(jù)存儲(chǔ)中心,借助主存(dynamic RAM,DRAM)低延遲和隨機(jī)訪問速度快的特性緩存部分?jǐn)?shù)據(jù)操作的關(guān)鍵信息,加速事務(wù)語義處理.但是,隨著數(shù)據(jù)存儲(chǔ)量的爆炸性增長以及業(yè)務(wù)種類的擴(kuò)增,以O(shè)racle[3],SQL Server[4]為代表的傳統(tǒng)關(guān)系型數(shù)據(jù)庫已經(jīng)無法滿足工業(yè)界的需求,低延遲[5]、計(jì)算密集型[6]、I/O 密集型[7]等新型應(yīng)用正在不斷涌現(xiàn).一些學(xué)者提出非關(guān)系型數(shù)據(jù)庫,如Redis[8],HBase[9],MongoDB[10],Neo4J[11]等適用于聯(lián)機(jī)分析處理(on-line analytic processing,OLAP)[12]的新型數(shù)據(jù)庫.數(shù)據(jù)庫系統(tǒng)中的事務(wù)允許多個(gè)操作并發(fā)執(zhí)行并保證數(shù)據(jù)狀態(tài)的一致性,但是通常數(shù)據(jù)庫中的一個(gè)事務(wù)包含多個(gè)指令.由于傳統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù)存儲(chǔ)在磁盤上,因此事務(wù)執(zhí)行周期較長.而軟件事務(wù)內(nèi)存(soft transaction memory,STM)[13]旨在簡化并行編程模型,替代基于鎖的數(shù)據(jù)同步方案,高效服務(wù)上層應(yīng)用程序,使應(yīng)用程序得以簡化.并且,軟件事務(wù)內(nèi)存與數(shù)據(jù)結(jié)構(gòu)中每個(gè)模塊的加載和存儲(chǔ)相處更為融洽,從而使應(yīng)用程序維護(hù)更簡便.軟件事務(wù)內(nèi)存與數(shù)據(jù)庫中的事務(wù)不同之處在于前者研究的重點(diǎn)是并行編程模型范圍內(nèi)的內(nèi)存訪問效率,并且不保證持久性.

        為了提高軟件事務(wù)內(nèi)存的性能,先前的工作利用額外的數(shù)據(jù)結(jié)構(gòu)、內(nèi)存腳印等機(jī)制[14-15]減少磁盤訪問,這些機(jī)制在事務(wù)執(zhí)行時(shí)產(chǎn)生較高的運(yùn)行時(shí)開銷.近年來,為了最小化軟件事務(wù)內(nèi)存的開銷,硬件事務(wù)內(nèi)存(hardware transactional memory,HTM)[16-17]逐漸獲得了研究人員的關(guān)注.HTM 通過一系列事務(wù)相關(guān)的指令集在CPU 核心中的專有緩存區(qū)域追蹤事務(wù)的讀、寫集合,并使用通用的緩存一致性(MESI)協(xié)議保持事務(wù)的修改狀態(tài),利用硬件檢測(cè)事務(wù)沖突并中止相關(guān)事務(wù)執(zhí)行.英特爾的事務(wù)同步擴(kuò)展(transaction synchronization extensions,TSX)[18]是一種商業(yè)HTM 機(jī)制的實(shí)現(xiàn),于2013 年添加至CPU 處理器 中.TSX 分 為2 種實(shí)現(xiàn)模型:1)硬件鎖 定省略(hardware lock elision,HLE)允許CPU 不對(duì)事務(wù)操作對(duì)象集合的鎖進(jìn)行持久化,從而致使資源在程序模型視角是空閑的,進(jìn)一步提高性能;2)受限事務(wù)內(nèi)存(restricted transactional memory,RTM)是HLE 的替代實(shí)現(xiàn),它可以為應(yīng)用開發(fā)者提供靈活的軟件接口,通過相應(yīng)的指令集為事務(wù)代碼指定執(zhí)行區(qū)域,這一實(shí)現(xiàn)模型被廣泛應(yīng)用于實(shí)際場(chǎng)景中.

        HTM 無法提供數(shù)據(jù)的非易失性,因此仍然要借助持久化設(shè)備保證數(shù)據(jù)的完整性.后摩爾時(shí)代意味著傳統(tǒng)的磁盤存儲(chǔ)設(shè)備已經(jīng)到達(dá)了發(fā)展瓶頸,無法高速迭代產(chǎn)品.在這種不平衡的現(xiàn)狀下,主存(DRAM)和持久化存儲(chǔ)介質(zhì)之間的I/O 帶寬和延遲會(huì)變得越來越大,難以滿足上層應(yīng)用程序的性能需求.工業(yè)界和學(xué)術(shù)界開始尋求其他新型存儲(chǔ)技術(shù)的突破,提出了一系列的新型非易失性存儲(chǔ)器,如相變存儲(chǔ)器(phase change memory,PCM)[19]、電阻式存儲(chǔ)器(resistive RAM,ReRAM)[20]、自旋傳遞扭矩磁性存儲(chǔ)器(spin torque transfer magnetic RAM,STT-MRAM)[21]等.英特爾在2019 年發(fā)布了首款商用傲騰非易失性內(nèi)存(optane DC persistent memory,Optane PM)[22],該介質(zhì)利用一種類似PCM 的技術(shù)——3D XPoint,打破了硬盤和內(nèi)存之間的柵欄屏障,提供高密度、大容量的非易失性存儲(chǔ).Optane PM 可以直接放置在內(nèi)存總線上,使用DDR-T 協(xié)議與內(nèi)存控制器交互通信,允許程序使用異步命令同時(shí)保證數(shù)據(jù)時(shí)序,并且事務(wù)可以在非易失性內(nèi)存控制器中重新排序.

        然而,新型硬件的廣泛應(yīng)用使得傳統(tǒng)的事務(wù)管理系統(tǒng)面臨諸多挑戰(zhàn):1)HTM 受限于L1 緩存大小的限制,極易產(chǎn)生事務(wù)沖突,如何在解決事務(wù)沖突的前提下減少事務(wù)處理延遲是一個(gè)挑戰(zhàn).2)持久化內(nèi)存為事務(wù)管理系統(tǒng)提供相較于傳統(tǒng)持久化存儲(chǔ)介質(zhì)低1~2 個(gè)數(shù)量級(jí)的訪問延遲,但是直接替換現(xiàn)有事務(wù)管理系統(tǒng)中的持久化存儲(chǔ)介質(zhì)會(huì)無法發(fā)揮持久化內(nèi)存的性能特點(diǎn).3)為了保證數(shù)據(jù)的一致性,事務(wù)管理系統(tǒng)往往通過額外寫機(jī)制維護(hù)數(shù)據(jù)持久化順序,這容易成為新型硬件中事務(wù)管理系統(tǒng)的性能瓶頸,可能面臨新的可擴(kuò)展性難題.

        近年來,新型硬件中的事務(wù)管理系統(tǒng)已經(jīng)成為了研究熱點(diǎn),研究人員聚焦于如何保證事務(wù)處理系統(tǒng)的高并發(fā)、高可擴(kuò)展性.本文梳理了近年來基于新型硬件的事務(wù)管理系統(tǒng)研究工作.首先,從新型硬件在體系結(jié)構(gòu)中的層次架構(gòu)、事務(wù)并發(fā)控制協(xié)議、軟硬件協(xié)同設(shè)計(jì)、崩潰一致性4 個(gè)方面闡述相關(guān)概念及問題.接著,對(duì)事務(wù)管理系統(tǒng)所使用的新型硬件進(jìn)行分類,從事務(wù)性能、并發(fā)性、可擴(kuò)展性等方面論述相關(guān)工作,明確基于新型硬件的事務(wù)管理系統(tǒng)設(shè)計(jì)目標(biāo).最后,對(duì)現(xiàn)有基于新型硬件事務(wù)管理系統(tǒng)設(shè)計(jì)的缺陷和瓶頸進(jìn)行總結(jié),指出基于新型硬件的事務(wù)管理系統(tǒng)的未來研究方向和具有價(jià)值性的設(shè)計(jì)原則.

        1 新型硬件中事務(wù)管理系統(tǒng)的機(jī)遇與挑戰(zhàn)

        新型硬件在計(jì)算機(jī)體系結(jié)構(gòu)中的層次架構(gòu)如圖1所示,本文聚焦于新型硬件對(duì)現(xiàn)有的事務(wù)管理系統(tǒng)的影響,因此僅從硬件本身帶來的挑戰(zhàn)和性能提升進(jìn)行分析描述.

        HTM 為事務(wù) 提供原子性(atomicity)、一致性(consistency)、隔離性(isolation)屬性.為了保證數(shù)據(jù)在共享內(nèi)存中操作原語的原子性,程序編程模型通常采用鎖機(jī)制確保原子性.由于該機(jī)制在數(shù)據(jù)爭(zhēng)用時(shí)會(huì)阻塞其他進(jìn)程處理,并且同步開銷較大,HTM以更簡單的事務(wù)編程模型允許事務(wù)推測(cè)性執(zhí)行,從而提高并發(fā)性能.

        由于目前商用的持久化內(nèi)存較少,因此本文的新型持久化內(nèi)存硬件特性以傲騰非易失性內(nèi)存(Optane PM)為例進(jìn)行描述,后文若描述非易失性內(nèi)存對(duì)象不是Optane PM,則用持久化內(nèi)存替代.Optane PM 提供低延遲的數(shù)據(jù)訪問,并且保證在機(jī)器發(fā)生意外崩潰時(shí)保證數(shù)據(jù)的完整性.傲騰非易失性內(nèi)存具有3 種模式:Memory 模式、AppDirect 模式和混合內(nèi)存模式.Memory 模式與DRAM 相同,目的是為上層程序應(yīng)用提供高速、大容量的易失性存儲(chǔ);AppDirect模式具有與硬盤類似的特性,它可以為上層程序應(yīng)用提供更低延遲的持久化存儲(chǔ);混合內(nèi)存模式下,用戶可以根據(jù)需求對(duì)Optane PM 空間進(jìn)行區(qū)域劃分,既可以提供大容量內(nèi)存,又可以提供低延遲的持久化存儲(chǔ).

        上述HTM 和Optane PM 的特性為事務(wù)管理系統(tǒng)帶來了新的機(jī)遇,本文針對(duì)HTM 和Optane PM 特性對(duì)上層應(yīng)用程序的性能增益進(jìn)行評(píng)估,如表1 所示.

        Fig.1 Architecture of the new hardware hierarchy圖1 新型硬件層次架構(gòu)

        Table 1 Performance Evaluation of New Hardware表1 新型硬件的性能評(píng)估

        從表1 中可以觀察到,Optane PM 在延遲和吞吐上略差于DRAM,但是它在應(yīng)用程序的性能增益上遠(yuǎn)超過傳統(tǒng)的硬盤存儲(chǔ).這是由于應(yīng)用程序無需復(fù)雜的I/O 路徑,通過load/store 指令直接在Optane PM上讀寫數(shù)據(jù).圖2 展示了Optane PM 在存儲(chǔ)層次結(jié)構(gòu)中的3 種不同訪問路徑類型:1)Optane PM 作為主存和二級(jí)存儲(chǔ)之間的中間層,可以降低數(shù)據(jù)的訪問延遲并提高系統(tǒng)整體吞吐,相較于價(jià)格高昂的主存,可以有效降低數(shù)據(jù)總擁有成本.2)將主存和Optane PM 放置在同一層,使得Optane PM 既可以擁有類似主存高速隨機(jī)訪問的優(yōu)勢(shì),又可以提供非易失性存儲(chǔ).3)將Optane PM 放在二級(jí)存儲(chǔ)層次,但是此架構(gòu)下的數(shù)據(jù)關(guān)鍵路徑可以繞過主存,使用相應(yīng)的指令集直接對(duì)Optane PM 上的數(shù)據(jù)進(jìn)行訪問,僅適用于數(shù)據(jù)需要實(shí)時(shí)持久化存儲(chǔ)并對(duì)延遲有一定容忍度的場(chǎng)景.

        Fig.2 Different memory organization layout architectures圖2 不同的內(nèi)存組織布局架構(gòu)

        研究人員對(duì)Optane PM 特性進(jìn)行深入測(cè)試[23-24],發(fā)現(xiàn)Optane PM 中的持久域無需額外的電池就可以提供系統(tǒng)崩潰或者意外斷電后的數(shù)據(jù)完整性服務(wù),并且可以保證8 B 的原子寫,即只要程序以8 B 的粒度寫入Optane PM,無需額外的數(shù)據(jù)結(jié)構(gòu)即可保證數(shù)據(jù)一致性.如圖1 中的ADR 區(qū)域,只要數(shù)據(jù)進(jìn)入ADR 區(qū)域即可保證數(shù)據(jù)完整性,該區(qū)域已經(jīng)在目前支持Optane PM 的第2 代英特爾至強(qiáng)可擴(kuò)展CPU 上得到廣泛支持;eADR 區(qū)域與ADR 的區(qū)別之處在于它的持久域包括整個(gè)內(nèi)存層次架構(gòu)及CPU 緩存,只要數(shù)據(jù)進(jìn)入CPU 緩存中就可以保證數(shù)據(jù)的完整性,不會(huì)因?yàn)橄到y(tǒng)崩潰以及意外斷電而導(dǎo)致數(shù)據(jù)丟失.

        如果將Optane PM 直接放置在現(xiàn)有的應(yīng)用程序上,具有3 點(diǎn)局限性:1)讀寫不對(duì)稱,已有的研究[23-24]表明在最理想的測(cè)試環(huán)境下,Optane PM 的順序讀延遲是DRAM 的2 倍,隨機(jī)讀延遲是DRAM 的3 倍,但是Optane PM 使用專有指令集的寫延遲與DRAM 相差不大.2)訪問粒度不匹衡,Optane PM 的帶寬不能隨著訪問粒度的增大而線性增長,研究表明小于256 B 的隨機(jī)訪問Optane PM 會(huì)引起寫放大,導(dǎo)致Optane PM 的使用壽命減少[23-24].3)可擴(kuò)展性差,Optane PM 的吞吐率無法隨著線程數(shù)量的增長而線性擴(kuò)展,在高并發(fā)場(chǎng)景下,這將會(huì)造成大量的資源浪費(fèi),并且產(chǎn)生性能瓶頸.

        隨著新型硬件商業(yè)化應(yīng)用的興起,事務(wù)管理系統(tǒng)的發(fā)展面臨新的挑戰(zhàn),主要包括2 個(gè)方面:

        1)HTM 的區(qū)域容量以及并發(fā)控制協(xié)議增加了事務(wù)中止概率

        HTM 可以提供硬件級(jí)別的事務(wù)沖突檢測(cè),并減少各個(gè)核心之間的鎖同步開銷.在HTM 中,事務(wù)以類似樂觀并發(fā)控制協(xié)議(OCC)的方式執(zhí)行.然而,互聯(lián)網(wǎng)正在重塑我們的日常生活,各種新型業(yè)務(wù)需求正在爆炸性增長,大事務(wù)和長事務(wù)等類型的事務(wù)所讀取或?qū)懭氲木彺嫘袛?shù)量會(huì)溢出HTM 區(qū)域.因?yàn)镠TM 中的事務(wù)在執(zhí)行時(shí)是在CPU 核心的私有核心區(qū)域中處理.如果此時(shí)事務(wù)發(fā)生沖突,則有可能中止其他對(duì)相同緩存行讀取的事務(wù),從而造成資源浪費(fèi).此外,事務(wù)的沖突檢測(cè)、沖突解決時(shí)機(jī)以及一致性保證也會(huì)制約事務(wù)管理系統(tǒng)的吞吐性能.僅使用單個(gè)核心的HTM 可以避免核間數(shù)據(jù)通信,減少事務(wù)沖突中止率,但是這種方案無法高度并行化.因此,如何擴(kuò)展HTM 區(qū)域并選擇合適的沖突檢測(cè)時(shí)機(jī),是設(shè)計(jì)硬件事務(wù)內(nèi)存驅(qū)動(dòng)的事務(wù)管理系統(tǒng)的重要挑戰(zhàn).

        2)Optane PM 的硬件特性限制了事務(wù)系統(tǒng)的性能

        Optane PM 的延遲、吞吐特性會(huì)限制現(xiàn)有的事務(wù)管理系統(tǒng)的性能.相比較于傳統(tǒng)事務(wù)管理系統(tǒng)中的磁盤訪問方式,Optane PM 已經(jīng)將訪問延遲降低至納秒級(jí)別.從理論層面分析得知事務(wù)管理系統(tǒng)沒有完全發(fā)揮Optane PM 的性能極限,主要原因有2 個(gè)方面:一方面,Optane PM 可以提供持久化存儲(chǔ),但是它無法保證系統(tǒng)崩潰之后較大數(shù)據(jù)粒度存儲(chǔ)至Optane PM 上的數(shù)據(jù)一致性.而且,由于Optane PM 的讀寫不對(duì)稱以及訪問粒度等硬件本身特性的限制,目前現(xiàn)有的機(jī)制如日志等會(huì)造成大量的帶寬浪費(fèi)并減少Optane PM 的使用壽命.另一方面,當(dāng)前的事務(wù)并發(fā)控制協(xié)議需要重新設(shè)計(jì)沖突檢測(cè)策略以及持久化順序.Optane PM 無法隨著現(xiàn)代多核架構(gòu)中內(nèi)核數(shù)量的增加而線性擴(kuò)展事務(wù)吞吐性能.并且Optane PM 可以為HTM 提供持久化存儲(chǔ),但是當(dāng)前的并發(fā)控制協(xié)議無法充分發(fā)揮硬件級(jí)別的性能以及Optane PM 訪問模式特性也會(huì)對(duì)HTM 進(jìn)行制約,直接將二者結(jié)合會(huì)因?yàn)槭聞?wù)執(zhí)行和存儲(chǔ)關(guān)鍵路徑上的等待問題而降低事務(wù)吞吐性能.

        2 新型硬件環(huán)境下的事務(wù)相關(guān)概念

        本文將從事務(wù)并發(fā)機(jī)制、軟硬協(xié)同、事務(wù)崩潰恢復(fù)機(jī)制3 個(gè)維度著手進(jìn)行綜述.事務(wù)并發(fā)機(jī)制是保證事務(wù)性能的軟件基礎(chǔ),軟硬協(xié)同是設(shè)計(jì)高性能事務(wù)管理系統(tǒng)的重要方向,事務(wù)崩潰一致性機(jī)制是保證事務(wù)管理系統(tǒng)的可用性.

        2.1 事務(wù)并發(fā)控制協(xié)議

        并發(fā)控制協(xié)議是事務(wù)管理系統(tǒng)的重要組件,其代表允許事務(wù)并發(fā)執(zhí)行的最大限度為多少,而隔離級(jí)別則控制事務(wù)并發(fā)執(zhí)行的性能.事務(wù)的隔離級(jí)別一般可以分為強(qiáng)、弱2 種級(jí)別.事務(wù)中強(qiáng)隔離級(jí)別為串行化(serializable),它意味著一次僅執(zhí)行一個(gè)事務(wù),一個(gè)事務(wù)結(jié)束之后才處理下一個(gè)事務(wù).雖然這種隔離級(jí)別無需額外的機(jī)制保障數(shù)據(jù)一致性,但是它會(huì)制約事務(wù)管理系統(tǒng)的擴(kuò)展性,這與語義模型的并發(fā)性趨勢(shì)相違背.弱隔離級(jí)別可以分為快照隔離(snapshot isolation,SI)和可串行化快照隔離級(jí)別(serializable snapshot isolation,SSI).快照隔 離級(jí)別 指的是事務(wù)在讀數(shù)據(jù)時(shí)并沒有讀取最新的數(shù)據(jù)項(xiàng),而是選擇某個(gè)時(shí)間點(diǎn)具有一致性保障的數(shù)據(jù)快照(副本),目的是減少等待其他并發(fā)事務(wù)完成的時(shí)間.對(duì)于此隔離級(jí)別下的寫事務(wù),事務(wù)容易發(fā)生“寫傾斜”異常.因?yàn)榭煺崭綦x級(jí)別并發(fā)執(zhí)行的2 個(gè)事務(wù)存在修改同一個(gè)數(shù)據(jù)項(xiàng)的可能性,但是它們無法獲取雙方事務(wù)更新后的數(shù)據(jù)項(xiàng)狀態(tài),從而無法保證數(shù)據(jù)一致性.可串行化快照隔離追蹤并發(fā)執(zhí)行多個(gè)事務(wù)之間發(fā)生的沖突(讀-寫、寫-讀和寫-寫沖突),一旦檢測(cè)到?jīng)_突事務(wù),系統(tǒng)則選擇中止其中一個(gè)事務(wù)達(dá)到可串行化執(zhí)行的目的.

        以上的并發(fā)控制協(xié)議隔離級(jí)別的實(shí)現(xiàn)機(jī)制分為基于鎖的協(xié)議和基于時(shí)間戳的協(xié)議.基于鎖的并發(fā)控制協(xié)議的典型代表是數(shù)據(jù)庫中的2 階段鎖(two-phase locking,2PL).2PL 在事務(wù)的執(zhí)行過程中分為2 個(gè)階段:1)增長階段,這個(gè)階段事務(wù)獲取相應(yīng)讀寫的數(shù)據(jù)項(xiàng),并對(duì)其上鎖,阻塞其他事務(wù)對(duì)數(shù)據(jù)項(xiàng)操作.2)縮減階段,這個(gè)階段釋放增長階段獲取的數(shù)據(jù)鎖,并不獲取新的鎖.基于時(shí)間戳的并發(fā)控制協(xié)議對(duì)每個(gè)事務(wù)賦予唯一的時(shí)間戳,通過時(shí)間戳的大小避免并發(fā)事務(wù)之間的沖突,保證事務(wù)可串行化執(zhí)行.

        根據(jù)事務(wù)沖突類型以及并發(fā)控制協(xié)議的實(shí)現(xiàn)機(jī)制,并發(fā)控制協(xié)議可以分為悲觀并發(fā)控制、客觀并發(fā)控制和樂觀并發(fā)控制.2PL 就是典型的悲觀并發(fā)控制協(xié)議,適用于解決讀-寫和寫-寫沖突.但是悲觀并發(fā)控制對(duì)事務(wù)操作數(shù)據(jù)單元集合中的每個(gè)數(shù)據(jù)項(xiàng)都需要獲取鎖,而頻繁的鎖管理操作會(huì)降低事務(wù)處理性能.因此,客觀并發(fā)控制為了減少鎖開銷,使用基于時(shí)間戳的機(jī)制.每個(gè)事務(wù)開始時(shí)會(huì)獲取唯一的時(shí)間戳作為事務(wù)的開始標(biāo)志,通過時(shí)間戳的邏輯順序,事務(wù)管理系統(tǒng)可以保證事務(wù)的讀寫操作有序執(zhí)行.樂觀并發(fā)控制認(rèn)為事務(wù)執(zhí)行期間不會(huì)相互干擾,因此事務(wù)可以在執(zhí)行期間不獲取任何鎖,直接對(duì)事務(wù)操作邏輯單元集合中的數(shù)據(jù)項(xiàng)進(jìn)行更新.但是在事務(wù)提交之前,樂觀并發(fā)控制會(huì)驗(yàn)證讀寫數(shù)據(jù)是否存在沖突.如果驗(yàn)證失敗,則中止事務(wù)并回滾相關(guān)數(shù)據(jù)項(xiàng);否則說明事務(wù)執(zhí)行期間沒有任何沖突,則可以提交事務(wù)并持久化更新相關(guān)數(shù)據(jù)項(xiàng).

        HTM 的思想是“盡力而為”,因此當(dāng)事務(wù)在硬件層面沒有成功提交時(shí),需要使用軟件回退保證事務(wù)的執(zhí)行進(jìn)度.通常采用全局鎖序列化執(zhí)行未能成功執(zhí)行的事務(wù).根據(jù)沖突檢測(cè)時(shí)機(jī),現(xiàn)有的方案分為2 類:急切檢測(cè)和惰性檢測(cè).急切檢測(cè)指的是在硬件事務(wù)啟動(dòng)后立刻檢查全局鎖的狀態(tài),如果發(fā)現(xiàn)已經(jīng)上鎖,則該事務(wù)立刻中止;否則,事務(wù)則在硬件路徑上執(zhí)行.并且,事務(wù)追蹤鎖的更新狀態(tài),一旦發(fā)現(xiàn)其他事務(wù)獲取鎖,則中止事務(wù).但是,急切檢測(cè)機(jī)制無法同時(shí)執(zhí)行推測(cè)性事務(wù)和軟件回退路徑上的事務(wù),而惰性檢測(cè)則是在事務(wù)提交之前獲取鎖狀態(tài),類似于樂觀并發(fā)控制算法.HTM 通過黑盒和強(qiáng)原子性操作保證事務(wù)的一致性.但是當(dāng)發(fā)生沖突時(shí),非事務(wù)性訪問的位置都在事務(wù)性訪問之前進(jìn)行排序,從惰性檢測(cè)的角度無法觀察到數(shù)據(jù)不一致的狀態(tài),從而導(dǎo)致事務(wù)錯(cuò)誤提交.

        2.2 事務(wù)軟硬協(xié)同設(shè)計(jì)

        隨著新型硬件技術(shù)的發(fā)展,僅使用新型硬件直接替代傳統(tǒng)事務(wù)管理系統(tǒng)中持久化介質(zhì)的技術(shù)路線并不能發(fā)揮硬件本身的最大性能.原因是新型硬件的特性無法透明支持上層程序應(yīng)用,導(dǎo)致軟件棧限制了事務(wù)吞吐性能,具體原因?yàn)椋?/p>

        研究表明[23-24]Optane PM 內(nèi)部的訪問粒度為256 B,這與CPU 中的緩存行粒度64 B 不匹配,如果不對(duì)程序編程模型進(jìn)行重構(gòu),將造成大量的寫放大.并且第3 代英特爾可擴(kuò)展至強(qiáng)CPU 提供了有效的緩存行刷新(CLFLUSH)、優(yōu)化的緩存行刷新(CLFUSHOPT)、緩存行寫回(CLWB)、非臨時(shí)存儲(chǔ)(NT-STORE)和內(nèi)存屏障(FENCE)原語.CLFLUSH 指令能夠?qū)⒅付▋?nèi)存地址的緩存行從CPU 緩存中淘汰,并向所有CPU核通知.如果該緩存行是臟數(shù)據(jù),則在緩存行失效前寫回主存中.CLFUSHOPT 指令則是CLFLUSH 的優(yōu)化版,其支持在訪問不同的緩存行時(shí),可以不按照順序淘汰緩存行.CLWB 作為目前只有第3 代英特爾可擴(kuò)展至強(qiáng)CPU 支持的指令,它的功能與CLFLUSH 相似,但是在緩存行的數(shù)據(jù)寫回主存之后,該緩存行仍顯示為未被修改的狀態(tài),即寫回?cái)?shù)據(jù)后不讓緩存行失效.NT-STORE 指令可以使數(shù)據(jù)繞過緩存,直接將數(shù)據(jù)寫入Optane PM.而FENCE 的功能則是保證訪存指令按照程序的邏輯順序執(zhí)行,即在高并發(fā)場(chǎng)景中,多個(gè)load/store 指令對(duì)Optane PM 上的數(shù)據(jù)進(jìn)行并發(fā)操作,緩存行刷回可能會(huì)并行執(zhí)行,導(dǎo)致臟緩存行無法保證有序?qū)懟?,這時(shí)則需要FENCE 指令來約束緩存行的寫回順序.但是,Optane PM 相關(guān)的指令如CLFLUSH 和FENCE 在保證串行持久化時(shí)會(huì)產(chǎn)生較大的持久化開銷,降低系統(tǒng)性能.

        HTM 作為底層硬件級(jí)別的沖突解決方案,其可以與Optane PM 結(jié)合.但是由于高速緩存行逐出策略具有黑盒屬性,Optane PM 的指令集無法對(duì)高速緩存行的狀態(tài)進(jìn)行有效推測(cè),從而可能出現(xiàn)事務(wù)數(shù)據(jù)持久化順序無法受到指令集約束的情況.

        2.3 崩潰一致性

        由于Optane PM 具有異步刷新功能,加載至ADR區(qū)域的數(shù)據(jù)并不會(huì)丟失.在系統(tǒng)意外斷電或者程序發(fā)生崩潰錯(cuò)誤后是否可以維護(hù)數(shù)據(jù)一致性,是衡量事務(wù)管理系統(tǒng)可靠性的一個(gè)重要指標(biāo).即使事務(wù)管理系統(tǒng)發(fā)生故障,系統(tǒng)在恢復(fù)后仍然可以訪問正確狀態(tài)的數(shù)據(jù).但是在實(shí)際程序語義模型中,由于一個(gè)事務(wù)內(nèi)部可能需要修改多個(gè)數(shù)據(jù)項(xiàng),系統(tǒng)崩潰故障可能發(fā)生在事務(wù)部分?jǐn)?shù)據(jù)項(xiàng)已經(jīng)完成變更狀態(tài)并持久化之后.而故障恢復(fù)模型可以在系統(tǒng)恢復(fù)時(shí)追蹤數(shù)據(jù)狀態(tài),將數(shù)據(jù)恢復(fù)至正確狀態(tài).

        持久化模型保證事務(wù)管理系統(tǒng)的崩潰一致性,但是一致性模型規(guī)定的持久化順序會(huì)限制事務(wù)管理系統(tǒng)的吞吐性能.按照數(shù)據(jù)上下文持久化順序可以將持久化模型分為2 類:嚴(yán)格持久化和寬松持久化.程序語義中的嚴(yán)格持久化與Optane PM 上數(shù)據(jù)存儲(chǔ)順序一致.如果前面的數(shù)據(jù)沒有存儲(chǔ)完成,會(huì)阻塞后續(xù)的數(shù)據(jù)存儲(chǔ),這種模型受到了排序約束從而導(dǎo)致性能瓶頸.寬松持久化模型允許數(shù)據(jù)持久化的順序與程序語義中上下文中的數(shù)據(jù)可見性順序不同,通過設(shè)計(jì)新的持久化屏障控制數(shù)據(jù)的可見性和存儲(chǔ)排序約束性.

        構(gòu)建在Optane PM 上的事務(wù)管理系統(tǒng)在崩潰恢復(fù)時(shí)對(duì)數(shù)據(jù)的操作原語同樣需要原子性操作.目前用作實(shí)現(xiàn)崩潰一致性的技術(shù)分為2 類:預(yù)寫日志和影子分頁.預(yù)寫日志要求在數(shù)據(jù)寫入Optane PM 之前將數(shù)據(jù)的變化記錄在日志中,日志先于數(shù)據(jù)持久化.當(dāng)前主流的預(yù)寫機(jī)制分為undo 日志和redo 日志.undo 日志在每一個(gè)數(shù)據(jù)持久化之前首先創(chuàng)建一條日志并持久化,使多個(gè)獨(dú)立寫原子化地執(zhí)行.系統(tǒng)崩潰重啟后利用undo 日志的內(nèi)容將未完成的原子單元中的修改回退到一致性狀態(tài).redo 日志采用異地更新方案,在日志中記錄更新后的數(shù)據(jù)版本,當(dāng)事務(wù)單元的所有更新結(jié)束后首先將日志持久化,之后再將數(shù)據(jù)寫回到原位置.影子分頁與預(yù)寫機(jī)制的不同之處在于允許數(shù)據(jù)異地更新,從而減少預(yù)寫機(jī)制的冗余寫入.影子分頁也叫做寫時(shí)復(fù)制(CoW),它創(chuàng)建一個(gè)新的數(shù)據(jù)副本,并將原始數(shù)據(jù)以及后續(xù)的更新內(nèi)容寫入到持久存儲(chǔ),然后改變指針來指示新的對(duì)象/數(shù)據(jù),而舊的對(duì)象/數(shù)據(jù)則可以被丟棄.影子數(shù)據(jù)對(duì)整合數(shù)據(jù)區(qū)域維護(hù)2 個(gè)(或多個(gè))版本,每次只更新一個(gè)版本,保證了在任何時(shí)刻至少有一個(gè)副本處于一致性狀態(tài),系統(tǒng)崩潰后通過觀察持久性狀態(tài)信息來選擇具有一致性版本的數(shù)據(jù)恢復(fù).

        本文對(duì)上述方案進(jìn)行了總結(jié),如表2 所示.表2中N為一個(gè)事務(wù)內(nèi)修改的單元數(shù),內(nèi)存屏障數(shù)量表示持久化約束指令,flush 表示需要手動(dòng)將緩存刷回到Optane PM 的次數(shù).

        Table 2 Performance Comparison of Write-ahead Logs and Shadow Paging表2 預(yù)寫日志和影子分頁的性能對(duì)比

        undo 日志中每個(gè)單元更新引入2 個(gè)順序限制:日志數(shù)據(jù)必須在日志頭更新之前持久化,以及日志頭的持久化必須在更改數(shù)據(jù)之前.因此需要2 個(gè)內(nèi)存屏障,并且需要對(duì)日志、日志頭以及數(shù)據(jù)本身執(zhí)行3次緩存刷回,除此之外還需要保證每個(gè)事務(wù)的日志清空要在數(shù)據(jù)更新完成之后.

        redo 日志異地更新數(shù)據(jù),日志數(shù)據(jù)持久化后需要更新日志大小,之后才能原地更新Optane PM 對(duì)象,其中每個(gè)對(duì)象需要1 次緩存刷回,日志區(qū)域以及日志大小各需要1 次持久化寫入.

        CoW 只需要保證事務(wù)在更新對(duì)象指針之前,每個(gè)操作對(duì)象的更新已經(jīng)完成持久化,每次更新需要將對(duì)象本身以及對(duì)象指針?biāo)⒒?并且,在以數(shù)據(jù)塊為單位的事務(wù)管理系統(tǒng)中,CoW 需要拷貝整個(gè)數(shù)據(jù)塊的內(nèi)容,如果數(shù)據(jù)塊的容量被設(shè)置得很大將會(huì)導(dǎo)致較高的復(fù)制開銷.

        雖然表1 所述方案的實(shí)現(xiàn)方式不同,但是它們有4 條共同原則:1)一定會(huì)有一個(gè)數(shù)據(jù)副本;2)一定會(huì)有一個(gè)持久性狀態(tài)信息來指示哪一個(gè)副本處于一致性狀態(tài);3)要求至少一個(gè)持久化寫的順序限制;4)只有經(jīng)歷一次與持久性設(shè)備之間的往返屏障之后才能保證數(shù)據(jù)持久化.這4 條共同的性質(zhì)也是保證崩潰一致性的基本要求.

        3 基于新硬件的事務(wù)管理系統(tǒng)研究

        為了應(yīng)對(duì)新硬件帶來的挑戰(zhàn),相關(guān)研究學(xué)者針對(duì)新硬件本身特性和事務(wù)屬性展開了一系列相關(guān)工作.本節(jié)僅從單機(jī)事務(wù)管理系統(tǒng)相關(guān)文獻(xiàn)出發(fā),并將這些文獻(xiàn)劃分為硬件事務(wù)內(nèi)存驅(qū)動(dòng)的事務(wù)策略研究、面向持久化內(nèi)存的事務(wù)管理系統(tǒng)技術(shù)研究和面向新硬件的軟硬協(xié)同事務(wù)技術(shù)研究,并在最后對(duì)這3 個(gè)研究進(jìn)行總結(jié).研究框架圖如圖3 所示,從硬件本身、事務(wù)并發(fā)控制機(jī)制和持久化機(jī)制3 個(gè)維度進(jìn)行分類分析.

        Fig.3 The technical framework of transaction management system based on new hardware圖3 基于新硬件的事務(wù)管理系統(tǒng)技術(shù)框架

        3.1 HTM 驅(qū)動(dòng)的事務(wù)策略研究

        隨著多核架構(gòu)的發(fā)展,并行編程已經(jīng)成為了當(dāng)前程序語義模型的主流實(shí)現(xiàn)方案.為了保證同步訪問共享內(nèi)存中的數(shù)據(jù),傳統(tǒng)的方法容易導(dǎo)致程序上下文出錯(cuò),并且基于軟件運(yùn)行時(shí)開銷較大.HTM 作為一個(gè)抽象的硬件級(jí)別解決方案,減少額外沖突檢測(cè)開銷,但是HTM 受限于區(qū)域容量限制,并且操作系統(tǒng)上下文中的原語操作容易中止事務(wù),限制了HTM 的可擴(kuò)展性.降低HTM 中的事務(wù)中止率,減少HTM 的軟件棧路徑開銷對(duì)于HTM 驅(qū)動(dòng)的事務(wù)管理系統(tǒng)至關(guān)重要.表3 對(duì)目前主流的HTM 驅(qū)動(dòng)的事務(wù)管理系統(tǒng)進(jìn)行總結(jié).表3 中的沖突檢測(cè)代表事務(wù)沖突檢測(cè)時(shí)機(jī),其中惰性檢測(cè)意味著事務(wù)沖突檢測(cè)在提交時(shí)才進(jìn)行檢測(cè),急切檢測(cè)則反之.數(shù)據(jù)版本含義為數(shù)據(jù)持久化是否立即發(fā)生,惰性代表事務(wù)提交后數(shù)據(jù)進(jìn)入緩沖區(qū),急切則代表數(shù)據(jù)被日志所記錄.回退路徑則代表HTM 不提供進(jìn)度保證,需要采用其他機(jī)制保證軟件回退.悲觀回退路徑代表事務(wù)回退時(shí),需要對(duì)相關(guān)的數(shù)據(jù)項(xiàng)獲取鎖,重試則代表事務(wù)會(huì)丟棄所有執(zhí)行的更新并重新啟動(dòng)更新.

        LogTM-SE[25]發(fā)現(xiàn)目前HTM 方法中的數(shù)據(jù)版本控制以及沖突檢測(cè)嚴(yán)重依賴L1 緩存.然而,這樣做一方面增加了L1 緩存的存儲(chǔ)壓力,另一方面也不利于訪問事務(wù)的狀態(tài)信息.LogTM-SE 利用簽名以及日志來存儲(chǔ)事務(wù)狀態(tài)信息,將事務(wù)執(zhí)行路徑與L1 緩存解耦.簽名用來檢測(cè)事務(wù)沖突,在收到緩存一致性請(qǐng)求時(shí),處理器立刻利用簽名信息檢查讀寫集合是否沖突.日志則用來保證事務(wù)沖突后可正確回退,因此LogTM-SE 發(fā)生數(shù)據(jù)更新時(shí)使用日志記錄數(shù)據(jù)的變化,出現(xiàn)事務(wù)中止回退時(shí)采用悲觀機(jī)制即獲取鎖的方式保證數(shù)據(jù)有序回退.簽名以及日志的實(shí)現(xiàn)僅需要少量修改現(xiàn)有硬件提供的緩存陣列,實(shí)現(xiàn)了事務(wù)執(zhí)行路徑與L1 緩存的解耦.在此基礎(chǔ)上其允許事務(wù)狀態(tài)信息可以被軟件訪問,操作系統(tǒng)內(nèi)核和運(yùn)行時(shí)軟件可以利用這些信息來支持事務(wù)虛擬化,支持任意大小的事務(wù),并且可以接受內(nèi)存頁切換等操作系統(tǒng)活動(dòng).

        Table 3 Classification of Transaction Strategy Research Driven by HTM表3 HTM 驅(qū)動(dòng)的事務(wù)策略研究分類

        EazyHTM[26]發(fā)現(xiàn)在事務(wù)之間發(fā)生沖突時(shí)立刻中止會(huì)增加級(jí)聯(lián)等待時(shí)間.為了解決事務(wù)潛在沖突,事務(wù)管理系統(tǒng)需要推測(cè)事務(wù)之間的優(yōu)先級(jí)順序.但是,由于事務(wù)在執(zhí)行時(shí)缺少先驗(yàn)性知識(shí),無法得到最優(yōu)結(jié)果.即使得出正確結(jié)論,事務(wù)之間也無法保證高度串行化.基于此觀察,EazyHTM 將沖突檢測(cè)和沖突解決任務(wù)分離,在事務(wù)執(zhí)行的同時(shí)進(jìn)行沖突檢測(cè),但是沖突解決推遲至事務(wù)嘗試提交時(shí)進(jìn)行,從而實(shí)現(xiàn)惰性沖突檢測(cè)機(jī)制.這種機(jī)制類似于樂觀并發(fā)控制協(xié)議,但是與之不同的是,EazyHTM 可以避免事務(wù)提交時(shí)的驗(yàn)證,減少驗(yàn)證等待時(shí)間.為了保證在多個(gè)CPU核中的數(shù)據(jù)一致性,EazyHTM 通過對(duì)MESI 協(xié)議進(jìn)行微小修改.其使用位圖維護(hù)事務(wù)提交時(shí)必須中止的事務(wù)列表,并且允許事務(wù)通過向其他CPU 核心廣播特殊請(qǐng)求,中止每個(gè)CPU 核心上正在執(zhí)行的事務(wù).通過設(shè)置2 個(gè)額外的標(biāo)記位擴(kuò)展私有緩存,分別代表關(guān)聯(lián)緩存行已被讀取和緩存行已被修改.EazyHTM允許事務(wù)管理系統(tǒng)在事務(wù)生命周期內(nèi)維護(hù)一個(gè)完整的沖突快照,使用該快照可以進(jìn)一步地提高事務(wù)處理性能.

        由于EazyHTM 從事務(wù)中止中恢復(fù)服務(wù)時(shí),無法確定與其他CPU 核心上的事務(wù)是否發(fā)生沖突,從而引發(fā)事務(wù)長時(shí)間等待處理的結(jié)果,降低事務(wù)性能.Pi-TM[27]可以加速這一過程,采用溫和的悲觀機(jī)制,在私有緩存中維護(hù)一個(gè)額外的單位,稱為Pi 位.當(dāng)事務(wù)中止時(shí),只有事務(wù)執(zhí)行過程中操作的緩存行才會(huì)失效.并且事務(wù)可以立即重試,使用私有緩存的數(shù)據(jù)進(jìn)行處理,無需額外的通信開銷.為了保證數(shù)據(jù)一致性,事務(wù)提交時(shí)會(huì)強(qiáng)制讀取集合中存在沖突的緩存行無效.當(dāng)系統(tǒng)中事務(wù)沖突率較高時(shí),Pi-TM 使用混合檢測(cè)方法,同時(shí)采用惰性沖突檢測(cè)以及使用之前的Pi機(jī)制.這2 種模式都發(fā)生在私有緩存中,因此可以安全交互.

        HTM 的“請(qǐng)求者獲勝”原則在發(fā)生事務(wù)沖突時(shí),會(huì)重復(fù)導(dǎo)致相同的事務(wù)中止,迫使執(zhí)行更慢的非推測(cè)性路徑,并且對(duì)長時(shí)間運(yùn)行的事務(wù)極為不友好.針對(duì)此場(chǎng)景,PleaseTM[28]解耦事務(wù)沖突一致性檢測(cè)路徑,僅在一致性請(qǐng)求中添加請(qǐng)求位,同時(shí)追蹤緩存行狀態(tài),透明支持更深層次的一致性協(xié)議.PleaseTM 中的事務(wù)在接收到請(qǐng)求者消息時(shí),可以根據(jù)實(shí)際執(zhí)行過程自由選擇是否中止事務(wù).為了保證序列化原子性執(zhí)行,事務(wù)在重新請(qǐng)求緩存行時(shí),需要重新獲取事務(wù)執(zhí)行之前的舊數(shù)據(jù)來驗(yàn)證數(shù)據(jù)是否發(fā)生變化.如果數(shù)據(jù)不一致,則中止事務(wù).該機(jī)制的優(yōu)勢(shì)是發(fā)生事務(wù)沖突時(shí)減少一致性協(xié)議中的數(shù)據(jù)傳輸,并可以與軟件事務(wù)內(nèi)存協(xié)議協(xié)同工作,進(jìn)一步提高性能.

        “盡力而為”的HTM 的一個(gè)關(guān)鍵設(shè)計(jì)約束是避免修改一致性協(xié)議,因?yàn)樵趯?shí)際場(chǎng)景中,高速緩存行中的數(shù)據(jù)和狀態(tài)都是轉(zhuǎn)瞬即逝的,并且對(duì)緩存一致性協(xié)議進(jìn)行修改容易引起程序語義模型崩潰.Forgive-TM[29]提出一種惰性沖突檢測(cè)模型,無需修改現(xiàn)有的緩存一致性協(xié)議,并且支持延遲沖突檢測(cè).它采用“先行動(dòng),后請(qǐng)求”的原則,推測(cè)性寫入會(huì)立即寫入特殊緩沖區(qū)中,無需獲取全局寫入權(quán)限,僅在事務(wù)提交時(shí)才獲取寫入權(quán)限.在延遲寫入時(shí),處理器僅檢查數(shù)據(jù)的讀取權(quán)限,只在讀取權(quán)限不可用時(shí),才會(huì)對(duì)其他核心廣播獲取讀取權(quán)限.當(dāng)事務(wù)對(duì)緩存行具有讀取權(quán)限時(shí),該緩存行則被添加至LazySet,在本地私有緩存中該緩存行狀態(tài)則為臟數(shù)據(jù),并且對(duì)于全局是不可見狀態(tài).事務(wù)對(duì)緩存行檢索或存儲(chǔ)時(shí),不會(huì)發(fā)生任何改變數(shù)據(jù)一致性的操作.當(dāng)該事務(wù)提交時(shí),F(xiàn)orgive-TM 分為2 階段提交:第1 階段是提交準(zhǔn)備階段,對(duì)LazySet 中的所有數(shù)據(jù)獲取全局寫入權(quán)限,任何推測(cè)性訪問LazySet 中的數(shù)據(jù)都將被中止.第2 階段是提交階段,該階段的原則是盡力而為.如果該階段發(fā)生沖突,事務(wù)則向?qū)Φ确桨l(fā)送一條特殊消息,阻止其他事務(wù)提交.由于延遲檢測(cè)與處理沖突會(huì)直接影響事務(wù)延遲,因此Forgive-TM 限制了LazySet 的大小,并采用打分機(jī)制推理緩存行發(fā)生事務(wù)中止的可能性.通過打分機(jī)制可以對(duì)一部分緩存行進(jìn)行惰性寫入,從而降低延遲.并且Forgive-TM 在事務(wù)到達(dá)提交時(shí),發(fā)送寫權(quán)限請(qǐng)求,允許操作重新排序?yàn)槎嗪藨?yīng)用程序提供更高的可擴(kuò)展性.

        HTM 需要提供一個(gè)回退計(jì)劃來保證事務(wù)在經(jīng)歷HTM 區(qū)域空間不足、頁錯(cuò)誤以及高競(jìng)爭(zhēng)導(dǎo)致的頻繁崩潰等場(chǎng)景時(shí)不會(huì)永遠(yuǎn)阻塞下去,常用的手段例如Intel 提供的RTM 中采用積極的單一全局鎖機(jī)制,所有的事務(wù)在開始階段都需要檢查全局鎖是否被上鎖.如果是表明當(dāng)前有事務(wù)正在執(zhí)行回退計(jì)劃,則本事務(wù)直接崩潰,否則事務(wù)正常執(zhí)行.然而這種機(jī)制嚴(yán)重限制了系統(tǒng)的并發(fā)性,當(dāng)有一個(gè)事務(wù)執(zhí)行回退計(jì)劃時(shí),即使其他事務(wù)與回退計(jì)劃中的事務(wù)沒有沖突,也不得不等待其結(jié)束.CIT[30]對(duì)硬件做了少量修改,在緩存一致性協(xié)議的請(qǐng)求消息中增加推測(cè)位,在響應(yīng)消息中增加請(qǐng)求位,并在L1 緩存中增加沖突隊(duì)列,沖突的事務(wù)請(qǐng)求將會(huì)被放置在沖突隊(duì)列,并在事務(wù)結(jié)束或者崩潰后移出隊(duì)列.CIT 借助沖突隊(duì)列使系統(tǒng)執(zhí)行回退計(jì)劃時(shí)允許其他事務(wù)并發(fā)地執(zhí)行,只有當(dāng)沖突真正發(fā)生時(shí)才會(huì)中止事務(wù),從而提高系統(tǒng)的并行性.CIT 通過消除或者避免獲取回退鎖的方式增加事務(wù)之間的并發(fā)性,并且所需的指令和硬件更改遠(yuǎn)少于現(xiàn)有方法,可以顯著提高事務(wù)性能.

        針對(duì)數(shù)據(jù)庫中事務(wù)內(nèi)存同步數(shù)據(jù)開銷大的瓶頸,Leis 等人[31]對(duì)每個(gè)事務(wù)的讀寫集合分配一個(gè)時(shí)間戳,使用樂觀并發(fā)控制協(xié)議執(zhí)行事務(wù).由于事務(wù)發(fā)生沖突后回滾事務(wù)恢復(fù)數(shù)據(jù)時(shí),為了保證數(shù)據(jù)一致性,需要對(duì)相應(yīng)的數(shù)據(jù)項(xiàng)上鎖,產(chǎn)生較大的開銷.Leis 等人[31]分析了HTM 原理,發(fā)現(xiàn)HTM 可以捕獲沖突,并保證較低的回滾成本.當(dāng)發(fā)生事務(wù)沖突時(shí),因?yàn)镠TM 內(nèi)部有l(wèi)atch,只需要將事務(wù)修改的緩存行失效即可.而原本的數(shù)據(jù)副本依然存在L2/L3 緩存中,后續(xù)事務(wù)執(zhí)行可以直接從高速L2/L3 區(qū)域中讀取.為了避免事務(wù)回滾時(shí)無限次重試,Leis 等人[31]使用事務(wù)開始執(zhí)行時(shí)分配的時(shí)間戳計(jì)算安全時(shí)間窗口,以序列化的語義模型重新執(zhí)行事務(wù).為了提高HTM 中事務(wù)沖突錯(cuò)誤識(shí)別率并提高事務(wù)插入性能,Leis 等人[31]提出一種友好的HTM 存儲(chǔ)模型,將內(nèi)存區(qū)域分成多個(gè)zone segement,避免集中訪問同一內(nèi)存位置造成的事務(wù)高沖突率.實(shí)驗(yàn)結(jié)果表明該方法與數(shù)據(jù)庫結(jié)合可以提高事務(wù)并發(fā)性能,并且在多核處理器上具有較好的可擴(kuò)展性.

        新加坡國立大學(xué)的研究者分析了HTM 應(yīng)用于OCC 時(shí)的性能變化.雖然在一些場(chǎng)景下可以取得較高的事務(wù)吞吐率.但是,在處理高爭(zhēng)用的工作負(fù)載時(shí),性能遠(yuǎn)低于理想情況.并且在事務(wù)中止后重新執(zhí)行時(shí),需要檢索相關(guān)數(shù)據(jù)進(jìn)行處理.因此,HTCC[32]將數(shù)據(jù)冷熱分離,根據(jù)數(shù)據(jù)爭(zhēng)用熱度自適應(yīng)選擇悲觀并發(fā)控制或者樂觀的HTM 訪問數(shù)據(jù).為了降低事務(wù)中止后的頻繁重試執(zhí)行,HTCC 維護(hù)一個(gè)工作集緩存,對(duì)事務(wù)操作原語進(jìn)行保存,該機(jī)制可以減少頻繁的磁盤I/O.為了防止在高爭(zhēng)用時(shí)工作集緩存區(qū)中的數(shù)據(jù)項(xiàng)出現(xiàn)死鎖,HTCC 使用HTM 簡化程序語義模型.在事務(wù)處理時(shí),HTCC 可以自動(dòng)跟蹤事務(wù)的沖突訪問,對(duì)引發(fā)事務(wù)驗(yàn)證失敗的記錄進(jìn)行原子性來增加其計(jì)數(shù)器.為了保證事務(wù)的序列化提交,HTCC 采用時(shí)間戳機(jī)制為每個(gè)事務(wù)分配唯一標(biāo)識(shí)進(jìn)行排序.為了兼容數(shù)據(jù)庫中的操作原語,HTCC 使用標(biāo)識(shí)位對(duì)每個(gè)記錄進(jìn)行標(biāo)識(shí),并結(jié)合數(shù)據(jù)庫本身的操作原則進(jìn)行處理.HTCC 通過降低事務(wù)沖突中止率,無需頻繁地重試執(zhí)行,因此可以在多線程場(chǎng)景中展現(xiàn)較高的性能.

        澳大利亞國立大學(xué)的Cai 等人[33]對(duì)HTM 特性進(jìn)行了更加深入的研究,發(fā)現(xiàn)之前關(guān)于HTM 的工作僅僅考慮了容量對(duì)程序模型的影響,并沒有考慮緩存替換策略是決定事務(wù)讀取有效緩存行的關(guān)鍵因素.Cai 等人[33]對(duì)當(dāng)前主流的英特爾處理器模擬了HTM的事務(wù)執(zhí)行過程,通過觀察得出結(jié)論:事務(wù)管理系統(tǒng)在執(zhí)行事務(wù)之前應(yīng)該預(yù)熱相關(guān)數(shù)據(jù).其目的是為了提高事務(wù)成功提交率,減少由于緩存行頻繁逐出而造成的事務(wù)高中止率,并且Cai 等人[33]事務(wù)管理系統(tǒng)應(yīng)該優(yōu)先逐出未被事務(wù)訪問的緩存行.

        3.2 面向持久化內(nèi)存的事務(wù)管理系統(tǒng)技術(shù)研究

        持久化內(nèi)存可以將數(shù)據(jù)持久化的延遲降低至納秒級(jí)別,由于持久化內(nèi)存的特性與現(xiàn)有的傳統(tǒng)硬件并不相同,因此需要重新設(shè)計(jì)更適合新型硬件的事務(wù)管理系統(tǒng),這是系統(tǒng)設(shè)計(jì)者的當(dāng)務(wù)之急.為了全面理解面向持久化內(nèi)存的事務(wù)管理系統(tǒng)技術(shù),本文從事務(wù)自身的宏觀角度出發(fā),對(duì)其進(jìn)行總結(jié),如表4 所示.表4 中的持久化方案意味著確保數(shù)據(jù)持久化和崩潰一致性的機(jī)制.并發(fā)機(jī)制代表事務(wù)并發(fā)執(zhí)行時(shí)的事務(wù)管理機(jī)制.隔離級(jí)別包括最嚴(yán)格的線性化成為系統(tǒng)的瓶頸,去中心化分配事務(wù)唯一標(biāo)識(shí)以及使用邏輯時(shí)間戳等方案更符合事務(wù)系統(tǒng)高擴(kuò)展的趨勢(shì).寫放大遵循TimeStone[34]的計(jì)算規(guī)則,是持久化內(nèi)存上實(shí)際持久化數(shù)據(jù)大小和事務(wù)請(qǐng)求之間的比率.寫放大出現(xiàn)的原因是為了保證事務(wù)一致性從而引入了額外寫操作.管理粒度是指事務(wù)系統(tǒng)操作持久化內(nèi)存區(qū)域的單元大小或者其鎖粒度,較小的管理粒度可以提高事務(wù)并發(fā)性能.(linearizability,LN)、可串行化(serializability,SR)以及快照隔離(snapshot isolation,SI)機(jī)制.LN 保證事務(wù)內(nèi)的讀寫操作完全按照事務(wù)的執(zhí)行順序執(zhí)行.SR 相對(duì)放松了順序限制,允許不同事務(wù)的讀寫事務(wù)交錯(cuò)進(jìn)行,但是最終事務(wù)從整體上符合某一種線性順序.而SI 只需保證事務(wù)讀取的數(shù)據(jù)是在某一時(shí)刻具有一致性狀態(tài)的內(nèi)存快照,但是可能會(huì)出現(xiàn)寫傾斜的問題.事務(wù)標(biāo)識(shí)用來區(qū)別每一個(gè)事務(wù),也可以用來作為恢復(fù)階段日志執(zhí)行的順序,中心化分配的ID 通常會(huì)

        Table 4 Classification of Persistent Memory-Based Transaction Management System表4 面向持久化內(nèi)存的事務(wù)管理系統(tǒng)技術(shù)分類

        Marathe 等人[46]通過實(shí)驗(yàn)對(duì)比了基于undo,redo,CoW 機(jī)制的事務(wù)管理系統(tǒng)在模擬的持久化內(nèi)存環(huán)境上的表現(xiàn),綜合考慮了持久域、工作負(fù)載訪問模式、緩存一致性等因素.實(shí)驗(yàn)結(jié)果顯示,每項(xiàng)技術(shù)在不同的場(chǎng)景中都有自己的優(yōu)勢(shì)和缺點(diǎn).基于預(yù)寫日志的技術(shù)需要寫日志以及數(shù)據(jù)本身,但是額外的寫操作會(huì)導(dǎo)致較大的開銷.為了保證數(shù)據(jù)一致性,預(yù)寫日志一定要在更新數(shù)據(jù)之前完成持久化操作.而undo 日志由于無法事先獲取寫集合,因此集合中每一個(gè)更新都需要保持嚴(yán)格的順序,對(duì)于N個(gè)日志項(xiàng)會(huì)增加2N個(gè)持久化屏障,從而導(dǎo)致性能急劇下降.redo 日志直接在日志中創(chuàng)建新版本數(shù)據(jù)并直接更新.但是由于新值僅出現(xiàn)在日志中,隨后而來的讀操作必須查閱日志才可以獲得最新值,有可能出現(xiàn)遍歷整個(gè)日志才可以找到最新值的情況.CoW 機(jī)制可以避免這些問題,但是引入了大量的元數(shù)據(jù)更新,例如對(duì)象的指針、內(nèi)存分配器的元數(shù)據(jù),這些元數(shù)據(jù)的更新主要是由較小的數(shù)據(jù)結(jié)構(gòu)(小于64 B)組成,而非易失性內(nèi)存內(nèi)部的訪問粒度為256 B,大量較小的隨機(jī)元數(shù)據(jù)更新會(huì)導(dǎo)致嚴(yán)重的寫放大問題.同時(shí)CoW 也會(huì)產(chǎn)生較大的緩存局部性開銷.

        1)基于undo 的日志事務(wù)管理系統(tǒng)

        Kolli 等人[35]發(fā)現(xiàn)由于持久化內(nèi)存存在較高的寫延遲,減少寫操作的順序限制對(duì)提高事務(wù)系統(tǒng)的性能至關(guān)重要.Kolli 等人[35]首先分析了理想情況下,即軟件可以識(shí)別出所有持久性寫之間的順序依賴時(shí)系統(tǒng)能夠?qū)崿F(xiàn)的最小持久化關(guān)鍵路徑長度,并以此為基準(zhǔn)優(yōu)化現(xiàn)實(shí)的工作負(fù)載.文獻(xiàn)[35]總結(jié)了4 種持久化模型,分別是嚴(yán)格持久化(strict persistency)、階段持久化(epoch persistency)、鏈持久化(strand persistency)以及樂觀同步(eager sync).嚴(yán)格持久化限制任何2 個(gè)持久化操作之間的順序,保證強(qiáng)一致性,但是由于嚴(yán)格序列化,導(dǎo)致事務(wù)無法亂序持久化,降低事務(wù)吞吐率.階段持久化寬松了持久化順序的限制,要求保證2 個(gè)階段之間的持久化順序.鏈持久化將程序的執(zhí)行劃分為鏈,新的鏈將會(huì)得到之前的事務(wù)持久化順序限制,從而保證每個(gè)鏈都是獨(dú)立的,鏈內(nèi)通過持久化屏障保證順序.樂觀同步利用Intel x86 提供的緩存行刷新指令以及PCOMMIT 指令保證持久化的順序以及其對(duì)外可見的順序.Kolli 等人[35]在這4 種持久化模型的基礎(chǔ)上進(jìn)一步引入延遲提交事務(wù)(DCT)減少了持久化操作之間不必要的順序限制,提高事務(wù)的性能.為了保證一致性,Kolli 等人[35]采用undo 日志記錄數(shù)據(jù)項(xiàng)的變化,并為每個(gè)線程維護(hù)一個(gè)日志來提高可擴(kuò)展性.Kolli 等人只關(guān)注靜態(tài)事務(wù),即執(zhí)行前可以知道事務(wù)修改的內(nèi)容,同時(shí)利用校驗(yàn)和的方式保證日志的完整性,降低每次寫日志所需的內(nèi)存屏障.由于使用了延遲提交,需要保證事務(wù)之間的順序,他們使用向量時(shí)鐘來排序事務(wù),在系統(tǒng)崩潰后逆序恢復(fù)數(shù)據(jù).DCT 在保證事務(wù)一致性時(shí)需要完成2次數(shù)據(jù)持久化,即undo 日志項(xiàng)和寫入對(duì)象數(shù)據(jù)本身,因此該方法寫放大為2.DCT 中靜態(tài)事務(wù)的先驗(yàn)性知識(shí)并不適用于通用的場(chǎng)景,無法預(yù)先獲取現(xiàn)實(shí)場(chǎng)景中事務(wù)修改的數(shù)據(jù)集合.

        與DCT 不同的是,Kamino-Tx[36]支持動(dòng)態(tài)事務(wù),它主要關(guān)注如何減少事務(wù)提交關(guān)鍵路徑上耗時(shí)較長的對(duì)象拷貝操作,通過對(duì)事務(wù)邏輯執(zhí)行單元中的數(shù)據(jù)對(duì)象維護(hù)2 個(gè)版本,將數(shù)據(jù)拷貝操作移出了事務(wù)提交的關(guān)鍵路徑,縮短了事務(wù)的提交延遲.傳統(tǒng)的事務(wù)一致性機(jī)制如預(yù)寫日志以及CoW 等,它們需要在事務(wù)提交之前持久化舊版本的數(shù)據(jù).由于持久化內(nèi)存寫延遲較高,Kamino-Tx 選擇維護(hù)一個(gè)后備版本的堆結(jié)構(gòu),事務(wù)在執(zhí)行過程就地讀取或更新主區(qū)域數(shù)據(jù)對(duì)象,提交之后將本事務(wù)的修改拷貝到后備堆區(qū)域中,縮短了提交延遲.這種后備堆區(qū)域本質(zhì)上也是一種undo 日志.然而直接備份整個(gè)堆空間將導(dǎo)致持久化內(nèi)存中的內(nèi)存開銷翻倍,Kamino-Tx 提出只備份頻繁訪問的數(shù)據(jù)對(duì)象,利用一個(gè)并發(fā)的哈希表來查找對(duì)象是否已經(jīng)備份.系統(tǒng)支持設(shè)定備份空間的大小,當(dāng)空間超過設(shè)定閾值時(shí),將利用LRU 算法替換備份區(qū)域的對(duì)象并更新查找表.Kamino-Tx 在持久化內(nèi)存中記錄事務(wù)修改的內(nèi)容,將更新數(shù)據(jù)從主區(qū)域拷貝到備份區(qū)域或者在系統(tǒng)崩潰后從備份區(qū)域恢復(fù).需要注意的是,Kamino-Tx 在持久化內(nèi)存上備份熱點(diǎn)數(shù)據(jù)可以顯著提高具有傾斜特征的工作負(fù)載下的事務(wù)性能,但是直接在非易失性內(nèi)存上同時(shí)記錄事務(wù)修改內(nèi)容會(huì)增加持久性寫的開銷.

        為了減少Kamino-Tx 的持久性指令帶來的開銷,Romulus[37]機(jī)制利用高速主存記錄修改的內(nèi)容,在持久化內(nèi)存中維護(hù)數(shù)據(jù)的雙副本,并存儲(chǔ)在2 個(gè)不同的區(qū)域,即主區(qū)域和后備區(qū)域.由于在某個(gè)時(shí)間點(diǎn),Romulus 保證主區(qū)域和后備區(qū)域中的數(shù)據(jù)副本狀態(tài)至少存在一個(gè)是一致的.因此,系統(tǒng)崩潰后直接恢復(fù)整個(gè)數(shù)據(jù)存儲(chǔ)區(qū)域.Romulus 將持久化內(nèi)存空間分為3 個(gè)區(qū)域:控制頭、主區(qū)域以及后備區(qū)域.控制頭存儲(chǔ)了系統(tǒng)的元數(shù)據(jù)信息,其中最重要的是事務(wù)狀態(tài)信息,包括“空閑”“執(zhí)行”“拷貝”3 種狀態(tài).“空閑”即系統(tǒng)內(nèi)沒有事務(wù)執(zhí)行,“執(zhí)行”表示當(dāng)前有事務(wù)正在執(zhí)行并且修改了內(nèi)存狀態(tài),“拷貝”狀態(tài)表示事務(wù)執(zhí)行完成正在備份事務(wù)的更新.Romulus 利用這3 種狀態(tài)判斷系統(tǒng)崩潰后如何恢復(fù).后備區(qū)域是主區(qū)域的一個(gè)備份,事務(wù)執(zhí)行過程中直接修改主區(qū)域,事務(wù)提交之后將更新拷貝到后備區(qū)域.為了減少數(shù)據(jù)拷貝開銷,Romulus 在修改主區(qū)域的同時(shí)在DRAM 中生成redo日志(此日志不需要持久化),記錄主區(qū)域中被修改的地址以及修改的大小,因此事務(wù)執(zhí)行結(jié)束后只需要拷貝redo 日志中記錄的數(shù)據(jù)區(qū)間即可.Romulus 避免了重定向讀,讀取事務(wù)僅需要單個(gè)指令加載數(shù)據(jù),并且將每個(gè)事務(wù)的內(nèi)存屏障數(shù)目限制為4.因此,Romulus 在讀場(chǎng)景下的性能可以和線程數(shù)量呈線性關(guān)系,并且較少的持久性指令和較低的寫放大可以提高事務(wù)整體性能.但是由于Romulus 中的主、備區(qū)域大小是相同的,因此事務(wù)數(shù)據(jù)存儲(chǔ)空間只能使用持久化內(nèi)存區(qū)域一半的空間,顯著降低了持久化內(nèi)存的空間利用率.

        ATOM[38]采用緩存行級(jí)別的undo 日志來保證持久化內(nèi)存更新的數(shù)據(jù)一致性,利用內(nèi)存控制器(硬件層次)創(chuàng)建日志.日志控制器位于L1 緩存,每個(gè)store操作都創(chuàng)建一條日志.由于undo 日志只需要保存事務(wù)開始前的數(shù)據(jù)版本,因此ATOM 利用一個(gè)日志位標(biāo)記緩存行是否已經(jīng)被記入日志,避免重復(fù)的日志持久化操作.undo 日志的性能瓶頸在于強(qiáng)制了日志操作與數(shù)據(jù)更新之間的順序,因此,ATOM 在硬件層面將日志與數(shù)據(jù)發(fā)送到同一個(gè)內(nèi)存控制器,更新緩存之前首先在內(nèi)存控制器對(duì)緩存行上鎖并寫日志.同時(shí)緩存控制器可以將數(shù)據(jù)更新到存儲(chǔ)緩沖區(qū),不需要等待日志的持久化完成,等待日志持久化完成之后對(duì)緩存行解鎖使數(shù)據(jù)可以寫回至持久化內(nèi)存,保證了日志與數(shù)據(jù)之間的持久化順序.在緩存不命中時(shí),內(nèi)存控制器加載到的數(shù)據(jù)是undo 日志需要記錄的版本,因此內(nèi)存控制器直接對(duì)緩存獲取鎖,向緩存?zhèn)鬟f數(shù)據(jù)時(shí)添加日志位,避免了日志控制器向內(nèi)存控制器的冗余數(shù)據(jù)傳輸.ATOM 利用類似數(shù)據(jù)庫中組提交的思想將7 個(gè)數(shù)據(jù)緩存行與一個(gè)元數(shù)據(jù)緩存行作為一個(gè)日志單元,減少57%的日志寫操作,并通過跟蹤日志更新的依賴關(guān)系和硬件更新的數(shù)據(jù),將日志更新移出數(shù)據(jù)原子更新的關(guān)鍵路徑,提高事務(wù)執(zhí)行效率.ATOM 通過更新緩存行級(jí)別的undo 日志以及記錄數(shù)據(jù)對(duì)象本身實(shí)現(xiàn)事務(wù)一致性,在內(nèi)存控制器對(duì)緩存行中的日志進(jìn)行修改時(shí)所使用的鎖并未持久化,因此ATOM 的寫放大為2.

        2)基于redo 的日志事務(wù)管理系統(tǒng)

        Mnemosyne[39]方法實(shí)現(xiàn)了一個(gè)簡單的持久內(nèi)存編程接口,并且提供了4 種不同粒度的一致性保障機(jī)制:單字更新、追加更新、影子更新以及就地更新,這4 種機(jī)制隨著通用性的提高逐漸呈現(xiàn)性能下降的趨勢(shì).Mnemosyne 中利用高性能的 raw word log(RAWL)日志結(jié)合現(xiàn)有的軟件事務(wù)內(nèi)存系統(tǒng)TinySTM[47]來支持持久化內(nèi)存事務(wù).Mnemosyne 支持在代碼中用“atomic”關(guān)鍵字注釋事務(wù)代碼段,編譯器識(shí)別出事務(wù)代碼后觸發(fā)底層TinySTM 中提供的事務(wù)原語,系統(tǒng)為每個(gè)線程維護(hù)一個(gè)基于RAWL 的日志,事務(wù)更新數(shù)據(jù)時(shí)在DRAM 中創(chuàng)建redo 日志記錄更新的地址及數(shù)據(jù),事務(wù)提交后日志刷回到持久化內(nèi)存上持久化,數(shù)據(jù)原位置中仍然保留著未更新的數(shù)據(jù),當(dāng)訪問數(shù)據(jù)時(shí)首先檢查數(shù)據(jù)是否被更新,若被更新則到對(duì)應(yīng)的日志中讀取最新的版本.為了保證系統(tǒng)的可擴(kuò)展性,Mnemosyne 將地址空間分區(qū),每個(gè)區(qū)域維護(hù)一個(gè)單獨(dú)的鎖,當(dāng)訪問持久化內(nèi)存空間時(shí)需要對(duì)該區(qū)域獲取鎖,若已經(jīng)被其他事務(wù)持有鎖則該事務(wù)崩潰.Mnemosyne 的優(yōu)勢(shì)是支持同步或異步地將日志中的數(shù)據(jù)刷回到原位置,不需要等待寫回操作,直接提交事務(wù),縮短了事務(wù)提交的延遲.但是,Mnemosyne 的直接利用為DRAM 主存設(shè)計(jì)的TinySTM 提供事務(wù)語義,忽略了持久化內(nèi)存的內(nèi)部特性,無法充分利用持久化內(nèi)存的性能優(yōu)勢(shì).

        為了進(jìn)一步提高持久性事務(wù)的性能,LOC[40]將持久化內(nèi)存事務(wù)系統(tǒng)中的順序限制區(qū)解耦為事務(wù)內(nèi)的順序執(zhí)行和事務(wù)間的順序執(zhí)行:事務(wù)內(nèi)的順序執(zhí)行指事務(wù)提交之前必須等待本事務(wù)所有更新的數(shù)據(jù)全部持久化,并且更新提交標(biāo)記;事務(wù)間的順序執(zhí)行指不同事務(wù)間持久化的順序一定要與它們提交的順序一致.這2 個(gè)順序執(zhí)行原則保證了系統(tǒng)的崩潰一致性.但存在由于事務(wù)提交標(biāo)記以及事務(wù)間的順序執(zhí)行等待導(dǎo)致事務(wù)性能大幅下降的問題.LOC 提出“積極提交”與“推測(cè)持久化”2 種策略分別解決此問題.“積極提交”通過特殊的日志組織方式,即采用數(shù)據(jù)塊組來存放日志及其元數(shù)據(jù),1 個(gè)數(shù)據(jù)塊組包含7 個(gè)數(shù)據(jù)塊和1 個(gè)元數(shù)據(jù)塊.并利用基于計(jì)數(shù)的事務(wù)提交協(xié)議,即統(tǒng)計(jì)事務(wù)修改的數(shù)據(jù)塊數(shù)設(shè)置閾值,將日志的完整性檢驗(yàn)推遲到了恢復(fù)階段,而不是在提交之前等待日志完整的持久化完成,解決了事務(wù)內(nèi)順序執(zhí)行的限制,從而降低了事務(wù)提交的延遲.“推測(cè)持久化”策略通過設(shè)置一個(gè)推測(cè)窗口(sp-window),允許sp-window 內(nèi)的事務(wù)可以亂序地持久化,但是可以保證事務(wù)順序提交.為了實(shí)現(xiàn)“推測(cè)持久化”,LOC 利用多版本CPU 緩存(mv-cache)保證多個(gè)線程并發(fā)執(zhí)行并且跟蹤記錄事務(wù)的提交順序.多版本緩存將窗口內(nèi)多個(gè)事務(wù)的修改都暫存在緩存之中,保證了不同事務(wù)重疊寫的可恢復(fù)性,并且可以將多個(gè)修改合并寫回持久化內(nèi)存.恢復(fù)階段以整個(gè)推測(cè)窗口為單元執(zhí)行整體恢復(fù),一個(gè)事務(wù)成功提交的條件為該事務(wù)滿足計(jì)數(shù)提交協(xié)議并且同個(gè)窗口中之前執(zhí)行的事務(wù)都已經(jīng)成功提交.LOC 旨在提高事務(wù)持久化性能,首次分析了事務(wù)之間的依賴關(guān)系并分類闡述,針對(duì)事務(wù)內(nèi)部與事務(wù)之間的依賴關(guān)系,減少持久化的順序開銷,在硬件層面以很小的開銷完成事務(wù)的執(zhí)行管理并提供了較高的處理效率.但是,LOC 實(shí)現(xiàn)中使用WAL 機(jī)制,在事務(wù)執(zhí)行時(shí)需要利用日志記錄修改對(duì)象的新版本,并且為每個(gè)事務(wù)分配1 個(gè)日志塊記錄事務(wù)執(zhí)行狀態(tài).在事務(wù)執(zhí)行完成后,LOC 通過更新指針修改數(shù)據(jù)版本.通常一個(gè)指針的大小小于數(shù)據(jù)對(duì)象本身.LOC 為了提高事務(wù)崩潰恢復(fù)性能,通過靜態(tài)組織日志空間機(jī)制利用1 個(gè)元數(shù)據(jù)塊和7 個(gè)日志數(shù)據(jù)塊組成日志數(shù)據(jù)塊組進(jìn)行持久化存儲(chǔ).因此,LOC 的寫放大大于2.

        Giles 等人[41]提出一種基于軟件的寫輔助持久性(SoftWrAP)機(jī)制,解耦事務(wù)生命周期路徑,分離事務(wù)執(zhí)行和持久化路徑.SoftWrAP 在持久化內(nèi)存中維護(hù)一個(gè)redo 日志來保證事務(wù)更新的原子性,日志中記錄數(shù)據(jù)更新后的值.該日志僅在崩潰恢復(fù)時(shí)使用,通過緩存行追加寫的方式進(jìn)行有效更新,并定期刪除無效日志.SoftWrAP 使用軟件別名機(jī)制,允許在后臺(tái)中重定向持久化內(nèi)存中被管理的區(qū)域數(shù)據(jù),從而可以在DRAM 中直接修改,減少緩存行淘汰順序限制帶來的性能瓶頸,并且可以加速主存訪問持久化內(nèi)存的訪問效率.SoftWrAP 利用2 個(gè)無鎖別名表來記錄重定向的關(guān)系,一個(gè)處于活躍狀態(tài)用來接收新的請(qǐng)求,另一個(gè)用來將數(shù)據(jù)寫回持久化內(nèi)存從而可以釋放日志空間,實(shí)現(xiàn)了事務(wù)執(zhí)行與持久化的并發(fā)執(zhí)行.由于SoftWrAP 使用雙緩存別名表,1 次讀操作可能導(dǎo)致3 次重定向,降低讀操作的效率.并且其采用的1 對(duì)1 頁級(jí)別映射引入了較大的內(nèi)存開銷,同時(shí)SoftWrAP 在保證事務(wù)一致性的前提下額外持久化一些元數(shù)據(jù),因此該機(jī)制的寫放大不小于2.雖然Soft-WrAP 聲稱可以與并發(fā)控制解耦,但是為了保證事務(wù)正確的隔離性,其仍然需要使用別名表等機(jī)制對(duì)系統(tǒng)作出較大的修改,無法透明支持事務(wù)管理系統(tǒng).

        DudeTM[42]利用“影子內(nèi)存”(shadow DRAM)來避免redo 和undo 日志存在的問題,DudeTM 提供了一個(gè)開箱即用的持久化組件,可以結(jié)合任何現(xiàn)有的STM 或HTM 共同構(gòu)建一個(gè)持久內(nèi)存事務(wù)系統(tǒng).因此,DudeTM 并發(fā)機(jī)制依賴于事務(wù)內(nèi)存進(jìn)行實(shí)現(xiàn).DudeTM以內(nèi)存頁為單位將持久化內(nèi)存上的內(nèi)容映射到DRAM中,事務(wù)執(zhí)行過程中原地更新或讀取DRAM 中的影子頁,避免了redo 日志帶來的重定位讀以及undo 日志頻繁地刷回持久化內(nèi)存操作.事務(wù)更新影子頁的同時(shí)構(gòu)建redo 日志,記錄修改的內(nèi)存地址和內(nèi)容,執(zhí)行完成之后需要將日志持久化到持久化內(nèi)存.為了提高事務(wù)的可擴(kuò)展性,每個(gè)線程維護(hù)一個(gè)日志.DudeTM在 “再現(xiàn)”階段利用構(gòu)建的redo 日志將更新寫回,日志的寫回順序必須與事務(wù)的執(zhí)行順序一致,否則無法保證一致性.為了保證事務(wù)的串行化執(zhí)行,DudeTM利用一個(gè)全局遞增的事務(wù)ID 來為每一個(gè)事務(wù)分配唯一的標(biāo)識(shí)進(jìn)行排序,并將日志順序?qū)懟爻志没瘍?nèi)存.但是由于每個(gè)線程都需要頻繁的讀取并更新全局的事務(wù)ID,導(dǎo)致其成為整個(gè)系統(tǒng)的擴(kuò)展瓶頸.并且DudeTM 只使用單一的線程來執(zhí)行“再現(xiàn)”過程,寫密集場(chǎng)景下單線程的數(shù)據(jù)刷回操作會(huì)造成很高的延遲,同時(shí)日志回收產(chǎn)生相關(guān)的同步成本也會(huì)成為阻礙系統(tǒng)可擴(kuò)展性的關(guān)鍵因素.

        Pisces[43]是一個(gè)“讀友好”的事務(wù)系統(tǒng),通過快照隔離機(jī)制降低事務(wù)隔離級(jí)別從而獲得了更高的事務(wù)性能.為了利用緩存局部性并減少快照隔離數(shù)據(jù)的查找開銷,Pisces 采用雙版本并發(fā)控制來實(shí)現(xiàn)快照隔離,每個(gè)對(duì)象只有原始版本以及利用redo 日志構(gòu)建的新拷貝版本.當(dāng)事務(wù)試圖更新一個(gè)對(duì)象時(shí),它創(chuàng)建一個(gè)原始對(duì)象的拷貝并直接修改拷貝對(duì)象,事務(wù)提交時(shí)再將新版本數(shù)據(jù)拷貝至原始對(duì)象.讀操作根據(jù)事務(wù)的時(shí)間戳來判斷讀取新/舊版本,并發(fā)寫操作利用對(duì)象鎖來避免沖突.但是,事務(wù)提交時(shí)舊版本的數(shù)據(jù)仍可能被其他線程正在運(yùn)行的事務(wù)訪問,因此不能簡單地將新版本數(shù)據(jù)直接拷貝回原始版本.Pisces利用RCU(read copy update)機(jī)制[48]確保寫回操作的正確性,即寫回之前需要等待所有可能訪問舊版本數(shù)據(jù)的事務(wù)(開始時(shí)間小于本事務(wù)結(jié)束時(shí)間的所有事務(wù))都結(jié)束后才將新版本寫回.Pisces 的優(yōu)點(diǎn)是利用3 階段提交法避免了Optane PM 持久化開銷對(duì)讀操作的性能影響.首先是持久化階段將事務(wù)的日志持久化到Optane PM;之后是并發(fā)提交階段,在這一階段保證更新的數(shù)據(jù)對(duì)其他事務(wù)可見;最后是寫回階段,在這階段執(zhí)行RCU 機(jī)制并將新版本數(shù)據(jù)寫回到原始對(duì)象.3 階段提交法使事務(wù)的更新不必等待耗時(shí)較長的數(shù)據(jù)持久化操作結(jié)束即可對(duì)其他事務(wù)可見,實(shí)現(xiàn)了近乎非阻塞的讀操作.并且,Pisces 的快照隔離可以確保事務(wù)的無鎖讀取操作,進(jìn)一步地提高讀場(chǎng)景下的性能.但是,Pisces 采用的雙版本并發(fā)控制機(jī)制和日志回收期間的同步寫同樣會(huì)影響事務(wù)的可擴(kuò)展性.

        TimeStone[34]在Pisces 的基礎(chǔ)上進(jìn)一步利用多版本并發(fā)控制(MVCC)來提高系統(tǒng)的可擴(kuò)展性,并且首次提供了多種隔離級(jí)別.TimeStone 使用多層日志結(jié)構(gòu)TOC 來保證數(shù)據(jù)崩潰一致性并最小化寫放大問題,MVCC 實(shí)現(xiàn)事務(wù)系統(tǒng)的高擴(kuò)展性并以此為基礎(chǔ)提供了多種隔離級(jí)別.當(dāng)一個(gè)線程上的事務(wù)更新數(shù)據(jù)對(duì)象時(shí),首先在當(dāng)前線程的TLog(位于DRAM)創(chuàng)建數(shù)據(jù)副本并直接更新,同時(shí)在OLog(位于Optane PM)記錄執(zhí)行的操作保證立即持久化,事務(wù)成功提交后會(huì)利用ordo 機(jī)制[49]獲取事務(wù)的提交時(shí)間,并將TLog中的副本添加到對(duì)象的版本鏈中.當(dāng)事務(wù)讀取數(shù)據(jù)時(shí),需要在對(duì)象的版本鏈中查找提交時(shí)間早于本事務(wù)開始時(shí)間并且最新的版本,獲得數(shù)據(jù)的引用,使得事務(wù)并行性得以提升.當(dāng)TLog 或者OLog 空間不足時(shí)TimeStone 會(huì)執(zhí)行檢查點(diǎn)機(jī)制,僅需要將被更新對(duì)象的最新版本持久化到CLog(位于Optane PM)上,減少對(duì)Optane PM 的直接訪問.由于日志中的數(shù)據(jù)可能正在被引用,TimeStone 采用MV-RLU[50-51]的策略回收日志,等待所有可能引用待回收數(shù)據(jù)版本的事務(wù)結(jié)束之后再執(zhí)行回收操作.TimeStone 利用多層日志架構(gòu)機(jī)制最小化寫放大開銷,并且支持3 種事務(wù)隔離級(jí)別:快照隔離、可串行化、序列化,允許用戶可以通過其提供的接口在事務(wù)執(zhí)行時(shí)指定隔離級(jí)別.TimeStone 的實(shí)驗(yàn)結(jié)果表明,TLog 減少了日志寫入,僅有6%的TLog 被寫入CLog,因此TOC 機(jī)制有效降低了事務(wù)的寫放大.

        3)基于CoW 的日志事務(wù)管理系統(tǒng)

        Wang 等人[44]通過實(shí)驗(yàn)發(fā)現(xiàn)持久化內(nèi)存事務(wù)系統(tǒng)的擴(kuò)展瓶頸在于不同線程事務(wù)之間的依賴與沖突,并且基于時(shí)間戳的持久化順序引入了不必要的依賴.因此他們提出了SP3 方法來提高多核場(chǎng)景下事務(wù)系統(tǒng)的并發(fā)性能.SP3 利用OCC 并發(fā)地執(zhí)行和提交事務(wù).SP3 首先創(chuàng)建一個(gè)對(duì)象的索引表,將對(duì)象映射到一個(gè)控制條目,這個(gè)控制條目包含了對(duì)象的鎖、最新版本的指針以及最近一次更新的事務(wù)ID 等.在OCC的讀階段,事務(wù)使用無鎖機(jī)制讀取數(shù)據(jù)并添加到讀集合(read set),事務(wù)的更新暫存到寫集合(write set)中.SP3 采用CoW 策略,即修改對(duì)象前先拷貝,并直接在拷貝版本上更新,因此寫集合只需要記錄拷貝對(duì)象的新地址.同時(shí)SP3 也會(huì)生成redo 日志,這一階段最重要的是需要記錄事務(wù)之間的依賴關(guān)系.事務(wù)訪問或更新對(duì)象前都需要先訪問其控制條目,獲取該對(duì)象最近修改的事務(wù)ID 并添加到依賴集合中.SP3 在事務(wù)提交階段引入了預(yù)測(cè)持久化機(jī)制來提高并行性,即在更新持久化之前允許更新對(duì)其他線程可見.提交階段首先執(zhí)行OCC 并發(fā)控制協(xié)議驗(yàn)證依賴數(shù)據(jù)是否已經(jīng)被更新,通過比較訪問依賴集合中對(duì)象的控制條目記錄的最新地址與讀集合中記錄的地址判斷是否發(fā)生沖突.驗(yàn)證完成之后將暫存的寫集合映射到控制條目中,即將對(duì)象的新地址以及本事務(wù)ID 更新到控制條目中,此時(shí)事務(wù)的更新將對(duì)其他線程可見.之后持久化日志以及依賴集合等待其依賴集合中的事務(wù)全部執(zhí)行結(jié)束后提交事務(wù),保證崩潰后的可恢復(fù)性.在恢復(fù)階段通過每個(gè)事務(wù)的依賴集合構(gòu)建有向無環(huán)圖,并刪除未提交事務(wù)的日志.有向無環(huán)圖構(gòu)建成功后利用拓?fù)渑判驔Q定恢復(fù)階段事務(wù)執(zhí)行的順序.SP3 目標(biāo)是提高多核之間的事務(wù)可擴(kuò)展性,無需等待事務(wù)中的數(shù)據(jù)持久化階段完成即可允許更新后的數(shù)據(jù)對(duì)其他線程可見,減少因事務(wù)持久化時(shí)間過長而引發(fā)的事務(wù)沖突中止率.SP3 的邏輯時(shí)間戳可以提高系統(tǒng)的擴(kuò)展性,但是全局的對(duì)象索引表依舊會(huì)成為系統(tǒng)擴(kuò)展的瓶頸.SP3 在日志中記錄事務(wù)操作對(duì)象的指針變化,通常小于對(duì)象本身,因此該方法寫放大小于2.

        Wu 等人[45]觀察到Optane PM 的特性,即隨機(jī)寫與順序?qū)懼g有較大的性能差距,并基于避免較小的寫和盡量順序?qū)? 項(xiàng)原則設(shè)計(jì)以CoW 為基礎(chǔ)的原型系統(tǒng).由于CoW 機(jī)制的元數(shù)據(jù)更新導(dǎo)致很多較小的寫操作,因此ArchTM 將內(nèi)存分配元數(shù)據(jù)、對(duì)象CoW 索引元數(shù)據(jù)放置在了DRAM 中以減少Optane PM 上的元數(shù)據(jù)寫.同時(shí)利用注釋機(jī)制來保證崩潰一致性,即將對(duì)象的元數(shù)據(jù)與對(duì)象本身存儲(chǔ)在一起.為了盡可能地提高順序?qū)懀珹rchTM 中采用了全局單鏈表內(nèi)存分配結(jié)構(gòu)對(duì)小對(duì)象數(shù)據(jù)項(xiàng)分配空間,充分利用空間局部性.因?yàn)檫B續(xù)分配的對(duì)象很可能會(huì)連續(xù)訪問或修改,每個(gè)線程有自己的私有分配鏈表,只有私有分配空間耗盡才會(huì)從全局鏈表中獲取新的空間.由于對(duì)象以64 B 為單元進(jìn)行分配,這種方式容易導(dǎo)致內(nèi)存碎片,ArchTM 中使用后臺(tái)線程以4KB 粒度統(tǒng)計(jì)空間利用率,當(dāng)小于50%時(shí)就對(duì)數(shù)據(jù)進(jìn)行聚合.通過Optane PM 感知架構(gòu),ArchTM 避免了小的數(shù)據(jù)寫入,聚合可合并的數(shù)據(jù),并將其寫入Optane PM,充分利用Optane PM 硬件內(nèi)部的優(yōu)勢(shì).為了提高事務(wù)吞吐率,ArchTM 需要維護(hù)額外的元數(shù)據(jù),同時(shí)為了確保事務(wù)崩潰一致性需要將這部分元數(shù)據(jù)持久化,因此ArchTM 的寫放大為1~2.

        3.3 面向新硬件的軟硬協(xié)同事務(wù)技術(shù)研究

        HTM 僅支持事務(wù)的ACI 屬性,持久化內(nèi)存可以提供內(nèi)存映射的持久化數(shù)據(jù)存儲(chǔ),簡單的編程模型可以將2 種新型硬件結(jié)合在一起.但是大部分軟硬件協(xié)同策略為了保證事務(wù)的一致性語義,使用額外的機(jī)制集中式維護(hù)事務(wù)執(zhí)行順序.事務(wù)的集中式處理不僅會(huì)影響系統(tǒng)的吞吐率,還會(huì)限制事務(wù)系統(tǒng)在現(xiàn)代多核架構(gòu)上的可擴(kuò)展性.明確軟硬協(xié)同策略的缺點(diǎn)并提出新型軟硬協(xié)同的事務(wù)協(xié)議,對(duì)于新型硬件環(huán)境下的軟硬協(xié)同事務(wù)管理系統(tǒng)至關(guān)重要.表5 對(duì)新硬件的軟硬協(xié)同技術(shù)進(jìn)行了總結(jié)分類.硬件是否修改代表該研究對(duì)硬件是否進(jìn)行修改,以及代表該機(jī)制移植性是否簡便.HTM 區(qū)域代表研究中HTM 控制的區(qū)域空間.日志機(jī)制代表研究采用何種機(jī)制加速事務(wù)處理以及保證崩潰一致性.持久化代表研究中允許數(shù)據(jù)持久化是否可以等待,以便于減少頻繁的寫入.可擴(kuò)展性則代表該機(jī)制是否在多線程模型下隨著線程數(shù)量的增加吞吐率也隨之增加.事務(wù)標(biāo)識(shí)意味著研究方法如何區(qū)分事務(wù)的唯一性以及事務(wù)之間的順序.

        由于RTM 受限于L1 緩存的區(qū)域大小,數(shù)據(jù)只能短暫滯留在LLC 緩存行中,并且LogTM-SE[25]在中止事務(wù)時(shí)會(huì)阻塞其他修改同樣數(shù)據(jù)單元的事務(wù)并發(fā)執(zhí)行.為了快速實(shí)現(xiàn)ACID 編程模型,DHTM[52]使用HTM 與非易失性內(nèi)存相結(jié)合,從而加速事務(wù)處理性能.DHTM 采用一種基于HTM 的redo 日志,在內(nèi)存中維護(hù)一個(gè)單獨(dú)的區(qū)域,允許寫入覆蓋緩存中先前的值,提供持久化和原子性保證,并對(duì)L1 中的緩存行設(shè)置標(biāo)簽位,目的是跟蹤讀取和寫入集合,從而將RTM 從L1 緩存擴(kuò)展至LLC 中.為了保證隔離性,推測(cè)性讀取的緩存行必須在事務(wù)提交之前交由另外一個(gè)處理器修改,并且推測(cè)行讀取的緩存不得被修改和寫入.當(dāng)正在執(zhí)行的事務(wù)的緩存行從L1 緩存溢出時(shí),事務(wù)會(huì)中止執(zhí)行.因此,DHTM 維護(hù)一個(gè)溢出列表,記錄緩存行的狀態(tài)以及內(nèi)容地址.為了減少從LLC 到持久化內(nèi)存的數(shù)據(jù)移動(dòng),并利用日志先于數(shù)據(jù)落盤的特性,DHTM 在LLC 上創(chuàng)建時(shí)間緩沖窗口,使用寫合并機(jī)制減少數(shù)據(jù)持久化延遲.DHTM 通過減少持久化開銷提高了事務(wù)整體性能,但是DHTM在硬件中構(gòu)建redo 日志為事務(wù)提供的崩潰原子性操作,無法擴(kuò)展到其他高級(jí)語言的持久化模型中.并且,合并寫機(jī)制仍然會(huì)將冗余寫入這一過程放置在持久化內(nèi)存的關(guān)鍵路徑上,可能會(huì)增加后續(xù)事務(wù)延遲,從而影響事務(wù)管理系統(tǒng)的服務(wù)質(zhì)量.

        Table 5 Classification of Soft/Hardware Co-design in New Hardware Environment表5 新硬件環(huán)境下軟硬件協(xié)同設(shè)計(jì)的分類

        cc-HTM[53]不需要對(duì)硬件作任何修改,它將事務(wù)分為執(zhí)行階段和持久化階段:執(zhí)行階段利用Intel 處理器提供的HTM 原語并發(fā)執(zhí)行,為了防止緩存替換導(dǎo)致的持久化內(nèi)存中的數(shù)據(jù)不一致,寫操作會(huì)被映射到DRAM 中的 ALIAS TABLE,同時(shí)在易失性的緩存中生成日志,事務(wù)執(zhí)行結(jié)束后再將日志持久化到持久化內(nèi)存,避免HTM 事務(wù)執(zhí)行期間訪問持久化內(nèi)存延遲過高導(dǎo)致的事務(wù)崩潰.執(zhí)行階段結(jié)束之前,cc-HTM 用RDTSCP 指令獲取“持久化時(shí)間戳”,并以此為序?qū)⑹聞?wù)放入優(yōu)先隊(duì)列,事務(wù)進(jìn)入“等待”狀態(tài).專用持久化線程按照順序從優(yōu)先隊(duì)列取出事務(wù)并將其更新的數(shù)據(jù)寫回到持久化內(nèi)存上的原地址,形成一個(gè)符合一致性的“檢查點(diǎn)”,寫回后通知事務(wù)結(jié)束等待并提交.cc-HTM 還提供一個(gè)延遲參數(shù),允許事務(wù)在持久化完成之前提交事務(wù),應(yīng)用可以根據(jù)自己的需求權(quán)衡更短的延遲與更高的一致性來設(shè)置參數(shù)區(qū)間.cc-HTM 利用遞增的全局事務(wù)計(jì)數(shù)器來作為開始與結(jié)束的時(shí)間戳,并且采用只有一個(gè)持久化線程來從優(yōu)先隊(duì)列取出事務(wù)并將其更新寫回到原位置.cc-HTM 允許從事務(wù)關(guān)鍵路徑中移除延遲較大的內(nèi)存屏障指令,由上層應(yīng)用決定持久性時(shí)機(jī),但是這種方法會(huì)增加上層應(yīng)用的復(fù)雜性.

        NV-HTM[54]與DudeTM[42]類似,同樣使用“影子頁”以及redo 日志的方式解耦事務(wù)的執(zhí)行與持久化.NV-HTM 使用CPU 提供的物理時(shí)間戳來作為事務(wù)ID 的唯一標(biāo)識(shí),支撐事務(wù)的序列化執(zhí)行順序,避免了全局邏輯事務(wù)ID 帶來的擴(kuò)展瓶頸.每個(gè)線程記錄當(dāng)前正在運(yùn)行的事務(wù)時(shí)間戳,事務(wù)提交之前需要等待所有線程中更早開始或提交的事務(wù)結(jié)束以保證一致性.NV-HTM 通過檢查點(diǎn)策略來將日志寫回釋放日志空間.首先對(duì)每個(gè)線程的日志結(jié)尾指針進(jìn)行一個(gè)原子快照,快照之前的日志都是可以回收的區(qū)域,使用反向過濾檢查點(diǎn)機(jī)制反向遍歷線程的日志快照,以更新的地址為鍵、內(nèi)容為值創(chuàng)建一個(gè)鍵值對(duì),只記錄最近的更新并且合并相關(guān)的數(shù)據(jù)項(xiàng),減少回寫次數(shù);遍歷完所有的線程后將鍵值對(duì)中的內(nèi)容寫回持久化內(nèi)存,并刷回緩存;最后利用“檢查點(diǎn)日志”(CPLog)原子性更新所有線程日志的起始指針.NVHTM 通過將日志刷新延遲到事務(wù)提交之后,消除了事務(wù)執(zhí)行關(guān)鍵路徑中的日志刷新延遲.但是,NVHTM 需要事務(wù)按照順序線性提交來保證一致性,這樣引入了過多的等待,導(dǎo)致系統(tǒng)性能下降.

        Avni 等人[55]發(fā)現(xiàn)隨著處理器核心數(shù)目的增加,基于鎖的原子性操作越來越成為系統(tǒng)的瓶頸,利用HTM 可以避免這個(gè)問題,但HTM 無法直接訪問持久化內(nèi)存介質(zhì)使其難以構(gòu)建HTM 和持久內(nèi)存的事務(wù)系統(tǒng).Avni 等人提出一種PHTM 方法,對(duì)硬件作出修改,同時(shí)引入了新的指令透明刷回(TransparentFlush,TF).TF 支持在HTM 執(zhí)行過程中將數(shù)據(jù)從緩存刷回到持久化內(nèi)存并且不會(huì)使事務(wù)崩潰,也不會(huì)使緩存行失效,Avni 等人[55]利用TF 指令結(jié)合HTM 與持久化內(nèi)存構(gòu)建了PHTM.事務(wù)執(zhí)行過程首先在線程自己的緩存中修改對(duì)象并構(gòu)建undo 日志,此時(shí)的修改內(nèi)容是私有的,外部沒有可見性.在事務(wù)提交之前,PHTM 首先利用TF 指令持久化本事務(wù)的日志,提交之后持久化提交狀態(tài)標(biāo)記并將事務(wù)的修改寫回到持久化內(nèi)存中的原始位置,寫回成功之后即可回收日志空間.PHTM 利用標(biāo)記來保證每個(gè)地址最多允許出現(xiàn)在1 個(gè)日志中,這樣避免了日志回收過程中多線程日志之間的通信.標(biāo)記類似于一個(gè)寫鎖,事務(wù)寫數(shù)據(jù)地址之前需要等待標(biāo)記被釋放才能繼續(xù)執(zhí)行.PHTM 僅對(duì)日志中記錄的部分事務(wù)順序執(zhí)行,通過額外的鎖機(jī)制實(shí)現(xiàn),可以有效防止發(fā)生沖突的事務(wù)刷新日志,同時(shí)保證重放階段的正確性.但是,PHTM 在事務(wù)執(zhí)行期間一直持有鎖直至事務(wù)的所有日志都刷新到持久化內(nèi)存才釋放.在此期間,PHTM 可能遭受鎖爭(zhēng)用,從而引發(fā)大量的事務(wù)中止.

        PHTM 僅允許順序執(zhí)行事務(wù),無法支持硬件和軟件之間的事務(wù)并發(fā)執(zhí)行,這將導(dǎo)致硬件事務(wù)內(nèi)存在回退時(shí)會(huì)中止軟件事務(wù)內(nèi)存的執(zhí)行,降低事務(wù)并發(fā)性.PHyTM[56]提出一種基于持久化內(nèi)存的混合事務(wù)機(jī)制,提供3 種事務(wù)路徑.首先是基于軟件事務(wù)內(nèi)存(STM)路徑,PHyTM 使用類似2PL 的悲觀并發(fā)控制協(xié)議,對(duì)相應(yīng)數(shù)據(jù)項(xiàng)獲取鎖阻塞其他事務(wù)訪問.STM路徑通過日志回放機(jī)制實(shí)現(xiàn)數(shù)據(jù)持久化操作.其次是Slow HTM 路徑,不同于STM 路徑的是它無需獲取寫入地址的鎖,而是只需檢查寫入地址的鎖狀態(tài).由于HTM 本身的特性,Slow HTM 可以提供原子性操作,因此該路徑下的事務(wù)無需等待回放日志即可實(shí)現(xiàn)數(shù)據(jù)持久化寫入.如果事務(wù)在執(zhí)行階段和驗(yàn)證階段發(fā)現(xiàn)沖突,則中止該事務(wù).當(dāng)事務(wù)重試次數(shù)超過閾值時(shí),則交由STM 路徑執(zhí)行.最后一個(gè)是Fast HTM 路徑,允許事務(wù)在讀取數(shù)據(jù)時(shí)使用類似數(shù)據(jù)多版本的機(jī)制,僅保證當(dāng)前數(shù)據(jù)在某個(gè)狀態(tài)下的一致性,無需查看鎖的狀態(tài).為了保證數(shù)據(jù)一致性,該路徑下的每個(gè)事務(wù)通過驗(yàn)證STM 路徑上是否有正在寫回階段的執(zhí)行事務(wù).如果有,則中止該事務(wù);否則,繼續(xù)處理.當(dāng)事務(wù)中止次數(shù)超過閾值時(shí),事務(wù)會(huì)交由Slow HTM 執(zhí)行.Fast HTM 在只讀場(chǎng)景中沒有額外的同步開銷.同時(shí),為了減少鎖同步開銷,PHyTM 維護(hù)一個(gè)類似數(shù)組結(jié)構(gòu)的共享地址鎖存儲(chǔ)體,通過散列計(jì)算內(nèi)存中的地址獲取唯一的鎖存儲(chǔ)位置,防止對(duì)同一位置的內(nèi)容重復(fù)獲取鎖.PHyTM 通過自主切換事務(wù)執(zhí)行路徑機(jī)制有效減少事務(wù)并發(fā)執(zhí)行時(shí)由于回退引發(fā)的事務(wù)中止,但是PHyTM 僅關(guān)注了軟硬件之間的事務(wù)并發(fā)執(zhí)行,忽略了可擴(kuò)展性對(duì)事務(wù)性能的影響.

        NV-PhTM[57]指出在持久化內(nèi)存系統(tǒng)中提供事務(wù)模型,軟件與硬件事務(wù)內(nèi)存各有優(yōu)缺點(diǎn).軟件模式更加靈活且不受限制,但是對(duì)于短事務(wù)造成很嚴(yán)重的性能下降;硬件模式開銷更小,效率更高,但是受到硬件資源的限制,并且提供的是一種“盡力而為”機(jī)制,不保證事務(wù)的成功提交.因此,NV-PhTM 提出結(jié)合硬件與軟件的模式,將系統(tǒng)分為3 個(gè)階段,分別對(duì)應(yīng)執(zhí)行硬件事務(wù)內(nèi)存(HW),軟件事務(wù)內(nèi)存(SW)以及串行化模式(GLOCK)這3 種不同的路徑,并利用啟發(fā)式動(dòng)態(tài)選擇最合適的執(zhí)行路徑.HTM 利用NVHTM[54]結(jié)合CoW 技術(shù)將持久化內(nèi)存區(qū)域映射到DRAM 中,軟件事務(wù)內(nèi)存基于PSTM[55]結(jié)合日志提供事務(wù)模型.啟發(fā)式階段轉(zhuǎn)換綜合考慮系統(tǒng)的事務(wù)崩潰率、事務(wù)大小以及日志剩余容量等因素.比如事務(wù)較小則會(huì)切換到HTM 模式,多次資源受限導(dǎo)致事務(wù)崩潰將會(huì)切換到軟件模式,崩潰率過高將會(huì)進(jìn)入到串行化執(zhí)行等機(jī)制.

        Crafty[58]通過構(gòu)造無損undo 日志(nondestructive undo logging)來解決HTM 與持久化之間的矛盾,即在事務(wù)提交前將日志持久化,但是在HTM 執(zhí)行過程中持久化會(huì)導(dǎo)致事務(wù)崩潰.“無損undo 日志”將事務(wù)的完整執(zhí)行過程分為2 個(gè)HTM 事務(wù)和一次日志持久化操作:1)第1 階段Crafty 利用HTM 執(zhí)行事務(wù),每一次修改數(shù)據(jù)前需要構(gòu)建一條undo 日志,在這一階段的結(jié)尾,HTM 事務(wù)執(zhí)行前后的新舊數(shù)據(jù)都具有可見性,利用暫時(shí)還沒有持久化的undo 日志逆序?qū)⑦@個(gè)HTM 事務(wù)所作的更新還原并利用新數(shù)據(jù)構(gòu)建redo 日志.2)在上一個(gè)HTM 事務(wù)結(jié)束之后與下一個(gè)HTM 事務(wù)開始之前將undo 日志持久化.3)事務(wù)在這個(gè)階段的開始時(shí)利用邏輯時(shí)間戳來檢查第1 階段結(jié)束后是否有事務(wù)成功提交.如果沒有,則沒有發(fā)生沖突,Crafty 利用HTM 與第1 階段構(gòu)建的redo 日志更新數(shù)據(jù);否則,需要通過驗(yàn)證階段進(jìn)一步檢查是否真正有沖突產(chǎn)生,驗(yàn)證階段即重新執(zhí)行事務(wù)邏輯,檢查undo 日志中每一個(gè)條目地址所在位置的值.如果沒有沖突則可以提交事務(wù),否則需要崩潰事務(wù)重新執(zhí)行.Crafty 使用2 個(gè)策略保證事務(wù)的執(zhí)行.當(dāng)事務(wù)間競(jìng)爭(zhēng)激烈導(dǎo)致的系統(tǒng)頻繁崩潰且一段時(shí)間內(nèi)沒有事務(wù)成功提交時(shí),系統(tǒng)將回退到單個(gè)全局鎖(single global lock,SGL)模式,即事務(wù)執(zhí)行前首先需要驗(yàn)證是否有事務(wù)獲取了全局鎖,如果有則直接中止.這項(xiàng)策略保證了系統(tǒng)至少有一個(gè)事務(wù)可以正常進(jìn)行.其次,Crafty允許將事務(wù)拆分成多個(gè)小的事務(wù)執(zhí)行,防止緩存不足而導(dǎo)致的崩潰,當(dāng)事務(wù)更新的數(shù)據(jù)達(dá)到預(yù)設(shè)的閾值后將構(gòu)建undo 與redo 日志.但是,Crafty 可能出現(xiàn)事務(wù)重復(fù)執(zhí)行的情形.因?yàn)樵谑褂肏TM 啟動(dòng)事務(wù)時(shí),Crafty 需要使用全局時(shí)鐘檢查該事務(wù)是否是首次執(zhí)行.如果驗(yàn)證失敗,則需要重新執(zhí)行事務(wù).在高并發(fā)時(shí)全局時(shí)鐘的更新可能會(huì)產(chǎn)生爭(zhēng)用,導(dǎo)致事務(wù)頻繁執(zhí)行,產(chǎn)生額外開銷.

        Castro 等人[59]為了更好地發(fā)揮HTM 和Optane PM的性能,提出一種可擴(kuò)展的持久硬件事務(wù) SPHT.SPHT 不需要額外的硬件支持,就可以提供強(qiáng)一致性,即所有成功提交的事務(wù)及其依賴事務(wù)在系統(tǒng)崩潰后都可以被恢復(fù).為了避免順序持久化日志帶來的擴(kuò)展性瓶頸,SPHT 允許不同線程的事務(wù)能夠并發(fā)刷回日志.每個(gè)線程記錄當(dāng)前正在執(zhí)行的事務(wù)ID 及其持久化標(biāo)記,當(dāng)時(shí)間戳小于等于當(dāng)前事務(wù)ID 的事務(wù)都全部完成持久化操作,當(dāng)前事務(wù)才可以成功提交.全局持久化的“提交標(biāo)記”記錄最新的事務(wù)ID,用作恢復(fù)階段找到最新具有一致性的恢復(fù)點(diǎn).多個(gè)事務(wù)并發(fā)提交時(shí),只有具有最大時(shí)間戳的事務(wù)會(huì)更新標(biāo)記,避免了Optane PM 上冗余的數(shù)據(jù)寫入而引發(fā)的高延遲以及線程間的爭(zhēng)用.目前的日志回寫階段具有2 個(gè)擴(kuò)展瓶頸:1)必須遍歷所有線程的日志才能確定日志的執(zhí)行順序;2)必須執(zhí)行順序回寫日志操作來保證一致性.為了解決這2 個(gè)瓶頸,SPHT 將日志按照事務(wù)的時(shí)間戳順序用指針鏈接起來,不再需要遍歷日志來構(gòu)建事務(wù)間的順序關(guān)系.同時(shí),SPHT 將Optane PM 內(nèi)存區(qū)域分區(qū),不同的日志寫回線程寫入不相交的區(qū)域,這種空間分片機(jī)制使日志回寫操作得以并行擴(kuò)展.

        3.4 小 結(jié)

        新型硬件中的事務(wù)管理系統(tǒng)的2 個(gè)基本要素為崩潰一致性和事務(wù)并發(fā)性能.崩潰一致性需要通過額外的日志等機(jī)制保證數(shù)據(jù)一致性[60-61],順序化和持久化操作可能會(huì)對(duì)事務(wù)并發(fā)性能造成影響.同時(shí),事務(wù)并發(fā)機(jī)制為了提高性能,可能會(huì)亂序執(zhí)行并提交事務(wù),這也會(huì)對(duì)崩潰一致性造成影響,二者的關(guān)系相輔相成.目前新型硬件上的事務(wù)管理系統(tǒng)使用數(shù)據(jù)庫中廣泛使用的技術(shù)保證崩潰一致性,通過比較觀察得到5 點(diǎn)結(jié)論:1)對(duì)于更新數(shù)據(jù)較多的場(chǎng)景,使用redo 日志可以使事務(wù)系統(tǒng)達(dá)到更高的性能;2)對(duì)于讀為主的工作負(fù)載,使用undo 日志可以獲取更好的性能;3)CoW 解決了日志中的2 次寫入問題,但是復(fù)制開銷會(huì)產(chǎn)生寫放大.4)redo+CoW 混合機(jī)制可以靈活應(yīng)用于事務(wù)系統(tǒng),提高事務(wù)系統(tǒng)性能.比如SoftWrAP[41]和DudeTM[42]利用該機(jī)制減少寫放大和寫入次數(shù).并且,軟硬結(jié)合的事務(wù)系統(tǒng)如cc-HTM[53],NV-HTM[54],NV-PhTM[57],SPHT[59]使用該機(jī)制獲得了更高的性能.5)事務(wù)應(yīng)避免昂貴的持久化內(nèi)存指令使用,盡可能地使用合并寫機(jī)制.對(duì)于事務(wù)并發(fā)性能,LOC[40]和SP3[44]等機(jī)制的目的是減少硬件順序化開銷.Pisces[43]和TimeStone[34]等機(jī)制通過提供不同的隔離級(jí)別有效提高不同工作負(fù)載下的事務(wù)并發(fā)性能.ArchTM[45]和SPHT[59]充分利用Optane PM 內(nèi)部特性,打破了事務(wù)管理系統(tǒng)的可擴(kuò)展性瓶頸.總之,面向新型硬件的事務(wù)管理系統(tǒng)可以通過修改事務(wù)提交順序和降低事務(wù)持久化開銷,在保證數(shù)據(jù)一致性的前提下減少額外的冗余數(shù)據(jù)寫入,實(shí)現(xiàn)高可擴(kuò)展性的并發(fā)控制協(xié)議,從整體上提高面向新型硬件中的事務(wù)管理系統(tǒng)性能.

        4 未來展望

        新型硬件具有與傳統(tǒng)硬件不同的特性,如HTM支持原子性寫入,持久化內(nèi)存既可以保證類似主存的高速訪問,又可以提供二級(jí)存儲(chǔ)的非易失性.現(xiàn)有的事務(wù)管理系統(tǒng)無法有效發(fā)揮新型硬件的最大性能,因此需要對(duì)傳統(tǒng)事務(wù)管理系統(tǒng)中的關(guān)鍵路徑和技術(shù)路線進(jìn)行重新抽象化,結(jié)合現(xiàn)實(shí)場(chǎng)景中的業(yè)務(wù)需求進(jìn)一步地對(duì)新型硬件環(huán)境下的事務(wù)管理系統(tǒng)進(jìn)行設(shè)計(jì).

        1)設(shè)計(jì)新型硬件環(huán)境中多核架構(gòu)下的并發(fā)控制協(xié)議.NUMA 架構(gòu)已經(jīng)成為當(dāng)前服務(wù)器的主流趨勢(shì),未來可能出現(xiàn)數(shù)十核乃至上千核的平臺(tái)架構(gòu).跨NUMA 節(jié)點(diǎn)的數(shù)據(jù)訪問會(huì)造成一定的開銷和訪問延遲.雖然傳統(tǒng)事務(wù)管理系統(tǒng)中已經(jīng)針對(duì)NUMA 架構(gòu)下的數(shù)據(jù)訪問進(jìn)行了一系列的優(yōu)化,但是目前新型硬件環(huán)境下的并發(fā)控制協(xié)議并沒有對(duì)此進(jìn)行重新設(shè)計(jì).NUMA 架構(gòu)已經(jīng)成為了制約新型硬件環(huán)境下并發(fā)控制協(xié)議的前置放大器,事務(wù)無法具有高擴(kuò)展性.并且隨著業(yè)務(wù)場(chǎng)景的工作負(fù)載日益復(fù)雜,不同場(chǎng)景下的應(yīng)用程序語義與不同并發(fā)控制協(xié)議之間的結(jié)合各有優(yōu)勢(shì).如何感知程序語義、智能化實(shí)時(shí)調(diào)整并發(fā)控制協(xié)議是未來的研究工作.雖然當(dāng)前其他新型硬件如ReRAM 技術(shù)尚不成熟,沒有在工業(yè)界大面積推廣使用,但這種存算一體化的新型硬件可以打破現(xiàn)有的馮·諾伊曼架構(gòu)瓶頸,提供高性能、低功耗的硬件服務(wù),減少數(shù)據(jù)從內(nèi)存單元移動(dòng)至計(jì)算單元的開銷,這為研究者帶來更多的機(jī)遇與挑戰(zhàn).但是,如何高效利用存算一體化新型硬件的內(nèi)部特性設(shè)計(jì)并發(fā)控制協(xié)議可能是未來的研究路線,如帶寬、訪問粒度、硬件介質(zhì)內(nèi)部數(shù)據(jù)處理最大并行度等維度對(duì)事務(wù)管理系統(tǒng)的性能影響.并且,如何保證基于存算一體化事務(wù)管理系統(tǒng)的一致性可能會(huì)得到更多的關(guān)注.

        2)設(shè)計(jì)異構(gòu)事務(wù)管理系統(tǒng).當(dāng)前HTM 和非易失性內(nèi)存結(jié)合的工作主要考慮了事務(wù)管理系統(tǒng)執(zhí)行路徑如何實(shí)現(xiàn)1+1 > 2 的高性能優(yōu)勢(shì),并沒有針對(duì)硬件本身特性進(jìn)行優(yōu)化,也沒有在性能和硬件壽命之間進(jìn)行權(quán)衡.非易失性內(nèi)存的持久域已經(jīng)擴(kuò)展到LLC層次,可以有效延展HTM 的區(qū)域.各種新興的異構(gòu)硬件架構(gòu)正在對(duì)現(xiàn)有的體系結(jié)構(gòu)產(chǎn)生挑戰(zhàn).如CPU和GPU/FPGA 結(jié)合為上層應(yīng)用提供更高效率和低延遲的處理性能.但是,由于異構(gòu)硬件本身硬件特性的不同,無法在不同的工作負(fù)載下發(fā)揮最大性能.因此,研究者可以進(jìn)一步考慮異構(gòu)硬件下的耦合事務(wù)執(zhí)行路徑,抽象化表征屬性設(shè)計(jì)事務(wù)模型.并且,服務(wù)質(zhì)量是衡量事務(wù)管理系統(tǒng)的一項(xiàng)重要指標(biāo),即事務(wù)管理系統(tǒng)在保證高并發(fā)的同時(shí)保障尾延遲被用戶所接受.新型硬件環(huán)境下的長尾延遲出現(xiàn)的原因主要包括事務(wù)并發(fā)原語沖突和持久化屏障開銷大.異構(gòu)事務(wù)管理系統(tǒng)可以從底層構(gòu)建與傳統(tǒng)事務(wù)系統(tǒng)不同的組織布局,消除事務(wù)執(zhí)行冗余路徑.異構(gòu)事務(wù)管理系統(tǒng)可以進(jìn)一步設(shè)計(jì)相關(guān)程序模型,如異構(gòu)一致性模型,該模型從底層構(gòu)建原子性存儲(chǔ),從而提供系統(tǒng)可靠性服務(wù).

        5 總結(jié)

        利用新型硬件可以為事務(wù)管理系統(tǒng)提供高效的運(yùn)行效率,但是設(shè)備工藝本身的不足同樣會(huì)成為新的挑戰(zhàn).由于HTM 受限于區(qū)域容量限制,無法從根本上減少事務(wù)沖突率;并且非易失性內(nèi)存訪問粒度、讀寫不均衡、持久化屏障開銷大等問題制約了事務(wù)管理系統(tǒng)性能,導(dǎo)致事務(wù)管理系統(tǒng)無法真正發(fā)揮高并發(fā)、可擴(kuò)展性強(qiáng)的優(yōu)勢(shì).

        本文從新型硬件本身特性、事務(wù)層面特性和持久性路徑等方面出發(fā),介紹了目前相關(guān)研究工作,并且結(jié)合實(shí)際應(yīng)用場(chǎng)景需求給出了未來基于新型硬件的事務(wù)管理系統(tǒng)的重要研究方向.未來復(fù)雜的業(yè)務(wù)需求對(duì)事務(wù)管理系統(tǒng)的設(shè)計(jì)也提出了更高的要求,因此相關(guān)研究人員要結(jié)合新型硬件特性,立足于未來存算一體化的發(fā)展趨勢(shì),設(shè)計(jì)智能感知事務(wù)管理系統(tǒng),保證新型硬件環(huán)境下的事務(wù)管理系統(tǒng)的可靠性.

        作者貢獻(xiàn)聲明:胡浩負(fù)責(zé)搜集相關(guān)研究工作以及文章整體撰寫;梁文凱負(fù)責(zé)硬件特性分析并協(xié)助文章撰寫;李詩逸負(fù)責(zé)討論論文框架和修改論文;王鴻鵬負(fù)責(zé)對(duì)目前研究熱點(diǎn)和未來發(fā)展方向的內(nèi)容進(jìn)行補(bǔ)充;夏文負(fù)責(zé)文章框架調(diào)整、整體思路的指導(dǎo),并修改論文.

        猜你喜歡
        一致性機(jī)制
        關(guān)注減污降碳協(xié)同的一致性和整體性
        公民與法治(2022年5期)2022-07-29 00:47:28
        構(gòu)建“不敢腐、不能腐、不想腐”機(jī)制的思考
        注重教、學(xué)、評(píng)一致性 提高一輪復(fù)習(xí)效率
        對(duì)歷史課堂教、學(xué)、評(píng)一體化(一致性)的幾點(diǎn)探討
        IOl-master 700和Pentacam測(cè)量Kappa角一致性分析
        自制力是一種很好的篩選機(jī)制
        文苑(2018年21期)2018-11-09 01:23:06
        ONVIF的全新主張:一致性及最訪問控制的Profile A
        定向培養(yǎng) 還需完善安置機(jī)制
        基于事件觸發(fā)的多智能體輸入飽和一致性控制
        破除舊機(jī)制要分步推進(jìn)
        亚洲最大av在线精品国产| 日本在线中文字幕一区二区| 亚洲日韩专区在线视频| 国产免费网站看v片元遮挡| 欧美丝袜秘书在线一区| 一级黄片草逼免费视频| 亚洲自拍偷拍一区二区三区| 久久久精品国产免大香伊 | 国产伦理一区二区| 国产特级毛片aaaaaa高清| 无码国产精品一区二区vr老人| 日韩欧美中文字幕公布| 欧美一级视频在线| 日本一曲二曲三曲在线| 日韩人妻中文字幕专区| 夹得好湿真拔不出来了动态图| 欧洲freexxxx性少妇播放| 狠干狠爱无码区| 99色网站| 亚洲二区精品婷婷久久精品| 日韩亚洲一区二区三区四区| 亚洲日韩国产一区二区三区| 无码国产午夜福利片在线观看| 欧美精品一级| 亚洲在线一区二区三区| 91九色中文视频在线观看| 成 人片 黄 色 大 片| 少妇无码av无码专区线| 亚洲男人精品| 素人系列免费在线观看| 亚洲av熟女传媒国产一区二区| 久久无码潮喷a片无码高潮| 国产裸体舞一区二区三区| 日本一区午夜艳熟免费| 2021国产最新无码视频| 中文字幕国产精品专区| 亚洲国产精品高清一区| 特级a欧美做爰片第一次| 亚洲中文字幕第一页在线| 久国产精品久久精品国产四虎| 综合中文字幕亚洲一区二区三区|