用于支持持久存儲(chǔ)器的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本文所描述的實(shí)施例總體上涉及數(shù)據(jù)處理,并且更具體地涉及用于支持持久存儲(chǔ)器的方法和裝置。
【背景技術(shù)】
[0002]傳統(tǒng)的數(shù)據(jù)處理設(shè)備可以使用易失性和非易失性數(shù)據(jù)存儲(chǔ)設(shè)備二者。例如,數(shù)據(jù)處理設(shè)備可以使用硬盤(pán)驅(qū)動(dòng)器作為非易失性大容量存儲(chǔ)設(shè)備,同時(shí)使用隨機(jī)存取存儲(chǔ)器(RAM)作為易失性存儲(chǔ)設(shè)備。數(shù)據(jù)處理設(shè)備還可以使用非易失性閃速存儲(chǔ)器。易失性存儲(chǔ)設(shè)備還可以稱為非持久存儲(chǔ)設(shè)備。相反地,非易失性存儲(chǔ)設(shè)備還可以稱為持久存儲(chǔ)設(shè)備。持久存儲(chǔ)設(shè)備即使在未被供電時(shí)也維持其內(nèi)容,而非持久存儲(chǔ)設(shè)備在未被供電時(shí)并不可靠地維持其內(nèi)容。
[0003]通常,持久大容量數(shù)據(jù)存儲(chǔ)設(shè)備(例如,硬盤(pán)驅(qū)動(dòng)器)是文件可尋址的,而非持久數(shù)據(jù)存儲(chǔ)設(shè)備(例如,RAM)是位置可尋址或字節(jié)可尋址的。然而,持久存儲(chǔ)設(shè)備也可以是位置可尋址或字節(jié)可尋址的。例如,數(shù)據(jù)處理設(shè)備的啟動(dòng)代碼可以駐留在字節(jié)可尋址的閃速存儲(chǔ)器上。
[0004]出于本公開(kāi)的目的,術(shù)語(yǔ)“持久存儲(chǔ)器”指的是位置可尋址的或字節(jié)可尋址的數(shù)據(jù)存儲(chǔ)設(shè)備,其即使在不被供電時(shí)也保持其內(nèi)容。
[0005]數(shù)據(jù)處理設(shè)備可以使用一個(gè)或多個(gè)高速緩存用于改善的性能。例如,中央處理單元(CPU)可以包括一個(gè)或多個(gè)級(jí)別的高速緩存。類似地,存儲(chǔ)器控制器和其它部件可以包括數(shù)據(jù)緩沖器。
[0006]另外,數(shù)據(jù)處理設(shè)備可以被配置為使用不同的技術(shù)以在不同的存儲(chǔ)器空間存儲(chǔ)數(shù)據(jù)。例如,可尋址存儲(chǔ)器空間中的一些或全部可以被配置為作為寫(xiě)回(WB)存儲(chǔ)器操作。當(dāng)應(yīng)用、操作系統(tǒng)或其它軟件將數(shù)據(jù)存儲(chǔ)到WB存儲(chǔ)器時(shí),數(shù)據(jù)實(shí)際首先被保存到高速緩存中,然后僅在特定條件下或在預(yù)定的間隔處數(shù)據(jù)被寫(xiě)入到最終存儲(chǔ)器位置。當(dāng)新的數(shù)據(jù)已經(jīng)寫(xiě)入到高速緩存但是還未寫(xiě)入到存儲(chǔ)器中的對(duì)應(yīng)位置時(shí),在高速緩存中的數(shù)據(jù)被認(rèn)為是新的,而在存儲(chǔ)器中的老的數(shù)據(jù)被認(rèn)為是陳舊的。另外,包含新的數(shù)據(jù)的高速緩存行被認(rèn)為是臟(dirty)的。
[0007]當(dāng)操作系統(tǒng)或應(yīng)用將數(shù)據(jù)存儲(chǔ)或?qū)懭氲匠志么鎯?chǔ)器中的指定位置時(shí),在認(rèn)為完成存儲(chǔ)指令或操作的時(shí)間與實(shí)際將數(shù)據(jù)存儲(chǔ)在持久存儲(chǔ)器中的時(shí)間之間可能存在顯著的延遲。因此,如果在應(yīng)用已經(jīng)執(zhí)行了存儲(chǔ)指令之后但在相對(duì)應(yīng)的數(shù)據(jù)已經(jīng)到達(dá)持久存儲(chǔ)器域之前丟失了電力,則可能發(fā)生錯(cuò)誤結(jié)果。出于本公開(kāi)的目的,術(shù)語(yǔ)“持久存儲(chǔ)器域”指的是即使在數(shù)據(jù)到達(dá)硬件部件之后丟失電力也能保證接收到的數(shù)據(jù)被保存在持久存儲(chǔ)器中的所述(那些)硬件部件(或部件集合)。另外,術(shù)語(yǔ)“PM軟件”指的是將數(shù)據(jù)存儲(chǔ)到持久存儲(chǔ)器的應(yīng)用軟件、將數(shù)據(jù)存儲(chǔ)到持久存儲(chǔ)器的操作系統(tǒng)、或者將數(shù)據(jù)存儲(chǔ)到持久存儲(chǔ)器的其它類型的軟件。另外,術(shù)語(yǔ)“耐久的(durable)”可以用于指代已經(jīng)到達(dá)持久存儲(chǔ)器域的數(shù)據(jù)。
[0008]如果軟件開(kāi)發(fā)者非常關(guān)心并密切關(guān)注多個(gè)細(xì)節(jié),則開(kāi)發(fā)者可以設(shè)計(jì)解決電力損失和錯(cuò)誤結(jié)果的風(fēng)險(xiǎn)的PM軟件。但是,如下文詳細(xì)描述的,在應(yīng)用軟件級(jí)別解決這些風(fēng)險(xiǎn)可能不是解決這些風(fēng)險(xiǎn)的最佳方式。軟件開(kāi)發(fā)者可以使用用于支持持久存儲(chǔ)器的改善方法和
目.ο
【附圖說(shuō)明】
[0009]圖1是具有用于支持持久存儲(chǔ)器的特征的示例性數(shù)據(jù)處理系統(tǒng)的框圖;
[0010]圖2是示出了示例性存儲(chǔ)器空間的集合的框圖;
[0011]圖3是使用持久存儲(chǔ)器的示例性過(guò)程的流程圖;
[0012]圖4Α和4Β表示描繪用于支持持久存儲(chǔ)器的示例性操作序列的序列圖;
[0013]圖5Α和5Β表示用于支持持久存儲(chǔ)器的示例性過(guò)程的流程圖;以及
[0014]圖6是描繪用于支持持久存儲(chǔ)器的替代示例性操作序列的序列圖。
【具體實(shí)施方式】
[0015]在常規(guī)的高速緩存一致、字節(jié)可尋址的、持久存儲(chǔ)器系統(tǒng)中,因?yàn)榈絎B存儲(chǔ)器的滯后寫(xiě)入在它們到達(dá)持久存儲(chǔ)器域之前完成,所以軟件需要針對(duì)要求耐久性的寫(xiě)入采取額外的預(yù)防措施。出于本公開(kāi)的目的,“滯后寫(xiě)入”是在要寫(xiě)入的數(shù)據(jù)實(shí)際到達(dá)最終存儲(chǔ)目的地之前被認(rèn)為完成的寫(xiě)入。滯后寫(xiě)入數(shù)據(jù)例如可以位于處理單元中,在高速緩存層級(jí)內(nèi)的某處,或者在存儲(chǔ)器控制器中。并且如果發(fā)生電力故障,則數(shù)據(jù)將在沒(méi)有到達(dá)持久存儲(chǔ)器域中的耐久性的情況下丟失。因此,軟件必須確保寫(xiě)入內(nèi)容在軟件認(rèn)為原子、一致、隔離且耐久(ACID)事務(wù)完成之前到達(dá)持久存儲(chǔ)器域。例如,發(fā)布隨機(jī)寫(xiě)入的應(yīng)用軟件(例如,在線事務(wù)處理(0LTP)應(yīng)用)可能需要阻塞進(jìn)一步執(zhí)行應(yīng)用,直到每個(gè)寫(xiě)入被沖洗(flush)出以確保在軟件能夠進(jìn)行到下一步驟之前數(shù)據(jù)已經(jīng)到達(dá)持久存儲(chǔ)器域。可替代地,如下文更詳細(xì)描述的,為了確保提交的事務(wù)是耐久的,執(zhí)行事務(wù)的軟件有必要(a)跟蹤受所述事務(wù)影響的所有存儲(chǔ)器地址,以及(b)明確將那些地址中的每一個(gè)(以高速緩存行(cache line)粒度)沖洗出高速緩存。
[0016]用于支持持久存儲(chǔ)器的改善方法和裝置使得軟件能夠確保提交的事務(wù)是耐久的,而不要求軟件跟蹤受事務(wù)影響的所有存儲(chǔ)器地址,并且不要求軟件明確以高速緩存行粒度將那些地址中的每一個(gè)沖洗出高速緩存。
[0017]圖1是具有用于支持持久存儲(chǔ)器的特征的示例性數(shù)據(jù)處理系統(tǒng)10的框圖。如本文使用的,術(shù)語(yǔ)“處理系統(tǒng)”和“數(shù)據(jù)處理系統(tǒng)”旨在廣泛地包括單個(gè)機(jī)器、或通信地耦合的機(jī)器或一起運(yùn)行的設(shè)備構(gòu)成的系統(tǒng)。例如,兩個(gè)或更多個(gè)機(jī)器可以使用在點(diǎn)對(duì)點(diǎn)模型、客戶端/服務(wù)器模型或云計(jì)算模型上的一個(gè)或多個(gè)變型進(jìn)行協(xié)作,以提供本文所描述功能的一些或全部。
[0018]在圖1的實(shí)施例中,數(shù)據(jù)處理系統(tǒng)10包括本地處理設(shè)備20和遠(yuǎn)程處理設(shè)備12。在圖1的實(shí)施例中,遠(yuǎn)程處理設(shè)備12為其它設(shè)備(例如,本地處理設(shè)備20)提供網(wǎng)絡(luò)附加存儲(chǔ)(NAS) 18??梢葬槍?duì)本地處理設(shè)備20和遠(yuǎn)程處理設(shè)備12使用任意適當(dāng)類型的處理設(shè)備。在一些實(shí)施例中,可以省略遠(yuǎn)程處理設(shè)備。在圖1的實(shí)施例中,在處理系統(tǒng)10中的處理設(shè)備經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)14彼此連接或彼此通信。網(wǎng)絡(luò)可以包括局域網(wǎng)(LAN)和/或廣域網(wǎng)(WAN)(例如,互聯(lián)網(wǎng))。出于本詳細(xì)描述的目的,本地處理設(shè)備20還可以簡(jiǎn)稱為“處理設(shè)備20”。
[0019]在圖1的實(shí)施例中,處理設(shè)備20特征在于至少一個(gè)中央處理單元(CPU)或處理器22,以及易失性隨機(jī)存取存儲(chǔ)器(RAM) 50、持久存儲(chǔ)器(PM) 60、網(wǎng)絡(luò)端口 70、以及一個(gè)或多個(gè)非易失性大容量數(shù)據(jù)存儲(chǔ)設(shè)備,例如,硬盤(pán)驅(qū)動(dòng)器(HDD) 40。RAM 50、PM 60和端口 70可以響應(yīng)于或耦合到處理器22。HDD 40可以經(jīng)由I/O控制器90耦合到處理器22。額外的輸入/輸出(I/O)部件(例如,鍵盤(pán)、顯示器等)也可以響應(yīng)于或耦合到處理器22。處理器22可以包括一個(gè)或多個(gè)處理器核心。處理器核心還可以稱為處理單元或處理元件。
[0020]在圖1的實(shí)施例中,HDD 40包含操作系統(tǒng)(0S) 42和應(yīng)用44。應(yīng)用44還可以稱為應(yīng)用代碼。處理設(shè)備20可以將0S 42和應(yīng)用44復(fù)制到RAM 50以供執(zhí)行。應(yīng)用44還可以與RAM 50中的數(shù)據(jù)一起工作,并且應(yīng)用44可以將不同類型或種類的數(shù)據(jù)保存到不同的非易失性介質(zhì)以進(jìn)行保留。在圖1的實(shí)施例中,應(yīng)用44被設(shè)計(jì)為將應(yīng)用數(shù)據(jù)66保存到持久存儲(chǔ)器60。因此,應(yīng)用44也可以稱為PM軟件。應(yīng)用44還可以將數(shù)據(jù)保存到其它本地和/或遠(yuǎn)程存儲(chǔ)設(shè)備。例如,應(yīng)用44可以將應(yīng)用數(shù)據(jù)46保存在HDD 40以及將應(yīng)用數(shù)據(jù)16保存在NAS 18。
[0021]在圖1的實(shí)施例中,處理設(shè)備20的存儲(chǔ)器架構(gòu)包括主存儲(chǔ)器控制器(MMC)30、高速緩存控制器32、以及至少一級(jí)別的處理器高速緩存34。在圖1的實(shí)施例中,MMC 30、高速緩存控制器32、以及高速緩存34直接或間接地耦合到處理器22。在可替代實(shí)施例中,MMC、高速緩存控制器、以及高速緩存中的一個(gè)、一些或全部可以與處理器集成。在圖1的實(shí)施例中,存儲(chǔ)器架構(gòu)還包括易失性存儲(chǔ)器50、持久存儲(chǔ)器60、以及持久存儲(chǔ)器控制器(PMC)62。在圖1的實(shí)施例中,PMC 62與持久存儲(chǔ)器集成或封裝。在可替代實(shí)施例中,PMC的一些或全部可以與其它部件(例如,與MMC和/或處理器核心)集成或封裝。在圖1的實(shí)施例中,一旦PM數(shù)據(jù)已經(jīng)到達(dá)PMC 62,則其到達(dá)持久存儲(chǔ)器域。
[0022]MMC和PMC還可以包括高速緩存或緩沖器。例如,在圖1的實(shí)施例中,MMC 30特征在于寫(xiě)入-未決緩沖器(WPB) 36。
[0023]存儲(chǔ)器架構(gòu)還包括控制邏輯,用于控制和協(xié)調(diào)存儲(chǔ)器架構(gòu)中的各個(gè)部件的活動(dòng)。在圖1的實(shí)施例中,存儲(chǔ)器管理控制邏輯被實(shí)現(xiàn)為存儲(chǔ)器管理微代碼(MMMC)80,并且MMMC80的一些或全部存儲(chǔ)在處理器22中。在可替代實(shí)施例中,存儲(chǔ)器管理控制邏輯的一些或全部可以駐留在其它部件中(例如,在MMC中)。另外或可替代地,存儲(chǔ)器管理控制邏輯的一些或全部可以被實(shí)現(xiàn)為固件、一個(gè)或多個(gè)狀態(tài)機(jī)、硬接線邏輯和/或任意其它適當(dāng)類型的控制邏輯。出于本公開(kāi)的目的,存儲(chǔ)器管理控制邏輯和相關(guān)聯(lián)的硬件部件可以統(tǒng)稱為存儲(chǔ)器管理系統(tǒng)(MMS)。
[0024]存儲(chǔ)器架構(gòu)的部件的一些或全部可以被配置為作為高速緩存一致性域進(jìn)行操作。例如,高速緩存一致性域可以包括處理器22、MMC 30、RAM 50、以及持久存儲(chǔ)器60。在另一實(shí)施例中,高速緩存一致性域還可以包括持久存儲(chǔ)器控制器。
[0025]另外,處理設(shè)備可以在不同抽象級(jí)別提供不同種類的資源。例如,可以將硬件和固件中的一些或全部統(tǒng)稱為平臺(tái)。操作系統(tǒng)可以在所述平臺(tái)的頂部運(yùn)行,以建立較高級(jí)別的被稱為系統(tǒng)級(jí)別的抽象。另外,應(yīng)用可以在操作系統(tǒng)的頂部在應(yīng)用級(jí)別運(yùn)行。
[0026]平臺(tái)可以提供各種指令用于耐久的寫(xiě)入。這些指令可以包括以下:
[0027].CLFLUSH(高速緩存行沖洗):使得來(lái)自高速緩存層級(jí)的所有級(jí)別的、包含由源操作數(shù)所指定的線性地址的高速緩存行無(wú)效。在整個(gè)高速緩存一致性域中廣播所述無(wú)效。如果在高速緩存層級(jí)的任意級(jí)別處所述行與存儲(chǔ)器不一致(臟的),則在無(wú)效前將該行寫(xiě)入到存儲(chǔ)器。這是無(wú)序指令。
[0028].CLWB (高速緩存行寫(xiě)回):將來(lái)自高速緩存層級(jí)的任意級(jí)別的、包含由存儲(chǔ)器操作數(shù)所指定的線性地址的高速緩存行寫(xiě)回到高速緩存一致性域中,而不使得該高速緩存行無(wú)效。這是無(wú)序指令。
[0029].CMTPM(提交到持久存儲(chǔ)器):使得某些到PM的存儲(chǔ)到存儲(chǔ)器的操作變得耐久或持久(S卩,保護(hù)免于電力故障)。例如,CMTPM可以將所有未決的PM寫(xiě)入驅(qū)逐出MMC的WPBo因此,CMTPM可以確保已經(jīng)寫(xiě)入到MMC的數(shù)據(jù)也被寫(xiě)入到持久存儲(chǔ)器域中。
[0030]存儲(chǔ)器架構(gòu)中的指令還可以包括一個(gè)或多個(gè)串行化或“柵欄”指令,例如SFENCE (存儲(chǔ)柵欄)和MFENCE (存儲(chǔ)器柵欄)。SFENCE保證:針對(duì)在程序順序中先于SFENCE指令的每個(gè)存儲(chǔ)指令的數(shù)據(jù)在跟隨SFENCE指令后的任意存儲(chǔ)指令之前是全局可見(jiàn)的。例如,SFENCE可以使得數(shù)據(jù)從處理單元的高速緩存寫(xiě)入到存儲(chǔ)器控制器中的寫(xiě)入緩沖器中。MFENCE可以類似于SFENCE工作,但是也使得針對(duì)加載指令的數(shù)據(jù)全局可見(jiàn)。當(dāng)應(yīng)用執(zhí)行串行化指令時(shí),控制不會(huì)返回到應(yīng)用,直到串行指令結(jié)束其工作為止。因此,串行化指令是阻塞指令(blocking instruct1n)。
[0031]然而,在一些實(shí)施例中,即使通過(guò)上述指令,發(fā)布隨機(jī)寫(xiě)入的軟件仍需要(a)跟蹤所有到PM的寫(xiě)入,(b)針對(duì)每個(gè)更