專利名稱:用于寫前讀存儲(chǔ)控制器指令的裝置、系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及寫入數(shù)據(jù),并且更具體地涉及寫前讀
(read陽before-write )存儲(chǔ)控制器指令。
背景技術(shù):
數(shù)據(jù)存儲(chǔ)系統(tǒng)(此后稱為存儲(chǔ)系統(tǒng))頻繁地向存儲(chǔ)設(shè)備的地址 寫入新數(shù)據(jù)。通常,該新數(shù)據(jù)會(huì)覆蓋之前存儲(chǔ)在該地址處的舊數(shù)據(jù)。
然而,新數(shù)據(jù)可能錯(cuò)誤地覆蓋掉重要的舊數(shù)據(jù)。為了避免丟失 重要的數(shù)據(jù),存儲(chǔ)系統(tǒng)通常采用撤消(undo)日志。撤消日志保存 了被覆蓋掉的數(shù)據(jù)。這樣,如果管理員或者用戶確定舊數(shù)據(jù)是被錯(cuò) 誤覆蓋的,則可以從撤消日志恢復(fù)該舊數(shù)據(jù)。
撤消日志通常是存儲(chǔ)器設(shè)備。在一個(gè)實(shí)施例中,撤消日志可以 被配置為可尋址存儲(chǔ)器。創(chuàng)建并維護(hù)撤消日志通常需要從存儲(chǔ)設(shè)備 地址讀出舊數(shù)據(jù)并將該舊數(shù)據(jù)寫入該撤消日志。新數(shù)據(jù)隨后可以寫 入該存儲(chǔ)設(shè)備地址。該過程通常稱為寫前讀操作。不幸地,寫前讀 操作必須在應(yīng)用級(jí)別顯式編碼。由于對(duì)于將要保存在撤消日志中的 每次數(shù)據(jù)更新,需要存儲(chǔ)控制器與應(yīng)用級(jí)別交互三次,所以從時(shí)間 角度來說,這樣非常費(fèi)時(shí)。
發(fā)明內(nèi)容
從前述討論可知,需要用于寫前讀存儲(chǔ)控制器指令的裝置、系 統(tǒng)和方法。有益地,這種裝置、系統(tǒng)和方法將會(huì)簡(jiǎn)化撤消日志的可
靠實(shí)現(xiàn)。
針對(duì)現(xiàn)有技術(shù)水平,并且更具體地,針對(duì)本領(lǐng)域中當(dāng)前可用的 寫前讀方法并未完全解決的問題和需求,研發(fā)了本發(fā)明。因此,研發(fā)出本發(fā)明來提供用于寫前讀存儲(chǔ)控制器指令的設(shè)備、系統(tǒng)和方法, 用于寫前讀指令的裝置具有多個(gè)元件,其被配置用于在功能上
執(zhí)行步驟接收原子寫前讀指令、讀取舊數(shù)據(jù)、將舊數(shù)據(jù)寫入撤消 日志地址,以及寫入新數(shù)據(jù)。所描述實(shí)施例中的這些元件包括排序 器和輸入/輸出(I/O)單元。
排序器(sequencer)接收原子寫前讀指令,該指令包括新數(shù)據(jù)、 用于所述新數(shù)據(jù)的目標(biāo)地址和撤消日志地址。I/O單元按照所述排序 器的指示從所述目標(biāo)地址讀取舊數(shù)據(jù);將所述舊數(shù)據(jù)和所述目標(biāo)地 址寫入所述撤消日志地址;以及將所述新數(shù)據(jù)寫入所述目標(biāo)地址。
還給出了用于寫前讀指令的本發(fā)明的系統(tǒng)。該系統(tǒng)可以被實(shí)現(xiàn) 在存儲(chǔ)系統(tǒng)中。具體地,在一個(gè)實(shí)施例中,該系統(tǒng)包括目標(biāo)巻、撤 消日志、重做日志和處理器。
目標(biāo)巻、撤消日志和重做日志的每一個(gè)包括可尋址存儲(chǔ)器。處 理器接收原子寫前讀指令,所述指令包括新數(shù)據(jù)、用于所述新數(shù)據(jù) 的所述目標(biāo)巻上的目標(biāo)地址和所述招i消日志中的撤消日志地址;從 所述目標(biāo)地址讀取舊數(shù)據(jù);將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入所述 撤消日志地址;將所述新數(shù)據(jù)寫入所述目標(biāo)地址;接收撤消指令 從所述撤消日志讀取所述舊數(shù)據(jù)和目標(biāo)地址;以及將所述舊數(shù)據(jù)寫 入所述目標(biāo)i也址。
還給出了用于寫前讀指令的本發(fā)明的方法。公開的實(shí)施例中的 方法基本上包括執(zhí)行針對(duì)所描述裝置和系統(tǒng)的操作而給出的功能的 步驟。在一個(gè)實(shí)施例中,該方法包括接收原子寫前讀指令、讀取舊 數(shù)據(jù)、將舊數(shù)據(jù)寫入撤消日志地址,以及寫入新數(shù)據(jù)。
排序器接收原子寫前讀指令,所述指令包括新數(shù)據(jù)、用于所述 新數(shù)據(jù)的目標(biāo)地址和撤消日志地址。I/O單元按照所述排序器的指示 從所述目標(biāo)地址讀取舊數(shù)據(jù);將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入所 述招t消日志地址;以及將所述新數(shù)據(jù)寫入所述目標(biāo)地址。
貫穿此說明書,對(duì)特征、益處或者類似語言的參考并不暗示可以利用本發(fā)明實(shí)現(xiàn)的所有特征和益處應(yīng)當(dāng)是或存在于本發(fā)明的任何
單一實(shí)施例中。而是,涉及特征和益處的語言應(yīng)當(dāng)被理解為結(jié)合 實(shí)施例描述的具體特征、益處或特性包括在本發(fā)明的至少一個(gè)實(shí)施 例中。這樣,貫穿此說明書,特征和益處或者類似語言的討論并不 必須涉及同一實(shí)施例。
而且,本發(fā)明所描述的特征、益處和特性可以以任何適當(dāng)?shù)姆?式結(jié)合在一個(gè)或多個(gè)實(shí)施例中。相關(guān)領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解本發(fā) 明可以在沒有具體實(shí)施例的一個(gè)或多個(gè)具體特征或益處的情況下實(shí) 現(xiàn)。在其他情況中,在某些實(shí)施例中,可以認(rèn)識(shí)到另外的特征和益 處,它們并不必須出現(xiàn)在本發(fā)明的所有實(shí)施例中。
本發(fā)明執(zhí)行原子寫前讀指令。另外,本發(fā)明可以簡(jiǎn)化撤消日志 的實(shí)現(xiàn)。本發(fā)明的這些特征和益處會(huì)從下述描述和所附權(quán)利要求而 變得更明顯,或者可以通過以下給出的本發(fā)明實(shí)踐而得知。
為了使本發(fā)明的優(yōu)勢(shì)更易于理解,通過參考在附圖中示出的具 體實(shí)施例來給出以上簡(jiǎn)述的本發(fā)明的更具體描述。應(yīng)當(dāng)理解,這些
范圍的限制,將通過使用附圖利用另外的特性和細(xì)節(jié)來描述并解釋 本發(fā)明,其中
圖1是示出了根據(jù)本發(fā)明的存儲(chǔ)系統(tǒng)的一個(gè)實(shí)施例的示意性框
圖2是示出了本發(fā)明的存儲(chǔ)巻的一個(gè)實(shí)施例的示意性框圖; 圖3是示出了本發(fā)明的處理器的一個(gè)實(shí)施例的示意性框圖; 圖4是示出了本發(fā)明的存儲(chǔ)子系統(tǒng)的一個(gè)實(shí)施例的示意性框圖; 圖5是示出了本發(fā)明的原子寫前讀指令方法的 一個(gè)實(shí)施例的示 意性流程圖6是示出了本發(fā)明的撤消方法的 一 個(gè)實(shí)施例的示意性流程圖; 圖7是示出了本發(fā)明的重做方法的一個(gè)實(shí)施例的示意性流程圖;圖8A是示出了本發(fā)明的原子寫前讀指令的一個(gè)實(shí)施例的示意 性框圖8B是示出了本發(fā)明的原子寫前讀指令的一個(gè)備選實(shí)施例的示 意性框圖8C是示出了本發(fā)明的原子寫前讀指令的一個(gè)另外實(shí)施例的示 意性框圖8D是示出了本發(fā)明的原子撤消指令的一個(gè)實(shí)施例的示意性 框圖8E是示出了本發(fā)明的原子重做指令的一個(gè)實(shí)施例的示意性框 圖;以及
圖9是示出了本發(fā)明的讀和寫的一個(gè)實(shí)施例的示意性框圖。
具體實(shí)施例方式
處理器可讀程序能夠被配置為軟件、固件和/或?qū)崿F(xiàn)為硬布線的 半導(dǎo)體邏輯。處理器可讀程序可以是單個(gè)指令或者很多指令,甚至 可以分布在若干不同的代碼段、不同的程序,以及若干存儲(chǔ)器設(shè)備。
貫穿此說明書,對(duì)"一個(gè)實(shí)施例"、"實(shí)施例"或者類似語言 的參考意味著結(jié)合實(shí)施例描述的具體特征、結(jié)構(gòu)或者特性被包括在 本發(fā)明的至少一個(gè)實(shí)施例中。這樣,貫穿此說明書,短語"一個(gè)實(shí) 施例"、"實(shí)施例"或者類似語言的出現(xiàn)并不一定表示同一實(shí)施例。
而且,本發(fā)明所描述的特征、結(jié)構(gòu)或者特性可以以任何適當(dāng)方 式結(jié)合在一個(gè)或多個(gè)實(shí)施例中。在以下描述中,提供了各種特定細(xì) 節(jié),諸如編程、軟件模塊、用戶選擇、網(wǎng)絡(luò)事務(wù)、數(shù)據(jù)庫(kù)查詢、數(shù) 據(jù)庫(kù)結(jié)構(gòu)、硬件模塊、硬件電路、硬件芯片等的實(shí)例以便提供對(duì)本
發(fā)明實(shí)施例的全面理解。然而,相關(guān)領(lǐng)域的才支術(shù)人員能夠認(rèn)識(shí)到 本發(fā)明可以在沒有一個(gè)或多個(gè)特定細(xì)節(jié),或者利用其他方法、組件、 材料等的情況下而實(shí)現(xiàn)。在其他情況中,為了避免混淆本發(fā)明的方 面,并未示出和詳細(xì)描述公知的結(jié)構(gòu)、材料或者操作。
圖1是示出了根據(jù)本發(fā)明的存儲(chǔ)系統(tǒng)100的一個(gè)實(shí)施例的示意性框圖。系統(tǒng)100包括網(wǎng)絡(luò)115、內(nèi)部網(wǎng)125、服務(wù)器130、存儲(chǔ)通 信通道150以及一個(gè)或多個(gè)存儲(chǔ)子系統(tǒng)140。
網(wǎng)絡(luò)115可以是互聯(lián)網(wǎng)、廣域網(wǎng)、局域網(wǎng)等。服務(wù)器130可以 被配置為大型計(jì)算機(jī)、包括多個(gè)刀片服務(wù)器的刀片中心等。盡管為 了簡(jiǎn)便示出了一個(gè)網(wǎng)絡(luò)115、 一個(gè)內(nèi)部網(wǎng)125、 一個(gè)服務(wù)器130、 一 個(gè)存儲(chǔ)通信通道150和三個(gè)存儲(chǔ)子系統(tǒng)140,但是,可以使用任意數(shù) 目的客戶端、網(wǎng)絡(luò)115、路由器120、內(nèi)部網(wǎng)125、服務(wù)器130、存 儲(chǔ)通信通道150和存儲(chǔ)子系統(tǒng)140。本領(lǐng)域技術(shù)人員也能夠容易地認(rèn) 識(shí)到系統(tǒng)100可以包括其他數(shù)據(jù)處理設(shè)備,諸如橋、掃描儀、打 印機(jī)等。
每個(gè)存儲(chǔ)子系統(tǒng)140包括一個(gè)或多個(gè)控制器160以及一個(gè)或多 個(gè)存儲(chǔ)設(shè)備170。控制器160將數(shù)據(jù)寫入存儲(chǔ)設(shè)備170以及將數(shù)據(jù)從 其讀出。存儲(chǔ)設(shè)備170可以是硬盤驅(qū)動(dòng)器、光存儲(chǔ)設(shè)備、磁帶驅(qū)動(dòng) 器、微機(jī)械存儲(chǔ)設(shè)備、全息存儲(chǔ)設(shè)備和半導(dǎo)體存儲(chǔ)設(shè)備。
在一個(gè)實(shí)施例中,系統(tǒng)100向通過網(wǎng)絡(luò)115與該系統(tǒng)100通信 的用戶提供數(shù)據(jù)存儲(chǔ)服務(wù)和數(shù)據(jù)操作服務(wù)。例如,客戶端可以通過 利用網(wǎng)絡(luò)115、內(nèi)部網(wǎng)125、服務(wù)器130和存儲(chǔ)通信通道150向存儲(chǔ) 設(shè)備170的存儲(chǔ)控制器160傳送請(qǐng)求,以訪問存儲(chǔ)在存儲(chǔ)子系統(tǒng)140 的存儲(chǔ)設(shè)備170上的數(shù)據(jù)。存儲(chǔ)控制器160可以從存儲(chǔ)設(shè)備170取 回?cái)?shù)據(jù)并將該數(shù)據(jù)傳送給客戶端。
圖2是示出了本發(fā)明的存儲(chǔ)巻200的一個(gè)實(shí)施例的示意性框圖。 巻200的描述涉及圖1中的元素,相同的標(biāo)號(hào)表示相同的元素。存 儲(chǔ)巻200包括源巻205、目標(biāo)巻210、撤消日志215和重做日志220。 源巻205、目標(biāo)巻210、撤消日志215和重做日志220可以包括可尋 址存儲(chǔ)器。
源巻205、目標(biāo)巻210、撤消日志215和重估文日志220可纟皮配置 為存儲(chǔ)設(shè)備170。例如,源巻205和目標(biāo)巻210可以是硬盤驅(qū)動(dòng)存儲(chǔ) 器設(shè)備170。備選地,源巻205、目標(biāo)巻210、撤消日志215和重做 日志220可被配置為邏輯巻。例如,如本領(lǐng)域技術(shù)人員所知,多個(gè)存儲(chǔ)設(shè)備170的若干部分可以被組織為包括目標(biāo)巻210的邏輯巻。 在一個(gè)實(shí)施例中,撤消日志215和重做日志220是一個(gè)或多個(gè)控制 器160中的可尋址半導(dǎo)體存儲(chǔ)器。
系統(tǒng)100可以將數(shù)據(jù)從源巻205寫入目標(biāo)巻210。例如,作為遷 移操作的一部分,第一存儲(chǔ)子系統(tǒng)140a的控制器160可以將數(shù)據(jù)從 第一存儲(chǔ)子系統(tǒng)140a的存儲(chǔ)設(shè)備170寫入第二存儲(chǔ)子系統(tǒng)140b的 存儲(chǔ)設(shè)備170。
所寫入的新數(shù)據(jù)可以覆蓋舊數(shù)據(jù)。其結(jié)果是,系統(tǒng)100可以將 舊數(shù)據(jù)存儲(chǔ)在撤消日志215中,以使得在需要的時(shí)候可以將舊數(shù)據(jù) 恢復(fù)。如果撤消了新數(shù)據(jù)的寫入,則可以將新數(shù)據(jù)寫入重做日志220 。 本發(fā)明提供了寫前讀指令來實(shí)現(xiàn)撤消日志215,以下進(jìn)行詳述。
圖3是示出了本發(fā)明的處理器300的一個(gè)實(shí)施例的示意性框圖。 處理器300包括固件存儲(chǔ)器305、排序器310、一個(gè)或多個(gè)寄存器315、 算術(shù)邏輯單元(ALU) 320、 1/0單元325和總線330。
固件存儲(chǔ)305可以是半導(dǎo)體存儲(chǔ)器,諸如電可編程隨機(jī)訪問存 儲(chǔ)器(EPROM)、可編程隨機(jī)訪問存儲(chǔ)器(PROM)等。固件存儲(chǔ) 器305可以存儲(chǔ)一個(gè)或多個(gè)處理器可讀程序。如本領(lǐng)域技術(shù)人員所 知,每個(gè)處理器可讀程序可以包括一個(gè)或多個(gè)排序器指令。
排序器310可以響應(yīng)于指令而從固件存儲(chǔ)器305取回處理器可 讀程序并執(zhí)行之。在一個(gè)實(shí)施例中,半導(dǎo)體門可以響應(yīng)于處理器可 讀程序而對(duì)該指令進(jìn)行解碼,并斷言(assert)控制信號(hào)和/或?qū)υ撔?號(hào)解除斷言(de-assert),其中該信號(hào)管理處理器300的功能。
每個(gè)寄存器315可以存儲(chǔ)一個(gè)或多個(gè)數(shù)據(jù)字。ALU 320可以對(duì) 寄存器315的數(shù)據(jù)字執(zhí)行一個(gè)或多個(gè)操作。1/0單元325可以通過總 線330從其他設(shè)備(諸如,存儲(chǔ)器設(shè)備和/或橋設(shè)備)接收數(shù)據(jù),并 且可以通過總線330來傳送數(shù)據(jù)。
每個(gè)控制器160可以包括一個(gè)或多個(gè)處理器300??刂破?60可 以響應(yīng)于寫指令而將數(shù)據(jù)寫入存儲(chǔ)設(shè)備170。 1/0單元325可以從總 線330讀取寫指令。排序器310可以對(duì)寫指令進(jìn)行解碼,并指引I/O單元325從第一地址讀取數(shù)據(jù)并將該數(shù)據(jù)寫入第二地址。
過去,處理器300為了進(jìn)行寫前讀操作要執(zhí)行多個(gè)非原子指令。 其結(jié)果是需要許多指令,并且編程錯(cuò)誤可能遺漏指令。本發(fā)明提供 了原子寫前讀指令,以下進(jìn)行描述。
圖4是示出了本發(fā)明的存儲(chǔ)子系統(tǒng)140的一個(gè)實(shí)施例的示意性 框圖。子系統(tǒng)140的描述涉及圖l-圖3中的元素,相同的標(biāo)號(hào)表示 相同的元素。子系統(tǒng)140包括控制器160和三個(gè)存儲(chǔ)設(shè)備170,盡管 可以使用任意數(shù)量的控制器160和存儲(chǔ)設(shè)備170。
控制器160可以包括處理器300、存儲(chǔ)器405、緩沖器410和通 信單元415。存儲(chǔ)器405、緩沖器410和通信單元415,其可以與處 理器300的總線330通信。控制器160可以通過通信單元415接收 數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到緩沖器410中。處理器300可以執(zhí)行存儲(chǔ)在 存儲(chǔ)器405中的指令。
所示存儲(chǔ)設(shè)備170與控制器160通信成為一個(gè)回路(loop)。控 制器160可以將數(shù)據(jù)從緩沖器410寫入一個(gè)或多個(gè)存儲(chǔ)設(shè)備170。例 如,控制器可以將目標(biāo)巻210的地址傳送到總線330上。包括目標(biāo) 巻210的存儲(chǔ)設(shè)備170可以接收并鎖存該地址??刂破?60可以進(jìn) 一步將數(shù)據(jù)傳送到總線330上。存儲(chǔ)設(shè)備170可以將數(shù)據(jù)寫入該地 址。
所遵從的示意性流程圖通常作為邏輯流程圖給出。這樣,示出 的順序和標(biāo)記的步驟表示所給出方法的 一 個(gè)實(shí)施例??梢詷?gòu)思出其 他步驟和方法,它們與所示方法在功能、邏輯上是等效的,或者實(shí) 現(xiàn)了所示方法的一個(gè)或多個(gè)步驟或者其一部分。另外,所使用的格 式和符號(hào)是為了解釋方法的邏輯步驟而提供的,并且不應(yīng)理解為對(duì) 方法范圍的限制。盡管可以在流程圖中使用各種箭頭類型和線類型, 但是它們不應(yīng)理解為對(duì)相應(yīng)方法范圍的限制。事實(shí)上,某些箭頭或 者其他連接符可以僅用來表示方法的邏輯流程。例如,箭頭可以表 示在所描述方法列舉的步驟之間的、未指定期間的等待時(shí)期或者監(jiān) 控時(shí)期。另外,具體方法發(fā)生的順序可以(或者可以不)嚴(yán)格地按照所示相應(yīng)步驟的順序。
圖5是示出了本發(fā)明的原子寫前讀指令方法500的一個(gè)實(shí)施例 的示意性流程圖。方法500的描述涉及圖l-圖4的元素,相同的標(biāo) 號(hào)表示相同的元素。方法500基本上包括了完成針對(duì)圖l-圖4中所 描述裝置和系統(tǒng)的操作的上述功能的步驟。在一個(gè)實(shí)施例中,方法 500是通過包括處理器可讀介質(zhì)(包括處理器可讀程序)的處理器程 序產(chǎn)品來實(shí)現(xiàn)的。處理器可讀介質(zhì)可以是固件存儲(chǔ)器305。處理器可 讀程序可以集成到處理器300中,其中與處理器300結(jié)合的程序能 夠執(zhí)行方法500。
方法500開始,并且排序器310接收505原子寫前讀指令,該 指令包括新數(shù)據(jù)、新數(shù)據(jù)的目標(biāo)地址和撤消日志地址。原子指令可 以包括一個(gè)或多個(gè)數(shù)據(jù)字。另外,原子指令的長(zhǎng)度可以根據(jù)附加至 該指令的數(shù)據(jù)和地址而變化。
在一個(gè)實(shí)施例中,新數(shù)據(jù)存儲(chǔ)在原子寫前讀指令注明的寄存器 315中。備選地,新數(shù)據(jù)最初可以位于源巻205,原子寫前讀指令可 以包括數(shù)據(jù)在源巻205上的源地址。原子寫前讀指令被配置為執(zhí)行 完整的寫前讀操作,由此排序器必須執(zhí)行寫前讀的所有元素。
I/O單元325從排序器310指引的目標(biāo)地址讀取510舊數(shù)據(jù)。目 標(biāo)地址可以表示目標(biāo)巻210中的存儲(chǔ)空間。在一個(gè)實(shí)施例中,目標(biāo) 地址包括偏移,該偏移指明了應(yīng)當(dāng)向其寫入的目標(biāo)地址之后的數(shù)據(jù) 塊的數(shù)目。
在一個(gè)實(shí)施例中,排序器310指示I/O單元325通過總線330 和通信單元415將讀命令和目標(biāo)地址傳送到目標(biāo)巻210的存儲(chǔ)設(shè)備 170。目標(biāo)巻210可以響應(yīng)于該讀命令而將舊數(shù)據(jù)傳送到控制器160。 排序器310可以進(jìn)一步指示I/O單元325將通信單元415配置為將 通信單元415接收到的舊數(shù)據(jù)指引至緩沖器410中的地址。備選地, 排序器310可以指示1/0單元325通過總線330從通信單元415接收 舊數(shù)據(jù),并將該舊數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器405中。
I/O單元325進(jìn)一步將舊數(shù)據(jù)和目標(biāo)地址寫入515撤消日志地址。撤消日志地址可以指向撤消日志215中的自由數(shù)據(jù)空間。備選 地, 一個(gè)或多個(gè)寄存器315存儲(chǔ)撤消日志地址。排序器310可以指 示I/O單元325將寫命令、撤消日志地址、舊數(shù)據(jù)和目標(biāo)地址傳送給 撤消日志215。撤消日志215可以將舊數(shù)據(jù)和目標(biāo)地址存儲(chǔ)在撤消日 志地址。
I/O單元325進(jìn)一步將新數(shù)據(jù)寫入520如排序器310所指引的目 標(biāo)地址。在一個(gè)實(shí)施例中,1/0單元325通過總線330和通信單元415 將寫命令、目標(biāo)地址和新數(shù)據(jù)傳送給目標(biāo)巻210。目標(biāo)巻210可以將 新數(shù)據(jù)存儲(chǔ)在目標(biāo)地址。
在一個(gè)實(shí)施例中,I/O單元325還向#:消日志地址寫入525時(shí)間 戳。時(shí)間戳可以包括一個(gè)或多個(gè)數(shù)據(jù)字,它們對(duì)年、月、日、小時(shí)、 分鐘和秒進(jìn)行編碼。在某個(gè)實(shí)施例中,時(shí)間戳對(duì)新數(shù)據(jù)寫入目標(biāo)地 址的時(shí)間進(jìn)行編碼。排序器310可以指示1/0單元325讀取集成在處 理器300中的計(jì)時(shí)器。另外,排序器可以指示ALU 320將計(jì)時(shí)器值 格式化為時(shí)間戳。排序器310隨后可以指示I/O單元325將時(shí)間戳寫 入525到招"肖日志地址。
在一個(gè)實(shí)施例中,排序器310將撤消日志地址遞增530,并且方 法500結(jié)束。排序器310可以指示I/O單元325將撤消日志地址讀入 ALU 320。排序器310可以進(jìn)一步指示ALU 320將指定的值(諸如 64 )加到撤消日志地址上,以使得該^撤消日志地址再次指向能夠被 寫入的自由數(shù)據(jù)空間。指定的值可以等于包括舊數(shù)據(jù)、目標(biāo)地址和 時(shí)間戳的字節(jié)的數(shù)目。
方法500的步驟是響應(yīng)于接收505單個(gè)原子寫前讀指令的。這 樣,寫前讀操作能夠可靠地實(shí)現(xiàn),而沒有遺漏寫前讀操作的某些元 素的編程錯(cuò)誤或者其他錯(cuò)誤;并且具有比備選的應(yīng)用實(shí)現(xiàn)、操作系 統(tǒng)實(shí)現(xiàn)等更好的性能。在一個(gè)實(shí)施例中,處理器300可以被配置為 僅執(zhí)行寫前讀類型的寫操作,以便舊數(shù)據(jù)通常能夠可靠地從撤消日 志215恢復(fù)。
圖6是示出了本發(fā)明的撤消方法600的一個(gè)實(shí)施例的示意性流程圖。方法600的描述涉及圖l-圖5的元素,相同的標(biāo)號(hào)表示相同 的元素。方法600基本上包括了完成針對(duì)圖l-圖4中所描述裝置和 系統(tǒng)的操作的上述功能的步驟。在一個(gè)實(shí)施例中,方法600是通過 包括處理器可讀介質(zhì)(包括處理器可讀程序)的處理器程序產(chǎn)品來 實(shí)現(xiàn)的。處理器可讀介質(zhì)可以是固件存儲(chǔ)器305。處理器可讀程序可 以集成到處理器300中,其中與處理器300結(jié)合的程序能夠執(zhí)行方 法600。
方法600開始,并且在一個(gè)實(shí)施例中,排序器310接收605原 子撤消指令。原子撤消指令可以包括一個(gè)或多個(gè)數(shù)據(jù)字。另外,原 子指令的長(zhǎng)度可以根據(jù)附加至該指令的數(shù)據(jù)和地址而變化。
在一個(gè)實(shí)施例中,原子撤消指令包括回滾(rollback)時(shí)間?;?滾時(shí)間可以指定某一時(shí)間,到該時(shí)間的對(duì)目標(biāo)巻210的所有寫入都 將被撤消。管理員可以指定回滾時(shí)間,并且回滾時(shí)間可以并入原子 撤消指令,這是本領(lǐng)域技術(shù)人員公知的。
在一個(gè)實(shí)施例中,排序器310指示I/O單元325從撤消日志215 讀取610舊數(shù)據(jù)、目標(biāo)地址和時(shí)間戳。I/O單元325可以將時(shí)間戳傳 送給ALU 320。
在一個(gè)實(shí)施例中,排序器310指示ALU 320確定615時(shí)間戳是 否大于回滾時(shí)間。例如,時(shí)間戳可以;故編碼為20070714142345以指 示對(duì)目標(biāo)巻210的最初寫前讀發(fā)生在2007年7月14日的下午2:23: 45。類似地,回滾時(shí)間可以編碼為20070714141500以指示對(duì)所有寫 入進(jìn)行撤消是在2007年7月14日下午2:15:00之后。ALU 320可以 確定時(shí)間戳是否大于回滾時(shí)間。
如果時(shí)間戳不大于回滾時(shí)間,則方法600可以結(jié)束。如果時(shí)間 戳大于回滾時(shí)間,則排序器310可以指示I/O單元325將新數(shù)據(jù)、目 標(biāo)地址和時(shí)間戳寫入重^L日志220。在一個(gè)實(shí)施例中,排序器310 指示I/O單元325將舊數(shù)據(jù)寫入625目標(biāo)巻210的目標(biāo)地址。由此, 將舊數(shù)據(jù)恢復(fù)到目標(biāo)巻210。
在某個(gè)實(shí)施例中,排序器310指示I/O單元325將撤消日志地址遞減。排序器310可以指示1/0單元325將撤消日志地址讀取至ALU 320。排序器310可以進(jìn)一步指示ALU 320從撤消日志自由數(shù)據(jù)空間 地址減去指定的值(諸如64),以使得將來對(duì)撤消日志的寫入會(huì)覆 蓋舊數(shù)據(jù),而后續(xù)撤消讀取610沒有回滾的舊數(shù)據(jù)。
在一個(gè)實(shí)施例中,排序器310指示I/O單元325從撤消日志215 讀取610其他舊數(shù)據(jù)和目標(biāo)地址,直到時(shí)間戳不大于回滾時(shí)間為止, 并且方法600結(jié)束。撤消方法600利用了原子寫前讀指令寫入到撤 消曰志215的舊數(shù)據(jù)和目標(biāo)地址來將舊數(shù)據(jù)恢復(fù)到目標(biāo)巻210。這 樣,可以恢復(fù)被覆蓋掉的數(shù)據(jù)。
圖7是示出了本發(fā)明的重做方法700的一個(gè)實(shí)施例的示意性流 程圖。方法700的描述涉及圖1-圖6的元素,相同的標(biāo)號(hào)表示相同 的元素。方法700基本上包括了完成針對(duì)圖1-圖4中所描述裝置和 系統(tǒng)的操作的上述功能的步驟。在一個(gè)實(shí)施例中,方法700是利用 包括處理器可讀介質(zhì)(包括處理器可讀程序)的處理器程序產(chǎn)品來 實(shí)現(xiàn)的。處理器可讀介質(zhì)可以是固件存儲(chǔ)器305。處理器可讀程序可 以集成到處理器300中,其中與處理器300結(jié)合的程序能夠執(zhí)行方 法700。
方法700開始,并且在一個(gè)實(shí)施例中,排序器310接收705原 子重做指令。原子重做指令可以包括一個(gè)或多個(gè)數(shù)據(jù)字。另外,原 子重做指令的長(zhǎng)度可以根據(jù)附加至該指令的數(shù)據(jù)和地址而變化。
在一個(gè)實(shí)施例中,原子重做指令包括重做時(shí)間。重做時(shí)間可以 指定某一時(shí)間,到該時(shí)間的向目標(biāo)巻210的所有寫入都將被重新進(jìn) 行。管理員可以指定重做時(shí)間,并且重做時(shí)間可以并入原子重做指 令,這是本領(lǐng)域技術(shù)人員公知的。
排序器310可以指示1/0單元325從重做日志220讀取710新數(shù) 據(jù)、目標(biāo)地址和時(shí)間戳。另外,排序器310可以指示ALU 320確定 715時(shí)間戳是否小于重做時(shí)間。ALU 320可以將時(shí)間戳從重做時(shí)間減 去以確定715時(shí)間戳是否小于重做時(shí)間。
如果時(shí)間戳不小于重做時(shí)間,則方法700可以結(jié)束,這意味著在重做時(shí)間之前進(jìn)行的所有寫入都已經(jīng)針對(duì)目標(biāo)巻210重新進(jìn)行過 了。如果時(shí)間戳小于重做時(shí)間,則排序器310可以指示1/0單元325 將新數(shù)據(jù)寫入720到目標(biāo)巻210的目標(biāo)地址上。另外,排序器310 可以指示I/O單元325將舊數(shù)據(jù)、目標(biāo)地址和時(shí)間戳寫入725到撤消 曰志215的撤消日志地址,如在圖5的步驟515和525中所描述的。 在一個(gè)實(shí)施例中,排序器310指示1/0單元325從重做日志220 讀取710其他新數(shù)據(jù)、目標(biāo)地址和時(shí)間戳,直到時(shí)間戳不小于重做 時(shí)間為止,并且方法700結(jié)束。方法700重新進(jìn)行已經(jīng)被撤消的寫 入。
圖8A是示出了本發(fā)明的原子寫前讀指令800a的一個(gè)實(shí)施例的 示例性框圖。指令800a的描述涉及圖1-圖7的元素,相同的標(biāo)號(hào)表 示相同的元素。
指令800a包括寫前讀命令805、新數(shù)據(jù)地址810、目標(biāo)地址815 和撤消日志地址820。排序器310對(duì)寫前讀命令805進(jìn)行解碼,并執(zhí) 行寫前讀,如圖5的方法500所描述的。新數(shù)據(jù)地址810描述了新 數(shù)據(jù)的源。例如,新數(shù)據(jù)地址810可以指向存儲(chǔ)在源巻205、存儲(chǔ)器 405、緩沖器410等中的新數(shù)據(jù)。
目標(biāo)地址815指定應(yīng)當(dāng)將新數(shù)據(jù)寫到哪里。在某個(gè)實(shí)施例中, 目標(biāo)地址815包括邏輯單元號(hào)(LUN)地址、邏輯塊地址(LBA) 和塊數(shù)目。撤消日志地址820身見定最初存儲(chǔ)在目標(biāo)地址815的數(shù)據(jù) 應(yīng)當(dāng)寫入撤消日志215的哪里。原子寫前讀指令800a為排序器310 執(zhí)行寫前讀提供了足夠的信息,而無需解碼另外的指令。
圖8B是示出了本發(fā)明的原子寫前讀指令800b的一個(gè)備選實(shí)施 例的示意性框圖。指令800b的描述涉及圖1-圖7的元素,相同的標(biāo) 號(hào)表示相同的元素。
指令800b包括圖8A的寫前讀命令805和目標(biāo)地址815。指令 800b進(jìn)一步包括應(yīng)當(dāng)寫入目標(biāo)地址815的新數(shù)據(jù)825。
在一個(gè)實(shí)施例中,原子寫前讀指令800b包括標(biāo)志830。處理器 300可以將^t消日志地址820存儲(chǔ)在寄存器315中和/或存儲(chǔ)在寄存器315參考的存儲(chǔ)器405的存儲(chǔ)位置中。如果將標(biāo)志830設(shè)置為指 定的值,則排序器310可以將撤消日志地址820遞增。例如,排序 器310可以指示ALU 320將指定的值(諸如8 )加到撤消地址日志 820。
圖8C是示出了本發(fā)明的原子撤消指令800c的一個(gè)其他實(shí)施例 的示意性框圖。指令800c的描述涉及圖l-圖7中的元素,相同的標(biāo) 號(hào)表示相同的元素。
指令800c包括圖8B的寫前讀命令805、目標(biāo)地址815和新數(shù)據(jù) 825。指令800c進(jìn)一步包括撤消日志索引835。撤消日志索引835指 示排序器310從撤消日志索引835參考的寄存器315取回撤消曰志 地址820。
圖8D是示出了本發(fā)明的原子撤消指令840的一個(gè)實(shí)施例的示意 性框圖。指令840的描述涉及圖1-圖7的元素,相同的標(biāo)號(hào)表示相
同的元素。
指令840包括撤消命令845和回滾時(shí)間850。排序器310對(duì)撤消 命令845進(jìn)行解碼,并執(zhí)行該撤消,如同圖6的方法600所述?;?滾時(shí)間850可以指定某一時(shí)間點(diǎn),該時(shí)間點(diǎn)處向目標(biāo)巻210的寫入 將不應(yīng)再進(jìn)4于回滾。
圖8E是示出了本發(fā)明的原子重做指令860的 一 個(gè)實(shí)施例的示意 性框圖。指令860的描述涉及圖1-圖7的元素,相同的標(biāo)號(hào)表示相 同的元素。
指令860包括重做命令865和重做時(shí)間870。排序器310對(duì)重做 命令865進(jìn)行解碼并執(zhí)行重做,如圖7的方法700所述。重做時(shí)間 870可以指定恢復(fù)向目標(biāo)巻210的寫入的時(shí)間點(diǎn)。
圖9是示出了本發(fā)明的讀和寫900的一個(gè)實(shí)施例的示意性框圖。 排序器310響應(yīng)于接收到原子寫前讀指令800a而指示處理器300發(fā) 布讀和寫900。
在一個(gè)實(shí)施例中,排序器310指示1/0單元325傳送讀950,其 包括讀命令905、目標(biāo)LUN地址910、目標(biāo)LBA915、塊數(shù)目920和緩沖器地址925。 I/O單元325可以通過總線330和通信單元415 將讀950傳送給目標(biāo)LUN地址910指定的目標(biāo)巻210。作為響應(yīng), 目標(biāo)巻210可以將存儲(chǔ)在目標(biāo)LBA 915的數(shù)據(jù)和塊數(shù)目920指定的 多個(gè)連續(xù)塊寫入緩沖器410(從緩沖器地址925開始)。
排序器310可以進(jìn)一步指示I/O單元325傳送撤消日志寫955, 其包括寫命令930、緩沖器地址925、撤消LUN地址935、撤消LBA 940和塊數(shù)目920??刂破?60可以將寫命令930和塊數(shù)目920指定 的塊從緩沖器410 (從緩沖器地址925開始到撤消LUN地址935和 撤消LBA 940指定的撤消日志地址820 )傳送到撤消日志215。撤消 日志215可以將塊存儲(chǔ)在撤消LBA 940。
在一個(gè)實(shí)施例中,排序器310指示1/0單元325傳送目標(biāo)寫960, 其包括寫命令930、目標(biāo)LUN地址910、目標(biāo)LBA915、塊數(shù)目920 和新數(shù)據(jù)地址945。作為響應(yīng),控制器160可以將塊數(shù)目920指定的 新數(shù)據(jù)塊從新數(shù)據(jù)地址945指定的源巻205傳送到目標(biāo)LUN地址 910指定的目標(biāo)地址。
這樣,排序器310響應(yīng)于單個(gè)原子寫前讀指令800進(jìn)行了寫前 讀操作。本發(fā)明可以在不脫離其精神或本質(zhì)特性的前提下以其他形 式實(shí)現(xiàn)。無論從哪方面來看,所描述的實(shí)施例僅是示意性的和非限 制性的。因此,本發(fā)明的范圍由所附權(quán)利要求表示,而不是由前述 描述表示。權(quán)利要求的含義和等同范圍內(nèi)的所有改變均包含在此范 圍內(nèi)。
權(quán)利要求
1. 一種用于寫前讀指令的方法,所述方法將處理器可讀程序集成到處理器中,并且所述方法包括接收原子寫前讀指令,所述原子寫前讀指令包括新數(shù)據(jù)、用于所述新數(shù)據(jù)的目標(biāo)地址和撤消日志地址;從所述目標(biāo)地址讀取舊數(shù)據(jù);將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入所述撤消日志地址;以及將所述新數(shù)據(jù)寫入所述目標(biāo)地址。
2. 根據(jù)權(quán)利要求1所述的方法,所述方法進(jìn)一步包括響應(yīng)于 所述原子寫前讀指令中的標(biāo)志,將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入 所述招t消日志地址。
3. 根據(jù)權(quán)利要求1所述的方法,所述方法進(jìn)一步包括將所述 招t消日志地址遞增。
4. 根據(jù)權(quán)利要求1所述的方法,所述方法進(jìn)一步包括 接收原子撤消指令;從所述招t消日志讀取所述舊數(shù)據(jù)和所述目標(biāo)地址;以及 將所述舊數(shù)據(jù)寫入所述目標(biāo)地址。
5. 根據(jù)權(quán)利要求4所述的方法,所述方法進(jìn)一步包括將所述 招"肖日志地址遞減。
6. —種用于寫前讀指令的裝置,所述裝置包括排序器,其被配置用于接收原子寫前讀指令,所述原子寫前讀指 令包括新數(shù)據(jù)、用于所述新數(shù)據(jù)的目標(biāo)地址和撤消日志地址;輸入/輸出(1/0)單元,其被配置用于按照所述排序器的指示從 所述目標(biāo)地址讀取舊數(shù)據(jù)、將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入所述 撤消日志地址以及將所述新數(shù)據(jù)寫入所述目標(biāo)地址。
7. 根據(jù)權(quán)利要求6所述的裝置,其中所述排序器指示所述1/0 單元響應(yīng)于所述原子寫前讀指令中的標(biāo)志,將所述舊數(shù)據(jù)和所述 目標(biāo)地址寫入所述撤消日志地址。
8. 根據(jù)權(quán)利要求7所述的裝置,其中所述排序器被進(jìn)一步配置 用于將所述撤消日志地址遞增。
9. 根據(jù)權(quán)利要求8所述的裝置,其中所述排序器被進(jìn)一步配置 用于接收原子撤消指令;并且所述I/O單元被進(jìn)一步配置用于按照所 述排序器的指示來從所述撤消日志讀取所述舊數(shù)據(jù)和所述目標(biāo)地址 以及將所述舊數(shù)據(jù)寫入所述目標(biāo)地址。
10. 根據(jù)權(quán)利要求9所述的裝置,其中所述排序器和1/0單元被 進(jìn)一步配置用于向所述撤消日志寫入時(shí)間戳。
11. 根據(jù)權(quán)利要求IO所述的裝置,其中所述I/0單元被進(jìn)一步 配置用于按照所述排序器的指示來從所述撤消日志讀取所述時(shí)間 戳,以及如果所述時(shí)間戳大于回滾時(shí)間,則將所述舊數(shù)據(jù)寫入所述 目標(biāo)地址,并將所述措t消日志地址遞減。
12. 根據(jù)權(quán)利要求11所述的裝置,其中所述I/0單元被進(jìn)一步 配置以按照所述排序器的指示來將所述新數(shù)據(jù)、所述目標(biāo)地址和所 述時(shí)間戳寫入重做日志。
13. 根據(jù)權(quán)利要求12所述的裝置,其中所述排序器被進(jìn)一步配 置用于接收原子重做指令,并指示所述I/0單元從所述重做日志讀 取所述新數(shù)據(jù)、所述目標(biāo)地址和所述時(shí)間戳,并且如果所述時(shí)間戳 小于重做時(shí)間,則將所述新數(shù)據(jù)寫入所述目標(biāo)地址,并將所述舊數(shù) 據(jù)、所述目標(biāo)地址和所述時(shí)間戳寫入所述招"肖日志地址。
14. 一種用于部署計(jì)算機(jī)基礎(chǔ)架構(gòu)的方法,其包括將處理器可讀 程序集成到處理器中,其中所述程序與所述處理器相結(jié)合能夠執(zhí)行接收原子寫前讀指令,所述原子寫前讀指令包括新數(shù)據(jù)、用于所 述新數(shù)據(jù)的目標(biāo)地址和撤消日志地址; 從所述目標(biāo)地址讀取舊數(shù)據(jù);將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入所述撤消日志地址; 將所述新數(shù)據(jù)寫入所述目標(biāo)地址; 將時(shí)間戳寫入所述撤消日志地址;以及響應(yīng)于原子撤消指令,從所述撤消日志讀取所述舊數(shù)據(jù)和目標(biāo)地址,并將所述舊數(shù)據(jù)寫入所述目標(biāo)地址。
15. 根據(jù)權(quán)利要求14所述的方法,進(jìn)一步包括 從所述撤消日志讀取所述時(shí)間戳;以及如果所述時(shí)間戳大于回滾時(shí)間,則將所述舊數(shù)據(jù)寫入所述目標(biāo)地 址,并將所述撤消日志地址遞減。
16. —種發(fā)布寫前讀指令的系統(tǒng),所述系統(tǒng)包括 目標(biāo)巻,其包括可尋址存儲(chǔ)器;撤消日志,其包括可尋址存儲(chǔ)器; 重做日志,其包括可尋址存儲(chǔ)器 處理器,其被配置用于接收原子寫前讀指令,所述原子寫前讀指令包括新數(shù)據(jù)、用于所 述新數(shù)據(jù)的所述目標(biāo)巻上的目標(biāo)地址和所述撤消日志中的撤消日志 地址;乂人所述目標(biāo)i也址讀耳又舊凄t據(jù);將所述舊數(shù)據(jù)和所述目標(biāo)地址寫入所述撤消日志地址; 將所述新數(shù)據(jù)寫入所述目標(biāo)地址; 接收原子撤消指令從所述撤消日志讀取所述舊數(shù)據(jù)和目標(biāo)地址; 將所述舊數(shù)據(jù)寫入所述目標(biāo)地址。
17. —種固件程序產(chǎn)品,包括有形存儲(chǔ)介質(zhì),該有形存儲(chǔ)介質(zhì)具 有處理器可讀程序,其中當(dāng)被處理器執(zhí)行時(shí),所述處理器可讀程序 使得處理器執(zhí)行根據(jù)權(quán)利要求1_5中任一權(quán)利要求的方法步驟。
全文摘要
公開了用于寫前讀存儲(chǔ)控制器指令的裝置、系統(tǒng)和方法。排序器接收原子寫前讀指令,該原子寫前讀指令包括新數(shù)據(jù)、用于新數(shù)據(jù)的目標(biāo)地址和撤消日志地址。I/O單元按照排序器的指示從目標(biāo)地址讀取舊數(shù)據(jù);將舊數(shù)據(jù)和目標(biāo)地址寫入撤消日志地址;以及將新數(shù)據(jù)寫入目標(biāo)地址。
文檔編號(hào)G06F3/06GK101477445SQ20081018900
公開日2009年7月8日 申請(qǐng)日期2008年12月23日 優(yōu)先權(quán)日2008年1月3日
發(fā)明者A·哈亞德尼, J·J·沃爾夫?qū)? K·F·戴三世, K·W·博伊德, M·E·法克特 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司