用于持久性存儲(chǔ)器的多版本化非易失性存儲(chǔ)器層級(jí)的制作方法
【專利說明】
【背景技術(shù)】
[0001]持久性存儲(chǔ)器在長(zhǎng)持續(xù)時(shí)間內(nèi)存儲(chǔ)數(shù)據(jù)。當(dāng)該數(shù)據(jù)被維護(hù)或保留在未經(jīng)改變的狀態(tài)中使得其可以在稍后時(shí)間處在相同狀態(tài)中被再調(diào)用或檢索時(shí),數(shù)據(jù)可以被稱為持久性數(shù)據(jù)。通常,持久性數(shù)據(jù)由一個(gè)過程創(chuàng)建和存儲(chǔ),并且隨后在稍后時(shí)間處由另一過程檢索。
【附圖說明】
[0002]圖1A圖示了包括示例非易失性高速緩存和示例非易失性存儲(chǔ)器以提供持久性存儲(chǔ)器的示例持久性存儲(chǔ)器區(qū)。
[0003]圖1B示出示例處理器系統(tǒng)中的圖1A的示例持久性存儲(chǔ)器區(qū)以提供用于對(duì)持久性數(shù)據(jù)結(jié)構(gòu)的原子、一致且耐久的(durable)數(shù)據(jù)更新的多版本化非易失性存儲(chǔ)器層級(jí)。
[0004]圖2圖不了圖1A和1B的不例易失性尚速緩存事務(wù)管理器和不例非易失性尚速緩存事務(wù)管理器的示例配置。
[0005]圖3圖示了針對(duì)由圖1A和1B的示例處理器系統(tǒng)運(yùn)行的事務(wù)的示例時(shí)序圖。
[0006]圖4圖示了圖3的事務(wù)期間圖2的示例隊(duì)列。
[0007]圖5是表示可以由邏輯或示例機(jī)器可讀指令執(zhí)行以將數(shù)據(jù)存儲(chǔ)在使用圖1A、1B和2的示例持久性存儲(chǔ)器架構(gòu)的圖1A、1B和2的非易失性高速緩存和非易失性存儲(chǔ)器中的示例過程的流程圖。
[0008]圖6是表示可以由邏輯或示例機(jī)器可讀指令執(zhí)行以執(zhí)行持久性存儲(chǔ)器更新的示例過程的流程圖。
[0009]圖7是表示可以由邏輯或示例機(jī)器可讀指令執(zhí)行以執(zhí)行系統(tǒng)恢復(fù)的示例過程的流程圖。
【具體實(shí)施方式】
[0010]非易失性存儲(chǔ)器在沒有所施加的功率的情況下存儲(chǔ)和保留(例如維持)數(shù)據(jù)。一些非易失性存儲(chǔ)器允許以精細(xì)粒度(例如一字節(jié))執(zhí)行讀取和/或?qū)懭氩僮?。由于增加的密度和可縮放性特性,以及在沒有所施加的功率的情況下維持?jǐn)?shù)據(jù)的能力,一些非易失性存儲(chǔ)器技術(shù)(例如字節(jié)可尋址的非易失性存儲(chǔ)器,諸如相變存儲(chǔ)器、自旋轉(zhuǎn)移矩存儲(chǔ)器、憶阻器等)對(duì)于用作主存儲(chǔ)器的諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)之類的易失性存儲(chǔ)器是優(yōu)選的。字節(jié)可尋址的非易失性存儲(chǔ)器可以用于實(shí)現(xiàn)甚至在應(yīng)用和/或系統(tǒng)故障之后維護(hù)存儲(chǔ)器中數(shù)據(jù)對(duì)象的狀態(tài)的持久性存儲(chǔ)。
[0011]在非易失性存儲(chǔ)器中的數(shù)據(jù)更新過程期間,故障、存儲(chǔ)器泄漏和/或使更新過程中斷的應(yīng)用錯(cuò)誤可能破壞(corrupt)非易失性存儲(chǔ)器中的數(shù)據(jù)。本文所公開的示例使得非易失性存儲(chǔ)器系統(tǒng)能夠執(zhí)行安全數(shù)據(jù)更新使得在正常操作條件期間和在發(fā)生系統(tǒng)和/或應(yīng)用故障時(shí)維護(hù)數(shù)據(jù)完整性和一致性。本文所公開的示例使得能夠通過提供多版本化非易失性存儲(chǔ)器層級(jí)以對(duì)非易失性持久性數(shù)據(jù)結(jié)構(gòu)執(zhí)行原子、一致且耐久的數(shù)據(jù)更新來(lái)維護(hù)非易失性存儲(chǔ)器中的數(shù)據(jù)完整性和一致性。
[0012]原子數(shù)據(jù)更新是其中完整執(zhí)行特定更新請(qǐng)求或過程的所有數(shù)據(jù)更新使得沒有數(shù)據(jù)更新被留置部分未完成的數(shù)據(jù)更新。對(duì)數(shù)據(jù)結(jié)構(gòu)的部分未完成數(shù)據(jù)更新的示例是在數(shù)據(jù)結(jié)構(gòu)的節(jié)點(diǎn)被解分配(例如該節(jié)點(diǎn)不再被視為存儲(chǔ)有效數(shù)據(jù)),但是另一節(jié)點(diǎn)仍舊指向經(jīng)解分配的節(jié)點(diǎn)時(shí)。數(shù)據(jù)更新在其更新數(shù)據(jù)結(jié)構(gòu)的一個(gè)或多個(gè)節(jié)點(diǎn)中的數(shù)據(jù)時(shí)提供跨數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)的一致性使得數(shù)據(jù)節(jié)點(diǎn)之間的有意義的關(guān)系和排序得以維護(hù)使得數(shù)據(jù)結(jié)構(gòu)保持在有效、可使用狀態(tài)中。在一些示例中,如果未實(shí)現(xiàn)一致性,亂序數(shù)據(jù)更新可能導(dǎo)致不一致的狀態(tài),其可能造成無(wú)效、不可使用和不可恢復(fù)的數(shù)據(jù)結(jié)構(gòu)。如本文所使用的,一致且可以從系統(tǒng)故障、功率喪失和/或意圖/非意圖系統(tǒng)關(guān)機(jī)事件存活下來(lái)的數(shù)據(jù)被稱為耐久數(shù)據(jù)。為了實(shí)現(xiàn)耐久性,數(shù)據(jù)被直寫到長(zhǎng)期儲(chǔ)存器(例如非易失性存儲(chǔ)器),其中其在長(zhǎng)持續(xù)時(shí)間內(nèi)維持。在一些實(shí)例中,用戶請(qǐng)求數(shù)據(jù)更新的結(jié)果應(yīng)當(dāng)在更新一結(jié)束就變?yōu)槟途玫?。在這樣的實(shí)例中,數(shù)據(jù)更新的結(jié)果被立即或者盡可能快地驅(qū)逐(evict)到非易失性存儲(chǔ)器。以此方式,可以使數(shù)據(jù)是耐久的,使得其在從系統(tǒng)故障和/或功率喪失(如果發(fā)生這樣的事件的話)恢復(fù)之后可用于檢索。在一些現(xiàn)有技術(shù)中,實(shí)現(xiàn)耐久性增加芯片外業(yè)務(wù)量和/或防止亂序操作調(diào)度。
[0013]在存儲(chǔ)器管理系統(tǒng)中,事務(wù)用于更新數(shù)據(jù)、促進(jìn)從故障中恢復(fù),以及使得數(shù)據(jù)能夠在系統(tǒng)故障的事件中是一致的。事務(wù)是單獨(dú)且不可劃分的操作或操作集,其必須全部被完整執(zhí)行或者完全不執(zhí)行。事務(wù)可以包括例如讀取數(shù)個(gè)高速緩存行、更新從高速緩存行讀取的數(shù)據(jù)以及將經(jīng)更新的數(shù)據(jù)寫入到高速緩存行。在這樣的事務(wù)中,針對(duì)要成功完成的事務(wù),所有讀取、更新和寫入必須被完成。在一些示例中,軟件接口用于實(shí)現(xiàn)事務(wù)。其它接口可以附加或可替換地用于實(shí)現(xiàn)事務(wù)。
[0014]高速緩存系統(tǒng)使用多個(gè)類型的事務(wù)狀態(tài)。事務(wù)狀態(tài)的示例類型被稱為未提交事務(wù)、提交中事務(wù)和已提交事務(wù)。在數(shù)據(jù)被指派給事務(wù)之后,但是在事務(wù)開始(例如以更新數(shù)據(jù)或者寫入到數(shù)據(jù))之前,事務(wù)被稱為未提交事務(wù)。在事務(wù)運(yùn)行的同時(shí)(例如在事務(wù)正從高速緩存行讀取數(shù)據(jù)和/或?qū)?shù)據(jù)寫入到高速緩存行的同時(shí)),事務(wù)被稱為提交中事務(wù)。當(dāng)提交中事務(wù)正更新數(shù)據(jù)/將數(shù)據(jù)寫入到非易失性存儲(chǔ)器時(shí),并且在提交中事務(wù)結(jié)束更新/寫入數(shù)據(jù)之前(例如與事務(wù)相關(guān)聯(lián)的不可劃分?jǐn)?shù)據(jù)集直到提交中事務(wù)結(jié)束更新/寫入所有不可劃分?jǐn)?shù)據(jù)集為止僅部分被更新),提交中事務(wù)已經(jīng)寫入到非易失性存儲(chǔ)器的數(shù)據(jù)的任何部分被稱為持久性數(shù)據(jù)。當(dāng)事務(wù)完成運(yùn)行時(shí),其被稱為已提交事務(wù)。一旦事務(wù)完成運(yùn)行(例如事務(wù)是已提交事務(wù))并且由事務(wù)更新的數(shù)據(jù)(例如與事務(wù)相關(guān)聯(lián)的數(shù)據(jù)集)被存儲(chǔ)在非易失性存儲(chǔ)器中,數(shù)據(jù)被稱為耐久的。因此,如果數(shù)據(jù)在非易失性存儲(chǔ)器中是持久性的并且與數(shù)據(jù)相關(guān)聯(lián)的事務(wù)是已提交事務(wù)則數(shù)據(jù)是耐久的。
[0015]—些現(xiàn)有技術(shù)采用基于軟件的多版本化數(shù)據(jù)結(jié)構(gòu)、重做或撤消記錄、預(yù)寫(write-ahead)記錄或影式分頁(yè)以提供非易失性存儲(chǔ)器中的一致數(shù)據(jù)更新。然而,這樣的技術(shù)招致性能和功率方面的增加的開銷。例如,預(yù)寫記錄涉及將持久性數(shù)據(jù)更新的日志寫入到主存儲(chǔ)器(例如芯片外非易失性存儲(chǔ)器)以提供原子性和耐久性。這樣的數(shù)據(jù)業(yè)務(wù)量可能招致長(zhǎng)等待時(shí)間并且增加存儲(chǔ)器總線處的帶寬需求。等待時(shí)間和/或帶寬問題可能導(dǎo)致系統(tǒng)吞吐量降級(jí)。
[0016]在一些現(xiàn)有系統(tǒng)中,持久性存儲(chǔ)器區(qū)包括僅非易失性主存儲(chǔ)器,使得數(shù)據(jù)不被稱為持久的,直到其從高速緩存直寫到非易失性主存儲(chǔ)器為止。本文所公開的示例系統(tǒng)和方法提供擴(kuò)大或擴(kuò)展持久性存儲(chǔ)器區(qū)以包括非易失性高速緩存和非易失性主存儲(chǔ)器的持久性存儲(chǔ)器架構(gòu)。因此,本文所公開的示例使得能夠在數(shù)據(jù)一被存儲(chǔ)在非易失性高速緩存中就維持?jǐn)?shù)據(jù),而不是等待直到其被存儲(chǔ)在非易失性主存儲(chǔ)器中。本文所公開的示例系統(tǒng)和方法相對(duì)于現(xiàn)有基于日志的持久性技術(shù)而言減少存儲(chǔ)器等待時(shí)間和/或數(shù)據(jù)業(yè)務(wù)量。此夕卜,本文所公開的示例系統(tǒng)和方法使得能夠在更新存儲(chǔ)在非易失性存儲(chǔ)器中的存儲(chǔ)器中數(shù)據(jù)的同時(shí)自動(dòng)地維持?jǐn)?shù)據(jù)。因此,本文所公開的示例系統(tǒng)和方法通過避免通常與現(xiàn)有基于日志的技術(shù)相關(guān)聯(lián)的大量數(shù)據(jù)移動(dòng)來(lái)改進(jìn)系統(tǒng)吞吐量并且減少存儲(chǔ)器功率消耗。
[0017]在現(xiàn)有存儲(chǔ)器系統(tǒng)中,易失性和非易失性儲(chǔ)存器的邊界相對(duì)清晰。也就是說,易失性儲(chǔ)存器包括高速緩存(其可以被直接尋址和硬件控制),并且非易失性儲(chǔ)存器包括硬盤驅(qū)動(dòng)器和固態(tài)驅(qū)動(dòng)器(其可以是通過諸如文件讀取、文件寫入等之類的軟件接口定向和訪問的塊)。對(duì)于其中軟件控制易失性域(例如易失性存儲(chǔ)器)與非易失性域(例如硬盤)之間的數(shù)據(jù)移動(dòng)的系統(tǒng),編程器寫入故障保護(hù)(failsafe)軟件或固件特征以防止舊(例如有效且一致)的數(shù)據(jù)被新的數(shù)據(jù)或未提交事務(wù)破壞。
[0018]然而,關(guān)于一些字節(jié)可尋址的非易失性存儲(chǔ)器系統(tǒng),易失性和非易失性儲(chǔ)存器之間實(shí)現(xiàn)的邊界不太清晰。臟(dirty)數(shù)據(jù)(例如已經(jīng)改變的數(shù)據(jù))可能首先存儲(chǔ)在高速緩存層級(jí)中并且隨后被驅(qū)逐到存儲(chǔ)器的較低級(jí)別以最終存儲(chǔ)在非易失性存儲(chǔ)器中。然而,軟件并不總是能夠控制何時(shí)將臟數(shù)據(jù)直寫到非易失性存儲(chǔ)器。例如,與未提交事務(wù)相關(guān)聯(lián)的臟數(shù)據(jù)可能被過早地驅(qū)逐到非易失性存儲(chǔ)器,如果事務(wù)和/或系統(tǒng)故障在直寫或數(shù)據(jù)更新期間能夠重新建立數(shù)據(jù)一致性之前發(fā)生則這可能導(dǎo)致破壞數(shù)據(jù)完整性。在一些示例中,已提交事務(wù)的結(jié)果可能在事務(wù)被提交之后保持在易失性高速緩存層級(jí)中。軟件然后可以單獨(dú)清除(flush)每一個(gè)高速緩存行以迫使驅(qū)逐臟數(shù)據(jù)以被直寫到非易失性存儲(chǔ)器。然而,這樣的軟件干預(yù)是低效的。
[0019]對(duì)于諸如硬盤驅(qū)動(dòng)器之類的現(xiàn)有非易失性儲(chǔ)存器而言,用于原子性、一致性和/或耐久性的基于軟件的支持是可接受的,因?yàn)榇判杂脖P驅(qū)動(dòng)器一般是緩慢的。因而,軟件操作一般不使性能降級(jí),因?yàn)檫@樣的軟件通常不比磁性硬盤驅(qū)動(dòng)器更慢。然而,諸如固態(tài)存儲(chǔ)器(例如相變存儲(chǔ)器(PCM)、自旋轉(zhuǎn)移矩存儲(chǔ)器(STT-RAM)、憶阻器等)之類的最近興起的非易失性存儲(chǔ)器技術(shù)相對(duì)于諸如磁性硬驅(qū)動(dòng)器之類的機(jī)電非易失性儲(chǔ)存器而言操作得更快。照此,實(shí)現(xiàn)原子性、一致性和/或耐久性的基于軟件的過程負(fù)面地影響具有固態(tài)非易失性存儲(chǔ)器技術(shù)的存儲(chǔ)器系統(tǒng)的性能。
[0020]本文所公開的示例系統(tǒng)和方法使用基于硬件的多版本化以提供原子性、一致性和/或耐久性。本文所公開的示例系統(tǒng)和方法提供還可以用于實(shí)現(xiàn)例如當(dāng)數(shù)據(jù)被修改時(shí)保留數(shù)據(jù)的在先版本的多版本化存儲(chǔ)器的非易失性存儲(chǔ)器技術(shù)。本文所公開的示例系統(tǒng)和方法使得能夠使用非易失性存儲(chǔ)器層級(jí)來(lái)維護(hù)(例如以高速緩存行粒度)數(shù)據(jù)的多個(gè)版本。本文所公開的示例系統(tǒng)和方法提供使用非易失性高速緩存和非易失性主存儲(chǔ)器來(lái)實(shí)現(xiàn)持久性存儲(chǔ)器區(qū)的持久性存儲(chǔ)器架構(gòu)。因此,本文所公開的示例系統(tǒng)和方法使得能夠在數(shù)據(jù)一被寫入到非易失性高速緩存就使數(shù)據(jù)是持久性的。因此,本文所公開的示例系統(tǒng)和方法相對(duì)于用于確保數(shù)據(jù)持久性的現(xiàn)有基于日志的技術(shù)而言減少涉及維持?jǐn)?shù)據(jù)的存儲(chǔ)器等待時(shí)間和/或業(yè)務(wù)量。本文所公開的示例系統(tǒng)和方法維護(hù)持久性數(shù)據(jù)而不需要維護(hù)日志。本文所公開的示例無(wú)日志數(shù)據(jù)持久性技術(shù)通過避免通常在基于日志的技術(shù)中使用的大量數(shù)據(jù)移動(dòng)而相對(duì)于現(xiàn)有系統(tǒng)增加系統(tǒng)吞吐量并且減少存儲(chǔ)器