欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

映象數(shù)據(jù)存儲(chǔ)裝置寫時(shí)間映射的制作方法

文檔序號:6657175閱讀:210來源:國知局
專利名稱:映象數(shù)據(jù)存儲(chǔ)裝置寫時(shí)間映射的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)。更具體地,本發(fā)明涉及產(chǎn)生和使用一時(shí)間映射以訪問存儲(chǔ)裝置的先前映象。
背景技術(shù)
企業(yè)對允許橫跨企業(yè)的數(shù)據(jù)共享的計(jì)算機(jī)系統(tǒng)的依賴日益增強(qiáng)。已發(fā)展成可存儲(chǔ)大量數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)系統(tǒng)對企業(yè)來說通常是極其重要的。因此,數(shù)據(jù)存儲(chǔ)系統(tǒng)的中斷或故障可破壞整個(gè)企業(yè)的運(yùn)轉(zhuǎn)。
典型地,為了保護(hù),計(jì)算機(jī)系統(tǒng)上運(yùn)行的應(yīng)用程序所使用的數(shù)據(jù)存儲(chǔ)在主存儲(chǔ)裝置(例如磁盤)和副存儲(chǔ)裝置(例如,磁帶和比較便宜的磁盤驅(qū)動(dòng)器)上。當(dāng)這些應(yīng)用程序運(yùn)行時(shí),數(shù)據(jù)由于經(jīng)營活動(dòng)的進(jìn)行而發(fā)生變化。信息技術(shù)部門典型地處理許多關(guān)于數(shù)據(jù)存儲(chǔ)系統(tǒng)的問題。然而,通常這些問題可分成兩大類硬件故障和數(shù)據(jù)破壞。
數(shù)據(jù)存儲(chǔ)系統(tǒng)的商業(yè)意義及它們存儲(chǔ)和維護(hù)的數(shù)據(jù)完整性的重要性引起對提供數(shù)據(jù)保護(hù)和數(shù)據(jù)恢復(fù)的系統(tǒng)產(chǎn)生相應(yīng)的極大興趣。目前,鏡像法和快照技術(shù)是對數(shù)據(jù)恢復(fù)感興趣的企業(yè)可得到的兩種主要方法。如果發(fā)生系統(tǒng)故障,數(shù)據(jù)恢復(fù)允許企業(yè)從前面的時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)并使用未被破壞的數(shù)據(jù)重新開始操作。一旦硬件故障或破壞事件(或多個(gè)破壞事件)的時(shí)間被識(shí)別,就可通過返回到所知的存儲(chǔ)數(shù)據(jù)未破壞的時(shí)間點(diǎn)來實(shí)現(xiàn)恢復(fù)。
典型地,數(shù)據(jù)存儲(chǔ)裝置包括個(gè)體的存儲(chǔ)單元,例如單元格、塊、扇區(qū)等。由主系統(tǒng)(通常意指一個(gè)或更多個(gè)主系統(tǒng))產(chǎn)生的讀命令指引信息系統(tǒng)向主機(jī)提供在請求中所指定的數(shù)據(jù)。傳統(tǒng)上,信息的指定基于其在數(shù)據(jù)存儲(chǔ)裝置內(nèi)的位置,例如,一個(gè)或更多個(gè)特定塊。寫命令以類似的方式被執(zhí)行。例如,響應(yīng)由主系統(tǒng)產(chǎn)生的I/O請求而將數(shù)據(jù)寫到存儲(chǔ)器的特定單元。位置標(biāo)識(shí)符提供數(shù)據(jù)和數(shù)據(jù)存儲(chǔ)在其中的存儲(chǔ)單元之間的直接關(guān)聯(lián)。據(jù)此,位置標(biāo)識(shí)符被用來讀取和更新數(shù)據(jù)。
在數(shù)據(jù)保護(hù)問題的硬件故障方面,供應(yīng)商提供了若干不同的機(jī)制來輔助防止硬件故障影響應(yīng)用程序的可用性及性能,例如,磁盤鏡象。這是一種多個(gè)磁盤被集中在一起以存儲(chǔ)相同信息的機(jī)制,允許磁盤發(fā)生故障而不阻止應(yīng)用程序檢索數(shù)據(jù)。在一種典型設(shè)置中,用戶為每個(gè)應(yīng)用程序數(shù)據(jù)磁盤分配1-4個(gè)鏡像磁盤。被發(fā)送到應(yīng)用程序主磁盤的每個(gè)寫請求同樣被發(fā)送到鏡像拷貝磁盤,所以用戶實(shí)際上具有N個(gè)(在此N典型地在2和5之間)其上數(shù)據(jù)完全相同的磁盤。結(jié)果,該鏡像法提供至少一份當(dāng)時(shí)的當(dāng)前數(shù)據(jù)的完整備份。因此,如果一個(gè)磁盤發(fā)生故障,用戶仍擁有保留在其它鏡像磁盤上的應(yīng)用程序數(shù)據(jù)。獨(dú)立磁盤的冗余陣列(RAID)提供了鏡像系統(tǒng)的一個(gè)例子。
然而,當(dāng)數(shù)據(jù)破壞發(fā)生時(shí)鏡像法是無效的。數(shù)據(jù)破壞以多種形式出現(xiàn),但是其通常在由正被寫到磁盤的數(shù)據(jù)引起用戶應(yīng)用程序完全停止運(yùn)行時(shí)被識(shí)別出。存在許多可能的數(shù)據(jù)破壞源,例如試圖升級應(yīng)用程序失敗,用戶意外地刪除關(guān)鍵信息,流氓用戶故意損壞應(yīng)用程序數(shù)據(jù),計(jì)算機(jī)病毒等。不管是什么原因,鏡像工作實(shí)際上妨礙了已經(jīng)歷數(shù)據(jù)破壞的用戶,這是因?yàn)殓R像法將錯(cuò)誤的數(shù)據(jù)同時(shí)復(fù)制到所有鏡像上。因此,所有的數(shù)據(jù)拷貝都被破壞。
另外,因?yàn)榇疟P被持續(xù)地更新,歷史數(shù)據(jù)的備份,也就是在過去時(shí)間T出現(xiàn)在數(shù)據(jù)存儲(chǔ)裝置中的數(shù)據(jù)的快照,只有當(dāng)系統(tǒng)被指示在時(shí)間T或在時(shí)間T之前保存?zhèn)浞莸那闆r下才會(huì)被創(chuàng)建。因此,在時(shí)間T+1,系統(tǒng)不能提供在時(shí)間T的當(dāng)前數(shù)據(jù)的備份。此外,每個(gè)存儲(chǔ)的單元均被保存,而不管存儲(chǔ)于其中的數(shù)據(jù)自創(chuàng)建前一備份的時(shí)間以來是否未改變。這種方法效率低而且昂貴,因?yàn)槠湓黾恿嗽诙鄠€(gè)時(shí)間點(diǎn)備份數(shù)據(jù)存儲(chǔ)裝置所需要的存儲(chǔ)容量。并且,當(dāng)與較大的數(shù)據(jù)存儲(chǔ)系統(tǒng)一起使用時(shí),鏡像法變得效率較低且更易于出錯(cuò),這是因?yàn)榇笮拖到y(tǒng)跨越數(shù)以百計(jì)的磁盤且系統(tǒng)不能保證每個(gè)磁盤都在相同的時(shí)間點(diǎn)被備份。因此,復(fù)雜的和易于出錯(cuò)的處理被使用,以嘗試為整個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)建立同時(shí)備份。
如上所述,快照,也被稱為時(shí)間映象單一點(diǎn),經(jīng)常連同鏡像系統(tǒng)一起被創(chuàng)建。替代性地,快照法可被用作一種獨(dú)立的數(shù)據(jù)存儲(chǔ)和恢復(fù)方法。在快照法中,用戶選擇當(dāng)磁盤的當(dāng)前內(nèi)容將被拷貝并寫到不同存儲(chǔ)裝置或者相同存儲(chǔ)裝置內(nèi)所分配的存儲(chǔ)單元組時(shí)的時(shí)間中的周期點(diǎn)。然而,該方法具有與鏡像法相同的缺點(diǎn),也就是,所有快照都是在當(dāng)時(shí)的當(dāng)前時(shí)間點(diǎn)連同用戶請求創(chuàng)建的或由于創(chuàng)建存儲(chǔ)數(shù)據(jù)快照的先前預(yù)定指令而被創(chuàng)建的。不論是單獨(dú)的或在組合中,數(shù)據(jù)鏡像或數(shù)據(jù)快照皆不允許用戶使用后來的認(rèn)識(shí)去重新創(chuàng)建在某個(gè)過去時(shí)間的當(dāng)前數(shù)據(jù)組。因?yàn)榇鎯?chǔ)在每一存儲(chǔ)單元的數(shù)據(jù)未與個(gè)體時(shí)間標(biāo)識(shí)符相聯(lián)系,所以用戶不能返回查看來自特定時(shí)間點(diǎn)的數(shù)據(jù),除非同時(shí)為該時(shí)間先前創(chuàng)建了歷史備份。復(fù)原中間時(shí)間的數(shù)據(jù)是無法實(shí)現(xiàn)的,例如,時(shí)間(T-1),在當(dāng)前時(shí)間(T)和上次備份磁盤被保存的時(shí)間(例如T-2)之間。同樣,產(chǎn)生單個(gè)時(shí)間點(diǎn)映象通常是一個(gè)冗長的進(jìn)程。由于存儲(chǔ)容量和數(shù)據(jù)組大小已經(jīng)增加,所以映象產(chǎn)生時(shí)間變得更加重要。
因此,存儲(chǔ)業(yè)集中于更快和更頻繁地產(chǎn)生映象。使用磁帶的數(shù)據(jù)恢復(fù)系統(tǒng)供應(yīng)商試圖通過增加系統(tǒng)容量和磁帶頭數(shù)量來提供更大的、更可伸縮的磁帶庫,從而允許并行操作。基于磁盤系統(tǒng)的供應(yīng)商集中在如何使用磁盤驅(qū)動(dòng)器來提供更多具有改進(jìn)的響應(yīng)時(shí)間的單個(gè)時(shí)間點(diǎn)映象。在一種方法中,數(shù)量為N的鏡像磁盤中的一個(gè)在指定時(shí)間被脫機(jī),以在該時(shí)間創(chuàng)建單個(gè)時(shí)間點(diǎn)映象。假如鏡像磁盤的數(shù)量被充分增加,該方法就可為增加的映象數(shù)目留有余地。然而,該方法顯著地增加了每個(gè)時(shí)間點(diǎn)所需的存儲(chǔ)容量,例如,對于5千兆字節(jié)(terabyte)應(yīng)用程序,需要30千兆字節(jié)的存儲(chǔ)量以支持2個(gè)標(biāo)準(zhǔn)鏡像磁盤和4個(gè)時(shí)間點(diǎn)映象。因?yàn)檫@些解決方案僅僅試圖調(diào)整現(xiàn)有方法,所以它們未能提供一種當(dāng)數(shù)據(jù)存儲(chǔ)系統(tǒng)的容量持續(xù)增加時(shí)仍可使用的解決方案。

發(fā)明內(nèi)容
本發(fā)明通過便于產(chǎn)生數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象而不用搜索有關(guān)過去數(shù)據(jù)的位置的記錄的整個(gè)索引,來處理當(dāng)前系統(tǒng)的缺點(diǎn)。
通常,在一個(gè)方面,本發(fā)明涉及存儲(chǔ)管理裝置,所述存儲(chǔ)管理裝置包括用于接收過去時(shí)間的規(guī)約(specification)的接收器,以及處理被指引到數(shù)據(jù)存儲(chǔ)器中一個(gè)或更多個(gè)目標(biāo)存儲(chǔ)單元的I/O請求的I/O處理器。在一個(gè)實(shí)施例中,存儲(chǔ)單元是數(shù)據(jù)存儲(chǔ)器的單個(gè)塊或多字節(jié)塊群。目標(biāo)存儲(chǔ)單元是作為I/O請求的對象的一個(gè)或多個(gè)存儲(chǔ)單元。存儲(chǔ)管理裝置還包括記錄由I/O處理器處理的寫請求的編索引模塊。在一個(gè)實(shí)施例中,編索引模塊包括內(nèi)存,所述內(nèi)存為每一寫請求存儲(chǔ)一個(gè)記錄,該記錄可包括1)目標(biāo)存儲(chǔ)單元的標(biāo)識(shí);2)之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置;以及3)寫時(shí)間,其表示寫請求被接收的時(shí)間。另外,存儲(chǔ)管理裝置包括映射模塊,所述映射模塊使用一個(gè)或更多個(gè)記錄來產(chǎn)生在指定過去時(shí)間存儲(chǔ)在目標(biāo)存儲(chǔ)單元的數(shù)據(jù)的位置的映射。包含于存儲(chǔ)管理裝置內(nèi)的映象產(chǎn)生模塊至少部分地基于映射模塊產(chǎn)生的映射,呈現(xiàn)在過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象。存儲(chǔ)管理裝置可與虛擬數(shù)據(jù)存儲(chǔ)器一起被使用。此外,之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置可位于數(shù)據(jù)存儲(chǔ)系統(tǒng)內(nèi)的任何地方。在一個(gè)實(shí)施例中,時(shí)間映射用于基本瞬間產(chǎn)生數(shù)據(jù)存儲(chǔ)器的過去映象。通過創(chuàng)建被指引到位于數(shù)據(jù)存儲(chǔ)器中的一個(gè)或更多個(gè)目標(biāo)存儲(chǔ)單元的寫請求的記錄可產(chǎn)生映射,在此,在一個(gè)實(shí)施例中,每個(gè)記錄包括1)至少一個(gè)目標(biāo)存儲(chǔ)單元的標(biāo)識(shí);2)寫時(shí)間,其表示被指引到至少一個(gè)存儲(chǔ)單元的寫請求被接收的時(shí)間;以及3)響應(yīng)該寫請求,存儲(chǔ)在至少一個(gè)目標(biāo)存儲(chǔ)的單元中的數(shù)據(jù)被移至的位置。對于第一過去時(shí)間,數(shù)據(jù)存儲(chǔ)器的時(shí)間映射在產(chǎn)生時(shí)間被產(chǎn)生。使用所述記錄產(chǎn)生時(shí)間映射以定位存儲(chǔ)單元的數(shù)據(jù)的當(dāng)前位置,所述存儲(chǔ)的單元自第一過去時(shí)間以來是寫請求的目標(biāo)。在至少該實(shí)施例的一個(gè)版本中,在產(chǎn)生時(shí)間之后,時(shí)間映射被補(bǔ)充附加記錄以響應(yīng)被指引到存儲(chǔ)單元的寫請求,所述存儲(chǔ)單元之前自第一過去時(shí)間以來都不是寫請求的目標(biāo)。根據(jù)時(shí)間映射創(chuàng)建第一邏輯單元。在一個(gè)實(shí)施例中,第一邏輯單元是虛擬邏輯單元。
通常,在另外的方面,本發(fā)明涉及一種產(chǎn)生數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象的方法。被指引到數(shù)據(jù)存儲(chǔ)器中的多個(gè)目標(biāo)存儲(chǔ)單元的I/O請求被處理。在一個(gè)實(shí)施例中,目標(biāo)存儲(chǔ)單元的標(biāo)識(shí)、之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置和響應(yīng)一個(gè)或更多個(gè)I/O請求而被記錄的時(shí)間。目標(biāo)存儲(chǔ)單元和在過去時(shí)間之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的當(dāng)前位置的關(guān)聯(lián)被映射。對于第一過去時(shí)間,數(shù)據(jù)存儲(chǔ)器的映象被產(chǎn)生,在此所述映象至少部分地基于映射的關(guān)聯(lián)。在至少該實(shí)施例的一個(gè)版本中,所述方法由一存儲(chǔ)系統(tǒng)執(zhí)行,并且之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元的數(shù)據(jù)可位于該存儲(chǔ)系統(tǒng)內(nèi)的任何地方。另外,所述存儲(chǔ)系統(tǒng)可包括物理存儲(chǔ)器,所述物理存儲(chǔ)器包括多個(gè)邏輯單元。


在附圖中,類似的參考字符通指從不同視圖觀察的相同部分。并且,附圖不一定按比例,取而代之,重點(diǎn)通常放在對本發(fā)明原理的說明上。
圖1是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)的框圖,所述存儲(chǔ)系統(tǒng)包括當(dāng)前存儲(chǔ)器(current store)和時(shí)間存儲(chǔ)器(time store)。
圖2是描述被主機(jī)發(fā)送到存儲(chǔ)管理裝置的輸入/輸出(I/O)請求實(shí)施例的圖表。
圖3是描述在本發(fā)明的一個(gè)實(shí)施例中被指引到數(shù)據(jù)存儲(chǔ)器的一系列寫命令的表格。
圖4是描述根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)器的多個(gè)先前映象的產(chǎn)生的框圖。
圖5是描述根據(jù)本發(fā)明實(shí)施例的動(dòng)態(tài)當(dāng)前存儲(chǔ)器的產(chǎn)生的框圖。
圖6是描述一恢復(fù)數(shù)據(jù)存儲(chǔ)器的產(chǎn)生的時(shí)間線。
圖7A和7B是描述在一系列寫命令被指引到當(dāng)前存儲(chǔ)器時(shí)當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器的內(nèi)容的表格。圖7A描述當(dāng)前存儲(chǔ)器。圖7B描述時(shí)間存儲(chǔ)器。
圖8是描述根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)器先前映象的產(chǎn)生的表格。
圖9是描述根據(jù)本發(fā)明實(shí)施例的處理器模塊的框圖。
圖10是描述根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)管理裝置的進(jìn)一步細(xì)節(jié)的框圖。
圖11是根據(jù)本發(fā)明實(shí)施例的I/O管理器的框圖。
圖12是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)管理裝置的框圖。
圖13是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)的框圖。
圖14A是根據(jù)本發(fā)明的一種用于提供數(shù)據(jù)存儲(chǔ)器內(nèi)位置的修改歷史的方法的說明性實(shí)施例的流程圖。
圖14B是根據(jù)本發(fā)明的用于提供數(shù)據(jù)存儲(chǔ)器內(nèi)位置的修改歷史的方法的另一說明性實(shí)施例的流程圖。
圖15是描述被主機(jī)發(fā)送到存儲(chǔ)管理裝置的I/O請求實(shí)施例的圖表。
圖16是描述被存儲(chǔ)管理裝置發(fā)送到主機(jī)的I/O響應(yīng)實(shí)施例的圖表。
圖17是描述本發(fā)明實(shí)施例中的被指引到數(shù)據(jù)存儲(chǔ)器的一系列寫操作的時(shí)間線。
圖18是描述根據(jù)本發(fā)明的由存儲(chǔ)管理裝置產(chǎn)生的歷史索引實(shí)施例的圖表。
圖19是描述被主機(jī)發(fā)送到存儲(chǔ)管理裝置的I/O請求實(shí)施例的圖表。
圖20是描述被存儲(chǔ)管理裝置發(fā)送到主機(jī)的I/O響應(yīng)實(shí)施例的圖表。
圖21是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)管理裝置的框圖。
圖22是根據(jù)本發(fā)明的一種用于存儲(chǔ)數(shù)據(jù)的方法的說明性實(shí)施例的流程圖。
圖23是根據(jù)本發(fā)明實(shí)施例的多處理器系統(tǒng)的框圖。
圖24是根據(jù)本發(fā)明的一種用于為多處理器系統(tǒng)維護(hù)基本上一致的運(yùn)行時(shí)鐘的方法的說明性實(shí)施例的流程圖。
圖25是根據(jù)多處理器系統(tǒng)內(nèi)的從屬處理器模塊內(nèi)部時(shí)鐘的時(shí)間與根據(jù)多處理器系統(tǒng)內(nèi)的主處理器模塊內(nèi)部時(shí)鐘的時(shí)間的關(guān)系圖。
圖26是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)管理裝置的框圖。
圖27是描述根據(jù)本發(fā)明實(shí)施例的一組寫命令的記錄索引的表格。
圖28描述了根據(jù)本發(fā)明實(shí)施例而產(chǎn)生的映射。
圖29是根據(jù)本發(fā)明實(shí)施例的用于處理I/O請求的系統(tǒng)的框圖。
圖30是根據(jù)本發(fā)明的一種用于處理I/O請求的方法的說明性實(shí)施例的流程圖。
圖31是根據(jù)本發(fā)明實(shí)施例的與I/O請求相對應(yīng)的表格。
圖32描述了根據(jù)本發(fā)明實(shí)施例的用于處理I/O請求的隊(duì)列。
圖33是根據(jù)本發(fā)明實(shí)施例的一種系統(tǒng)的框圖。
圖34是根據(jù)本發(fā)明實(shí)施例的一種系統(tǒng)的框圖。
圖35是根據(jù)本發(fā)明實(shí)施例的一種方法的框圖。
圖36A-36D描述了根據(jù)本發(fā)明實(shí)施例的二叉樹的示范實(shí)施例。
圖37描述了根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)管理裝置的框圖。
圖38描述了根據(jù)本發(fā)明實(shí)施例的一種用于檢查點(diǎn)的示范方法。
圖39描述了本發(fā)明的示范實(shí)施例的框圖。
圖40描述了根據(jù)本發(fā)明實(shí)施例的一種用于檢查點(diǎn)的示范方法。
圖41是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)管理裝置的框圖。
圖42是一種用于記錄被指引到數(shù)據(jù)存儲(chǔ)器的寫請求以及用于使能產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器至少一部分的至少一部分時(shí)間映射的方法的說明性實(shí)施例的流程圖。
圖43是用于解釋圖42所述的用于記錄被指引到數(shù)據(jù)存儲(chǔ)器的寫請求以及使能產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器至少一部分的至少一部分時(shí)間映射的方法的說明性實(shí)施例的示范框圖
具體實(shí)施例方式圖1提供存儲(chǔ)系統(tǒng)30的概觀,所述存儲(chǔ)系統(tǒng)考慮到從先于請求時(shí)間的時(shí)間點(diǎn)產(chǎn)生數(shù)據(jù)存儲(chǔ)器的映象。主機(jī)34通過存儲(chǔ)管理裝置38與物理存儲(chǔ)器36通信。在一個(gè)實(shí)施例中,物理存儲(chǔ)器36存儲(chǔ)數(shù)字?jǐn)?shù)據(jù)。在該實(shí)施例的一個(gè)版本中,物理存儲(chǔ)器36是一個(gè)或更多個(gè)磁盤驅(qū)動(dòng)器。例如,所述磁盤驅(qū)動(dòng)器可以是磁碟(magnetic disk)驅(qū)動(dòng)器、光盤驅(qū)動(dòng)器或兩種類型磁盤驅(qū)動(dòng)器的組合。在該實(shí)施例的另一個(gè)版本中,物理存儲(chǔ)器36包括一個(gè)或更多個(gè)磁帶驅(qū)動(dòng)器。物理存儲(chǔ)器36可以是一個(gè)驅(qū)動(dòng)器或多個(gè)驅(qū)動(dòng)器的組合,或存儲(chǔ)區(qū)網(wǎng)絡(luò)。物理存儲(chǔ)器36本身可以是由各種存儲(chǔ)網(wǎng)絡(luò)、設(shè)備或控制器的任何一種所呈現(xiàn)的虛擬驅(qū)動(dòng)器。例如,物理存儲(chǔ)器36可以是鏡像磁盤或RAID系統(tǒng),或其它存儲(chǔ)設(shè)備。
主機(jī)可以是任何類型的網(wǎng)絡(luò)或系統(tǒng)(一個(gè)或更多個(gè)),其存取物理存儲(chǔ)器36和/或任何其它形式的數(shù)據(jù)存儲(chǔ)。在一個(gè)實(shí)施例中,主機(jī)34包括在一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)上的許多計(jì)算機(jī)。主機(jī)可以包括存儲(chǔ)網(wǎng)絡(luò),一個(gè)或更多個(gè)用戶可通過多個(gè)工作站、個(gè)人計(jì)算機(jī)或兩者的組合來訪問所述存儲(chǔ)網(wǎng)絡(luò)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38本身可以是一個(gè)“存儲(chǔ)設(shè)備”。例如,其可以是具有處理器和內(nèi)存的單獨(dú)裝置。在此所描述的存儲(chǔ)管理裝置38的功能性還可被整合到現(xiàn)有的企業(yè)系統(tǒng)存儲(chǔ)區(qū)網(wǎng)絡(luò)中。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38是作為存儲(chǔ)系統(tǒng)的固件層實(shí)現(xiàn)的。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38使用當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46數(shù)據(jù)用于磁盤卷A。雖然,該圖顯示當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46位于存儲(chǔ)管理裝置38內(nèi),但優(yōu)選地,與當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46之一或兩者相關(guān)聯(lián)的數(shù)據(jù)被存儲(chǔ)在物理存儲(chǔ)器36中。在此情況下,存儲(chǔ)管理裝置38記住其內(nèi)存中的當(dāng)前存儲(chǔ)器A和時(shí)間存儲(chǔ)器A中的數(shù)據(jù),例如以索引和指針的形式,并且從該物理存儲(chǔ)器36讀寫數(shù)據(jù)。例如,可將物理存儲(chǔ)器36中的獨(dú)立存儲(chǔ)單元群(separate groups units ofstorage)分配給當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46,或可將它們的數(shù)據(jù)混和在物理存儲(chǔ)器上。
當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46還可以在隨機(jī)存取存儲(chǔ)器(RAM)或其它位于存儲(chǔ)管理裝置38中的存儲(chǔ)器中實(shí)現(xiàn)。在該實(shí)施例的一個(gè)版本中,當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46位于不同的內(nèi)存中。此外,存儲(chǔ)當(dāng)前存儲(chǔ)器A44的介質(zhì)類型可以不同于存儲(chǔ)時(shí)間存儲(chǔ)器A46的介質(zhì),例如,當(dāng)前存儲(chǔ)器A46可位于磁盤驅(qū)動(dòng)器上而時(shí)間存儲(chǔ)器A44位于RAM上。在另一個(gè)版本中,當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46包含同一內(nèi)存的不同分區(qū)(section)。在另一個(gè)實(shí)施例中,當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46都包括物理磁盤組成,所述物理磁盤可以是物理存儲(chǔ)器36或其它。當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46可被存儲(chǔ)在相同的物理磁盤上,或者它們可都被存儲(chǔ)在許多不同物理磁盤的部分中。
當(dāng)前存儲(chǔ)器A44存儲(chǔ)當(dāng)前數(shù)據(jù)而時(shí)間存儲(chǔ)器A46存儲(chǔ)來自當(dāng)前存儲(chǔ)器A44的較舊的數(shù)據(jù),該較舊的數(shù)據(jù)此后已被較新的數(shù)據(jù)替換(即被重寫)。存儲(chǔ)管理裝置38使用來自當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46之一或兩者的信息來產(chǎn)生磁盤卷A的當(dāng)前和過去的映象,并將其呈給主機(jī)34。在一個(gè)實(shí)施例中,每對當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46實(shí)現(xiàn)一個(gè)或更多個(gè)邏輯裝置。在該實(shí)施例的一個(gè)版本中,存儲(chǔ)管理裝置38不包括磁盤驅(qū)動(dòng)器,但使用物理存儲(chǔ)器36存儲(chǔ)此類虛擬驅(qū)動(dòng)器上的數(shù)據(jù)。
存儲(chǔ)管理裝置38在第一通信鏈路40上與主機(jī)34通信。第一通信鏈路40可以是任何類型的數(shù)據(jù)通信鏈路,例如局域網(wǎng)LAN,存儲(chǔ)網(wǎng)絡(luò)或包括光纖信道和小型計(jì)算機(jī)系統(tǒng)接口(″SCSI″)的總線。以太網(wǎng)(例如,吉比特以太網(wǎng))和無線通信是可用于第一通信鏈路40的其它可能鏈路。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置在邏輯層傳遞SCSI協(xié)議,并且能使用各種物理層中的一個(gè)或更多個(gè)來傳遞,所述物理層包括SCSI總線、光纖信道、光纖信道2或以太網(wǎng)上的iSCSI。在通信鏈路40上,響應(yīng)主機(jī)34的I/O請求,存儲(chǔ)管理裝置38所起的作用就如同其是物理存儲(chǔ)器36。主機(jī)34的I/O請求可包括對存儲(chǔ)的單元的讀和寫命令。
存儲(chǔ)管理裝置38在第二通信鏈路42上與物理存儲(chǔ)器36通信。第二通信鏈路42也可以是任何類型的數(shù)據(jù)通信鏈路,例如LAN、存儲(chǔ)網(wǎng)絡(luò)或包括(但不限于)光纖信道和小型計(jì)算機(jī)系統(tǒng)接口(SCSI)、集成驅(qū)動(dòng)電路(IDE)、FCon和FiCon的總線。以太網(wǎng)(例如,吉比特以太網(wǎng))和無線通信是可用于第二通信鏈路42的其它可能鏈路。在一個(gè)實(shí)施例中,物理存儲(chǔ)器36和第二通信鏈路42在存儲(chǔ)區(qū)網(wǎng)絡(luò)中實(shí)現(xiàn)。
使用至今為止的主存儲(chǔ)系統(tǒng),存儲(chǔ)在裝置上的數(shù)據(jù)按地址被編索引,所述地址由裝置和偏移量組成。存儲(chǔ)地址空間被分成塊(例如,扇區(qū)),在此每個(gè)塊是512個(gè)字節(jié)長。當(dāng)以I/O請求呈現(xiàn)時(shí),該I/O請求被發(fā)送到特定的裝置/磁盤/存儲(chǔ)單元,并且地址是通常所說的邏輯塊地址(LBA)和長度。在本例中,塊包含存儲(chǔ)單元并且LBA指示I/O操作開始所在的存儲(chǔ)單元,也就是,一個(gè)特定的512字節(jié)的塊,該塊是所述裝置的一部分。長度指示I/O請求將會(huì)對多少個(gè)512字節(jié)的塊操作。例如,為了從起始于字節(jié)8192的裝置讀4096個(gè)字節(jié),LBA將被設(shè)為16且長度將是8。小于或大于512字節(jié)的塊大小也可以被使用,例如,塊長可以為520字節(jié)。另外,存儲(chǔ)單元可以是可唯一地尋址的存儲(chǔ)地址空間的任意部分。
在一個(gè)實(shí)施例中,時(shí)間是用于給定存儲(chǔ)裝置的地址空間第二部分中的附加維度。用戶可以請求特定的LBA(和關(guān)聯(lián)的塊范圍),并且用戶還被提供在特定的時(shí)間點(diǎn)請求特定的LBA/范圍組合的選擇權(quán)。時(shí)間是從基本上連續(xù)的時(shí)間間隔中選出來的,并且無須提前確定。該功能可被提供在塊尋址級,并且其可被應(yīng)用于整個(gè)裝置以產(chǎn)生可變的時(shí)間存儲(chǔ)點(diǎn)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38的命令包括地址,該地址包括位置標(biāo)識(shí)符和時(shí)間標(biāo)識(shí)符。在一個(gè)實(shí)現(xiàn)中,位置標(biāo)識(shí)符可包括邏輯裝置標(biāo)識(shí)符和具有該邏輯裝置的存儲(chǔ)單元中的至少一個(gè)。時(shí)間標(biāo)識(shí)符可以是當(dāng)前時(shí)間或可以是恢復(fù)時(shí)間,也就是,需要存儲(chǔ)在該存儲(chǔ)單元的數(shù)據(jù)的一先前時(shí)間點(diǎn)。在本說明書中,主機(jī)34請求數(shù)據(jù)的先前時(shí)間被稱為“恢復(fù)時(shí)間”?!罢埱髸r(shí)間”指的是主機(jī)34請求來自恢復(fù)時(shí)間的數(shù)據(jù)的時(shí)間??赏ㄟ^指定包括位置或地址和時(shí)間的地址對數(shù)字?jǐn)?shù)據(jù)的存儲(chǔ)的單元進(jìn)行存取。存儲(chǔ)管理裝置38因此可將數(shù)據(jù)存儲(chǔ)器的連續(xù)“先前映象”呈給主機(jī)34,而不管是否快照先于請求時(shí)間而產(chǎn)生,在此各個(gè)先前映象是在恢復(fù)時(shí)間的磁盤視圖。在一個(gè)實(shí)施例中,定義連續(xù)的時(shí)間標(biāo)識(shí)符之間的最少經(jīng)過時(shí)間的增量是充分小的,那么它就允許從基本上連續(xù)的時(shí)間間隔產(chǎn)生先前的數(shù)據(jù)存儲(chǔ)器。在該實(shí)施例的一個(gè)版本中,可使用全部位于當(dāng)前存儲(chǔ)器A44上的數(shù)據(jù)來響應(yīng)對當(dāng)前映象的請求,而不需要使用來自時(shí)間存儲(chǔ)器A46的任何數(shù)據(jù)。然而,如將在下面被更詳細(xì)地描述的,對來自先前時(shí)間的數(shù)據(jù)請求(也就是,先前映象)可能需要來自當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46兩者的數(shù)據(jù)。
在一個(gè)實(shí)施例中,每個(gè)主機(jī)34的I/O請求包括一個(gè)或更多個(gè)由裝置標(biāo)識(shí)符標(biāo)示的目標(biāo)存儲(chǔ)單元(例如,物理磁盤、邏輯裝置、虛擬裝置等)、第一存儲(chǔ)單元(例如,LBA地址等)、長度和用于讀命令的時(shí)間標(biāo)識(shí)符。寫命令包括數(shù)據(jù)有效載荷,所述數(shù)據(jù)有效載荷包含正被寫到目標(biāo)存儲(chǔ)單元的數(shù)據(jù)。
在另一個(gè)實(shí)施例中,時(shí)間標(biāo)識(shí)符是隱含的,其含意是存儲(chǔ)管理裝置38提供邏輯裝置,該邏輯裝置是另一個(gè)第一邏輯裝置在較早時(shí)間的視圖??赏ㄟ^帶外通信(例如,在存儲(chǔ)管理裝置的控制臺(tái))或經(jīng)由主機(jī)34和存儲(chǔ)管理裝置38之間的帶內(nèi)通信建立第二邏輯裝置。在一個(gè)實(shí)施例中,一旦第二邏輯裝置被建立,與其關(guān)聯(lián)的存儲(chǔ)單元可被來自第二邏輯裝置的請求數(shù)據(jù)訪問,而不是被特定時(shí)間的明確請求數(shù)據(jù)訪問。
在一個(gè)實(shí)施例中,時(shí)間存儲(chǔ)器包括控制信息和有效載荷數(shù)據(jù),控制信息也稱作“元數(shù)據(jù)”(meta data)。在該實(shí)施例的一個(gè)版本中,控制信息包括用于指示當(dāng)前存儲(chǔ)器44中的特定存儲(chǔ)單元何時(shí)被指引重寫(作為寫操作的結(jié)果)的時(shí)間戳,數(shù)據(jù)發(fā)源的存儲(chǔ)單元的當(dāng)前存儲(chǔ)器44中的位置,以及舊數(shù)據(jù)現(xiàn)在存儲(chǔ)在時(shí)間存儲(chǔ)器46中的位置。存儲(chǔ)在時(shí)間存儲(chǔ)器46中的有效載荷數(shù)據(jù)可包括以前出現(xiàn)在當(dāng)前存儲(chǔ)器44中但已被新的數(shù)據(jù)替代的數(shù)據(jù)。
圖2描述一個(gè)I/O請求的實(shí)施例,具體地,描述被主機(jī)34發(fā)送到存儲(chǔ)管理裝置38的基于時(shí)間的讀命令。在一個(gè)實(shí)施例中,I/O請求是SCSI命令。圖2標(biāo)識(shí)包括在命令塊88的32個(gè)字節(jié)中的每個(gè)比特。在字節(jié)0中,操作碼標(biāo)識(shí)將被執(zhí)行的命令類型,也就是,基于時(shí)間的讀命令。字節(jié)2-9用于邏輯塊地址,該邏輯塊地址標(biāo)識(shí)第一存儲(chǔ)單元,并且讀命令在所述第一存儲(chǔ)單元上操作。字節(jié)10-13用于傳送長度,其指示正被讀取的塊數(shù)目,讀取始于被邏輯塊地址標(biāo)識(shí)的存儲(chǔ)單元(也就是,塊)。字節(jié)14和15留作將來使用。字節(jié)16是RelativeChk字段,其指示時(shí)間字段是相對的還是絕對的。如果RelativeChk字段是0,則在命令塊中指定的時(shí)間是以現(xiàn)在時(shí)間為基準(zhǔn);因此,0指示所指定的時(shí)間是從當(dāng)前時(shí)間起計(jì)算的過去時(shí)間。例如,在請求時(shí)間T指定的恢復(fù)時(shí)間T-5000提供一個(gè)讀命令的例子,該讀命令具有的恢復(fù)時(shí)間是以當(dāng)前時(shí)間T為基準(zhǔn),也就是該恢復(fù)時(shí)間是在當(dāng)前時(shí)間之前的5000個(gè)時(shí)間增量。如果RelativeChk字段是非零的,所指定的時(shí)間是被絕對地指定的,也就是,不參考另一個(gè)時(shí)間。例如,這種I/O請求可包括相對時(shí)間并且存儲(chǔ)管理裝置38可具有1秒或更小的最小時(shí)間增量。在另一個(gè)實(shí)施例中,I/O請求可包括絕對時(shí)間并且最小時(shí)間增量可以是1毫秒或更小。
字節(jié)17-24包括所指定的讀時(shí)間,其是相對的或絕對的。如果讀時(shí)間是絕對的,恢復(fù)時(shí)間則被包含在字節(jié)17-24中。如果讀時(shí)間是相對的,恢復(fù)時(shí)間是基于從當(dāng)前時(shí)間減去所指定的讀時(shí)間計(jì)算的。字節(jié)25-30留作將來使用。字節(jié)31是命令塊88的控制字段。
在操作中,數(shù)據(jù)被提供給主機(jī)34,以響應(yīng)主機(jī)34產(chǎn)生的并在第一通信鏈路40上被傳給存儲(chǔ)管理裝置38的I/O請求。為了保持過去存儲(chǔ)在當(dāng)前存儲(chǔ)器A40中的數(shù)據(jù)的歷史記錄,在一個(gè)實(shí)施例中,當(dāng)主機(jī)34的I/O請求指示存儲(chǔ)管理裝置38以新的數(shù)據(jù)代替現(xiàn)有數(shù)據(jù)時(shí),存儲(chǔ)管理裝置38使用寫時(shí)拷貝(copy-on-write)進(jìn)程。一接收到主機(jī)34的寫請求,就通過把將被替換的現(xiàn)有數(shù)據(jù)從當(dāng)前存儲(chǔ)器A44拷貝到時(shí)間存儲(chǔ)器A46來執(zhí)行寫時(shí)拷貝操作。數(shù)據(jù)從當(dāng)前存儲(chǔ)器A44中被拷貝的位置被稱為原始位置。舊的(也就是,被重寫的)數(shù)據(jù)被存儲(chǔ)在時(shí)間存儲(chǔ)器A46中的位置被稱為目的地位置。
在特定的實(shí)例中,實(shí)際的數(shù)據(jù)拷貝可能不會(huì)在寫操作一出現(xiàn)時(shí)就執(zhí)行,例如,因?yàn)閷⒈恢貙懙臄?shù)據(jù)已經(jīng)被保存(例如因?yàn)槠浜推渌母浇鼔K一起被保存)或因?yàn)樵摂?shù)據(jù)被保存在內(nèi)存中而未被立即寫入。這里,寫時(shí)拷貝操作可意指實(shí)際的拷貝,而且可包括把寫時(shí)拷貝的效果考慮進(jìn)去的此類最優(yōu)化。存儲(chǔ)管理裝置38在存儲(chǔ)單元中的數(shù)據(jù)被重寫之前記住它,并且在塊被重寫之后,在時(shí)間存儲(chǔ)器中存在充分的信息,從而可從存儲(chǔ)管理裝置38內(nèi)某處、物理存儲(chǔ)器和/或別處獲得已保存的數(shù)據(jù)。為了解釋的簡單起見,如下所描述的例子通常呈現(xiàn)出存儲(chǔ)管理裝置38的操作似乎寫時(shí)拷貝總是在執(zhí)行,條件是最優(yōu)化可被用于實(shí)踐中。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38給每個(gè)寫時(shí)拷貝編索引并保留原始位置、目的地位置和時(shí)間戳的記錄。在各種實(shí)施例中,時(shí)間戳包括數(shù)據(jù)被寫到當(dāng)前存儲(chǔ)器A44或時(shí)間存儲(chǔ)器A46的時(shí)間。在另一個(gè)實(shí)施例中,時(shí)間戳包括寫請求被存儲(chǔ)管理裝置38接收和處理的時(shí)間。
作為一個(gè)說明性的例子,存儲(chǔ)管理裝置38給主機(jī)34提供數(shù)據(jù)存儲(chǔ)器A。在本例中,數(shù)據(jù)存儲(chǔ)器A是磁盤卷。在一個(gè)實(shí)施例中,數(shù)據(jù)存儲(chǔ)器A是用當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46實(shí)現(xiàn)的。存儲(chǔ)管理裝置38能夠存儲(chǔ)對卷A做出的每個(gè)改變,并且此外,能夠向主機(jī)34提供該卷的“先前映象”,即如該卷在過去時(shí)間存在時(shí)的樣子。如上所描述的,可使用時(shí)間規(guī)約(specification)對存儲(chǔ)管理裝置38的進(jìn)行存取。
通常,因?yàn)樵谄髽I(yè)應(yīng)用程序中使用的數(shù)據(jù)管理系統(tǒng)中發(fā)現(xiàn)大量I/O請求,所以數(shù)據(jù)存儲(chǔ)器A的每個(gè)先前映象將包括至少一些來自那些應(yīng)用程序中時(shí)間存儲(chǔ)器A46的數(shù)據(jù)。例如,如果在現(xiàn)在時(shí)間T,主機(jī)34請求數(shù)據(jù)存儲(chǔ)器A在過去T-100中某一時(shí)間的先前映象,存儲(chǔ)管理裝置38就審閱其索引并確定數(shù)據(jù)存儲(chǔ)器A上在時(shí)間T-100和現(xiàn)在時(shí)間(T)之間已被更新的存儲(chǔ)單元。主機(jī)34在時(shí)間T-100接收來自數(shù)據(jù)存儲(chǔ)器A的先前映象的數(shù)據(jù),其包括來自當(dāng)前存儲(chǔ)器A44的從T-100以來未被更新的存儲(chǔ)單元,以及那些從T-100以來已被更新的存儲(chǔ)單元,以及來自時(shí)間存儲(chǔ)器A46的存儲(chǔ)單元,所述時(shí)間存儲(chǔ)器A46代表在時(shí)間T-100的數(shù)據(jù)存儲(chǔ)器A。
如另一個(gè)例子,在當(dāng)前時(shí)間T,主機(jī)34請求來自先前時(shí)間T-30的數(shù)據(jù)存儲(chǔ)器A的映象。在響應(yīng)中,假如存儲(chǔ)單元自請求時(shí)間T-30以來未被更新,存儲(chǔ)管理裝置38通過使用存在于當(dāng)前存儲(chǔ)器A44的數(shù)據(jù)來產(chǎn)生T-30的先前映象。然而,對于自請求時(shí)間T-30以來已被更新的每個(gè)記錄,則來自當(dāng)前存儲(chǔ)器A44的數(shù)據(jù)與來自時(shí)間存儲(chǔ)器A46的數(shù)據(jù)結(jié)合。例如,如果存儲(chǔ)在當(dāng)前存儲(chǔ)器A44的塊100中的數(shù)據(jù)自請求時(shí)間T-30以來被寫一次(例如,在時(shí)間T-20),則由于發(fā)生在時(shí)間T-20的寫時(shí)拷貝命令而從當(dāng)前存儲(chǔ)器A44被傳送到時(shí)間存儲(chǔ)器A46的舊數(shù)據(jù),將被發(fā)現(xiàn)位于時(shí)間存儲(chǔ)器A46中的特定地址。也就是說,時(shí)間存儲(chǔ)器A46中的數(shù)據(jù)使用其位置和指示其在時(shí)間T-20被寫的時(shí)間戳而被編索引。因?yàn)檫@是自T-30以來塊編號100被寫的唯一的時(shí)間點(diǎn),由塊100和存儲(chǔ)在時(shí)間存儲(chǔ)器A46中的時(shí)間T-20標(biāo)識(shí)的存儲(chǔ)單元是塊100的代表數(shù)據(jù),其在數(shù)據(jù)存儲(chǔ)器A的映象在時(shí)間T-30被創(chuàng)建的時(shí)候?qū)⒈惶峁┙o主機(jī)34。
參照圖3,在一個(gè)簡化得多的說明性例子中,存儲(chǔ)管理裝置38給出包括五個(gè)存儲(chǔ)單元的卷A,為簡單起見顯示為100個(gè)字節(jié)的塊,塊100、塊200、塊300、塊400和塊500。在本例中,在當(dāng)前時(shí)間T和過去時(shí)間之間數(shù)據(jù)存儲(chǔ)器A發(fā)生了五次更新。過去的寫入時(shí)間被顯示在本例中,且為簡單起見將這些時(shí)間標(biāo)識(shí)為時(shí)間T-60、T-48、T-33、T-29和T-15。在該表示法中,時(shí)間T-60是時(shí)間T之前60個(gè)單位(例如,秒、毫秒、微秒)。在一個(gè)實(shí)際的實(shí)現(xiàn)中,單位將會(huì)是很小的時(shí)間增量,因此這些數(shù)(也就是60、48、33、29、15)將很可能大得多。
在本例中,塊100在時(shí)間T-60被更新。塊300在時(shí)間T-48被更新。塊200是在時(shí)間T-33及又在時(shí)間T-29被更新。塊400在時(shí)間T-15被更新。如上所描述的,在寫到塊100之前,塊100的信息將被讀取并為卷A存儲(chǔ)在時(shí)間存儲(chǔ)器46中。相同的寫時(shí)拷貝操作發(fā)生在其它塊。因此,時(shí)間存儲(chǔ)器A46將包括五條記錄,所述五條記錄對應(yīng)在寫請求被指引到當(dāng)前存儲(chǔ)器A44之前從當(dāng)前存儲(chǔ)器A44拷貝的數(shù)據(jù)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38使用存儲(chǔ)單元(例如,塊100、塊200等)的位置以及與寫時(shí)拷貝的執(zhí)行時(shí)間相聯(lián)系的時(shí)間戳來為存儲(chǔ)在時(shí)間存儲(chǔ)器A46中的每個(gè)記錄建立索引。因此,通過給出用于塊100-400的來自時(shí)間存儲(chǔ)器A46的數(shù)據(jù)和用于塊500的當(dāng)前存儲(chǔ)器A44中的數(shù)據(jù),可在T-60之前的時(shí)間產(chǎn)生數(shù)據(jù)存儲(chǔ)器A的先前映象,這是因?yàn)閴K500在先前時(shí)間T-60和現(xiàn)在時(shí)間T之間未被更新。同樣地,如果需要在時(shí)間T-35時(shí)的數(shù)據(jù)存儲(chǔ)器A的視圖(也就是,先前映象),當(dāng)前存儲(chǔ)器A44可提供三個(gè)塊,也就是,塊100、塊300和塊500,這是因?yàn)樗鼈冊跁r(shí)間T-35之后都未改變。塊200和塊400自時(shí)間T-35以來已被修改,因此那些塊可由時(shí)間存儲(chǔ)器46提供給卷A。
因此,如在該簡化的例子中所證明的,通過在卷上的數(shù)據(jù)被重寫之前將其保存在時(shí)間存儲(chǔ)器46中,以及在時(shí)間存儲(chǔ)器46中存儲(chǔ)的數(shù)據(jù)被重寫時(shí)為該數(shù)據(jù)編索引,系統(tǒng)可得到在當(dāng)前存儲(chǔ)器44中完整的當(dāng)前版本,并且具有在一定時(shí)間間隔的卷A上數(shù)據(jù)的映象,時(shí)間存儲(chǔ)器46在所述時(shí)間間隔存在數(shù)據(jù)。存儲(chǔ)管理裝置38可給出“虛擬”卷,所述“虛擬”卷反映過去某一時(shí)間的原始卷。此外,存儲(chǔ)管理裝置38可提供來自基本上連續(xù)的時(shí)間間隔中任何時(shí)間的虛擬卷,“基本上”連續(xù)是因?yàn)橛勺钚r(shí)間增量定義的量化限制。虛擬卷不需要在請求時(shí)間之前被產(chǎn)生。
在一個(gè)例子實(shí)現(xiàn)中,如果該例子卷被稱為卷A,另一個(gè)卷,卷B,可基于卷A的“先前映象”而被提供,所述卷A的“先前映象”是在較早時(shí)間的卷A的內(nèi)容。來自卷B的這個(gè)數(shù)據(jù)可從卷A的先前映象拷貝到新的卷上,以使卷B為在先前時(shí)間的卷A的完整拷貝。卷B還可以保持“虛擬”,其含意在于卷B可僅僅以當(dāng)前存儲(chǔ)器A44和時(shí)間存儲(chǔ)器A46的組合的形式存在,同時(shí)存儲(chǔ)管理裝置38提供來自當(dāng)前存儲(chǔ)器44或時(shí)間存儲(chǔ)器46的數(shù)據(jù)以響應(yīng)對卷B的存取。
參照圖4,例如提供卷A的當(dāng)前映象、卷A在某一時(shí)間(例如,時(shí)間T-3000)的先前映象和卷A在另一時(shí)間(例如,時(shí)間T-6100)的先前映象是可能的。這是因?yàn)檫@些先前映象是“虛擬的”,所以存儲(chǔ)管理裝置38可同時(shí)提供虛擬先前映象48、50兩者。
主機(jī)34和存儲(chǔ)管理裝置38可使用各種協(xié)議中的一個(gè)或更多個(gè)來引用數(shù)據(jù)存儲(chǔ)器的先前映象。例如,主機(jī)34可在帶外通信中請求存儲(chǔ)管理裝置38使作為另一卷的先前映象的虛擬數(shù)據(jù)存儲(chǔ)器可用。主機(jī)34可在帶內(nèi)的通信中,例如使用現(xiàn)有協(xié)議或該現(xiàn)有協(xié)議的擴(kuò)展,請求存儲(chǔ)管理裝置38使新的卷可用。系統(tǒng)管理員還可以操作存儲(chǔ)管理裝置38的控制臺(tái)或控制面板,或向存儲(chǔ)管理裝置38提供輸入以指示存儲(chǔ)管理裝置38使作為另一個(gè)卷的虛擬映象的一個(gè)卷可用。在一些實(shí)現(xiàn)中,新的卷可被分配一個(gè)卷或裝置標(biāo)識(shí)符(例如,SCSI ID或光纖信道全球名)。
因此,在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置接收一個(gè)創(chuàng)建虛擬數(shù)據(jù)存儲(chǔ)器的請求,所述虛擬數(shù)據(jù)存儲(chǔ)器反映在指定時(shí)間的原始數(shù)據(jù)存儲(chǔ)器的狀態(tài)。虛擬數(shù)據(jù)存儲(chǔ)器可以是,例如,新的邏輯單元。該指定時(shí)間可從過去時(shí)間和當(dāng)前時(shí)間之間的基本上連續(xù)的時(shí)間間隔中選擇。該間隔的大小(和過去時(shí)間的值)是時(shí)間存儲(chǔ)器的大小和被指引到數(shù)據(jù)存儲(chǔ)器的變化量的函數(shù)。虛擬數(shù)據(jù)存儲(chǔ)器,因?yàn)槠涫翘摂M的,所以其可被基本上瞬時(shí)地提供,且具有最少或無數(shù)據(jù)移動(dòng)。
存儲(chǔ)管理裝置接收到對位于虛擬數(shù)據(jù)存儲(chǔ)器中指定地址的數(shù)據(jù)的存儲(chǔ)協(xié)議請求,并響應(yīng)該存儲(chǔ)協(xié)議請求而發(fā)送存儲(chǔ)在原始數(shù)據(jù)存儲(chǔ)器中指定地址指定時(shí)間的數(shù)據(jù)。
創(chuàng)建新虛擬數(shù)據(jù)存儲(chǔ)器的請求可以采取一些操縱用戶界面的形式。用戶界面可處于一個(gè)或更多個(gè)主系統(tǒng)之上,并傳給存儲(chǔ)管理裝置,且/或用戶界面可處于存儲(chǔ)管理裝置的控制臺(tái)之上??赏ㄟ^各種聯(lián)網(wǎng)技術(shù)和協(xié)議,及/或通過存儲(chǔ)協(xié)議(例如,通過其產(chǎn)生對數(shù)據(jù)的請求同一協(xié)議)來傳達(dá)請求。該請求甚至可以是與對數(shù)據(jù)的請求相同的存儲(chǔ)協(xié)議數(shù)據(jù)包的一部分。對來自過去時(shí)間的數(shù)據(jù)的請求甚至可以自動(dòng)地觸發(fā)虛擬數(shù)據(jù)存儲(chǔ)器的供應(yīng)。
對數(shù)據(jù)的請求可以是例如通過存儲(chǔ)協(xié)議的標(biāo)準(zhǔn)讀請求,比如SCSI讀請求。該請求可指定一個(gè)地址,該地址可包括邏輯單元標(biāo)識(shí)符和位置標(biāo)識(shí)符。該地址可包括虛擬數(shù)據(jù)存儲(chǔ)器的標(biāo)識(shí)符。
如這里所描述的,原始數(shù)據(jù)存儲(chǔ)器本身可以是虛擬數(shù)據(jù)存儲(chǔ)器。在那里可有一系列的虛擬數(shù)據(jù)存儲(chǔ)器,每個(gè)均由其它數(shù)據(jù)存儲(chǔ)器的先前映象形成。
如所描述的,因?yàn)樘摂M數(shù)據(jù)存儲(chǔ)器是虛擬的,所以其可被基本上瞬時(shí)地提供,且具有最少數(shù)據(jù)移動(dòng)或無數(shù)據(jù)移動(dòng)。然而,如果存在虛擬數(shù)據(jù)存儲(chǔ)器的持續(xù)使用,以從虛擬數(shù)據(jù)存儲(chǔ)器拷貝數(shù)據(jù),例如,在后臺(tái)中,到另一個(gè)數(shù)據(jù)存儲(chǔ)器,并從而產(chǎn)生虛擬數(shù)據(jù)存儲(chǔ)器的完整拷貝是可能的。一旦該拷貝是完整的,該拷貝可被用于代替虛擬數(shù)據(jù)存儲(chǔ)器。這樣先前映象可被虛擬數(shù)據(jù)存儲(chǔ)器基本上瞬時(shí)地提供,且從一個(gè)數(shù)據(jù)存儲(chǔ)器到另一個(gè)數(shù)據(jù)存儲(chǔ)器的耗時(shí)拷貝實(shí)質(zhì)上對存儲(chǔ)管理裝置的用戶來說是透明的。
在另一個(gè)實(shí)施例中,主機(jī)34可使用一個(gè)協(xié)議與存儲(chǔ)管理裝置38通信,所述協(xié)議允許主機(jī)34通過引用地址和時(shí)間對存儲(chǔ)單元進(jìn)行存取。因此,時(shí)間維度被加入存取請求。時(shí)間可以多種方式引用。例如,主機(jī)34可引用如其所保持的絕對時(shí)間或存儲(chǔ)管理裝置38所保持的絕對時(shí)間,例如特定一天的4:07.33。時(shí)間還可以被相對地引用,也就是說,其可以被指定為以另一個(gè)時(shí)間為基準(zhǔn)的時(shí)間。在一個(gè)實(shí)施例中,時(shí)間是基于從當(dāng)前時(shí)間減去多個(gè)時(shí)間單位(因此,相對于當(dāng)前時(shí)間)來被引用的。該方法不需要主機(jī)34和存儲(chǔ)管理裝置38具有精確的同步時(shí)鐘??墒褂萌魏慰蛇m用的單位來引用時(shí)間并且時(shí)間可以是任何可適用的單位,其包括而不限于毫微秒、微秒、毫秒、秒等。
因此,在一個(gè)方法中,主機(jī)34(或系統(tǒng)管理員)可以首先指示創(chuàng)建新的虛擬卷,卷B,其是卷A在時(shí)間T-3000的先前映象。主機(jī)34(或系統(tǒng)管理員)能然后指示創(chuàng)建新的虛擬卷,卷C,其是卷A在時(shí)間T-6100的先前映象。因此主機(jī)可以根據(jù)需要比較卷A、B和C上的實(shí)際數(shù)據(jù),從而確定卷上的什么文件或記錄等具有不同用途(例如,辯論用途)。
在另一個(gè)方法中(可另外使用或替代使用的),主機(jī)34可使用除數(shù)據(jù)地址之外還包括時(shí)間規(guī)約的請求來對卷進(jìn)行請求。存儲(chǔ)管理裝置38可通過提供在指定地址指定時(shí)間的數(shù)據(jù)而對該請求作出響應(yīng)。
應(yīng)當(dāng)指出的是,同樣在一些實(shí)現(xiàn)中,當(dāng)前存儲(chǔ)器A44可以是磁盤60的鏡像磁盤(以虛像顯示),或如一個(gè)或更多個(gè)實(shí)際卷一樣被用于任何其它配置中。
時(shí)間映象還可以是固定的或者動(dòng)態(tài)的。固定時(shí)間映象,也被稱為克隆,與在特定時(shí)間點(diǎn)的數(shù)據(jù)存儲(chǔ)器A的快照類似。它被稱為固定是因?yàn)槠洳桓?,也就是,一旦它被?chuàng)建,其不會(huì)被寫入數(shù)據(jù)。然而,由存儲(chǔ)管理裝置38產(chǎn)生的固定映象可不同于快照,因?yàn)橛诚蟮谝淮慰稍诒然謴?fù)時(shí)間更后的請求時(shí)間產(chǎn)生,也就是,存儲(chǔ)管理裝置38重新創(chuàng)建一個(gè)可能自恢復(fù)時(shí)間以來的任何時(shí)間都未在以前存在過的映象。相反,快照是在當(dāng)時(shí)的當(dāng)前時(shí)間產(chǎn)生的復(fù)制品。
動(dòng)態(tài)時(shí)間映象是作為在特定時(shí)間點(diǎn)的當(dāng)前存儲(chǔ)器A的映象而被創(chuàng)建的。然而,不同于固定時(shí)間映象,一旦產(chǎn)生,動(dòng)態(tài)時(shí)間映象將不斷以和當(dāng)前存儲(chǔ)器A同樣的方式被更新。結(jié)果,直到恢復(fù)時(shí)間,動(dòng)態(tài)時(shí)間映象的內(nèi)容都與當(dāng)前存儲(chǔ)器A44相同。例如,如果第一先前映象48是動(dòng)態(tài)的,它將匹配當(dāng)前存儲(chǔ)器A直到T-3000。此后,開始于現(xiàn)在的請求時(shí)間(T),對當(dāng)前存儲(chǔ)器A的更新被復(fù)制在第一先前映象48上。由此產(chǎn)生的動(dòng)態(tài)時(shí)間映象起當(dāng)前存儲(chǔ)器B的作用,其包括除發(fā)生在請求時(shí)間(T)和恢復(fù)時(shí)間(T-3000)之間的那些請求以外的所有被指引到當(dāng)前存儲(chǔ)器A44的I/O請求的結(jié)果。因此,當(dāng)前存儲(chǔ)器B也具有與其相關(guān)聯(lián)的時(shí)間存儲(chǔ)器,也就是,時(shí)間存儲(chǔ)器B。
參照圖5,其顯示了固定和動(dòng)態(tài)時(shí)間映象。固定先前映象是數(shù)據(jù)存儲(chǔ)器在特定時(shí)間點(diǎn)的視圖。它是固定的,其含意在于它不被更新,例如,它是只讀的。在一個(gè)實(shí)施例中,通過在一個(gè)映象被創(chuàng)建時(shí)將其標(biāo)識(shí)為只讀映象從而將該時(shí)間映象固定。固定映象可用于查看在特定時(shí)間的數(shù)據(jù)存儲(chǔ)器,用于辯論用途(也就是,標(biāo)識(shí)問題的原因),或恢復(fù)擦除的數(shù)據(jù)。動(dòng)態(tài)映象作為特定時(shí)間點(diǎn)的第一數(shù)據(jù)存儲(chǔ)器(例如,數(shù)據(jù)存儲(chǔ)器A)的視圖開始,但先前映象可以被修改。在主機(jī)看來,動(dòng)態(tài)映象似乎是先前映象被拷貝在其上的新數(shù)據(jù)存儲(chǔ)器。動(dòng)態(tài)映象可用于從故障中快速恢復(fù)。
例如,當(dāng)由第一數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)破壞引起故障發(fā)生時(shí),可指定固定先前映象(如上所描述的),每個(gè)固定先前映象均將第一數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)呈現(xiàn)為如其在過去的指定時(shí)間所存在的那樣。這些先前映象可被檢查以確定破壞的近似時(shí)間。隨著最小時(shí)間戳增量被減少,可以以增加的精度確定近似時(shí)間。在一個(gè)實(shí)施例中,顯示來自恰在破壞時(shí)間之前的數(shù)據(jù)的先前映象被指定是動(dòng)態(tài)的,使用數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)的軟件應(yīng)用程序開始使用先前映象作為代替,并且事務(wù)活動(dòng)使用第一數(shù)據(jù)存儲(chǔ)器的最近的未破壞版本重新開始。應(yīng)用程序可以使用該映象,例如,通過以某個(gè)方式重構(gòu)業(yè)務(wù)應(yīng)用軟件,或指示存儲(chǔ)管理裝置38顯示動(dòng)態(tài)先前映象代替第一當(dāng)前數(shù)據(jù)存儲(chǔ)器,也就是,通過使用先前映象以創(chuàng)建第二數(shù)據(jù)存儲(chǔ)器(例如,數(shù)據(jù)存儲(chǔ)器B)。在一個(gè)實(shí)施例中,動(dòng)態(tài)映象從主機(jī)看來似乎是新的數(shù)據(jù)存儲(chǔ)器(例如,具有目標(biāo)標(biāo)識(shí)符的新的裝置)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38提供動(dòng)態(tài)映象而不用拷貝(或不用最初拷貝)先前映象到另一個(gè)數(shù)據(jù)存儲(chǔ)器。相反地,存儲(chǔ)管理裝置,如上所描述的,通過使用與第一數(shù)據(jù)存儲(chǔ)器相關(guān)聯(lián)的當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器來提供第一數(shù)據(jù)存儲(chǔ)器的先前映象,視情況而定。存儲(chǔ)管理裝置還將第二當(dāng)前存儲(chǔ)器和第二時(shí)間存儲(chǔ)器與動(dòng)態(tài)映象(也就是,第二數(shù)據(jù)存儲(chǔ)器)聯(lián)系起來,以使動(dòng)態(tài)映象的變化被存儲(chǔ)在第二當(dāng)前存儲(chǔ)器中,并且已改變的塊被存儲(chǔ)(例如,以寫時(shí)拷貝的方式)在第二時(shí)間存儲(chǔ)器中。
在這種實(shí)現(xiàn)的一個(gè)實(shí)施例中,當(dāng)接收到對動(dòng)態(tài)映象中當(dāng)前數(shù)據(jù)的請求時(shí),存儲(chǔ)管理裝置38將首先檢查第二當(dāng)前存儲(chǔ)器中的數(shù)據(jù),然后檢查第一時(shí)間存儲(chǔ)器中的數(shù)據(jù),最后是檢查第一當(dāng)前存儲(chǔ)器中的數(shù)據(jù)。一收到對動(dòng)態(tài)映象的寫請求,存儲(chǔ)管理裝置38就確定數(shù)據(jù)當(dāng)前在動(dòng)態(tài)映象(也就是第二當(dāng)前存儲(chǔ)器、原始當(dāng)前存儲(chǔ)器或原始時(shí)間存儲(chǔ)器)中的位置,將被重寫的塊存儲(chǔ)在第二時(shí)間存儲(chǔ)器并然后將新的塊寫到第二當(dāng)前存儲(chǔ)器??墒褂玫诙r(shí)間存儲(chǔ)器、第二當(dāng)前存儲(chǔ)器、第一時(shí)間存儲(chǔ)器和第一當(dāng)前存儲(chǔ)器來提供對來自動(dòng)態(tài)映象的先前映象的數(shù)據(jù)的請求。
在另一個(gè)實(shí)施例中,動(dòng)態(tài)映象被全部存儲(chǔ)在時(shí)間存儲(chǔ)器中。在該實(shí)施例中,數(shù)據(jù)存儲(chǔ)器具有單個(gè)當(dāng)前存儲(chǔ)器和單個(gè)時(shí)間存儲(chǔ)器。在該實(shí)施例的一個(gè)版本中,固定映象、動(dòng)態(tài)映象、索引信息和控制塊都被存儲(chǔ)在時(shí)間存儲(chǔ)器中??赏ㄟ^將指定恢復(fù)時(shí)間的數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)寫到時(shí)間存儲(chǔ)器的分段來創(chuàng)建動(dòng)態(tài)映象。在該實(shí)施例的另一個(gè)版本中,當(dāng)動(dòng)態(tài)映象被寫時(shí),寫時(shí)拷貝操作不被執(zhí)行。
因?yàn)樵摯鎯?chǔ)管理裝置38(至少最初)可以提供動(dòng)態(tài)映象作為“虛擬”裝置,其含意在于動(dòng)態(tài)映象中的數(shù)據(jù)是第一和第二當(dāng)前數(shù)據(jù)存儲(chǔ)器以及第一和第二時(shí)間存儲(chǔ)器中數(shù)據(jù)的組合,動(dòng)態(tài)映象可被迅速地提供,且不用將數(shù)據(jù)從一個(gè)數(shù)據(jù)存儲(chǔ)器拷貝到另一個(gè)。一旦動(dòng)態(tài)映象存在并運(yùn)行,它可被用于(當(dāng)存儲(chǔ)管理裝置容量允許時(shí))將第一當(dāng)前存儲(chǔ)器及/或第一時(shí)間存儲(chǔ)器的內(nèi)容拷貝到的第二當(dāng)前存儲(chǔ)器和第二時(shí)間存儲(chǔ)器,用于該動(dòng)態(tài)映象。換言之,“虛擬”第二數(shù)據(jù)存儲(chǔ)器可用于創(chuàng)建新的數(shù)據(jù)存儲(chǔ)器,該新的數(shù)據(jù)存儲(chǔ)器可用于獨(dú)立地替換第一數(shù)據(jù)存儲(chǔ)器。這可在后臺(tái)中完成,或當(dāng)存儲(chǔ)管理裝置的事務(wù)(transaction)活動(dòng)相對低時(shí)完成。另外,可人工地或自動(dòng)地啟動(dòng)后臺(tái)拷貝操作。在一個(gè)實(shí)施例中,主機(jī)34或者系統(tǒng)管理員可以啟動(dòng)后臺(tái)拷貝操作和數(shù)據(jù)存儲(chǔ)器替換操作。
參照圖5,作為該實(shí)施例的一個(gè)簡化的說明性例子,假定動(dòng)態(tài)映象由第一數(shù)據(jù)存儲(chǔ)器創(chuàng)建,在本例中第一數(shù)據(jù)存儲(chǔ)器被稱為數(shù)據(jù)存儲(chǔ)器A143。作為動(dòng)態(tài)映象的基礎(chǔ)的先前映象在特定時(shí)間的(例如,上午11:00)被指定為數(shù)據(jù)存儲(chǔ)器A143(再次,舉例來說)。使用與數(shù)據(jù)存儲(chǔ)器A143相聯(lián)系的當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146可提供數(shù)據(jù)存儲(chǔ)器A143的先前映象。依據(jù)主機(jī)34或系統(tǒng)管理員的指示,即先前映象應(yīng)該是動(dòng)態(tài)的(從而允許修改),第二數(shù)據(jù)存儲(chǔ)器被分配一個(gè)標(biāo)識(shí)符,其在本例中是數(shù)據(jù)存儲(chǔ)器B147,并且當(dāng)前存儲(chǔ)器B148和時(shí)間存儲(chǔ)器B152被分配給動(dòng)態(tài)映象。
存儲(chǔ)管理裝置38通過首先檢查當(dāng)前存儲(chǔ)器B148來響應(yīng)在當(dāng)前時(shí)間對數(shù)據(jù)存儲(chǔ)器B的讀請求,并且如果所請求的塊不在當(dāng)前存儲(chǔ)器B中,那么時(shí)間存儲(chǔ)器A146和當(dāng)前存儲(chǔ)器A144可用于獲得如該塊在先前映象時(shí)那樣的塊,所述先前映象是動(dòng)態(tài)映象的基礎(chǔ)。為使用來自數(shù)據(jù)存儲(chǔ)器A143的先前映象的數(shù)據(jù),數(shù)據(jù)存儲(chǔ)器A143的索引被檢查以確定是否當(dāng)前存儲(chǔ)器A144或時(shí)間存儲(chǔ)器A146包含所需的塊。
存儲(chǔ)管理裝置38通過如剛才對讀請求所描述的方式定位目標(biāo)塊的當(dāng)前內(nèi)容(例如,首先檢驗(yàn)當(dāng)前存儲(chǔ)器B148,然后時(shí)間存儲(chǔ)器A146,然后當(dāng)前存儲(chǔ)器A144),從而響應(yīng)對數(shù)據(jù)存儲(chǔ)器B的寫請求(對于當(dāng)前時(shí)間),讀目標(biāo)塊,然后將所讀的數(shù)據(jù)寫到時(shí)間存儲(chǔ)器152以完成寫時(shí)拷貝操作。與對目標(biāo)塊的寫要求相聯(lián)系的數(shù)據(jù)被寫到當(dāng)前存儲(chǔ)器B148。
可通過首先檢查時(shí)間存儲(chǔ)器B152來響應(yīng)對過去時(shí)間的數(shù)據(jù)存儲(chǔ)器B147的讀請求。例如,可檢查時(shí)間存儲(chǔ)器B152的索引,以確定是否其包含該所需的塊。如果不是,就檢查當(dāng)前存儲(chǔ)器B148,并且如果該塊不在當(dāng)前存儲(chǔ)器B中,那么時(shí)間存儲(chǔ)器A146和當(dāng)前存儲(chǔ)器A144可用于獲得如該塊在先前映象時(shí)那樣的塊,所述先前映象是動(dòng)態(tài)映象的基礎(chǔ)。也就是說,時(shí)間存儲(chǔ)器A146的索引被檢查以確定其是否包含所需時(shí)間的所需塊,如果不是,就使用當(dāng)前存儲(chǔ)器A144中的塊。應(yīng)該理解的是,可以顛倒時(shí)間存儲(chǔ)器A146和當(dāng)前存儲(chǔ)器A144的索引被檢查的順序。替代性地,可使用時(shí)間存儲(chǔ)器A146和當(dāng)前存儲(chǔ)器A144的復(fù)合索引。
應(yīng)該注意的是,數(shù)據(jù)存儲(chǔ)器A143可以持續(xù)活動(dòng)的數(shù)據(jù)存儲(chǔ)器并且存在對于數(shù)據(jù)存儲(chǔ)器A143的持續(xù)事務(wù),但是那些后來的變化將不會(huì)映射在數(shù)據(jù)存儲(chǔ)器B147中,這是因?yàn)榇鎯?chǔ)管理裝置38將為了訪問數(shù)據(jù)存儲(chǔ)器B147而在特定的過去時(shí)間(也就是,先前映象)持續(xù)訪問數(shù)據(jù)存儲(chǔ)器A143,并且后來在當(dāng)前存儲(chǔ)器A144中發(fā)生變化的塊將被保存在時(shí)間存儲(chǔ)器A146中,因此將不會(huì)丟失。實(shí)際上,可被時(shí)間存儲(chǔ)器捕捉的過去時(shí)間間隔的大小將取決于被指引到數(shù)據(jù)存儲(chǔ)器A143的寫操作的頻率和時(shí)間存儲(chǔ)器A146的大小。依賴特定的實(shí)現(xiàn),因此在動(dòng)態(tài)映象開始使用之后的某個(gè)時(shí)間,將作為動(dòng)態(tài)映象基礎(chǔ)的先前映象(例如,在上述例子中上午11:00的數(shù)據(jù)存儲(chǔ)器A)拷貝到另一個(gè)數(shù)據(jù)存儲(chǔ)器,或拷貝到時(shí)間存儲(chǔ)器B152和當(dāng)前存儲(chǔ)器B148可能是有利的。如所提到的,當(dāng)存儲(chǔ)管理裝置38正常運(yùn)轉(zhuǎn)時(shí),該傳送可在后臺(tái)中完成。
在一個(gè)實(shí)施例中,對于指定的恢復(fù)時(shí)間,將先前映象塊傳送到當(dāng)前存儲(chǔ)器B148是通過下列步驟完成的。如果當(dāng)前存儲(chǔ)器A144中的塊自恢復(fù)時(shí)間以來未被重寫(也就是,如果當(dāng)前存儲(chǔ)器A144中的塊與作為數(shù)據(jù)存儲(chǔ)器B147基礎(chǔ)的先前映象相同),以及如果該塊還未包含在當(dāng)前存儲(chǔ)器B148中(也就是,如果自動(dòng)態(tài)映象被創(chuàng)建的時(shí)間以來,在動(dòng)態(tài)映象中該塊還未被“重寫”),那么該塊就從當(dāng)前存儲(chǔ)器A144被拷貝。如果一個(gè)塊表示在恢復(fù)時(shí)間出現(xiàn)在數(shù)據(jù)存儲(chǔ)器A143的塊中的數(shù)據(jù),以及如果該塊還沒有在當(dāng)前存儲(chǔ)器B148中被發(fā)現(xiàn)(也就是,在動(dòng)態(tài)映象中,該塊未被“重寫”),那么就將該塊從時(shí)間存儲(chǔ)器A146拷貝到當(dāng)前存儲(chǔ)器B148??蛇x地,來自先前映象之前某一時(shí)間的時(shí)間存儲(chǔ)器A146中的塊還可被從時(shí)間存儲(chǔ)器A146拷貝到時(shí)間存儲(chǔ)器B152,以使數(shù)據(jù)存儲(chǔ)器B147可響應(yīng)對先前映象之前某一時(shí)間的數(shù)據(jù)的請求。
動(dòng)態(tài)映象(例如,第三數(shù)據(jù)存儲(chǔ)器)可基于其它現(xiàn)有動(dòng)態(tài)映象(例如數(shù)據(jù)存儲(chǔ)器B)而被創(chuàng)建,以使第三數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)由其它當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器提供(例如,由數(shù)據(jù)存儲(chǔ)器A和數(shù)據(jù)存儲(chǔ)器B)。這樣的動(dòng)態(tài)映象還可被產(chǎn)生而不用拷貝(或不用最初拷貝)先前映象到另一個(gè)數(shù)據(jù)存儲(chǔ)器。
例如,存儲(chǔ)管理裝置38,如上所描述的,可通過使用如上例子所描述的原始當(dāng)前存儲(chǔ)器(例如,當(dāng)前存儲(chǔ)器A)、原始時(shí)間存儲(chǔ)器(例如,時(shí)間存儲(chǔ)器A)、第二當(dāng)前存儲(chǔ)器(例如,當(dāng)前存儲(chǔ)器B)和第二時(shí)間存儲(chǔ)器(例如,時(shí)間存儲(chǔ)器B)來提供動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)器(例如,數(shù)據(jù)存儲(chǔ)器B)的先前映象。如果這個(gè)新的先前映象被指定是動(dòng)態(tài)的,存儲(chǔ)管理裝置38還可將第三當(dāng)前存儲(chǔ)器和第三時(shí)間存儲(chǔ)器與新的動(dòng)態(tài)映象(例如,第三數(shù)據(jù)存儲(chǔ)器)聯(lián)系起來,以使新的動(dòng)態(tài)映象的變化被存儲(chǔ)在第三當(dāng)前存儲(chǔ)器中,并且第三數(shù)據(jù)存儲(chǔ)器的已改變的塊被存儲(chǔ)(例如,通過寫時(shí)拷貝操作)在第三時(shí)間存儲(chǔ)器中。
使用上述例子,系統(tǒng)管理員,可在檢測到數(shù)據(jù)存儲(chǔ)器B147中的數(shù)據(jù)破壞時(shí)再次使用多個(gè)先前映象去識(shí)別數(shù)據(jù)破壞的近似(或甚至準(zhǔn)確的)時(shí)間。系統(tǒng)管理員能因此識(shí)別數(shù)據(jù)存儲(chǔ)器B的一個(gè)先前映象,該先前映象的時(shí)間在數(shù)據(jù)破壞之前。舉例來說,我們假定該映象在下午1點(diǎn)。系統(tǒng)管理員可指定下午1點(diǎn)的數(shù)據(jù)存儲(chǔ)器B的映象是動(dòng)態(tài)映象,并且該新的動(dòng)態(tài)映象將被稱作數(shù)據(jù)存儲(chǔ)器C。數(shù)據(jù)存儲(chǔ)器C153被分配了一個(gè)當(dāng)前存儲(chǔ)器C154和一個(gè)時(shí)間存儲(chǔ)器C156。
當(dāng)接收到對數(shù)據(jù)存儲(chǔ)器C153中當(dāng)前數(shù)據(jù)的請求時(shí),存儲(chǔ)管理裝置將首先檢查當(dāng)前存儲(chǔ)器C154中的數(shù)據(jù),然后檢查在動(dòng)態(tài)映象被創(chuàng)建時(shí)當(dāng)前存儲(chǔ)器B148和時(shí)間存儲(chǔ)器B152中的數(shù)據(jù)。如果數(shù)據(jù)塊不在當(dāng)前存儲(chǔ)器B148或時(shí)間存儲(chǔ)器B152中,視情況而定,那么存儲(chǔ)管理裝置38將從時(shí)間存儲(chǔ)器A146或當(dāng)前存儲(chǔ)器A144獲得數(shù)據(jù)。
當(dāng)寫請求到達(dá)數(shù)據(jù)存儲(chǔ)器C153時(shí),存儲(chǔ)管理裝置38確定數(shù)據(jù)當(dāng)前在動(dòng)態(tài)映象(也就是,當(dāng)前存儲(chǔ)器C154、當(dāng)前存儲(chǔ)器B148、時(shí)間存儲(chǔ)器B152、當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146)中的位置,在時(shí)間存儲(chǔ)器C156中存儲(chǔ)被重寫的塊,然后將新的塊寫到當(dāng)前存儲(chǔ)器C154??蛇m當(dāng)結(jié)合當(dāng)前存儲(chǔ)器B148、時(shí)間存儲(chǔ)器B152、當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146使用時(shí)間存儲(chǔ)器C156和當(dāng)前存儲(chǔ)器C154來提供對來自動(dòng)態(tài)映象的先前映象的數(shù)據(jù)的請求。
參照圖6,在另一個(gè)例子中,其呈現(xiàn)一條時(shí)間線190,最頂端的水平線表示從最初時(shí)間T1到隨后時(shí)間T5的數(shù)據(jù)存儲(chǔ)器A,也就是,時(shí)間線192。在整個(gè)T1到T5的時(shí)間段,主機(jī)34將I/O請求指引到數(shù)據(jù)存儲(chǔ)器。數(shù)據(jù)存儲(chǔ)器A首先被使用,在本例中,應(yīng)用程序?qū)⒆x寫事務(wù)指引到數(shù)據(jù)存儲(chǔ)器A。
在時(shí)間T3,系統(tǒng)管理員確認(rèn)在數(shù)據(jù)存儲(chǔ)器A143中已經(jīng)存在破壞,該破壞很可能起因于破壞事件。系統(tǒng)管理員通過標(biāo)識(shí)數(shù)據(jù)未被破壞的最近時(shí)間以實(shí)現(xiàn)對數(shù)據(jù)存儲(chǔ)器A143的先前映象的審閱,從而確定數(shù)據(jù)破壞發(fā)生的時(shí)間。換言之,破壞事件很可能發(fā)生在已破壞數(shù)據(jù)出現(xiàn)的最早時(shí)間。存儲(chǔ)管理裝置38可被用來實(shí)現(xiàn)對數(shù)據(jù)存儲(chǔ)器A143的任意過去版本的搜索,以便確定破壞事件的時(shí)間。破壞事件可能的所在時(shí)間的精確度至少在某種程度上由最小時(shí)間戳增量確定。
數(shù)據(jù)存儲(chǔ)器A143中的數(shù)據(jù)的有效性在被引導(dǎo)的第一次搜索中被檢驗(yàn),以標(biāo)識(shí)破壞事件的時(shí)間。出現(xiàn)在時(shí)間線192上T3和T4之間的第一組垂直線提供了搜索被引導(dǎo)的時(shí)間點(diǎn)(也就是,T14、T15和T16)的簡化例子。它們表示從時(shí)間T4回到時(shí)間T3的搜索,在時(shí)間T4破壞發(fā)生的事實(shí)被最初識(shí)別。系統(tǒng)管理員,例如,在時(shí)間T4開始搜索并且在第一個(gè)搜索時(shí)間T16審閱數(shù)據(jù)。數(shù)據(jù)在時(shí)間T16被破壞,因此系統(tǒng)管理員審閱來自較早時(shí)間點(diǎn)的數(shù)據(jù),也就是,來自時(shí)間T15和T14。數(shù)據(jù)在時(shí)間T15和T14被破壞,因此搜索繼續(xù)時(shí)間T11的審閱。數(shù)據(jù)在時(shí)間T11未被破壞,因此管理員檢查時(shí)間T12、時(shí)間T13和時(shí)間T3。搜索照這樣的方式持續(xù)進(jìn)行,直到識(shí)別出有效數(shù)據(jù)存在的最近時(shí)間,在本例中該最近時(shí)間是時(shí)間T3。
還可使用各種搜索方法來引導(dǎo)搜索。例如,第一次和第二次搜索之間較大的時(shí)間增量可用于努力地更快確定破壞事件的時(shí)間。并且,搜索不需要從發(fā)現(xiàn)破壞的時(shí)間點(diǎn)開始。例如,如果系統(tǒng)管理員知道破壞事件的近似時(shí)間,搜索就可從較早時(shí)間點(diǎn)開始。搜索還可從比破壞事件更早的時(shí)間開始,例如T1、T2等。例如,對于第一個(gè)搜索時(shí)間為時(shí)間T2的搜索,其將繼續(xù)到隨后的時(shí)間點(diǎn),直到已破壞的數(shù)據(jù)被第一次發(fā)現(xiàn)。應(yīng)該理解的是,因?yàn)榇鎯?chǔ)管理裝置38能夠提供時(shí)間存儲(chǔ)器A146覆蓋的間隔內(nèi)的數(shù)據(jù)存儲(chǔ)器A143的任何版本到最小時(shí)間戳增量的精度,所以任何搜索策略都可被應(yīng)用。在一個(gè)實(shí)現(xiàn)中,時(shí)間精度是一毫秒。
在本例中,時(shí)間T3被指定為恢復(fù)時(shí)間,這是因?yàn)樗撬璧挠捎诓淮嬖谄茐亩粯?biāo)識(shí)的時(shí)間點(diǎn)。當(dāng)然,用戶可選擇更早的時(shí)間點(diǎn)(在T3之前)作為恢復(fù)時(shí)間。第二數(shù)據(jù)存儲(chǔ)器,數(shù)據(jù)存儲(chǔ)器B147是使用來自時(shí)間T3時(shí)的數(shù)據(jù)存儲(chǔ)器A的數(shù)據(jù)而建立的?;貞浽跁r(shí)間T4,用戶將時(shí)間T3標(biāo)識(shí)為數(shù)據(jù)存儲(chǔ)器A143的有效數(shù)據(jù)存在的最近時(shí)間點(diǎn)。在時(shí)間T4(也就是,請求時(shí)間),用戶創(chuàng)建數(shù)據(jù)存儲(chǔ)器B147作為第一數(shù)據(jù)存儲(chǔ)器在時(shí)間T3(也就是,恢復(fù)時(shí)間)的先前映象,所述第一數(shù)據(jù)存儲(chǔ)器即數(shù)據(jù)存儲(chǔ)器A143。在圖6中,時(shí)間線194與數(shù)據(jù)存儲(chǔ)器B147聯(lián)系在一起。
數(shù)據(jù)存儲(chǔ)器B147是動(dòng)態(tài)映象;因此,第二當(dāng)前存儲(chǔ)器(當(dāng)前存儲(chǔ)器B)148和第二時(shí)間存儲(chǔ)器(時(shí)間存儲(chǔ)器B)152與數(shù)據(jù)存儲(chǔ)器B147聯(lián)系在一起。一旦當(dāng)前存儲(chǔ)器B148被創(chuàng)建,存儲(chǔ)管理裝置38可使主機(jī)34可使用數(shù)據(jù)存儲(chǔ)器B147,并且應(yīng)用程序可使用數(shù)據(jù)存儲(chǔ)器B147代替數(shù)據(jù)存儲(chǔ)器A143。此后,主機(jī)34的I/O請求可被指引到數(shù)據(jù)存儲(chǔ)器B147而不是數(shù)據(jù)存儲(chǔ)器A143。在本例中,在時(shí)間T4和T5之間,I/O請求繼續(xù)被指引到數(shù)據(jù)存儲(chǔ)器A143和數(shù)據(jù)存儲(chǔ)器B147。在另一個(gè)實(shí)施例中,數(shù)據(jù)存儲(chǔ)器B147是由第二當(dāng)前存儲(chǔ)器組成的動(dòng)態(tài)映象,所述第二當(dāng)前存儲(chǔ)器未與第二時(shí)間存儲(chǔ)器聯(lián)系起來。在該實(shí)施例的一個(gè)版本中,當(dāng)前存儲(chǔ)器B148在寫池(write pool)中實(shí)現(xiàn),在此被指引到數(shù)據(jù)存儲(chǔ)器B147的寫命令引起最近重寫的數(shù)據(jù)替換當(dāng)前存儲(chǔ)器B148中的現(xiàn)有數(shù)據(jù),也就是,不保留當(dāng)前存儲(chǔ)器B148中的舊數(shù)據(jù)的記錄。
如之前所描述的,不用拷貝數(shù)據(jù)存儲(chǔ)器A143的內(nèi)容就可創(chuàng)建數(shù)據(jù)存儲(chǔ)器B147。數(shù)據(jù)存儲(chǔ)器B147因此可被立即虛擬地創(chuàng)建,并且它可被快速聯(lián)機(jī)。起初與數(shù)據(jù)存儲(chǔ)器B147相聯(lián)系的數(shù)據(jù)存在于當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146中。
在接收到對當(dāng)前時(shí)間的數(shù)據(jù)存儲(chǔ)器B147的讀請求時(shí),存儲(chǔ)管理裝置38就確定當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146中哪個(gè)包含正被讀的塊的數(shù)據(jù)。當(dāng)前存儲(chǔ)器A144中的數(shù)據(jù)將用于自時(shí)間T3以來未被寫的所有數(shù)據(jù),并且時(shí)間存儲(chǔ)器A146中的數(shù)據(jù)將用于在時(shí)間T3之后被重寫的當(dāng)前存儲(chǔ)器A144中的所有塊。一旦一些數(shù)據(jù)已被寫到當(dāng)前存儲(chǔ)器B148,對被指引到在當(dāng)前時(shí)間的數(shù)據(jù)存儲(chǔ)器B147的讀命令的響應(yīng)可能來自當(dāng)前存儲(chǔ)器B147、當(dāng)前存儲(chǔ)器A144或時(shí)間存儲(chǔ)器A146。一接收到讀請求,存儲(chǔ)管理裝置38就確定當(dāng)前存儲(chǔ)器B148、當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146中哪個(gè)包含正被讀的塊的數(shù)據(jù)。存儲(chǔ)管理裝置38將為了對數(shù)據(jù)存儲(chǔ)器B147中在時(shí)間T4之后(即,時(shí)間線片段(e)、(f)和(g))被寫的塊的所有請求而使用當(dāng)前存儲(chǔ)器B148中的數(shù)據(jù)。當(dāng)前存儲(chǔ)器A144中的數(shù)據(jù)將被用于自時(shí)間T3以來(時(shí)間線片段(a)和(b))未被寫的所有數(shù)據(jù)塊,并且時(shí)間存儲(chǔ)器A146中的數(shù)據(jù)將被用于數(shù)據(jù)存儲(chǔ)器A143上在T3和T4之間(時(shí)間線片段(c))已被寫的所有數(shù)據(jù)塊。
在時(shí)間T4之后數(shù)據(jù)存儲(chǔ)器A143可繼續(xù)處于動(dòng)態(tài)中,然而,在時(shí)間T4之后發(fā)生在數(shù)據(jù)存儲(chǔ)器A143的改變將僅僅會(huì)影響用于對數(shù)據(jù)存儲(chǔ)器B147中塊的請求進(jìn)行響應(yīng)的數(shù)據(jù)位置。這樣的變化不會(huì)影響數(shù)據(jù)存儲(chǔ)器B147的實(shí)際內(nèi)容。如果,例如,數(shù)據(jù)存儲(chǔ)器A143的相應(yīng)塊100自時(shí)間T3以來未被重寫,那么用于數(shù)據(jù)存儲(chǔ)器B147的塊100的數(shù)據(jù)源就是當(dāng)前存儲(chǔ)器A144中的相應(yīng)塊。然而,如果在當(dāng)前存儲(chǔ)器A144中相應(yīng)塊100自時(shí)間T3以來已被重寫,例如,一寫時(shí)拷貝命令在數(shù)據(jù)存儲(chǔ)器A143中的相應(yīng)塊上執(zhí)行,那么用于數(shù)據(jù)存儲(chǔ)器B147的塊100的數(shù)據(jù)源就是時(shí)間存儲(chǔ)器A146的相應(yīng)塊。當(dāng)然,緊接著的前述描述假定塊100自數(shù)據(jù)存儲(chǔ)器B147創(chuàng)建以來還未做過寫命令的目標(biāo)。另外,在數(shù)據(jù)存儲(chǔ)器A143是動(dòng)態(tài)的情況下,在時(shí)間T4以后被寫到數(shù)據(jù)存儲(chǔ)器A143的數(shù)據(jù)使用寫時(shí)拷貝操作被處理,以使在時(shí)間T4之后時(shí)間存儲(chǔ)器A146繼續(xù)被使用以保存新近重寫的數(shù)據(jù)。
當(dāng)寫請求被指引到數(shù)據(jù)存儲(chǔ)器B147時(shí),存儲(chǔ)管理裝置38確定數(shù)據(jù)當(dāng)前在數(shù)據(jù)存儲(chǔ)器B147中的所在之處(也就是,當(dāng)前存儲(chǔ)器B148、當(dāng)前存儲(chǔ)器A144或時(shí)間存儲(chǔ)器A146)。數(shù)據(jù)的位置將會(huì)如下 1)如果當(dāng)前存儲(chǔ)器B148中的塊自時(shí)間T4以來已被重寫,數(shù)據(jù)就在當(dāng)前存儲(chǔ)器B148中; 2)如果當(dāng)前存儲(chǔ)器A144中的塊自時(shí)間T3以來沒有被寫入的數(shù)據(jù),數(shù)據(jù)就在當(dāng)前存儲(chǔ)器A144中;以及 3)如果當(dāng)前存儲(chǔ)器A144中的塊在時(shí)間T3之后的任何時(shí)間被重寫,數(shù)據(jù)就在時(shí)間存儲(chǔ)器A146中。
然后其遵循 1)如果數(shù)據(jù)位于當(dāng)前存儲(chǔ)器B148中,那么現(xiàn)有數(shù)據(jù)將從當(dāng)前存儲(chǔ)器B148讀出并被寫到時(shí)間存儲(chǔ)器B152(例如,寫時(shí)拷貝)。新的數(shù)據(jù)將被寫到當(dāng)前存儲(chǔ)器B148。在一個(gè)實(shí)施例中,不用使用寫時(shí)拷貝操作或時(shí)間存儲(chǔ)器B152,就可完成對當(dāng)前存儲(chǔ)器B148的更新。在該實(shí)施例的一個(gè)版本中,當(dāng)寫命令被指引到當(dāng)前存儲(chǔ)器B148時(shí),舊數(shù)據(jù)不會(huì)被保存。
2)如果數(shù)據(jù)位于當(dāng)前存儲(chǔ)器A144中,那么來自當(dāng)前存儲(chǔ)器A144的現(xiàn)有數(shù)據(jù)將被拷貝并寫到時(shí)間存儲(chǔ)器B152而不用重寫當(dāng)前存儲(chǔ)器A144中的現(xiàn)有數(shù)據(jù)。新的數(shù)據(jù)將被寫到當(dāng)前存儲(chǔ)器B148。
3)如果數(shù)據(jù)位于時(shí)間存儲(chǔ)器A146中,那么來自時(shí)間存儲(chǔ)器A146的現(xiàn)有數(shù)據(jù)將被拷貝并寫到時(shí)間存儲(chǔ)器B152而不用重寫時(shí)間存儲(chǔ)器A146中的現(xiàn)有數(shù)據(jù)。新的數(shù)據(jù)將被寫到當(dāng)前存儲(chǔ)器B148。
在接收到對當(dāng)前時(shí)間的數(shù)據(jù)存儲(chǔ)器B147的讀請求時(shí),存儲(chǔ)管理裝置38就通過檢查當(dāng)前存儲(chǔ)器B148、當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146中的數(shù)據(jù)來確定數(shù)據(jù)當(dāng)前在動(dòng)態(tài)映象中的位置。存儲(chǔ)管理裝置38將為在時(shí)間T4之后(也就是,時(shí)間線片段(e)、(f)和(g))被寫的數(shù)據(jù)存儲(chǔ)器B147的所有塊而使用當(dāng)前存儲(chǔ)器B148中的數(shù)據(jù)。當(dāng)前存儲(chǔ)器A144中的數(shù)據(jù)將被用于自時(shí)間T3以來(也就是,時(shí)間線片段(a)和(b))未被寫的所有數(shù)據(jù)塊,并且時(shí)間存儲(chǔ)器A146中的數(shù)據(jù)將被用于數(shù)據(jù)存儲(chǔ)器A143上在T3和T4之間(時(shí)間線片段(c))已被寫(在數(shù)據(jù)存儲(chǔ)器A143中)的所有數(shù)據(jù)塊。
任何數(shù)目的附加數(shù)據(jù)存儲(chǔ)器也可基于數(shù)據(jù)存儲(chǔ)器A143的當(dāng)前或先前映象而產(chǎn)生。例如,數(shù)據(jù)存儲(chǔ)器A143在時(shí)間T2的映象可在從時(shí)間T2起的任何時(shí)間被創(chuàng)建,例如,數(shù)據(jù)存儲(chǔ)器D可在時(shí)間T3被創(chuàng)建。附加數(shù)據(jù)存儲(chǔ)器的創(chuàng)建的執(zhí)行可順序于、并行于或獨(dú)立于基于數(shù)據(jù)存儲(chǔ)器A143的其他數(shù)據(jù)存儲(chǔ)器的創(chuàng)建。在所有情況下,附加數(shù)據(jù)存儲(chǔ)器的內(nèi)容似乎獨(dú)立于其他數(shù)據(jù)存儲(chǔ)器的內(nèi)容,也就是,在數(shù)據(jù)存儲(chǔ)器創(chuàng)建時(shí)其內(nèi)容取決于數(shù)據(jù)存儲(chǔ)器A143的內(nèi)容。此后,使用來自當(dāng)前存儲(chǔ)器A144、時(shí)間存儲(chǔ)器A146及/或命令被指引到的附加數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)來響應(yīng)被指引到附加數(shù)據(jù)存儲(chǔ)器的讀寫命令。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置38實(shí)現(xiàn)了瞬間復(fù)原,其允許用戶(例如,主機(jī)或系統(tǒng)管理員)基本上瞬間產(chǎn)生數(shù)據(jù)存儲(chǔ)器的先前映象。例如,如在此更詳細(xì)描述的,存儲(chǔ)管理裝置38的體系結(jié)構(gòu)提供被指引到每個(gè)數(shù)據(jù)存儲(chǔ)器的寫命令的詳細(xì)索引,以使在任何時(shí)間數(shù)據(jù)存儲(chǔ)器每個(gè)塊的適當(dāng)數(shù)據(jù)可被快速標(biāo)識(shí)和存取。
可用超過一種的方式執(zhí)行瞬間復(fù)原。例如,發(fā)生在時(shí)間T4的瞬間復(fù)原可以是對于時(shí)間T3的所需恢復(fù)時(shí)間的數(shù)據(jù)存儲(chǔ)器A143的無損復(fù)原。在一個(gè)實(shí)施例中,無損復(fù)原是通過將在時(shí)間T3和T4之間執(zhí)行的寫操作的結(jié)果拷貝回當(dāng)前存儲(chǔ)器A144中來實(shí)現(xiàn)的。在該實(shí)施例的一個(gè)版本中,寫時(shí)拷貝操作在從時(shí)間T3到時(shí)間T4被寫的數(shù)據(jù)存儲(chǔ)器A143的每一塊上被執(zhí)行。在恢復(fù)時(shí)間,用于那個(gè)塊的當(dāng)前在時(shí)間T3時(shí)的數(shù)據(jù)被寫到數(shù)據(jù)存儲(chǔ)器A143的每一相應(yīng)塊。當(dāng)前存儲(chǔ)器中被重寫的數(shù)據(jù)被拷貝到時(shí)間存儲(chǔ)器A146。如在此所描述的,有關(guān)使用寫時(shí)拷貝操作所寫的數(shù)據(jù)的相關(guān)細(xì)節(jié)由存儲(chǔ)管理裝置38編索引。因此,稍后恢復(fù)及審閱在時(shí)間T3和T4之間執(zhí)行于數(shù)據(jù)存儲(chǔ)器A143上的操作是有可能的。
因?yàn)闊o損的瞬間復(fù)原操作增加了必須存儲(chǔ)在時(shí)間存儲(chǔ)器中的數(shù)據(jù)量,因此存儲(chǔ)管理裝置38還可以實(shí)現(xiàn)壓縮恢復(fù)。在壓縮恢復(fù)中,若干被選數(shù)據(jù)不會(huì)在恢復(fù)之后被保留。在該實(shí)施例的一個(gè)版本中,寫操作,而不是寫時(shí)拷貝操作,在T3和T4之間被更新的數(shù)據(jù)存儲(chǔ)器A143的塊上被執(zhí)行。因此,在恢復(fù)時(shí)間,時(shí)間T3時(shí)的當(dāng)前數(shù)據(jù)被寫到在T3和T4之間被更新的數(shù)據(jù)存儲(chǔ)器A143的每一相應(yīng)塊。在該實(shí)施例的另一個(gè)版本中,寫時(shí)拷貝操作被執(zhí)行,但是即使時(shí)間存儲(chǔ)器達(dá)到其存儲(chǔ)容量,為T3和T4之間時(shí)期保留的數(shù)據(jù)也被放置在將被重寫的數(shù)據(jù)隊(duì)列的前面。例如,來自T3和T4期間的數(shù)據(jù)可與時(shí)間線的最早部分聯(lián)系起來,以使當(dāng)達(dá)到數(shù)據(jù)存儲(chǔ)器的指定存儲(chǔ)容量時(shí),它將第一個(gè)被替換。
圖6還描述第三數(shù)據(jù)存儲(chǔ)器(也就是,數(shù)據(jù)存儲(chǔ)器C)的創(chuàng)建,所述第三數(shù)據(jù)存儲(chǔ)器根據(jù)數(shù)據(jù)存儲(chǔ)器B147的內(nèi)容而產(chǎn)生,也就是,數(shù)據(jù)存儲(chǔ)器C153根據(jù)以前所創(chuàng)建的動(dòng)態(tài)映象而產(chǎn)生。這里請求時(shí)間是T5且恢復(fù)時(shí)間是T7。再次,恢復(fù)時(shí)間可以是破壞發(fā)生之前的時(shí)間。根據(jù)數(shù)據(jù)存儲(chǔ)器B147創(chuàng)建數(shù)據(jù)存儲(chǔ)器C153的操作被稱為“堆?!保@是因?yàn)槠鋭?chuàng)建了一系列虛擬數(shù)據(jù)存儲(chǔ)器,在此每個(gè)數(shù)據(jù)存儲(chǔ)器都基于另一個(gè)數(shù)據(jù)存儲(chǔ)器(或多個(gè)數(shù)據(jù)存儲(chǔ)器)的先前映象。
在本例中,數(shù)據(jù)存儲(chǔ)器C153是基于數(shù)據(jù)存儲(chǔ)器B147的先前映象,而數(shù)據(jù)存儲(chǔ)器B147是基于數(shù)據(jù)存儲(chǔ)器A143的先前映象。因此,數(shù)據(jù)存儲(chǔ)器C153起初可由存儲(chǔ)在當(dāng)前存儲(chǔ)器B148、時(shí)間存儲(chǔ)器B152、當(dāng)前存儲(chǔ)器A144和時(shí)間存儲(chǔ)器A146的任何一個(gè)中的數(shù)據(jù)提供。存儲(chǔ)管理裝置38可基于下列資源將數(shù)據(jù)存儲(chǔ)器C153的映象呈現(xiàn)給主機(jī)341)當(dāng)前存儲(chǔ)器B148將被用于來自在時(shí)間T4和T7之間被重寫而自時(shí)間T7以來(時(shí)間線片段(e)和(f))未被重寫的塊的數(shù)據(jù);2)時(shí)間存儲(chǔ)器B152將被用于來自自時(shí)間T7以來(時(shí)間線片段(g))已被重寫的塊的數(shù)據(jù);3)當(dāng)前存儲(chǔ)器A144將被用于來自自時(shí)間T3以來(時(shí)間線片段(a)和(b))未被重寫的塊的數(shù)據(jù);以及4)時(shí)間存儲(chǔ)器A146將被用于來自在時(shí)間T3和T4之間(時(shí)間線片段(c))被重寫的塊的數(shù)據(jù)。
當(dāng)前存儲(chǔ)器C154和時(shí)間存儲(chǔ)器C156將如上所描述那樣被分配。存儲(chǔ)管理裝置38以類似于為數(shù)據(jù)存儲(chǔ)器B147描述的處理的方式來處理被指引到數(shù)據(jù)存儲(chǔ)器C153的讀寫請求。然而,一個(gè)差別是,為了定位數(shù)據(jù)存儲(chǔ)器C153的內(nèi)容,必須被搜索的數(shù)據(jù)存儲(chǔ)器的數(shù)量增加到包括當(dāng)前存儲(chǔ)器A144、時(shí)間存儲(chǔ)器A146、當(dāng)前存儲(chǔ)器B148和時(shí)間存儲(chǔ)器B152。根據(jù)先前的數(shù)據(jù)存儲(chǔ)器映象來創(chuàng)建動(dòng)態(tài)映象的過程可按系統(tǒng)存儲(chǔ)容量內(nèi)的應(yīng)用程序要求被延長。例如,可根據(jù)數(shù)據(jù)存儲(chǔ)器C153的先前映象來創(chuàng)建動(dòng)態(tài)映象,從而創(chuàng)建第四數(shù)據(jù)存儲(chǔ)器,例如,數(shù)據(jù)存儲(chǔ)器D。另外,可采用前述方法根據(jù)任何一個(gè)數(shù)據(jù)存儲(chǔ)器的先前映象創(chuàng)建靜態(tài)映象,例如,創(chuàng)建在時(shí)間T3的數(shù)據(jù)存儲(chǔ)器A143的克隆等。
圖7A和7B提供了給定數(shù)據(jù)存儲(chǔ)器的當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器的操作的另一個(gè)說明性例子。圖7A顯示了當(dāng)前存儲(chǔ)器的內(nèi)容,并且圖7B顯示了與圖7A的當(dāng)前存儲(chǔ)器相聯(lián)系的時(shí)間存儲(chǔ)器的內(nèi)容。在每個(gè)圖的頂端都繪制了一條時(shí)間線以指示初始時(shí)間t0、第一次寫入時(shí)間t1、第二次寫入時(shí)間t2、第三次寫入時(shí)間t3和最后時(shí)間t4。出現(xiàn)在圖7A和7B左側(cè)的數(shù)字0-5標(biāo)識(shí)了數(shù)據(jù)存儲(chǔ)器的六個(gè)塊。如所提到的,數(shù)據(jù)存儲(chǔ)器可由任何數(shù)目的塊或其它存儲(chǔ)單元組成。另外,數(shù)據(jù)存儲(chǔ)器可以實(shí)現(xiàn)為存儲(chǔ)數(shù)字?jǐn)?shù)據(jù)的任何類型資源,所述資源包括虛擬磁盤、邏輯磁盤、物理磁盤等。
存儲(chǔ)在每個(gè)時(shí)間點(diǎn)的數(shù)據(jù)被裝入實(shí)心框中。當(dāng)前存儲(chǔ)器的塊0-6中每個(gè)都在時(shí)間存儲(chǔ)器中具有相應(yīng)的塊。當(dāng)寫請求被指引到一個(gè)塊時(shí),被寫的數(shù)據(jù)被裝入虛線框,所述虛線框鄰近圖A中當(dāng)前存儲(chǔ)器的相應(yīng)塊。這表示在寫時(shí)拷貝命令完成時(shí)暫停傳送到當(dāng)前存儲(chǔ)器的數(shù)據(jù)。
在操作中,在例如時(shí)間t0,數(shù)據(jù)a、b、c和d分別存在于當(dāng)前存儲(chǔ)器的塊0-3的每個(gè)中。在該時(shí)間,塊4和5不包含任何數(shù)據(jù)。另外,時(shí)間存儲(chǔ)器不包含任何數(shù)據(jù),這是因?yàn)閷K0-5的寫請求還沒有被指引到當(dāng)前存儲(chǔ)器。在時(shí)間t1,數(shù)據(jù)X、Y和Z分別被寫到塊2-4。寫時(shí)拷貝操作在塊2-4的每個(gè)上被執(zhí)行,并且出現(xiàn)在那些塊中的舊數(shù)據(jù)從當(dāng)前存儲(chǔ)器被讀出并被寫到時(shí)間存儲(chǔ)器,也就是,數(shù)據(jù)c、d和一空塊被分別寫到時(shí)間存儲(chǔ)器的塊2-4。如在時(shí)間t2的當(dāng)前存儲(chǔ)器中所示,在時(shí)間t1的寫操作完成之后,新近被寫的數(shù)據(jù)出現(xiàn)在塊2-4中。然而,第二次寫操作在時(shí)間t2被執(zhí)行,此時(shí),數(shù)據(jù)7、9和8被分別寫到塊0、3和5。再次執(zhí)行寫時(shí)拷貝,結(jié)果舊數(shù)據(jù)a、Y和一空塊被分別寫到塊0、3和5。在時(shí)間t3,執(zhí)行第三次寫操作并將數(shù)據(jù)Q寫到塊5。在時(shí)間t2先前已被寫到塊5的原始數(shù)據(jù)8被讀出并寫到相應(yīng)時(shí)間存儲(chǔ)器的塊5。新的數(shù)據(jù)Q在時(shí)間t3被寫到塊5,從而在時(shí)間t4數(shù)據(jù)Q出現(xiàn)在當(dāng)前存儲(chǔ)器的塊5中。假如在時(shí)間t4不執(zhí)行寫操作,時(shí)間存儲(chǔ)器在時(shí)間t4將保持為空。
圖8的時(shí)間存儲(chǔ)器是基于對如圖7A和7B所示的數(shù)據(jù)存儲(chǔ)器執(zhí)行的寫時(shí)拷貝操作的順序。圖8示范了在請求時(shí)間t4如何產(chǎn)生當(dāng)前存儲(chǔ)器的先前映象,以用于恢復(fù)表示在恢復(fù)時(shí)間t1的數(shù)據(jù)存儲(chǔ)器的映象。因?yàn)樵跁r(shí)間t0或時(shí)間t1沒有寫操作于塊0、1和5上被執(zhí)行,所以先前映象的塊0、1和5由來自在時(shí)間t1的當(dāng)前存儲(chǔ)器的數(shù)據(jù)組成。因?yàn)閿?shù)據(jù)在時(shí)間t1被寫到塊2、3和4,所以來自時(shí)間存儲(chǔ)器的數(shù)據(jù)被用作在時(shí)間t1的塊2、3和4的先前映象。因此,時(shí)間t1的數(shù)據(jù)存儲(chǔ)器的先前映象并不反映發(fā)生在時(shí)間t1后的當(dāng)前存儲(chǔ)器的變化的結(jié)果。
現(xiàn)在參照圖9,在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置238包括一個(gè)或更多個(gè)處理器模塊278、278′、278″,通稱278。雖然在圖中出于說明目的顯示了3個(gè)處理器模塊278,但可有任何數(shù)目的處理器模塊278。
每個(gè)處理器模塊278包括中央處理器290,所述中央處理器290與目標(biāo)接口292、ROM294、內(nèi)存296和啟動(dòng)器接口298中的每個(gè)都通信。CPU290可在一個(gè)或更多個(gè)集成電路中實(shí)現(xiàn),并且其可包括用于與其它集成電路連接的其它“膠合(glue)”邏輯(未顯示),例如,總線接口、時(shí)鐘和通信接口。CPU290實(shí)施提供于ROM294中的軟件以及內(nèi)存296中的軟件,所述軟件可被訪問,例如,通過內(nèi)部網(wǎng)絡(luò)接口284或在物理存儲(chǔ)器36中。
CPU290還與內(nèi)部網(wǎng)絡(luò)接口284通信,所述內(nèi)部網(wǎng)絡(luò)接口284將處理器模塊278連接到內(nèi)部網(wǎng)絡(luò)286,所述網(wǎng)絡(luò)允許處理器模塊278相互通信。內(nèi)部網(wǎng)絡(luò)286可被實(shí)施為一個(gè)或更多個(gè)實(shí)際網(wǎng)絡(luò),并且其可以是任何類型的具有充分容量的網(wǎng)絡(luò),從而允許控制信息和數(shù)據(jù)兩者的傳遞。內(nèi)部網(wǎng)絡(luò)286可包括共享的串行或并行總線,或某種組合。內(nèi)部網(wǎng)絡(luò)可以是或包括任何類型的實(shí)施遠(yuǎn)程直接內(nèi)存模型化接口(例如,InfiniBand、以太網(wǎng)、光纖信道、SCSI等)的物理網(wǎng)絡(luò)。在一個(gè)實(shí)施例中,接口是隨機(jī)訪問供應(yīng)庫(Direct Access Provider Library,DAPL)。
在一個(gè)實(shí)施例中,處理器模塊278插入一底板,所述底板實(shí)現(xiàn)用于內(nèi)部網(wǎng)絡(luò)286的連接。在一個(gè)實(shí)現(xiàn)中,一組或更多組處理器模塊278被架裝(rack mount)在存儲(chǔ)管理裝置238內(nèi),并且內(nèi)部網(wǎng)絡(luò)286還在存儲(chǔ)管理裝置238內(nèi)將每個(gè)機(jī)架(rack)連接到其他機(jī)架。在存儲(chǔ)管理裝置238中實(shí)現(xiàn)的分布式處理創(chuàng)建了一個(gè)系統(tǒng),所述系統(tǒng)的大小(例如,儲(chǔ)存容量、處理速度等)可很容易地被按比例增大或減少以適合所需的容量。
目標(biāo)接口292提供了一個(gè)接口,該接口使得處理器模塊278本身作為一個(gè)或更多個(gè)目標(biāo)數(shù)據(jù)存儲(chǔ)器裝置出現(xiàn)。例如,如果目標(biāo)接口292是光纖信道接口,那么目標(biāo)接口292就允許處理器模塊278將一個(gè)或更多個(gè)光纖信道裝置呈給主機(jī)(未顯示)。目標(biāo)接口292可實(shí)施任何適當(dāng)?shù)穆?lián)網(wǎng)通信或數(shù)據(jù)存儲(chǔ)協(xié)議??捎靡粋€(gè)或更多個(gè)集成電路實(shí)現(xiàn)目標(biāo)接口292,所述集成電路優(yōu)選可對用于存儲(chǔ)接收到的數(shù)據(jù)和將被發(fā)送的數(shù)據(jù)的內(nèi)存296的部分進(jìn)行直接存儲(chǔ)訪問。典型地,目標(biāo)接口292將需要CPU290執(zhí)行的初始化和程序設(shè)計(jì)。
啟動(dòng)器接口298提供一個(gè)接口,該接口允許處理器模塊278本身作為一個(gè)或更多個(gè)主機(jī)出現(xiàn),用于與物理數(shù)據(jù)存儲(chǔ)通信。例如,如果啟動(dòng)器接口298是光纖信道接口,那么啟動(dòng)器接口298就允許處理器模塊278與一個(gè)或更多個(gè)物理存儲(chǔ)裝置通過光纖信道接口通信。啟動(dòng)器接口298可實(shí)施任何適當(dāng)?shù)穆?lián)網(wǎng)通信或數(shù)據(jù)存儲(chǔ)協(xié)議。可使用一個(gè)或更多個(gè)集成電路實(shí)現(xiàn)啟動(dòng)器接口298,所述集成電路優(yōu)選可對用于存儲(chǔ)接收到的數(shù)據(jù)和將被發(fā)送的數(shù)據(jù)的內(nèi)存296的部分進(jìn)行直接存儲(chǔ)訪問。
處理器模塊278可在容錯(cuò)配置中實(shí)現(xiàn),其中兩個(gè)處理器模塊278每個(gè)都負(fù)責(zé)響應(yīng)被指引到相同存儲(chǔ)單元的I/O請求。在該實(shí)施例的一個(gè)版本中,可通過多對處理器模塊278分擔(dān)對包含單個(gè)物理或邏輯裝置(或卷)的存儲(chǔ)單元的I/O請求,來進(jìn)一步提高容錯(cuò)性。例如,第一和第二處理器模塊278可被分配負(fù)責(zé)當(dāng)前存儲(chǔ)器A的塊100和200,而第三和第四處理器模塊278可被分配負(fù)責(zé)當(dāng)前存儲(chǔ)器A的塊300-500??赏ㄟ^定位在分離機(jī)架中執(zhí)行相同任務(wù)的處理器模塊278,從而進(jìn)一步提高容錯(cuò)性。
現(xiàn)在參照圖10,在系統(tǒng)元件的功能描述中,再次,三個(gè)處理器模塊378、378′、378″,通稱378,被顯示于存儲(chǔ)管理裝置338中。模塊378的數(shù)目(再次)僅僅是例證性的,并且考慮到可伸縮性、性能和成本,可增加或減少處理器模塊378的數(shù)量??墒褂糜布?或軟件來實(shí)現(xiàn)顯示在每個(gè)處理器模塊378上的功能元件;通常,硬件和軟件兩者都用來實(shí)現(xiàn)這些元件中的每一個(gè)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置338的每個(gè)處理器模塊378包括至少一個(gè)主機(jī)接口361,所述主機(jī)接口361用于與主機(jī)、I/O管理器362、存儲(chǔ)緩沖區(qū)363和物理存儲(chǔ)器接口364通信。在另一個(gè)實(shí)施例中,每個(gè)處理器模塊378包括或多或少這些功能元件。在各種實(shí)施例中,存儲(chǔ)管理裝置338還包括內(nèi)部網(wǎng)絡(luò)380(例如,內(nèi)部InfiniBand網(wǎng)絡(luò)、內(nèi)部以太網(wǎng)、內(nèi)部光纖信道網(wǎng)絡(luò)和/或內(nèi)部SCSI網(wǎng)絡(luò)),所述內(nèi)部網(wǎng)絡(luò)380用于啟動(dòng)單個(gè)處理器模塊378的功能元件(例如,主機(jī)接口361、I/O管理器362、存儲(chǔ)緩沖區(qū)363和物理存儲(chǔ)器接口364)之間的通信,用于啟動(dòng)第一處理器模塊378的任何功能元件和第二處理器模塊378的任何功能元件之間的通信,用于啟動(dòng)同一個(gè)功能元件的一個(gè)或更多個(gè)組件之間的通信(例如,用于啟動(dòng)目標(biāo)模式驅(qū)動(dòng)器382和主機(jī)接口361的數(shù)據(jù)分類器384之間的通信),以及用于啟動(dòng)一個(gè)功能元件的組件和另一個(gè)功能元件(或該其它功能元件的組件)之間的通信,不管在相同的還是不同的處理器模塊378上。
在一個(gè)實(shí)施例中,主機(jī)接口361包括目標(biāo)模式驅(qū)動(dòng)器382,所述目標(biāo)模式驅(qū)動(dòng)器382包括目標(biāo)接口292(參見圖9)和用于與目標(biāo)接口292通信的軟件。功能上,目標(biāo)模式驅(qū)動(dòng)器382通過如上所描述的任何類型的通信鏈路40(例如,光纖信道網(wǎng)絡(luò))與主機(jī)34通信。因此,目標(biāo)模式驅(qū)動(dòng)器382接收并響應(yīng)來自主機(jī)34的進(jìn)入的(incoming)I/O請求。
在一個(gè)實(shí)施例中,目標(biāo)模式驅(qū)動(dòng)器382接收I/O請求,所述I/O請求包括控制信息,比如,例如還包括數(shù)據(jù)有效載荷的寫操作、讀操作或如下所描述的對數(shù)據(jù)存儲(chǔ)器內(nèi)位置的修改歷史的請求。例如響應(yīng)一讀操作,目標(biāo)模式驅(qū)動(dòng)器382可從I/O管理器362獲得所請求的數(shù)據(jù),此后可將所請求的數(shù)據(jù)傳到主機(jī)34。響應(yīng)一寫操作,目標(biāo)模式驅(qū)動(dòng)器382起初將接收到的寫操作存儲(chǔ)在第一存儲(chǔ)緩沖區(qū)363中,所述第一存儲(chǔ)緩沖區(qū)363位于與目標(biāo)模式驅(qū)動(dòng)器382相同的處理器模塊378上。在一個(gè)實(shí)施例中,目標(biāo)模式驅(qū)動(dòng)器382然后將寫操作分成它的關(guān)聯(lián)控制信息和數(shù)據(jù)有效載荷,以使控制信息和分離的數(shù)據(jù)有效載荷兩者起初都被存儲(chǔ)在第一個(gè)存儲(chǔ)緩沖區(qū)363中。在一個(gè)實(shí)施例中,通過主機(jī)接口361,I/O請求被分成數(shù)據(jù)有效載荷和控制分組。然后控制信息可經(jīng)由內(nèi)部網(wǎng)絡(luò)380被發(fā)送到存儲(chǔ)管理裝置338內(nèi)的其它組件。例如,在一個(gè)實(shí)施例中,目標(biāo)模式驅(qū)動(dòng)器382將控制信息發(fā)送到數(shù)據(jù)分類器384。對它來說,數(shù)據(jù)有效載荷或它的拷貝,也可經(jīng)由內(nèi)部網(wǎng)絡(luò)380被發(fā)送到存儲(chǔ)管理裝置338內(nèi)的其它組件。最終,數(shù)據(jù)有效載荷將通過內(nèi)部網(wǎng)絡(luò)380被傳到適當(dāng)?shù)奈锢泶鎯?chǔ)器接口364,如I/O管理器362所指引的那樣。優(yōu)選地,數(shù)據(jù)有效載荷是通過硬件直接存儲(chǔ)訪問而被傳遞的,而不需要軟件處理。
在一個(gè)實(shí)施例中,在將控制信息發(fā)送到數(shù)據(jù)分類器384之前以及在確認(rèn)所接收到的對主機(jī)34的I/O請求之前,目標(biāo)模式驅(qū)動(dòng)器382對控制信息加上時(shí)間戳。換言之,目標(biāo)模式驅(qū)動(dòng)器382將控制信息與一時(shí)間聯(lián)系起來,在該時(shí)間控制信息在主機(jī)接口361被接收。例如,在數(shù)據(jù)分組中目標(biāo)模式驅(qū)動(dòng)器382將控制信息發(fā)送到數(shù)據(jù)分類器384的情況下,目標(biāo)模式驅(qū)動(dòng)器382可使用數(shù)據(jù)分組內(nèi)的字段來指示控制信息在主機(jī)接口361被接收的時(shí)間。任何其它對控制信息加時(shí)間戳的方法也可被使用。
在一個(gè)實(shí)施例中,在目標(biāo)模式驅(qū)動(dòng)器382將寫操作的數(shù)據(jù)有效載荷從寫操作的控制信息分離出來之后,并且除了目標(biāo)模式驅(qū)動(dòng)器將控制信息傳輸?shù)綌?shù)據(jù)分類器384之外,目標(biāo)模式驅(qū)動(dòng)器382復(fù)制分離的數(shù)據(jù)有效載荷以創(chuàng)建至少一個(gè)數(shù)據(jù)有效載荷拷貝。在一個(gè)實(shí)施例中,目標(biāo)模式驅(qū)動(dòng)器382然后評估第一成本等式(cost equation),如下所描述的,并基于所評估的第一成本等式的結(jié)果,最佳地標(biāo)識(shí)能夠至少暫時(shí)存儲(chǔ)第一數(shù)據(jù)有效載荷拷貝的第二存儲(chǔ)緩沖區(qū)363。在一個(gè)實(shí)施例中,第一存儲(chǔ)緩沖區(qū)363和第二存儲(chǔ)緩沖區(qū)363是例如不同的處理器模塊378中的不同存儲(chǔ)緩沖區(qū)363??蛇x地,目標(biāo)模式驅(qū)動(dòng)器382然后還可評估第二及/或進(jìn)一步的成本等式(一個(gè)或更多個(gè)),如下所描述的,并基于所評估的第二及/或進(jìn)一步的成本等式(一個(gè)或更多個(gè))的結(jié)果,可最佳地標(biāo)識(shí)能夠存儲(chǔ)第二及/或進(jìn)一步的數(shù)據(jù)有效載荷拷貝的第三及/或進(jìn)一步的存儲(chǔ)緩沖區(qū)(一個(gè)或更多個(gè))363。第一、第二、第三以及任何進(jìn)一步的存儲(chǔ)緩沖區(qū)363可能各是不同的存儲(chǔ)緩沖區(qū)363。目標(biāo)模式驅(qū)動(dòng)器382然后可將第一數(shù)據(jù)有效載荷拷貝發(fā)送到第二存儲(chǔ)緩沖區(qū)363,并且可選地,可將第二及/或進(jìn)一步的數(shù)據(jù)有效載荷拷貝發(fā)送到第三及/或進(jìn)一步的存儲(chǔ)緩沖區(qū)363。因此,存儲(chǔ)管理裝置338可供給數(shù)據(jù)的冗余存儲(chǔ),無論其是臨時(shí)的或永久的。
在一個(gè)實(shí)施例中,主機(jī)接口361還包括數(shù)據(jù)分類器384。數(shù)據(jù)分類器384與主機(jī)接口361的目標(biāo)模式驅(qū)動(dòng)器382聯(lián)系,并還與多個(gè)I/O管理器362聯(lián)系。數(shù)據(jù)分類器384從目標(biāo)模式驅(qū)動(dòng)器382接收I/O請求的控制信息,標(biāo)識(shí)適當(dāng)?shù)奶幚砥髂K378來響應(yīng),并將該控制信息轉(zhuǎn)發(fā)到適當(dāng)處理器模塊378的I/O管理器362。
在一個(gè)實(shí)施例中,數(shù)據(jù)分類器384將目標(biāo)模式驅(qū)動(dòng)器382在主機(jī)接口361接收到的I/O請求分類為特定類型的I/O請求(例如,寫操作、讀操作或?qū)π薷臍v史的請求)。在一個(gè)實(shí)施例中,數(shù)據(jù)分類器384分析接收到的I/O請求的控制信息以對I/O請求進(jìn)行分類。數(shù)據(jù)分類器384還通過比較進(jìn)入的I/O請求和所產(chǎn)生的預(yù)訂(subscription)請求,例如,如下所描述的I/O管理器362產(chǎn)生的預(yù)訂請求,從而對控制信息進(jìn)行分類。在一個(gè)實(shí)施例中,數(shù)據(jù)分類器384為每個(gè)I/O請求確定處理群、存儲(chǔ)裝置標(biāo)識(shí)符(例如,邏輯單元),存儲(chǔ)單元標(biāo)識(shí)符和長度。該信息與控制信息、時(shí)間戳和I/O請求類型一起被傳到適當(dāng)?shù)腎/O管理器362。為了允許處理大量的I/O請求,當(dāng)來自數(shù)據(jù)分類器384的這些信息分組被發(fā)送到各自的I/O管理器362時(shí),存儲(chǔ)緩沖區(qū)363暫時(shí)地將它們存儲(chǔ)起來。
更詳細(xì)地,存儲(chǔ)管理裝置338的多個(gè)I/O管理器362都負(fù)責(zé)管理數(shù)據(jù)存儲(chǔ)器。在一個(gè)實(shí)施例中,多個(gè)I/O管理器362中的每個(gè)均通過預(yù)訂協(xié)議(例如,如下所描述的)預(yù)訂數(shù)據(jù)存儲(chǔ)器內(nèi)至少一組位置,其中它將處理從數(shù)據(jù)分類器384接收到的控制信息,用于所述位置。因此,當(dāng)在主機(jī)接口361接收到的I/O請求的控制信息包括將于數(shù)據(jù)存儲(chǔ)器內(nèi)第一位置上執(zhí)行的操作時(shí),數(shù)據(jù)分類器384可基于多個(gè)I/O管理器362的預(yù)訂,標(biāo)識(shí)能夠處理控制信息的多個(gè)I/O管理器362的第一個(gè)。此外,在一個(gè)實(shí)施例中,如果多個(gè)I/O管理器362的第一個(gè)失效,數(shù)據(jù)分類器384還可再次基于多個(gè)I/O管理器362的預(yù)訂,標(biāo)識(shí)能夠處理控制信息的多個(gè)I/O管理器362的第二個(gè)。
在一個(gè)實(shí)施例中,在數(shù)據(jù)分類器384從目標(biāo)模式驅(qū)動(dòng)器382接收到控制信息之后,數(shù)據(jù)分類器384復(fù)制控制信息以創(chuàng)建控制信息的拷貝。在一個(gè)這樣的實(shí)施例中,數(shù)據(jù)分類器384將控制信息發(fā)送到如上所述那樣被標(biāo)識(shí)的多個(gè)I/O管理器362的第一個(gè),并指示第一個(gè)I/O管理器362處理控制信息。數(shù)據(jù)分類器384還可將控制信息的拷貝發(fā)送到如上所述那樣被標(biāo)識(shí)的多個(gè)I/O管理器362的第二個(gè),并可指示第二個(gè)I/O管理器362暫時(shí)地存儲(chǔ)控制信息的拷貝,而不是處理控制信息的拷貝。例如,控制信息的拷貝可被存儲(chǔ)在處理器模塊378的存儲(chǔ)緩沖區(qū)363中,多個(gè)I/O管理器362的第二個(gè)位于所述處理器模塊378的存儲(chǔ)緩沖區(qū)363。因此,在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置338保存控制信息的冗余拷貝,以使在第一個(gè)I/O管理器362失效的情況下,所述控制信息可被第二個(gè)I/O管理器362處理。
在一個(gè)實(shí)施例中,第一I/O請求的控制信息指引I/O管理器362在數(shù)據(jù)存儲(chǔ)器內(nèi)的第一位置上操作。在這樣一個(gè)實(shí)施例中,其它I/O請求的控制信息也可指引I/O管理器362在數(shù)據(jù)存儲(chǔ)器內(nèi)的第二位置上操作,所述數(shù)據(jù)存儲(chǔ)器內(nèi)的第二位置至少與所述數(shù)據(jù)存儲(chǔ)器內(nèi)的第一位置部分重疊。在這種情況下,I/O管理器362首先處理具有最早的時(shí)間戳的控制信息。因此,在一個(gè)方法中,通過給I/O請求的控制信息加上時(shí)間戳,目標(biāo)模式驅(qū)動(dòng)器382可有效地確保,當(dāng)那些其它I/O請求被指引到至少與數(shù)據(jù)存儲(chǔ)器內(nèi)的第一位置部分重疊的數(shù)據(jù)存儲(chǔ)器內(nèi)的位置時(shí),在其處理其它具有較遲的時(shí)間戳的I/O請求的控制信息之前,I/O管理器362處理了對數(shù)據(jù)存儲(chǔ)器內(nèi)的第一位置的任何一個(gè)特定I/O請求的控制信息。
一旦I/O管理器362接收到控制信息并被數(shù)據(jù)分類器384指示處理控制信息,I/O管理器362對I/O請求進(jìn)行排序和管理,并將適當(dāng)?shù)闹噶钷D(zhuǎn)發(fā)到物理存儲(chǔ)器接口364。在一個(gè)實(shí)施例中,I/O管理器362處理控制信息,并監(jiān)控存儲(chǔ)管理裝置338內(nèi)的信息流及為它建立索引。例如,I/O管理器362監(jiān)控往返于其它處理模塊、主機(jī)接口361和物理存儲(chǔ)器364的信息流并為它建立索引。I/O管理器362還管理I/O,并確保已修改的存儲(chǔ)單元被保存而且對創(chuàng)建先前映象中的將來引用來說是可存取的。另外,I/O管理器362跟蹤響應(yīng)來自主機(jī)34的I/O請求時(shí)的存儲(chǔ)管理裝置338的性能(例如,響應(yīng)時(shí)間)。
I/O管理器362還可執(zhí)行各種優(yōu)化例程,從而向主機(jī)提供對I/O請求的高效響應(yīng)時(shí)間。例如,因?yàn)樵摯鎯?chǔ)管理裝置可被用于非常大容量的存儲(chǔ)系統(tǒng)30中,包括具有千兆字節(jié)(terabyte)存儲(chǔ)容量的存儲(chǔ)系統(tǒng),寫時(shí)拷貝命令的優(yōu)化是可所希望的。寫時(shí)拷貝命令在將新的數(shù)據(jù)寫到目標(biāo)存儲(chǔ)地址之前可要求至少兩個(gè)連續(xù)的操作(a)從目標(biāo)存儲(chǔ)地址讀出現(xiàn)有數(shù)據(jù)和(b)將現(xiàn)有數(shù)據(jù)寫到新的存儲(chǔ)地址。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置實(shí)現(xiàn)單獨(dú)的或組合的某些優(yōu)化。這些優(yōu)化通常屬于五個(gè)種類的其中之一(i)聚合;(ii)跨越(spanning);(iii)冗余寫(redundant write);(iv)重排序;以及(v)實(shí)況存儲(chǔ)(live storage)。這些優(yōu)化中的每一個(gè)均把更高效的處理考慮進(jìn)去,尤其是寫時(shí)拷貝操作的處理。
1.聚合。第一種優(yōu)化是聚合。存儲(chǔ)管理裝置338可聚合用于連續(xù)的存儲(chǔ)單元(例如,相鄰塊中的存儲(chǔ)單元)的分離的寫時(shí)拷貝命令,并在單個(gè)寫時(shí)拷貝命令中執(zhí)行操作。這可以是有用的,因?yàn)楫?dāng)相鄰塊作為整體被操作時(shí),與每個(gè)塊的多次物理磁盤讀寫相聯(lián)系的額外開銷被消除。
2.跨越。通過將被指引到非連續(xù)的但相互非常接近的存儲(chǔ)單元的分離的寫時(shí)拷貝命令組合成單個(gè)寫時(shí)拷貝命令,可進(jìn)一步擴(kuò)展聚合優(yōu)化,除所有目標(biāo)存儲(chǔ)單元以外,所述單個(gè)寫時(shí)拷貝命令還跨越位于跨越范圍中的所有存儲(chǔ)單元。例如,在五個(gè)存儲(chǔ)單元100、200、300、400和500相互如所示次序排列的地方,被指引到塊100、300和500的寫時(shí)拷貝命令可代之以被指引到包括塊100-500在內(nèi)的單個(gè)寫時(shí)拷貝命令。雖然會(huì)讀并操作額外數(shù)據(jù),但包含額外數(shù)據(jù)的跨越塊仍可比3個(gè)分離的磁盤操作明顯更快。
3.冗余寫??赏ㄟ^標(biāo)識(shí)可能是主機(jī)寫請求目標(biāo)的第一存儲(chǔ)單元來實(shí)現(xiàn)冗余寫優(yōu)化。寫到第一塊的數(shù)據(jù)也可被寫到第二塊。索引可跟蹤每個(gè)存儲(chǔ)單元的地址。然后,對該塊的下一個(gè)寫命令可引起兩個(gè)塊之一被重寫,而不是執(zhí)行寫時(shí)拷貝。未改變的塊能因此充當(dāng)該塊的歷史拷貝。
4.重排序。使用重排序優(yōu)化,進(jìn)入的I/O請求可被重排序,以便最大化其它優(yōu)化協(xié)議(比如聚合協(xié)議、跨越協(xié)議、冗余寫協(xié)議等)中一個(gè)或更多個(gè)的好處。
5.實(shí)況存儲(chǔ)。在有些情況下,通過將數(shù)據(jù)存儲(chǔ)在內(nèi)存中而不是物理存儲(chǔ)器中可獲得高效率。例如,如果某些塊具有大量I/O請求(例如,它們被經(jīng)常更新),那么通過將數(shù)據(jù)保持在內(nèi)存中可保存許多讀/寫操作。在一個(gè)實(shí)施例中,內(nèi)存是位于處理器模塊378中的內(nèi)存296(圖9)。
存儲(chǔ)緩沖區(qū)363可至少暫時(shí)地存儲(chǔ),存儲(chǔ)管理裝置338內(nèi)正被處理的數(shù)據(jù)有效載荷、數(shù)據(jù)有效載荷拷貝、控制信息和控制信息的拷貝。在一個(gè)實(shí)施例中,多個(gè)存儲(chǔ)緩沖區(qū)363與一個(gè)或更多個(gè)目標(biāo)模式驅(qū)動(dòng)器382通信。在這樣一個(gè)實(shí)施例中,由目標(biāo)模式驅(qū)動(dòng)器382接收的數(shù)據(jù),和由目標(biāo)模式驅(qū)動(dòng)器382制造的該數(shù)據(jù)的所有拷貝,被存儲(chǔ)在一個(gè)或更多個(gè)存儲(chǔ)緩沖區(qū)363中,直到其通過物理存儲(chǔ)器接口364被傳到物理存儲(chǔ)器36或經(jīng)由內(nèi)部網(wǎng)絡(luò)380被傳到另一個(gè)處理器模塊378。存儲(chǔ)緩沖區(qū)363包括內(nèi)存296(參見圖9),所述內(nèi)存296被按這樣的方法分配,即允許各種裝置傳遞數(shù)據(jù)而不用對數(shù)據(jù)進(jìn)行軟件處理。
物理存儲(chǔ)器接口364通過如上所描述的任何類型的通信鏈路42(例如,光纖信道網(wǎng)絡(luò))與物理存儲(chǔ)器36通信,并經(jīng)由內(nèi)部網(wǎng)絡(luò)380與多個(gè)I/O管理器362、一個(gè)或更多個(gè)主機(jī)接口361和多個(gè)存儲(chǔ)緩沖區(qū)363通信。例如,響應(yīng)讀請求,物理存儲(chǔ)器接口364檢索存儲(chǔ)在物理存儲(chǔ)器36上的數(shù)據(jù),所述數(shù)據(jù)最終被提供給主機(jī)接口361以用于到主機(jī)34的通信。對于寫請求,物理存儲(chǔ)器接口364將數(shù)據(jù)有效載荷轉(zhuǎn)發(fā)到物理存儲(chǔ)器36的目標(biāo)存儲(chǔ)單元。
在I/O管理器362已處理起初由目標(biāo)模式驅(qū)動(dòng)器382在主機(jī)接口361接收的I/O請求的控制信息之后,該I/O管理器362可指示物理存儲(chǔ)器接口364與一個(gè)或更多個(gè)物理存儲(chǔ)器36通信。在一個(gè)實(shí)施例中,I/O管理器362指示物理存儲(chǔ)器364從物理存儲(chǔ)器36讀數(shù)據(jù)。例如,I/O管理器362可能已處理了寫操作的控制信息,且物理存儲(chǔ)器接口364因此被指示讀取來自物理存儲(chǔ)器36的數(shù)據(jù)以便執(zhí)行寫時(shí)拷貝操作。替代性地,I/O管理器362可能已處理了讀操作的控制信息,且物理存儲(chǔ)器接口364因此被指示讀取來自物理存儲(chǔ)器36內(nèi)特定位置的數(shù)據(jù)。在I/O管理器362被指示從物理存儲(chǔ)器36讀取數(shù)據(jù)時(shí),物理存儲(chǔ)器接口364就讀取這樣的數(shù)據(jù)。
在另一個(gè)實(shí)施例中,I/O管理器362處理包括數(shù)據(jù)有效載荷的寫操作的控制信息,但是之前已被目標(biāo)模式驅(qū)動(dòng)器382從控制信息中分離的數(shù)據(jù)有效載荷,如上所描述的,將已被存儲(chǔ)在第一存儲(chǔ)緩沖區(qū)363中。在這樣一個(gè)實(shí)施例中,除指示物理存儲(chǔ)器接口364與物理存儲(chǔ)器36通信之外,I/O管理器362還指示物理存儲(chǔ)器接口364與第一存儲(chǔ)緩沖區(qū)363通信。因此,如I/O管理器362所指示的,物理存儲(chǔ)器接口364從第一存儲(chǔ)緩沖區(qū)363檢索數(shù)據(jù)有效載荷并將該數(shù)據(jù)有效載荷寫到物理存儲(chǔ)器36內(nèi)的一位置。
一旦數(shù)據(jù)有效載荷安全地存儲(chǔ)到物理存儲(chǔ)器36內(nèi)的一位置,I/O管理器362可刪除、標(biāo)記刪除或標(biāo)記置換之前(冗余地)存儲(chǔ)在第二及/或另外的存儲(chǔ)緩沖區(qū)(一個(gè)或多個(gè))363中的一個(gè)或更多個(gè)數(shù)據(jù)有效載荷。類似地,一旦控制信息已經(jīng)被I/O管理器362處理,I/O管理器362可刪除、標(biāo)記刪除或標(biāo)記置換之前存儲(chǔ)在處理器模塊378的存儲(chǔ)緩沖區(qū)363中的控制信息的拷貝,第二I/O管理器362位于所述處理器模塊378上。
現(xiàn)在參照圖11,每個(gè)處理器模塊378(圖10)均負(fù)責(zé)對數(shù)據(jù)存儲(chǔ)器的特定部分提出的I/O請求。每個(gè)I/O管理器362均負(fù)責(zé)管理和履行對數(shù)據(jù)存儲(chǔ)器的部分(其處理模塊被分配給它)的I/O請求。在一個(gè)實(shí)施例中,每個(gè)I/O管理器362均被分配數(shù)據(jù)存儲(chǔ)器的一組塊,例如,數(shù)據(jù)存儲(chǔ)器A的塊100-500。每個(gè)處理器模塊378可采用多個(gè)I/O管理器362。將I/O管理器362分配給其所負(fù)責(zé)的數(shù)據(jù)存儲(chǔ)器的部分是通過預(yù)訂協(xié)議發(fā)生的。在一個(gè)實(shí)施例中,通過使多個(gè)I/O管理器362中的每一個(gè)向數(shù)據(jù)分類器384中的每一個(gè)、將執(zhí)行數(shù)據(jù)操作(例如,讀操作或?qū)懖僮?的數(shù)據(jù)存儲(chǔ)器的一個(gè)或更多個(gè)部分登記,可實(shí)現(xiàn)預(yù)定協(xié)議。
每個(gè)I/O管理器362可負(fù)責(zé)多個(gè)當(dāng)前存儲(chǔ)器和多個(gè)時(shí)間存儲(chǔ)器,所述多個(gè)當(dāng)前存儲(chǔ)器和多個(gè)時(shí)間存儲(chǔ)器由當(dāng)前存儲(chǔ)器控制器472和功能存儲(chǔ)模塊474管理。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置338維持一數(shù)據(jù)庫,所述數(shù)據(jù)庫將每個(gè)I/O管理器362與被分配給各自I/O管理器362的鄰接塊組聯(lián)系在一起。與I/O管理器362相聯(lián)系的數(shù)據(jù)分類器384采用該數(shù)據(jù)庫以確保每個(gè)I/O管理器僅僅執(zhí)行與分配給它的塊相聯(lián)系的任務(wù)。在一個(gè)實(shí)施例中,該方法允許存儲(chǔ)管理裝置338中的I/O管理器362總數(shù)的一個(gè)子集去服務(wù)單個(gè)時(shí)間存儲(chǔ)器,而其它I/O管理器362子集可服務(wù)附加的時(shí)間存儲(chǔ)器。該方法還是可伸縮的,因?yàn)樵黾覫/O管理器362的數(shù)量將增加存儲(chǔ)管理裝置338可高效服務(wù)的時(shí)間存儲(chǔ)器的數(shù)量。并且,該方法可與包含多個(gè)時(shí)間存儲(chǔ)器和多個(gè)當(dāng)前存儲(chǔ)器的單個(gè)物理存儲(chǔ)器36一起使用。因?yàn)樵摲椒ㄎㄒ坏貥?biāo)識(shí)每個(gè)數(shù)據(jù)存儲(chǔ)器,所以僅僅要求極少數(shù)附加信息以將每個(gè)I/O管理器362與特定的存儲(chǔ)單元(一個(gè)或多個(gè))聯(lián)系在一起。在一個(gè)實(shí)施例中,數(shù)據(jù)存儲(chǔ)器塊編號、時(shí)間存儲(chǔ)器塊編號和時(shí)間戳是所需的唯一附加信息。
在一個(gè)實(shí)施例中,I/O管理器362維持一系列控制信息表格,所述表格每個(gè)均與一特定的時(shí)間窗口對應(yīng)。例如,由I/O管理器362在9:00和9:05之間處理的所有I/O都可被存儲(chǔ)在單個(gè)表格中,而發(fā)生在9:05和9:10之間的I/O被存儲(chǔ)在另一個(gè)表格中。在該實(shí)施例的一個(gè)版本中,表格具有固定大小。固定的表格大小使得對表格的每個(gè)查詢的處理時(shí)間可被很容易地確定,這是因?yàn)樗斜砀穸际菨M的,除了當(dāng)前正被使用的表格。因此,除了當(dāng)前的表格,對所有表格來說處理時(shí)間都是相同的。雖然表格大小是固定的,但是由于寫命令的可變頻率和與每個(gè)命令相聯(lián)系的目標(biāo)存儲(chǔ)單元的可變大小,每個(gè)表格所覆蓋的時(shí)間段是可變的。例如,如果平均起來,關(guān)聯(lián)的I/O管理器362每3000個(gè)時(shí)間單位處理200,000個(gè)寫命令,則限于600,000項(xiàng)的表格將填充9,000個(gè)時(shí)間單位。然而,如果關(guān)聯(lián)的I/O管理器362每1000個(gè)時(shí)間單位接收200,000個(gè)寫命令,相同大小的表格將填充3000個(gè)時(shí)間單位。在該實(shí)施例的一個(gè)版本中,表格包括數(shù)據(jù)存儲(chǔ)器塊編號、時(shí)間存儲(chǔ)器塊編號和指示關(guān)聯(lián)的寫時(shí)拷貝操作何時(shí)被執(zhí)行的時(shí)間戳。
當(dāng)表格被填滿時(shí),I/O管理器362會(huì)做三件事 1)I/O管理器362創(chuàng)建用于新的進(jìn)入的寫操作的新表格。
2)I/O管理器362在分離表格(例如,主表格)中創(chuàng)建表項(xiàng),所述分離表格描述這些控制信息表格并為其建立索引。主表格包含表名和該表格所覆蓋的時(shí)間范圍,也就是,從表格的創(chuàng)建時(shí)間到最后的表項(xiàng)被記錄在表格中的時(shí)間。在一個(gè)實(shí)施例中,主表格對與其關(guān)聯(lián)的I/O管理器362來說是本地的。
3)I/O管理器362在給定表格中創(chuàng)建一表示全部I/O的位圖。該位圖具有一個(gè)用于給定塊范圍的比特。該位圖可被調(diào)節(jié)以調(diào)整由每個(gè)比特所代表的塊范圍;因此,在一個(gè)實(shí)施例中,比特0表示塊0-15,比特2表示塊16-32等。每個(gè)比特所表示的數(shù)據(jù)量被稱為區(qū)域大小。
區(qū)域大小也是可調(diào)的。因此,區(qū)域大小越靠近平均I/O請求大小或者最小I/O請求大小,比特上假陽性(false positive)出現(xiàn)的概率就減少。在一個(gè)實(shí)施例中,最小I/O請求大小是1個(gè)扇區(qū)或512字節(jié)。操作中,如果區(qū)域大小是128千字節(jié),如果用戶寫數(shù)據(jù)到塊2-10,則第一個(gè)比特將會(huì)被置位。然而,如果位圖較晚才被用于確定塊85是否在底層的數(shù)據(jù)中被引用,則位圖將提供一假陽性指示。
隨著區(qū)域大小減小,假陽性的數(shù)量減少并且實(shí)際上減到零。然而,當(dāng)區(qū)域大小減小時(shí),需要更多的內(nèi)存和磁盤空間去存儲(chǔ)位圖。相反地,隨著區(qū)域大小增大,發(fā)生的假陽性的數(shù)量增多,而位圖的內(nèi)存需要量減少。在一個(gè)實(shí)施例中,每個(gè)I/O管理器選取一區(qū)域大小,該區(qū)域大小動(dòng)態(tài)地平衡假陽性的比率和位圖大小。
在一個(gè)實(shí)施例中,當(dāng)一表格達(dá)到容量并移到新的表格時(shí),I/O管理器關(guān)閉或“密封”該表格所需操作的影響被最小化,這是因?yàn)楸砀駛魉褪窍鄬τ谶B續(xù)的I/O流被異步地執(zhí)行的。
當(dāng)特定的恢復(fù)時(shí)間被要求用于產(chǎn)生基于時(shí)間的數(shù)據(jù)存儲(chǔ)器(例如,數(shù)據(jù)存儲(chǔ)器B)時(shí),I/O管理器362必須執(zhí)行三個(gè)通用級別的操作。
1)I/O管理器362首先標(biāo)識(shí)所包含的表格。如果用戶請求一恢復(fù)時(shí)間T-500,I/O管理器362就掃描主表格,查找包括發(fā)生在T-500和請求時(shí)間之間的I/O操作的控制信息表格。I/O管理器然后檢索用于每個(gè)包括限定的(qualifying)I/O操作的控制信息表格的位圖。
2)I/O管理器362然后通過將所有被檢索的位圖“或”在一起來創(chuàng)建主位圖并保存各個(gè)位圖和主位圖。一旦或操作完成,主位圖就可用于評估潛在讀請求的真實(shí)百分比,從而確定所請求的塊是否包含于先前的寫操作中(也就是,在T-500和請求時(shí)間之間)。如果一個(gè)塊未包含在那時(shí)的寫操作中,來自當(dāng)前存儲(chǔ)器的數(shù)據(jù)就將被用于該塊。對來自當(dāng)前存儲(chǔ)器的數(shù)據(jù)的檢索和呈現(xiàn)基本上是實(shí)時(shí)操作。如果區(qū)域比特在主位圖中被置位,I/O管理器362就開始從最舊的到最新的掃描各個(gè)位圖,從而確定用于該區(qū)域的哪個(gè)比特被置位,并然后掃描位圖的底層表格,查找時(shí)間存儲(chǔ)器中I/O操作的位置。這些操作與從當(dāng)前存儲(chǔ)器檢索數(shù)據(jù)相比是較慢的,但是它們貫穿系統(tǒng)持續(xù)進(jìn)行。
3)I/O管理器362開始創(chuàng)建區(qū)域映射,憑此在每一個(gè)體控制信息表格中描述的塊的拷貝被存儲(chǔ)在內(nèi)存中。當(dāng)該操作完成時(shí),必須到時(shí)間存儲(chǔ)器去以獲得數(shù)據(jù)的讀請求的時(shí)延被減少,這是因?yàn)樵撜埱蟊恢囟ㄏ虻絻?nèi)存并很少(如果有過的話)需要任何額外的表格掃描。
通過前述方法可減少存儲(chǔ)管理裝置38的響應(yīng)時(shí)間,這是因?yàn)楫?dāng)?shù)谝徊酵瓿蓵r(shí)I/O管理器362開始服務(wù)請求。在大多數(shù)應(yīng)用程序中,當(dāng)前存儲(chǔ)器將提供產(chǎn)生時(shí)間存儲(chǔ)器所需的大部分?jǐn)?shù)據(jù),這是因?yàn)?,最?jīng)常地,時(shí)間存儲(chǔ)器將在相對最近的時(shí)間點(diǎn)產(chǎn)生,例如,1分鐘、1小時(shí)、1天。當(dāng)與整個(gè)數(shù)據(jù)存儲(chǔ)器相比時(shí),在那些時(shí)間段中典型變化的數(shù)據(jù)量是很小的。每個(gè)主表格可包含500,000到5,000,000個(gè)記錄,每個(gè)表格仍可在固定時(shí)間中被搜索。因此只具有幾千個(gè)表項(xiàng)的主表格可被用于支持2千兆字節(jié)的物理存儲(chǔ)器36的應(yīng)用程序中。
參照圖11,當(dāng)前存儲(chǔ)器控制器472處理被指引到裝置/存儲(chǔ)單元組合的請求,當(dāng)前存儲(chǔ)器控制器472被預(yù)訂給所述裝置/存儲(chǔ)單元組合。每個(gè)當(dāng)前存儲(chǔ)器控制器472接收由此產(chǎn)生的控制信息,所述控制信息通過控制平面568(圖12)從主機(jī)接口361(圖10)被發(fā)送到I/O管理器462。當(dāng)前存儲(chǔ)器控制器472基于這個(gè)控制信息創(chuàng)建工作次序,從而確保與控制請求相聯(lián)系的數(shù)據(jù)被寫到邏輯單元,而且目前出現(xiàn)在目標(biāo)位置的舊數(shù)據(jù)被存儲(chǔ)管理裝置538拷貝并保存在別處。
類似地,時(shí)間存儲(chǔ)器控制器476處理被指引到裝置/存儲(chǔ)單元組合的請求,時(shí)間存儲(chǔ)器控制器476被預(yù)訂給所述裝置/存儲(chǔ)單元組合。每個(gè)預(yù)定是使用處理器模塊378的數(shù)據(jù)分類器384來注冊的。
I/O管理器362還包括I/O路由器470。I/O路由器470是負(fù)責(zé)根據(jù)當(dāng)前存儲(chǔ)器控制器372和時(shí)間存儲(chǔ)器控制器376的指引移動(dòng)數(shù)據(jù)的軟件模塊。
雖然I/O路由器470、當(dāng)前存儲(chǔ)器控制器472、功能存儲(chǔ)474和時(shí)間存儲(chǔ)器控制器476中每種裝置都只顯示了一個(gè),但I(xiàn)/O管理器362可包括這些裝置中每種一個(gè)或更多個(gè)。此外,除圖11所示的配置外,這些元件也可在其它配置中通信。例如,在一個(gè)實(shí)施例中,I/O管理器462包括多個(gè)時(shí)間存儲(chǔ)器控制器476。
現(xiàn)在參照圖12,在另一個(gè)實(shí)施例和更抽象的表示中,存儲(chǔ)管理裝置538包括用于在多個(gè)模塊之間互相通信的數(shù)據(jù)平面566和控制平面568。存儲(chǔ)管理裝置538包括多個(gè)主機(jī)接口561、I/O管理器562和物理存儲(chǔ)器接口564。雖然這些組件,如之前的圖所示,每個(gè)均位于特定的處理器模塊上,然而它們可共同被看作這些組件的集合,出于效率和容錯(cuò)性的考慮,這些組件共同工作以分擔(dān)載荷。
主機(jī)接口561和物理存儲(chǔ)器接口564在數(shù)據(jù)平面566上相互傳遞數(shù)據(jù),如上所描述的,所述數(shù)據(jù)平面566是使用直接存儲(chǔ)訪問和內(nèi)部網(wǎng)絡(luò)380(圖10)來實(shí)現(xiàn)的。在控制平面568上,控制信息(例如,控制分組、元數(shù)據(jù)分組)在主機(jī)接口561和I/O管理器562之間,以及在I/O管理器562和物理存儲(chǔ)器接口564之間傳遞??刂破矫?68是通過采用處理器內(nèi)通信機(jī)制以及使用內(nèi)部網(wǎng)絡(luò)380(圖10)來實(shí)現(xiàn)的。數(shù)據(jù)有效載荷經(jīng)由數(shù)據(jù)平面566在主機(jī)接口561和物理存儲(chǔ)器接口564之間傳遞。
完成上面描述的優(yōu)化操作,在某種程度上是由于存儲(chǔ)管理裝置338所采用的隊(duì)列系統(tǒng)。隊(duì)列系統(tǒng)組織被I/O管理器362處理的控制信息(例如,控制分組、元數(shù)據(jù)分組)。控制信息首先服從一進(jìn)入的隊(duì)列,其中I/O管理器362以該控制信息被接收的順序?qū)ζ溥M(jìn)行排隊(duì)。
在一個(gè)實(shí)施例中,控制分組被聯(lián)合、重排序及/或策略上地延遲以便更高效地處理這些分組。再次參照圖10,I/O管理器362標(biāo)識(shí)并跟蹤控制分組的冪等群(idempotent group),也就是相互獨(dú)立的控制分組群。通常,冪等群與其它分組群相比可被更高效地處理,例如,冪等群可被更快速地處理。例如,如果被指引到塊0-15的第一控制分組在時(shí)間T0到達(dá),并且被指引到塊8-31的第二控制分組在時(shí)間T5到達(dá),那么I/O管理器362將從T0到T4的全部操作包含在一冪等群中,并在時(shí)間T5開始另一個(gè)群(假如在T0和T5之間沒有別的控制分組重疊)。在本例中,選擇處理、分群和執(zhí)行次序以防止T5操作發(fā)生T0操作之前。例如,如果T5操作首先被執(zhí)行,T0操作將在它的之前映象(也就是,塊8-15)中包括部分的T5有效載荷。此外,T5操作將會(huì)在其之前映象中丟失來自T0操作的數(shù)據(jù),雖然該數(shù)據(jù)在時(shí)間T1是存在的。
存儲(chǔ)管理裝置338創(chuàng)造許多產(chǎn)生提高處理效率的定制控制分組群的機(jī)會(huì),因?yàn)槔?,操作可被分成“工作者群?worker group),在此每個(gè)工作者群可以線程化的(threaded)、獨(dú)立的且同時(shí)的方式運(yùn)行。如上所描述的確定某些塊不是冪等的就強(qiáng)制I/O管理器362確保全部的塊引用0-32發(fā)生在與T0和T5操作相同的工作者群中,但是包括其它很大塊群的操作仍可重排序。因此,I/O管理器362使用高級排隊(duì)理論不斷地標(biāo)識(shí)、分析和管理在多個(gè)隊(duì)列上的冪等關(guān)系。
系統(tǒng)允許用戶創(chuàng)建新的動(dòng)態(tài)或靜態(tài)的數(shù)據(jù)存儲(chǔ)器B,所述數(shù)據(jù)存儲(chǔ)器B是表示在前面時(shí)間點(diǎn)的主數(shù)據(jù)存儲(chǔ)器A,例如,在T-500。目標(biāo)模式驅(qū)動(dòng)器382在第一通信鏈路40上創(chuàng)建目標(biāo)裝置表示,鏈路40允許主機(jī)34發(fā)布命令到新的數(shù)據(jù)存儲(chǔ)器B。I/O管理器362使用功能存儲(chǔ)474去創(chuàng)建不能通過當(dāng)前存儲(chǔ)器A滿足數(shù)據(jù)存儲(chǔ)器B的全部塊的映射,也就是說,自恢復(fù)時(shí)間T-500以來這些塊已在當(dāng)前存儲(chǔ)器A中被重寫。由于被指引到主數(shù)據(jù)存儲(chǔ)器A的持續(xù)的I/O流,該映射被持續(xù)更新。例如,每次用戶修改數(shù)據(jù)存儲(chǔ)器A的一個(gè)塊時(shí),當(dāng)前存儲(chǔ)器A中的目標(biāo)塊不再包含與其在時(shí)間T-500之前所包含的數(shù)據(jù)相同的數(shù)據(jù)。映射并入時(shí)間存儲(chǔ)器A中新目標(biāo)塊被拷貝到的位置。因此,被指引到數(shù)據(jù)存儲(chǔ)器B的I/O請求定位正確的塊內(nèi)容。另外,整個(gè)處理必須同時(shí)發(fā)生以確保對當(dāng)前存儲(chǔ)器A、時(shí)間存儲(chǔ)器A的更新被準(zhǔn)確地反映在數(shù)據(jù)存儲(chǔ)器B的映射中,從而防止對數(shù)據(jù)存儲(chǔ)器B的I/O請求將錯(cuò)誤的塊標(biāo)識(shí)為數(shù)據(jù)源。例如,當(dāng)新的塊被寫到數(shù)據(jù)存儲(chǔ)器A時(shí),映射是使用數(shù)據(jù)存儲(chǔ)器A的先前內(nèi)容的時(shí)間存儲(chǔ)器中的位置被更新的。存儲(chǔ)管理裝置538采用確保被指引到數(shù)據(jù)存儲(chǔ)器B的I/O請求隨后及時(shí)地定位正確數(shù)據(jù)的方法。
修改歷史請求 通常,在另一個(gè)方面,本發(fā)明涉及用于提供數(shù)據(jù)存儲(chǔ)器內(nèi)位置的修改歷史的系統(tǒng)、方法和制品。簡單概括,在本發(fā)明這方面的一個(gè)實(shí)施例中,第一計(jì)算裝置(例如,如上所描述的主機(jī))給第二計(jì)算裝置(例如,如上所描述的存儲(chǔ)管理裝置)指定由第二計(jì)算裝置管理的數(shù)據(jù)存儲(chǔ)器內(nèi)的位置(例如,數(shù)據(jù)存儲(chǔ)器內(nèi)的地址范圍)。第一計(jì)算裝置然后還從第二計(jì)算裝置請求存儲(chǔ)在指定位置的數(shù)據(jù)至少一部分被修改的時(shí)間的列表。在一個(gè)實(shí)施例中,第二計(jì)算裝置然后用存儲(chǔ)在該位置的數(shù)據(jù)某部分被修改的時(shí)間的列表作出響應(yīng),并可選地標(biāo)識(shí)該位置的哪些部分在那些時(shí)間被修改。一般而言,如果存儲(chǔ)在該位置的數(shù)據(jù)的某部分已被修改,那么由于被引導(dǎo)到數(shù)據(jù)存儲(chǔ)器該部分的寫操作,其就已被修改。
在一個(gè)實(shí)施例中,對數(shù)據(jù)存儲(chǔ)器內(nèi)一位置的修改歷史的請求被接收于第二計(jì)算裝置帶內(nèi),也就是,該請求來自第一計(jì)算裝置并通過當(dāng)?shù)谝挥?jì)算裝置傳遞數(shù)據(jù)命令(例如,讀操作和寫操作)時(shí)其使用的同一通信協(xié)議。在另一個(gè)實(shí)施例中,該請求被接收于第二計(jì)算裝置帶外。例如,請求是經(jīng)由與第一計(jì)算裝置傳遞數(shù)據(jù)命令時(shí)所使用的通信協(xié)議不同的通信協(xié)議而接收的,經(jīng)由不同的通道(例如,經(jīng)由用戶界面,比如圖形用戶界面,或不同于第一計(jì)算裝置的一計(jì)算裝置的控制臺(tái)上的命令行,比如,例如,第二計(jì)算裝置或另一個(gè)計(jì)算裝置比如管理員的計(jì)算裝置或位于第三方控制中心的計(jì)算裝置)而接收的或它的某組合而接收的。
例如,如果用戶(例如,系統(tǒng)管理員)注意到一個(gè)關(guān)于存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)的問題,本發(fā)明的這個(gè)方面可能是有用的。該問題可能是,例如,由于軟件或硬件的誤操作而導(dǎo)致數(shù)據(jù)被破壞,或如另一個(gè)例子,由于管理員錯(cuò)誤而導(dǎo)致數(shù)據(jù)被應(yīng)用程序重寫。一確定該問題的相關(guān)位置(一個(gè)或多個(gè)),管理員就可查詢裝置以確定該位置(一個(gè)或多個(gè))上一次被修改的時(shí)間。使用該信息,管理員然后可請求數(shù)據(jù)存儲(chǔ)裝置呈現(xiàn)數(shù)據(jù)存儲(chǔ)器在每一指示時(shí)間之前時(shí)間的先前映象。這樣,用戶很可能標(biāo)識(shí)出最近可用的先前映象,在其中被破壞的數(shù)據(jù)是完整無缺的。
一些應(yīng)用程序和操作系統(tǒng),例如,一檢測到數(shù)據(jù)存儲(chǔ)器中的某些錯(cuò)誤,就提供有關(guān)錯(cuò)誤被檢測所在的特定數(shù)據(jù)存儲(chǔ)器位置的信息以便有助于調(diào)試。當(dāng)這樣的位置信息被應(yīng)用程序直接提供時(shí),可使用所述位置信息完成上面所描述的查詢。作為另一個(gè)例子,一些應(yīng)用程序和操作系統(tǒng)報(bào)告與特定的文件相聯(lián)系的錯(cuò)誤。典型地,操作系統(tǒng)及/或文件系統(tǒng)工具可被用于確定由操作系統(tǒng)及/或文件系統(tǒng)分配給那些文件的數(shù)據(jù)存儲(chǔ)器位置。如果提供給應(yīng)用程序(或操作系統(tǒng)、裝置等)的數(shù)據(jù)存儲(chǔ)器是虛擬化的,則由該應(yīng)用程序(或操作系統(tǒng)、裝置等)提供的數(shù)據(jù)存儲(chǔ)器位置可能需要被轉(zhuǎn)換(例如,去虛擬化),從而標(biāo)識(shí)被數(shù)據(jù)存儲(chǔ)裝置呈現(xiàn)時(shí)在數(shù)據(jù)存儲(chǔ)器中各自的相關(guān)位置。
在一個(gè)示范實(shí)施例中,數(shù)據(jù)存儲(chǔ)器的用戶被告知應(yīng)用程序,例如數(shù)據(jù)庫應(yīng)用程序遇到的問題。該用戶直接地從該應(yīng)用程序,或間接地使用該應(yīng)用程序或操作系統(tǒng)提供的信息來確定問題所在的位置(一個(gè)或多個(gè))。例如,用戶可通過使用基于軟件的工具分析應(yīng)用程序特定的或操作系統(tǒng)保持的錯(cuò)誤日志而作出該確定,以便于I/O錯(cuò)誤的去虛擬化。用戶然后將一詢問指引到存儲(chǔ)裝置,以確定所述位置(一個(gè)或多個(gè))上一次被修改的時(shí)間。該詢問可被執(zhí)行,例如,通過使用應(yīng)用程序,使用另外提供在用戶計(jì)算機(jī)上的基于軟件的工具,或直接地使用控制面板、控制臺(tái)或其它工具送至存儲(chǔ)裝置。用戶(借助工具等)接收修改歷史。用戶然后請求存儲(chǔ)裝置呈現(xiàn)一個(gè)或更多個(gè)在所報(bào)告的修改時(shí)間之前的各自時(shí)間的先前映象(例如,一次一個(gè)或全部一起)。用戶然后可檢查每個(gè)先前映象以標(biāo)識(shí)其中不存在所述問題的最近可用的先前映象。例如,用戶然后可將來自先前映象的數(shù)據(jù)拷貝到數(shù)據(jù)存儲(chǔ)器,開始使用先前映象,或采取其它做法。
圖13說明了根據(jù)本發(fā)明這方面的可提供修改歷史的存儲(chǔ)系統(tǒng)630的一個(gè)實(shí)施例。存儲(chǔ)系統(tǒng)630包括主機(jī)634、存儲(chǔ)管理裝置638和物理存儲(chǔ)器636。主機(jī)634與存儲(chǔ)管理裝置638通過第一通信鏈路640相互通信。存儲(chǔ)管理裝置638與物理存儲(chǔ)器636通過第二通信鏈路642相互通信。一般而言,主機(jī)634、存儲(chǔ)管理裝置638、物理存儲(chǔ)器636以及第一和第二通信鏈路640、642可分別擁有上述主機(jī)、存儲(chǔ)管理裝置、物理存儲(chǔ)器和第一和第二通信鏈路的能力,并可被實(shí)現(xiàn)為上述主機(jī)、存儲(chǔ)管理裝置、物理存儲(chǔ)器和第一和第二通信鏈路,且具有在此所描述的附加功能性。應(yīng)該理解的是,其他實(shí)現(xiàn)也是可能的。
在一個(gè)實(shí)施例中,主機(jī)634包括至少一個(gè)主機(jī)接收器681和一個(gè)主機(jī)發(fā)送器683。主機(jī)接收器681和主機(jī)發(fā)送器683每個(gè)均可采用分別對接收和發(fā)送通信有用的任何形式、方法或方式來實(shí)現(xiàn),所述通信比如,例如為請求、命令和響應(yīng)。在一個(gè)實(shí)施例中,主機(jī)接收器681和主機(jī)發(fā)送器683被實(shí)現(xiàn)為具有硬件接口的軟件模塊,在此軟件模塊能夠解釋通信,或其必要部分。在另一個(gè)實(shí)施例中,主機(jī)接收器681和主機(jī)發(fā)送器683被實(shí)現(xiàn)為單個(gè)主機(jī)收發(fā)器(未顯示)。主機(jī)634使用主機(jī)接收器681和主機(jī)發(fā)送器683通過第一通信鏈路640與存儲(chǔ)管理裝置638通信。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置638包括至少一個(gè)存儲(chǔ)管理裝置接收器687、一個(gè)確定模塊689和一個(gè)存儲(chǔ)管理裝置發(fā)送器691。再次,存儲(chǔ)管理裝置接收器687和存儲(chǔ)管理裝置發(fā)送器691每個(gè)均可采用分別對接收和發(fā)送通信有用的任何形式、方法或方式來實(shí)現(xiàn),所述通信比如,例如為請求、命令和響應(yīng)。例如,類似主機(jī)接收器681和主機(jī)發(fā)送器683,存儲(chǔ)管理裝置接收器687和存儲(chǔ)管理裝置發(fā)送器691還可被實(shí)現(xiàn)為具有硬件接口的軟件模塊,在此軟件模塊能夠解釋通信,或其必要部分。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置接收器687和存儲(chǔ)管理裝置發(fā)送器691被實(shí)現(xiàn)為單個(gè)存儲(chǔ)管理裝置收發(fā)器(未顯示)。存儲(chǔ)管理裝置638使用存儲(chǔ)管理裝置接收器687和存儲(chǔ)管理裝置發(fā)送器691通過第一通信鏈路640與主機(jī)634通信,及/或通過第二通信鏈路642與物理存儲(chǔ)器636通信。
對它來說,確定模塊689可采用能夠完成如下所描述的功能的任何形式、方法或方式實(shí)現(xiàn)。例如,確定模塊689可被實(shí)現(xiàn)為軟件模塊及/或程序,及/或硬件裝置,比如,例如專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)。在一個(gè)實(shí)施例中,確定模塊689被實(shí)現(xiàn)為上面所描述的I/O管理器362(參見圖10)的一部分。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置638還包括至少一個(gè)具有關(guān)聯(lián)的當(dāng)前存儲(chǔ)器644和時(shí)間存儲(chǔ)器646的數(shù)據(jù)存儲(chǔ)器643。例如,與當(dāng)前存儲(chǔ)器644和時(shí)間存儲(chǔ)器646中之一或兩者相聯(lián)系的數(shù)據(jù)可被存儲(chǔ)在存儲(chǔ)管理裝置638的內(nèi)存中。與當(dāng)前存儲(chǔ)器644和時(shí)間存儲(chǔ)器646中之一或兩者相聯(lián)系的數(shù)據(jù)還可被存儲(chǔ)在物理存儲(chǔ)器636中,對于該數(shù)據(jù)來說,其可被直接存儲(chǔ)或被虛擬化,等等。存儲(chǔ)管理裝置638記住當(dāng)前存儲(chǔ)器644和時(shí)間存儲(chǔ)器646中的數(shù)據(jù)。例如,存儲(chǔ)管理裝置638從內(nèi)存及/或物理存儲(chǔ)器636讀寫數(shù)據(jù)并使用所述數(shù)據(jù)的索引和指針來維持時(shí)間存儲(chǔ)器646。再次,數(shù)據(jù)存儲(chǔ)器643、它的當(dāng)前存儲(chǔ)器644和它的時(shí)間存儲(chǔ)器646可分別具有上述的數(shù)據(jù)存儲(chǔ)器、當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器的容量,并可被實(shí)現(xiàn)為上述的數(shù)據(jù)存儲(chǔ)器、當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器,且具有在此所描述的附加功能性。在又一個(gè)實(shí)施例中,如上所描述的,存儲(chǔ)管理裝置638包括一個(gè)以上數(shù)據(jù)存儲(chǔ)器,比如,例如二個(gè)、三個(gè)或任何數(shù)目的數(shù)據(jù)存儲(chǔ)器。
如之前所描述的,當(dāng)存儲(chǔ)管理裝置638從主機(jī)634接收到被指引到數(shù)據(jù)存儲(chǔ)器643的寫操作時(shí),存儲(chǔ)管理裝置638保留該寫操作的記錄。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置638采用寫時(shí)拷貝規(guī)程并更新歷史索引。例如,在接收到寫操作之后,但在執(zhí)行該寫操作之前,存儲(chǔ)管理裝置638從數(shù)據(jù)存儲(chǔ)器643拷貝任何將被包含于寫操作中的新數(shù)據(jù)重寫的舊數(shù)據(jù)。存儲(chǔ)管理裝置638將“舊數(shù)據(jù)”保存到數(shù)據(jù)存儲(chǔ)器643內(nèi)的新的目的地并更新歷史索引。在一個(gè)實(shí)施例中,例如,對于寫操作的每次出現(xiàn),存儲(chǔ)管理裝置638都記錄指示舊數(shù)據(jù)被重寫的時(shí)間的時(shí)間戳,記錄舊數(shù)據(jù)被重寫的數(shù)據(jù)存儲(chǔ)器643內(nèi)的地址范圍,并記錄舊數(shù)據(jù)現(xiàn)在存儲(chǔ)所在的數(shù)據(jù)存儲(chǔ)器643內(nèi)的新的地址范圍。因此,存儲(chǔ)管理裝置638維持可被查閱的索引,如下所描述的,響應(yīng)對數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的請求。
雖然所描述的是關(guān)于寫時(shí)拷貝操作,但應(yīng)該理解的是剛才所描述的原理將對任何數(shù)據(jù)存儲(chǔ)系統(tǒng)都是適用的,在所述數(shù)據(jù)存儲(chǔ)系統(tǒng)中變化的日志或索引被記錄下來。例如,如果對數(shù)據(jù)存儲(chǔ)器的實(shí)際寫被記錄,代替或結(jié)合將過去在重寫之前被寫的數(shù)據(jù)記入日志,系統(tǒng)仍可提供如上所描述的有關(guān)存儲(chǔ)位置何時(shí)被修改的信息,并且該信息可根據(jù)變化的日志或索引來確定。同時(shí),應(yīng)該理解的是在一些情況下,一些而不是全部的數(shù)據(jù)存儲(chǔ)器的變化可被記錄,并且數(shù)據(jù)存儲(chǔ)器在這樣的情況下可僅僅提供其可獲得的修改信息。
現(xiàn)在參照圖14A,在用于提供數(shù)據(jù)存儲(chǔ)器內(nèi)位置的修改歷史的方法700的一個(gè)實(shí)施例的概要中,例如使用圖13的示范存儲(chǔ)系統(tǒng)630,存儲(chǔ)管理裝置638在步驟704接收對數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的請求。存儲(chǔ)管理裝置638然后在步驟708確定至少一個(gè)時(shí)間,在所述時(shí)間存儲(chǔ)在接收到的請求中指定的位置的數(shù)據(jù)的至少一部分被修改。然后,在步驟712,存儲(chǔ)管理裝置638,響應(yīng)接收到的請求,發(fā)送至少一個(gè)在步驟708確定的時(shí)間??蛇x地,存儲(chǔ)管理裝置638還在步驟710為每個(gè)在步驟708確定的時(shí)間標(biāo)識(shí)數(shù)據(jù)存儲(chǔ)器643內(nèi)的地址范圍,在所述確定的時(shí)間數(shù)據(jù)在所述數(shù)據(jù)存儲(chǔ)器643內(nèi)的地址范圍被修改。在步驟714,可選地,存儲(chǔ)管理裝置638還響應(yīng)接收到的請求,發(fā)送在步驟710標(biāo)識(shí)的地址范圍。
更詳細(xì)地,在步驟704,主機(jī)634經(jīng)由它的發(fā)送器683并通過第一通信鏈路640發(fā)送對數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的請求。該請求可用對進(jìn)行請求有用的任何形式或方式傳遞。在一個(gè)實(shí)施例中,例如,該請求用數(shù)據(jù)分組的形式傳遞。該請求被接收于存儲(chǔ)管理裝置638的接收器687。在一個(gè)實(shí)施例中,在該請求中指定的位置是數(shù)據(jù)存儲(chǔ)器643內(nèi)的一地址范圍。該地址范圍可被指派,例如,LBA和長度。在一個(gè)實(shí)施例中,所述LBA指定該地址范圍的開始端,所述長度指定該地址范圍的長度。例如,在一個(gè)實(shí)施例中,數(shù)據(jù)存儲(chǔ)器643的存儲(chǔ)地址空間被分割成塊(例如,扇區(qū)),在此每個(gè)塊長為512字節(jié)。在這種情況下,該LBA被用于指派特定的512字節(jié)塊(也就是,在該地址范圍開始端的512字節(jié)塊)并且該長度被用來指派多少個(gè)512字節(jié)塊被包含于該地址范圍內(nèi)。例如,在主機(jī)634請求數(shù)據(jù)存儲(chǔ)器643中起始于字節(jié)8192并且長為4096字節(jié)的地址范圍的修改歷史的情況下,該請求將包括的LBA為16和長度為8。
在存儲(chǔ)管理裝置638接收到對數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的請求之后,存儲(chǔ)管理裝置638的確定模塊689在步驟708確定一個(gè)或多個(gè)時(shí)間,在所述時(shí)間存儲(chǔ)在該位置的數(shù)據(jù)至少一部分被修改。在一個(gè)實(shí)施例中,例如,確定模塊689解析之前描述的歷史索引,所述歷史索引列出對數(shù)據(jù)存儲(chǔ)器643的修改(例如,執(zhí)行于其上的寫操作)。該索引可被存儲(chǔ),例如,作為數(shù)據(jù)存儲(chǔ)器643的時(shí)間存儲(chǔ)器646的一部分。確定模塊689然后確定那些所列的修改中哪個(gè)是對于一地址范圍的數(shù)據(jù)作出的,所述地址范圍至少部分地與所請求的位置的地址范圍重疊,并記下作出這樣的修改的時(shí)間(一個(gè)或多個(gè))。然而,可能有這樣的情形,所請求的位置的地址范圍的數(shù)據(jù)未被修改。在這種情況下,存儲(chǔ)管理裝置638將在步驟712(如下所描述)發(fā)送否定響應(yīng)(也就是,指示在所請求的位置的地址范圍的數(shù)據(jù)未被修改的響應(yīng))。
通常,在接收到對修改歷史的請求之前,存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器643內(nèi)該位置的數(shù)據(jù)的一個(gè)或更多個(gè)子集、交叉集,超集及/或全集也許已在一個(gè)或多個(gè)時(shí)間被修改。例如,由存儲(chǔ)管理裝置638接收到的請求可能是對具有一地址范圍(LBA0,長度64)的位置的修改歷史的請求。在接收該請求之前,存儲(chǔ)在地址范圍(LBA0,長度8)的數(shù)據(jù)(也就是,該位置的一個(gè)子集)、存儲(chǔ)在地址范圍(LBA62,長度16)的數(shù)據(jù)(也就是,該位置的一個(gè)交叉集)、存儲(chǔ)在地址范圍(LBA0,長度128)的數(shù)據(jù)(也就是,該位置的一個(gè)超集)及/或存儲(chǔ)在地址范圍(LBA0,長度64)的數(shù)據(jù)(也就是,該位置的全集)也許已在一個(gè)或更多個(gè)時(shí)間被修改。在一個(gè)實(shí)施例中,在步驟708,在已確定這些集合(及/或與所請求位置的地址范圍至少部分地重疊的任何其它集合)被修改的時(shí)間之后,存儲(chǔ)管理裝置638的確定模塊689還在步驟710標(biāo)識(shí)這些之前被修改的集合的地址范圍。
在步驟712,例如在圖13的實(shí)施例中,存儲(chǔ)管理裝置638經(jīng)由它的發(fā)送器691并且通過第一通信鏈路640發(fā)送一個(gè)或更多個(gè)確定的時(shí)間,在所述確定的時(shí)間存儲(chǔ)在該位置的數(shù)據(jù)至少一部分被修改??蛇x地,在步驟714,存儲(chǔ)管理裝置638另外可經(jīng)由它的發(fā)送器691并通過第一通信鏈路640上發(fā)送一個(gè)或更多個(gè)已標(biāo)識(shí)的在一個(gè)或更多個(gè)確定的時(shí)間被修改的地址范圍集。所述一個(gè)或更多個(gè)確定的時(shí)間及/或一個(gè)或更多個(gè)已標(biāo)識(shí)的地址范圍集可用任何對提供這樣的信息有用的形式或方式傳遞。例如,信息以數(shù)據(jù)分組的形式傳遞。在一個(gè)實(shí)施例中,主機(jī)634在它的接收器681接收這些一個(gè)或更多個(gè)確定的時(shí)間及/或一個(gè)或更多個(gè)已標(biāo)識(shí)的地址范圍集。并且,可選地,發(fā)送器可發(fā)送被修改的數(shù)據(jù)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置638在單個(gè)分組中發(fā)送修改信息。例如,單個(gè)發(fā)送的分組標(biāo)識(shí)出被修改的每一個(gè)地址范圍集,并且為每一集合列出其被修改的時(shí)間。在另一個(gè)實(shí)施例中,存儲(chǔ)管理裝置638分開發(fā)送確定的時(shí)間和已標(biāo)識(shí)的地址范圍集,例如在分開的分組中發(fā)送,并且此外向主機(jī)634提供附加信息以將確定的時(shí)間與已標(biāo)識(shí)的地址范圍集聯(lián)系起來。還在另一個(gè)實(shí)施例中,存儲(chǔ)管理裝置638還將在確定的時(shí)間被修改之前已被存儲(chǔ)在已標(biāo)識(shí)的地址范圍集的數(shù)據(jù)傳送到主機(jī)634。在這樣做時(shí),存儲(chǔ)管理裝置可標(biāo)識(shí)出哪個(gè)確定的時(shí)間及/或地址范圍集與后來被修改的數(shù)據(jù)的給定片段對應(yīng)。
圖14B描述方法700′的一個(gè)實(shí)施例,所述方法700′是圖14A的方法700的變體,其用于提供數(shù)據(jù)存儲(chǔ)器內(nèi)位置的修改歷史,并再次使用圖13的示范存儲(chǔ)系統(tǒng)630。一般而言,除在此所陳述之外,方法700′的步驟以和上面所描述的方法700的步驟相同或相似的方式執(zhí)行。
在一個(gè)實(shí)施例中,類似方法700,存儲(chǔ)管理裝置638在步驟704′接收對數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的請求。然而在該實(shí)施例中,對修改歷史的請求是對一時(shí)間列表的請求,從每一所述時(shí)間起,存儲(chǔ)在該請求中指定位置的全部數(shù)據(jù),而不是僅僅某部分?jǐn)?shù)據(jù)被修改。因此,存儲(chǔ)管理裝置638在步驟708′確定至少一個(gè)時(shí)間,從該時(shí)間起存儲(chǔ)在該位置的數(shù)據(jù)的全部都被修改,并在步驟712′為響應(yīng)接收到的請求而發(fā)送至少一個(gè)確定的時(shí)間??蛇x地,在步驟714′存儲(chǔ)管理裝置638還響應(yīng)接收到的請求而發(fā)送數(shù)據(jù)存儲(chǔ)器643內(nèi)的一地址范圍,在所述地址范圍,從至少一個(gè)確定的時(shí)間開始,整個(gè)數(shù)據(jù)都被修改。如果被發(fā)送,該地址范圍將與在對修改歷史的請求中所指定的位置相同。
在上面所描述的方法700′的實(shí)施例中,存儲(chǔ)在對修改歷史的請求中所指定位置的數(shù)據(jù)可能都已被修改,然而同時(shí)又為了滿足該請求的條件,不是全部數(shù)據(jù)都必須被修改。用另一種方式說,存儲(chǔ)在對修改歷史的請求中所指定位置的數(shù)據(jù)的至少一部分可能已在與存儲(chǔ)管理裝置638在方法700′的步驟708′確定的至少一個(gè)時(shí)間不同的時(shí)間(也就是,在隨后時(shí)間)被修改。如果,例如,存儲(chǔ)于在對修改歷史的請求中所指定位置的全部數(shù)據(jù)在第一時(shí)間T1被修改,存儲(chǔ)在該位置的數(shù)據(jù)的第一部分而不是全部數(shù)據(jù)在第二時(shí)間T2被修改,存儲(chǔ)在該位置的數(shù)據(jù)的第二部分而不是全部數(shù)據(jù)在第三時(shí)間T3被修改(在此數(shù)據(jù)的第一部分和第二部分總計(jì)達(dá)到存儲(chǔ)在對修改歷史的請求所指定位置的所有數(shù)據(jù)),并且存儲(chǔ)在該位置的全部數(shù)據(jù)再次在第四時(shí)間T4被修改(在此,T1、T2、T3和T4按時(shí)間順序發(fā)生),存儲(chǔ)管理裝置638將在步驟708′確定存儲(chǔ)在該位置的全部數(shù)據(jù)都已被修改的時(shí)間是T1、T2和T4。
在用戶知道存儲(chǔ)在該位置的全部數(shù)據(jù)都被破壞并需要替換的情況下(例如在用戶知道整個(gè)JPEG文件都被破壞的情況下),如剛剛為方法700′描述的,能夠請求一時(shí)間列表是尤其是有用的,其中從每一所述時(shí)間起存儲(chǔ)在特殊位置的全部數(shù)據(jù)而不只是某部分?jǐn)?shù)據(jù)被修改。知道在步驟708由存儲(chǔ)管理裝置638確定的時(shí)間,用戶能因此請求存儲(chǔ)管理裝置638恰在確定的時(shí)間之前的時(shí)間生成該位置的映象。用戶從而能標(biāo)識(shí)出全部數(shù)據(jù)是完整無缺的(也就是,未破壞)的最近時(shí)間并可選擇將在該位置的數(shù)據(jù)復(fù)原回在該最近時(shí)間出現(xiàn)于該位置的數(shù)據(jù)。
圖15描述了根據(jù)本發(fā)明的對數(shù)據(jù)存儲(chǔ)器(例如,數(shù)據(jù)存儲(chǔ)器643)內(nèi)位置的修改歷史的請求800的說明性實(shí)施例,所述請求800可被主機(jī)(例如,主機(jī)634)發(fā)送至存儲(chǔ)管理裝置(例如,存儲(chǔ)管理裝置638)。在一個(gè)實(shí)施例中,如所說明的,請求800是用數(shù)據(jù)分組804的形式。數(shù)據(jù)分組804可包括I/O命令的至少一部分,所述I/O命令可采用標(biāo)準(zhǔn)I/O命令格式,比如SCSI命令格式。
在一個(gè)實(shí)施例中,數(shù)據(jù)分組804包括16字節(jié)的請求數(shù)據(jù)。在字節(jié)0中,操作碼標(biāo)識(shí)將被執(zhí)行的請求類型(例如,提供數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史)。例如,操作碼可與對至少一個(gè)時(shí)間(在該時(shí)間,存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器643內(nèi)一位置的數(shù)據(jù)的至少一部分被修改)的請求相聯(lián)系或與對時(shí)間列表(從每一所述時(shí)間起存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器643內(nèi)一位置的全部數(shù)據(jù)而不僅僅是某部分?jǐn)?shù)據(jù)被修改)的請求相聯(lián)系。一示范操作碼是C1h,其是分配給SCSI協(xié)議中供應(yīng)商專用的請求的代碼。
字節(jié)1的三個(gè)最高有效位(也就是,比特5-7)留作將來使用??蛇x地,字節(jié)1的其余5個(gè)最低有效位(也就是,比特0-4)規(guī)定一服務(wù)動(dòng)作(service action)字段(例如,包含一代碼值的字段,所述代碼值標(biāo)識(shí)將于字節(jié)0的操作碼中所指定的更一般的請求下被執(zhí)行的功能)。替代性地,在另一個(gè)實(shí)施例中,字節(jié)1的比特0-4也被保留給將來使用。
字節(jié)2-9用于邏輯塊地址(LBA),LBA標(biāo)識(shí)出一位置的第一存儲(chǔ)單元(也就是,第一塊),所述位置的修改歷史被請求。字節(jié)10-13用于長度,所述長度指示存儲(chǔ)單元的數(shù)目,包括由LBA標(biāo)識(shí)的第一存儲(chǔ)單元,所述存儲(chǔ)單元順序地構(gòu)成數(shù)據(jù)存儲(chǔ)器643內(nèi)的位置。在一個(gè)實(shí)施例中,邏輯塊地址和長度構(gòu)成地址范圍。
字節(jié)14留作將來使用。例如,字節(jié)14可被用作相對校驗(yàn)(Relative Check)字段,所述相對校驗(yàn)字段用于指示將被存儲(chǔ)管理裝置638返回的一個(gè)或更多個(gè)時(shí)間是相對的還是絕對的。如果,例如,相對校驗(yàn)字段是0,那么存儲(chǔ)管理裝置638返回的一個(gè)或更多個(gè)時(shí)間是以現(xiàn)在時(shí)間為基準(zhǔn)的。換言之,相對校驗(yàn)字段中的0指示將被存儲(chǔ)管理裝置638返回的一個(gè)或更多個(gè)時(shí)間是從當(dāng)前時(shí)間起計(jì)算的經(jīng)過時(shí)間。另一方面,如果,例如,相對校驗(yàn)字段是非零的,那么存儲(chǔ)管理裝置638返回的一個(gè)或更多個(gè)時(shí)間將被絕對地指定,也就是,不參考另一個(gè)時(shí)間。
字節(jié)15是數(shù)據(jù)分組804的控制字段。例如,在一個(gè)特定的實(shí)施例中,其中數(shù)據(jù)分組804以典型的SCSI命令格式實(shí)現(xiàn),字節(jié)15的比特0可被用于(例如,可被置位)指定對跨越兩個(gè)或更多命令(也就是,連接連續(xù)的命令)的任務(wù)延續(xù)的請求,字節(jié)15的比特1可提供一種在連接的命令之間請求中斷的方法,字節(jié)15的比特2可被用于指定在一定條件下是否應(yīng)該建立自動(dòng)條件結(jié)合(auto condition allegiance),字節(jié)15的比特3-5可被保留,以及比特6-7可以是供應(yīng)商專用的比特。
圖16描述了根據(jù)本發(fā)明的響應(yīng)900的說明性實(shí)施例,具體地,是對請求800的響應(yīng)900,請求800是對數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的請求,所述響應(yīng)900可被存儲(chǔ)管理裝置638發(fā)送至主機(jī)634。在一個(gè)實(shí)施例中,如所說明的,響應(yīng)900采用數(shù)據(jù)分組904的形式。數(shù)據(jù)分組904可包括I/O響應(yīng)的至少一部分,所述I/O響應(yīng)可采用標(biāo)準(zhǔn)I/O響應(yīng)格式,比如SCSI響應(yīng)格式。
在一個(gè)實(shí)施例中,如所說明的,數(shù)據(jù)分組904包括至少30字節(jié)的響應(yīng)碼,并可包括如下所描述的,響應(yīng)碼的附加字節(jié)。圖16標(biāo)識(shí)可被包含在響應(yīng)碼的示范字節(jié)中的每個(gè)比特。字節(jié)0-1留作將來使用。
字節(jié)10-13用于LBA,所述LBA標(biāo)識(shí)包括在請求800中所指定位置的至少一部分的集合中的第一存儲(chǔ)單元(也就是,第一塊)。換言之,在字節(jié)10-13中表示的LBA標(biāo)識(shí)例如,在請求800中所指定位置的子集、請求800中所指定位置的交叉集、請求800中所指定位置的超集或請求800中所指定位置的全集的第一存儲(chǔ)單元。字節(jié)14-21用于長度,所述長度指示存儲(chǔ)單元的數(shù)目,存儲(chǔ)單元包括由字節(jié)10-13中的LBA標(biāo)識(shí)的第一存儲(chǔ)單元,所述存儲(chǔ)單元順序地構(gòu)成集合。在一個(gè)實(shí)施例中,LBA和長度構(gòu)成集合的地址范圍。如該信息所指示的,存儲(chǔ)在集合中已標(biāo)識(shí)的地址范圍的數(shù)據(jù)在存儲(chǔ)管理裝置638接收到請求800的時(shí)間點(diǎn)之前被修改。照這樣,字節(jié)22-29用于確定的改變時(shí)間,其指示存儲(chǔ)于在字節(jié)10-21中標(biāo)識(shí)的集合的地址范圍的數(shù)據(jù)被修改的時(shí)間。
字節(jié)10-29(也就是,LBA、長度和確定的改變時(shí)間)合起來組成一字節(jié)組(tuple)。數(shù)據(jù)分組904可包括任何數(shù)目的字節(jié)組(例如,一個(gè)、兩個(gè)或更多字節(jié)組)。數(shù)據(jù)分組904的字節(jié)30-n用于字節(jié)組的重復(fù)。在一個(gè)實(shí)施例中,包含在數(shù)據(jù)分組904內(nèi)的字節(jié)組的數(shù)目是,根據(jù)存儲(chǔ)裝置可得到的信息,存儲(chǔ)在請求800中所指定位置的數(shù)據(jù)的至少一部分被修改的時(shí)間次數(shù),或?qū)?yīng)于該時(shí)間次數(shù)。字節(jié)2-9用于指示符,其表示包含在數(shù)據(jù)分組904內(nèi)的字節(jié)組的數(shù)目。
在一個(gè)實(shí)施例中,在字節(jié)22-29中所表示的確定的改變時(shí)間是相對時(shí)間。替代性地,在另一個(gè)實(shí)施例中,確定的改變時(shí)間是絕對時(shí)間。在一個(gè)實(shí)施例中,每個(gè)字節(jié)組可,例如,包括用作相對校驗(yàn)字段的附加字節(jié),所述相對校驗(yàn)字段用于指示包含于該字節(jié)組內(nèi)的確定的改變時(shí)間是相對的還是絕對的。替代性地,在另一個(gè)實(shí)施例中,包含于數(shù)據(jù)分組904的n個(gè)字節(jié)組內(nèi)的所有確定的改變時(shí)間或者全部是相對的或者全部是絕對的,從一個(gè)字節(jié)組到下一個(gè)不存在差異。在這樣一個(gè)實(shí)施例中,舉例來說,保留字節(jié)0-1中的一個(gè)可用作相對校驗(yàn)字段,所述相對校驗(yàn)字段用于指示包含于數(shù)據(jù)分組904的n個(gè)字節(jié)組內(nèi)的所有確定的改變時(shí)間是相對的還是絕對的。如上,如果,例如相對校驗(yàn)字段是0,那么一個(gè)或更多個(gè)確定的改變時(shí)間是以現(xiàn)在時(shí)間為基準(zhǔn)。另一方面,如果,例如相對校驗(yàn)字段是非零的,那么存儲(chǔ)管理裝置638返回的一個(gè)或更多個(gè)確定的改變時(shí)間被絕對地指定,也就是,不參考另一個(gè)時(shí)間。
在一個(gè)實(shí)施例中,如果包含在字節(jié)組內(nèi)的確定的改變時(shí)間是相對的,那么存儲(chǔ)在由該字節(jié)組指定的集合的地址范圍的數(shù)據(jù)的實(shí)際修改時(shí)間是通過從響應(yīng)900的產(chǎn)生時(shí)間減去確定的改變時(shí)間計(jì)算出來的。在這樣一個(gè)實(shí)施例中,響應(yīng)900可被加上時(shí)間戳。另一方面,如果包含在字節(jié)組內(nèi)的確定的改變時(shí)間是絕對的,那么存儲(chǔ)在由該字節(jié)組指定的集合的地址范圍的數(shù)據(jù)的實(shí)際修改時(shí)間就只是確定的改變時(shí)間。
圖17-20呈現(xiàn)了一個(gè)可如何獲得數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史的例子。圖17描述了該例子的時(shí)間線1000。時(shí)間線1000說明了在時(shí)間T1、T2、T3、T4和T5中的每一時(shí)間被指引到數(shù)據(jù)存儲(chǔ)器643的不同的寫操作。每個(gè)寫操作被表示為“Wr(LBA,長度,數(shù)據(jù))”,在此(LBA,長度)表示數(shù)據(jù)被寫的地址范圍。因此,在時(shí)間T1,數(shù)據(jù)被寫到地址范圍(LBA0,長度8);在時(shí)間T2,數(shù)據(jù)被寫到地址范圍(LBA62,長度16);在時(shí)間T3,數(shù)據(jù)被寫到地址范圍(LBA100,長度35);在時(shí)間T4,數(shù)據(jù)被寫到地址范圍(LBA0,長度64);以及在時(shí)間T5,數(shù)據(jù)被寫到地址范圍(LBA0,長度128)。
圖18描述用于本例的歷史索引1100的示范實(shí)施例。如上所描述的,在接收到特定的寫操作之后,而在執(zhí)行該寫操作之前,存儲(chǔ)管理裝置638拷貝存儲(chǔ)在由寫操作指定的地址范圍的數(shù)據(jù)并將其保存到新的目的地。存儲(chǔ)管理裝置638然后執(zhí)行寫操作并更新如上所描述的歷史索引1100。例如,在時(shí)間T1執(zhí)行寫操作之后,存儲(chǔ)管理裝置638記錄,如歷史索引1100第二排中所示的,寫操作被執(zhí)行的時(shí)間T1、數(shù)據(jù)被寫到的地址范圍(LBA0,長度8)和恰在時(shí)間T1之前存儲(chǔ)在地址范圍(LBA0,長度8)的數(shù)據(jù)此刻被存儲(chǔ)的新的地址范圍(LBA1000,長度8)。如圖18所示,在時(shí)間T2、T3、T4和T5執(zhí)行寫操作中的每個(gè)之后都同樣地更新歷史索引1100。
根據(jù)該例子,在時(shí)間T5之后的某個(gè)時(shí)間,主機(jī)634從存儲(chǔ)管理裝置638請求數(shù)據(jù)存儲(chǔ)器643內(nèi)位置的修改歷史。例如,現(xiàn)在參照圖19,主機(jī)634將數(shù)據(jù)分組1204發(fā)送至存儲(chǔ)管理裝置638,所述數(shù)據(jù)分組1204采用參考圖15所描述的數(shù)據(jù)分組804的形式。在本例中,主機(jī)634請求至少一個(gè)時(shí)間,存儲(chǔ)在地址范圍(LBA0,長度64)的數(shù)據(jù)的至少一部分在該時(shí)間被修改。因此,數(shù)據(jù)分組1204的字節(jié)0的操作碼與該請求相聯(lián)系,數(shù)據(jù)分組1204的字節(jié)2-9被設(shè)置以指示LBA是0,并且數(shù)據(jù)分組1204的字節(jié)10-13被設(shè)置以指示長度是64。
在處理這個(gè)對數(shù)據(jù)存儲(chǔ)器643內(nèi)地址范圍(LBA0,長度64)的修改歷史的請求之后(例如,在分析列出執(zhí)行于數(shù)據(jù)存儲(chǔ)器643上的寫操作的歷史索引1100之后),存儲(chǔ)管理裝置638響應(yīng)主機(jī)634。例如,現(xiàn)在參照圖20,存儲(chǔ)管理裝置638將數(shù)據(jù)分組1304發(fā)送至主機(jī)634,所述數(shù)據(jù)分組1304采用參考圖16所描述的數(shù)據(jù)分組904的形式。在本例中,數(shù)據(jù)分組1304包括四個(gè)字節(jié)組,如在數(shù)據(jù)分組1304的字節(jié)2-9中的指示符所指定的?,F(xiàn)在參照圖18和20,字節(jié)10-29(也就是,數(shù)據(jù)分組1304的第一字節(jié)組)指示地址范圍(LBA0,長度8)(也就是,所請求的地址范圍(LBA0,長度64)的子集)在時(shí)間T1被修改;字節(jié)30-49(也就是,數(shù)據(jù)分組1304的第二字節(jié)組)指示地址范圍(LBA62,長度16)(也就是,所請求的地址范圍(LBA0,長度64)的交叉集)在時(shí)間T2被修改;字節(jié)50-69(也就是,數(shù)據(jù)分組1304的第三字節(jié)組)指示地址范圍(LBA0,長度64)(也就是,所請求的地址范圍(LBA0,長度64)的全集)在時(shí)間T4被修改;以及字節(jié)70-89(也就是,數(shù)據(jù)分組1304的第四字節(jié)組)指示地址范圍(LBA0,長度128)(也就是,所請求的地址范圍(LBA0,長度64)的超集)在時(shí)間T5被修改。通過接收數(shù)據(jù)分組1304,主機(jī)634,從而被提供一些時(shí)間以及在那些時(shí)間被修改的相應(yīng)地址范圍,在所述時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器643內(nèi)地址范圍(LBA0,長度64)的數(shù)據(jù)的至少一部分被修改。
還應(yīng)該注意的是,因?yàn)榘l(fā)生在時(shí)間線1000的時(shí)間T3的寫操作被指引到地址范圍(LBA100,長度35),該地址范圍不與所請求的地址范圍(LBA0,長度64)重疊,所以數(shù)據(jù)分組1304不包括任何有關(guān)該寫操作的信息。
存儲(chǔ)緩沖區(qū)選擇 通常,在另一個(gè)方面,本發(fā)明涉及用于最優(yōu)地選取一個(gè)或更多個(gè)用于數(shù)據(jù)存儲(chǔ)的存儲(chǔ)緩沖區(qū)的方法和裝置。簡要綜述,在本發(fā)明該方面的一個(gè)實(shí)施例中,第一計(jì)算裝置(例如,如上所描述的存儲(chǔ)管理裝置)接收需要臨時(shí)或永久存儲(chǔ)的數(shù)據(jù)。例如,第一計(jì)算裝置從第二計(jì)算裝置(例如,如上所描述的主機(jī))接收一包括需要臨時(shí)或永久存儲(chǔ)的數(shù)據(jù)有效載荷的寫操作。第一計(jì)算裝置起初將接收到的數(shù)據(jù)存儲(chǔ)在第一存儲(chǔ)緩沖區(qū),然后最優(yōu)地標(biāo)識(shí)一個(gè)或更多個(gè)第一計(jì)算裝置內(nèi)的附加存儲(chǔ)緩沖區(qū),所述附加存儲(chǔ)緩沖區(qū)存儲(chǔ)接收到的數(shù)據(jù)的冗余拷貝。存儲(chǔ)緩沖區(qū)可位于,例如,第一計(jì)算裝置中的若干處理器模塊的其中一個(gè)之中。
在本發(fā)明該方面的一個(gè)實(shí)施例中,第一計(jì)算裝置評估一個(gè)或更多個(gè)成本等式,以便最優(yōu)地標(biāo)識(shí)一個(gè)或更多個(gè)用于冗余地存儲(chǔ)接收到的數(shù)據(jù)的拷貝的附加存儲(chǔ)緩沖區(qū)。此外,在一個(gè)實(shí)施例中,第一計(jì)算裝置將接收到的數(shù)據(jù)的第一拷貝存儲(chǔ)在第一最優(yōu)地標(biāo)識(shí)的附加存儲(chǔ)緩沖區(qū),并還可將接收到的數(shù)據(jù)的第二和更多拷貝存儲(chǔ)在第二和更多的最優(yōu)地標(biāo)識(shí)的附加存儲(chǔ)緩沖區(qū)。因此,第一計(jì)算裝置可提供冗余存儲(chǔ)容量。
圖21說明根據(jù)本發(fā)明該方面的存儲(chǔ)管理裝置1438的一個(gè)實(shí)施例,所述存儲(chǔ)管理裝置1438最優(yōu)地標(biāo)識(shí)一個(gè)或更多個(gè)存儲(chǔ)緩沖區(qū)。一般而言,存儲(chǔ)管理裝置1438可擁有上面所描述的存儲(chǔ)管理裝置的能力,并可被實(shí)現(xiàn)為上述存儲(chǔ)管理裝置,并具有在此所描述的附加功能性。應(yīng)該了解的是其它實(shí)現(xiàn)也是可能的。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1438包括多個(gè)處理器模塊,例如一個(gè)第一處理器模塊1478和至少一個(gè)第二處理器模塊,例如三個(gè)第二處理器模塊1478′、1478″、1478(通稱1478′)。然而,在圖21的存儲(chǔ)管理裝置1438中所描述的第一處理器模塊1478和三個(gè)第二處理器模塊1478′僅僅是說明性的。更一般來說,存儲(chǔ)管理裝置1438可包括任何數(shù)目的處理器模塊1478、1478′?;诒热鐚缮炜s性、性能和成本的考慮,處理器模塊1478、1478′的數(shù)量可被增加或減少。再次,一般而言,處理器模塊1478、1478′可擁有上面所描述的處理器模塊(例如,關(guān)于圖10描述的處理器模塊378)的能力,并可被實(shí)現(xiàn)為上述處理器模塊,并具有在此所描述的附加功能性。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1438是用于存儲(chǔ)數(shù)據(jù)(例如,用于暫時(shí)地存儲(chǔ)數(shù)據(jù))的裝置。因此,在一個(gè)這樣的實(shí)施例中,存儲(chǔ)管理裝置1438包括多個(gè)用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)緩沖區(qū),1463、1463′、1463″、1463(通稱1463)。在一個(gè)實(shí)施例中,例如如圖21中所說明的,存儲(chǔ)管理裝置1438的每個(gè)處理器模塊1478、1478′包括至少一個(gè)存儲(chǔ)緩沖區(qū)1463。在另一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1438的處理器模塊1478、1478′中的一些,而不是全部包括一個(gè)存儲(chǔ)緩沖區(qū)1463。在又一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1438包括一個(gè)或更多個(gè)存儲(chǔ)緩沖區(qū)1463,所述存儲(chǔ)緩沖區(qū)1463獨(dú)立地位于存儲(chǔ)管理裝置1438之上并且不是處理器模塊1478、1478′的一部分。仍然在另一個(gè)實(shí)施例中,單個(gè)處理器模塊1478、1478′可包括兩個(gè)或更多存儲(chǔ)緩沖區(qū)1463。一般而言,存儲(chǔ)緩沖區(qū)1463可擁有上面所描述的存儲(chǔ)緩沖區(qū)(例如,關(guān)于圖10描述的存儲(chǔ)緩沖區(qū)363)的容量,并可被實(shí)現(xiàn)為該存儲(chǔ)緩沖區(qū),并具有在此所描述的附加功能性。例如,存儲(chǔ)緩沖區(qū)1463可被包含于處理器模塊1478、1478′的內(nèi)存296(參見圖9)內(nèi)。在一個(gè)實(shí)施例中,整個(gè)內(nèi)存296構(gòu)成存儲(chǔ)緩沖區(qū)1463。在另一個(gè)實(shí)施例中,內(nèi)存296內(nèi)較小的、但鄰接的塊構(gòu)成存儲(chǔ)緩沖區(qū)1463。在又一個(gè)實(shí)施例中,若干分開的塊在內(nèi)存296內(nèi)被連接起來,例如通過指針,以構(gòu)成存儲(chǔ)緩沖區(qū)1463。構(gòu)成存儲(chǔ)緩沖區(qū)1463的內(nèi)存296內(nèi)的地址空間可以是靜態(tài)的,或替代性地,其可以在運(yùn)行時(shí)被動(dòng)態(tài)地分配。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1438的至少一個(gè)處理器模塊(例如,第一處理器模塊1478及/或至少一個(gè)第二處理器模塊1478′)包括至少一個(gè)接收器1493、一個(gè)發(fā)送器1495、一個(gè)評估器(evaluator)1497和一個(gè)數(shù)據(jù)運(yùn)算器1499。接收器1493和發(fā)送器1495每個(gè)均可用分別對接收和發(fā)送通信有用的任何形式、方法或方式實(shí)現(xiàn),所述通信比如,例如為請求、命令和響應(yīng)。在一個(gè)實(shí)施例中,接收器1493和發(fā)送器1495被實(shí)現(xiàn)為具有硬件接口的軟件模塊,在此軟件模塊能夠解釋通信或其必要部分。在另一個(gè)實(shí)施例中,接收器1493和發(fā)送器1495被實(shí)現(xiàn)為單個(gè)收發(fā)器(未顯示)。處理器模塊1478、1478′使用接收器1493和發(fā)送器1495來與其它處理器模塊1478、1478′之一或更多個(gè)通信,及/或與一個(gè)或更多個(gè)計(jì)算裝置(未顯示)而不是存儲(chǔ)管理裝置1438通信。接收器1493和發(fā)送器1495可被實(shí)現(xiàn)為用于不同協(xié)議的多個(gè)裝置,比如,例如,圖10的目標(biāo)模式驅(qū)動(dòng)器382、與圖10的內(nèi)部網(wǎng)絡(luò)380相聯(lián)系的收發(fā)器或它的某種組合。
對它們來說,評估器1497及/或數(shù)據(jù)運(yùn)算器1499可用能夠完成如下所描述的功能的任何形式、方法或方式實(shí)現(xiàn)。例如,評估器1497及/或數(shù)據(jù)運(yùn)算器1499可被實(shí)現(xiàn)為運(yùn)行在微處理器上的軟件模塊及/或程序,及/或硬件裝置,比如,例如專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)。在一個(gè)實(shí)施例中,評估器1497和數(shù)據(jù)運(yùn)算器1499被實(shí)現(xiàn)為上面所描述的主機(jī)接口361的一部分,例如目標(biāo)模式驅(qū)動(dòng)器382的一部分(參見圖10)。
現(xiàn)在參照圖22,在用于存儲(chǔ)數(shù)據(jù)的方法1500的一個(gè)實(shí)施例的概要中,該方法例如使用圖21的示范存儲(chǔ)管理裝置1438,來自存儲(chǔ)管理裝置1438的多個(gè)處理器模塊1478、1478′中的處理器模塊1478、1478′,比方說第一處理器模塊1478,在步驟1504接收用于存儲(chǔ)的數(shù)據(jù)。第一處理器模塊1478然后在步驟1508將接收到的數(shù)據(jù)的第一實(shí)例(instance)(例如,接收到的數(shù)據(jù)本身)存儲(chǔ)在第一處理器模塊1478上的第一存儲(chǔ)緩沖區(qū)1463,并在步驟1512評估第一成本等式以從多個(gè)存儲(chǔ)緩沖區(qū)1463中標(biāo)識(shí)第二存儲(chǔ)緩沖區(qū)1463,所述第二存儲(chǔ)緩沖區(qū)1463最優(yōu)地存儲(chǔ)接收到的數(shù)據(jù)的第二實(shí)例(例如,接收到的數(shù)據(jù)的拷貝)??蛇x地,在步驟1516,第一處理器模塊1478評估第二成本等式以從多個(gè)存儲(chǔ)緩沖區(qū)1463之中標(biāo)識(shí)第三存儲(chǔ)緩沖區(qū)1463,其中接收到的數(shù)據(jù)的第三實(shí)例(例如,另一個(gè)拷貝)最優(yōu)地存儲(chǔ)于所述第三存儲(chǔ)緩沖區(qū)1463。再次可選地,在步驟1520,接收到的數(shù)據(jù)的第二實(shí)例可被存儲(chǔ)在第二存儲(chǔ)緩沖區(qū)1463并且接收到的數(shù)據(jù)的第三實(shí)例可被存儲(chǔ)在第三存儲(chǔ)緩沖區(qū)1463。此外,應(yīng)該理解的是,在步驟1516和1520,任何數(shù)目的另外的成本等式(例如,第二、第三、第四和第五成本等式等等)可被評估以標(biāo)識(shí)任何數(shù)目的存儲(chǔ)緩沖區(qū)1463(例如,第三、第四、第五和第六存儲(chǔ)緩沖區(qū)1463等等),在此最優(yōu)地存儲(chǔ)接收到的數(shù)據(jù)的任何數(shù)目的實(shí)例(例如,接收到的數(shù)據(jù)的第三、第四、第五和第六實(shí)例等等)。有利地,通過將接收到的數(shù)據(jù)的第二和另外的實(shí)例最優(yōu)地存儲(chǔ)在來自多個(gè)存儲(chǔ)緩沖區(qū)1463之中的第二和另外的存儲(chǔ)緩沖區(qū)1463,接收到的數(shù)據(jù)可被快速高效地進(jìn)行冗余存儲(chǔ),從而改進(jìn)容錯(cuò)性,并且接收到的數(shù)據(jù)全部可被快速高效地存取,而不用使存儲(chǔ)管理裝置1438超載。
更詳細(xì)地,在一個(gè)實(shí)施例中,第一處理器模塊1478的接收器1493,在步驟1504接收包括數(shù)據(jù)有效載荷的寫操作。第一處理器模塊1478的接收器1493,例如可跨越網(wǎng)絡(luò)(未顯示)從計(jì)算裝置(未顯示)而不是存儲(chǔ)管理裝置1438接收寫操作。在步驟1508,接收到的寫操作起初被存儲(chǔ)在第一處理器模塊1478的第一(僅在一些實(shí)施例中)緩沖區(qū)1463中。在一個(gè)實(shí)施例中,在第一處理器模塊1478接收到寫操作之后,以及在其已將接收到的寫操作存儲(chǔ)在它的第一緩沖區(qū)1463中后,第一處理器模塊1478的數(shù)據(jù)運(yùn)算器1499將數(shù)據(jù)有效載荷從其余的寫操作分離出來,以使數(shù)據(jù)有效載荷的第一實(shí)例被創(chuàng)建和獨(dú)立地存儲(chǔ)于第一處理器模塊1478的第一緩沖區(qū)1463中。在一個(gè)實(shí)施例中,除數(shù)據(jù)有效載荷之外,寫操作包括至少一些控制信息。在這樣的實(shí)施例中,第一處理器模塊1478的數(shù)據(jù)運(yùn)算器1499運(yùn)行以將數(shù)據(jù)有效載荷從這個(gè)控制信息分離出來。在將數(shù)據(jù)有效載荷從其余的寫操作分離出來之后,第一處理器模塊1478的數(shù)據(jù)運(yùn)算器1499然后復(fù)制數(shù)據(jù)有效載荷的第一實(shí)例以創(chuàng)建數(shù)據(jù)有效載荷的第二實(shí)例,以及可選地?cái)?shù)據(jù)有效載荷的另外實(shí)例。
在步驟1512,第一處理器模塊1478的評估器1497評估第一成本等式以從多個(gè)存儲(chǔ)緩沖區(qū)1463之中標(biāo)識(shí)第二存儲(chǔ)緩沖區(qū)1463,而不同于第一處理器模塊1478中的第一存儲(chǔ)緩沖區(qū)1463,數(shù)據(jù)有效載荷的第一實(shí)例起初被存儲(chǔ)在所述第一存儲(chǔ)緩沖區(qū)1463,數(shù)據(jù)有效載荷的第二實(shí)例最優(yōu)地存儲(chǔ)于所述第二存儲(chǔ)緩沖區(qū)1463。在一個(gè)實(shí)施例中,評估器1497標(biāo)識(shí)位于第二處理器模塊1478′上的第二存儲(chǔ)緩沖區(qū)1463。在一個(gè)這樣的實(shí)施例中,因?yàn)榈诙幚砥髂K1478′是不同于第一處理器模塊1478的處理器模塊,所以將數(shù)據(jù)有效載荷的第二實(shí)例存儲(chǔ)在第二存儲(chǔ)緩沖區(qū)1463可防止在第一處理器模塊1478失效的情況下丟失數(shù)據(jù)有效載荷。
在步驟1512評估第一成本等式時(shí),第一處理器模塊1478的評估器1497可考慮各種因素。例如,在一個(gè)實(shí)施例中,對于不同于第一處理器模塊1478中的第一存儲(chǔ)緩沖區(qū)1463(數(shù)據(jù)有效載荷的第一實(shí)例起初被存儲(chǔ)于所述第一存儲(chǔ)緩沖區(qū)1463)的存儲(chǔ)管理裝置1438中的多個(gè)存儲(chǔ)緩沖區(qū)1463中每一個(gè),第一處理器模塊1478的評估器1497分配一個(gè)值給存儲(chǔ)管理裝置1438中從第一處理器模塊1478到該存儲(chǔ)緩沖區(qū)1463的物理距離。在一個(gè)這樣的實(shí)施例中,物理距離最靠近第一處理器模塊1478的存儲(chǔ)緩沖區(qū)1463被評估器1497標(biāo)識(shí)為第二存儲(chǔ)緩沖區(qū)1463,數(shù)據(jù)有效載荷的第二實(shí)例最優(yōu)地存儲(chǔ)在所述第二存儲(chǔ)緩沖區(qū)1463。例如,在另一個(gè)實(shí)施例中,對于不同于第一處理器模塊1478中的第一存儲(chǔ)緩沖區(qū)1463(數(shù)據(jù)有效載荷的第一實(shí)例起初被存儲(chǔ)于所述第一存儲(chǔ)緩沖區(qū)1463)的存儲(chǔ)管理裝置1438中的多個(gè)存儲(chǔ)緩沖區(qū)1463中每一個(gè),第一處理器模塊1478的評估器1497分配一個(gè)值給該存儲(chǔ)緩沖區(qū)1463的可用容量。在一個(gè)這樣的實(shí)施例中,具有最大可用容量的存儲(chǔ)緩沖區(qū)1463被評估器1497標(biāo)識(shí)為第二存儲(chǔ)緩沖區(qū)1463,數(shù)據(jù)有效載荷的第二實(shí)例最優(yōu)地存儲(chǔ)在所述第二存儲(chǔ)緩沖區(qū)1463。
在又一個(gè)實(shí)施例中,在步驟1512評估第一成本等式時(shí),并且對于包括存儲(chǔ)緩沖區(qū)1463(其必須不同于第一處理器模塊1478中的第一存儲(chǔ)緩沖區(qū)1463)的一個(gè)或更多個(gè)第二處理器模塊1478′中的每一個(gè)來說,第一處理器模塊1478的評估器1497分配一個(gè)值給出現(xiàn)于該第二處理器模塊1478′的負(fù)荷。在一個(gè)實(shí)施例中,正被討論的負(fù)荷是正被討論的第二處理器模塊1478′與除存儲(chǔ)管理裝置1438之外的一裝置(例如,如上所描述的主機(jī))之間的輸入/輸出負(fù)荷。替代性地,在另一個(gè)實(shí)施例中,正被討論的負(fù)荷是例如,正被討論的第二處理器模塊1478′與至少一個(gè)其它處理器模塊1478、1478′之間的請求、命令和響應(yīng)的互連負(fù)荷。這樣的話,具有最低負(fù)荷值的第二處理器模塊1478′的存儲(chǔ)緩沖區(qū)1463被評估器1497標(biāo)識(shí)為第二存儲(chǔ)緩沖區(qū)1463,數(shù)據(jù)有效載荷的第二實(shí)例最優(yōu)地存儲(chǔ)在所述第二存儲(chǔ)緩沖區(qū)1463。
在有些情況下,存儲(chǔ)管理裝置1438被實(shí)現(xiàn)成使多個(gè)存儲(chǔ)緩沖區(qū)1463的一個(gè)或更多個(gè)僅對多個(gè)處理器模塊1478、1478′的某子集來說是可存取的。例如,在這樣一個(gè)包括分別具有存儲(chǔ)緩沖區(qū)W、X、Y和Z的處理器模塊A、B、C和D的存儲(chǔ)管理裝置1438(未顯示)中,可能的情況是僅處理器模塊A、B和C能夠存取存儲(chǔ)緩沖區(qū)W,僅處理器模塊B和C能夠存取存儲(chǔ)緩沖區(qū)X,僅處理器模塊A和C能夠存取存儲(chǔ)緩沖區(qū)Y,以及僅處理器模塊A和D能夠存取存儲(chǔ)緩沖區(qū)Z。因此,在另一個(gè)實(shí)施例中,評估器1497在步驟1512評估第一成本等式以標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)有效載荷的第二實(shí)例的第二存儲(chǔ)緩沖區(qū)1463,以使將第二存儲(chǔ)緩沖區(qū)1463和第一存儲(chǔ)緩沖區(qū)1463(數(shù)據(jù)有效載荷的第一實(shí)例起初被存儲(chǔ)在所述第一存儲(chǔ)緩沖區(qū)1463)聯(lián)系在一起時(shí),可存取數(shù)據(jù)有效載荷的第一實(shí)例及/或第二實(shí)例的處理器模塊1478的數(shù)目被最大化。當(dāng)存儲(chǔ)數(shù)據(jù)有效載荷的一個(gè)實(shí)例的存儲(chǔ)緩沖區(qū)1463,及/或存儲(chǔ)緩沖區(qū)1463位于之上的處理器模塊1478失效時(shí),最大化可存取數(shù)據(jù)有效載荷的第一實(shí)例及/或第二實(shí)例的處理器模塊1478的數(shù)目可最大化處理靈活性和裝置效率。在該實(shí)施例的一個(gè)實(shí)現(xiàn)中,對不同于第一處理器模塊1478中的第一存儲(chǔ)緩沖區(qū)1463(數(shù)據(jù)有效載荷的第一實(shí)例起初被存儲(chǔ)在所述第一存儲(chǔ)緩沖區(qū)1463)的存儲(chǔ)管理裝置1438中的多個(gè)存儲(chǔ)緩沖區(qū)1463中的每一個(gè)來說,第一處理器模塊1478的評估器1497分配一個(gè)值給存儲(chǔ)管理裝置1438中處理器模塊1478、1478′的數(shù)目,該數(shù)目是指如果數(shù)據(jù)有效載荷的第二實(shí)例被存儲(chǔ)在該存儲(chǔ)緩沖區(qū)1463,則能夠存取數(shù)據(jù)有效載荷的第一實(shí)例和第二實(shí)例中至少一個(gè)的處理器模塊1478、1478′的數(shù)目。在一個(gè)這樣的實(shí)施例中,如果數(shù)據(jù)有效載荷的第二實(shí)例被存儲(chǔ)在那里,則能夠最大化可存取數(shù)據(jù)有效載荷的第一及/或第二實(shí)例的處理器模塊1478的數(shù)目的存儲(chǔ)緩沖區(qū)1463因此可被評估器1497標(biāo)識(shí)為第二存儲(chǔ)緩沖區(qū)1463,數(shù)據(jù)有效載荷的第二實(shí)例最優(yōu)地存儲(chǔ)于所述第二存儲(chǔ)緩沖區(qū)1463。
仍然在另一個(gè)實(shí)施例中,為了確定最優(yōu)地存儲(chǔ)數(shù)據(jù)有效載荷的第二實(shí)例的第二存儲(chǔ)緩沖區(qū)1463,第一處理器模塊1478的評估器1497考慮上面所描述的所有因素,或它的某子集,并將權(quán)重加到其所考慮的每個(gè)因素上。在一個(gè)這樣的實(shí)施例中,存儲(chǔ)數(shù)據(jù)有效載荷的第二實(shí)例的第二存儲(chǔ)緩沖區(qū)1463就是顯示出所考慮因素的最好權(quán)重組合的存儲(chǔ)緩沖區(qū)1463。實(shí)際上,可改變每個(gè)因素的權(quán)重以適應(yīng)特定的應(yīng)用程序。
另外,在另一個(gè)實(shí)施例中,對多個(gè)存儲(chǔ)緩沖區(qū)1463中的一個(gè)或更多個(gè)來說,為那些存儲(chǔ)緩沖區(qū)1463考慮的一個(gè)或更多個(gè)因素的權(quán)重可被預(yù)調(diào)節(jié),由此以使得不太需要在那里存儲(chǔ)數(shù)據(jù)有效載荷的一份拷貝。這可被完成,例如,從而人為地限制存儲(chǔ)在那些存儲(chǔ)緩沖區(qū)1463的數(shù)據(jù)量,從而控制/限制對那些特定的存儲(chǔ)緩沖區(qū)1463的請求,及/或?yàn)樗鼈兊男阅芤约耙虼藶榇鎯?chǔ)管理裝置1438的性能設(shè)定一個(gè)上限。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1438存儲(chǔ)了接收到的數(shù)據(jù)有效載荷的一個(gè)以上拷貝。因此,在這樣一個(gè)實(shí)施例中,第一處理器模塊1438的評估器1497在步驟1516評估第二成本等式,以及可選地,第三、第四和第五成本等式等等。第二成本等式的評估從多個(gè)存儲(chǔ)緩沖區(qū)1463之中標(biāo)識(shí)出第三存儲(chǔ)緩沖區(qū)1463,所述第三存儲(chǔ)緩沖區(qū)1463不同于第一和第二存儲(chǔ)緩沖區(qū)1463(例如,第一、第二和第三存儲(chǔ)緩沖區(qū)每個(gè)可位于不同的處理器模塊1478、1478′上),其中數(shù)據(jù)有效載荷的第三實(shí)例最優(yōu)地存儲(chǔ)在所述第三存儲(chǔ)緩沖區(qū)1463。在一個(gè)實(shí)施例中,由第一處理器模塊1478的評估器1497評估的第二成本等式與上面所描述的第一成本等式相同,除了第一和第二存儲(chǔ)緩沖區(qū)1463(通過第一成本等式的評估,已標(biāo)識(shí)第二存儲(chǔ)緩沖區(qū)1463)兩者都未被評估器1497考慮之外。替代性地,在另一個(gè)實(shí)施例中,第二成本等式不同于第一成本等式。例如,在第一和第二成本等式中的每個(gè)所考慮的因素是一樣的,但分配給每個(gè)考慮的因素的權(quán)重不同。替代性地,作為另一個(gè)例子,在一個(gè)成本等式中考慮的因素可以是在另一個(gè)成本等式中考慮的因素的某子集。
仍然在另一個(gè)實(shí)施例中,僅第一成本等式被評估,并且數(shù)據(jù)有效載荷的第三實(shí)例被存儲(chǔ)在,除數(shù)據(jù)有效載荷的第一實(shí)例起初被存儲(chǔ)所在的第一處理器模塊1478中的第一存儲(chǔ)緩沖區(qū)1463外,以及除在評估第一成本等式時(shí)標(biāo)識(shí)的第二存儲(chǔ)緩沖區(qū)1463外的任何存儲(chǔ)緩沖區(qū)1463。
在一個(gè)實(shí)施例中,在步驟1520,數(shù)據(jù)有效載荷的第二、第三及/或另外的實(shí)例被分別存儲(chǔ)于在步驟1512及/或1516標(biāo)識(shí)的第二、第三及/或另外的存儲(chǔ)緩沖區(qū)1463。為了使這能夠發(fā)生,第一處理器模塊1478的發(fā)送器1495將數(shù)據(jù)有效載荷的第二、第三及/或另外的實(shí)例分別發(fā)送至第二、第三及/或另外的存儲(chǔ)緩沖區(qū)1463。因此,接收到的寫操作的數(shù)據(jù)有效載荷被冗余地存儲(chǔ)在存儲(chǔ)管理裝置1438的一個(gè)或更多個(gè)存儲(chǔ)緩沖區(qū)1463中。
時(shí)鐘同步 通常,在另一個(gè)方面,本發(fā)明涉及用于同步多個(gè)處理器模塊的內(nèi)部時(shí)鐘的方法和裝置。簡要綜述,在本發(fā)明該方面的一個(gè)實(shí)施例中,多處理器系統(tǒng)(例如,如上所描述的存儲(chǔ)管理裝置)包括多個(gè)處理器模塊,其中所述多個(gè)處理器模塊中的每個(gè)都包括其自己的內(nèi)部時(shí)鐘。通過將所述處理器模塊中的一個(gè)指派為具有用于多處理器系統(tǒng)的主內(nèi)部時(shí)鐘的主處理器模塊,并通過使多處理器系統(tǒng)中其它處理器模塊(指派為從屬處理器模塊)的每個(gè)均周期地將其內(nèi)部時(shí)鐘與主內(nèi)部時(shí)鐘比較以及必要時(shí)校正它的內(nèi)部時(shí)鐘,可實(shí)現(xiàn)多個(gè)處理器模塊內(nèi)部時(shí)鐘之間的同步。在一個(gè)實(shí)施例中,從屬處理器模塊校正它們的內(nèi)部時(shí)鐘而不曾導(dǎo)致它們在時(shí)間上向后退。
圖23說明了根據(jù)本發(fā)明該方面的維持基本上一致的運(yùn)行時(shí)鐘的多處理器系統(tǒng)1638的一個(gè)實(shí)施例(例如,存儲(chǔ)管理裝置,一般而言其擁有上面所描述的存儲(chǔ)管理裝置的能力,并可被實(shí)現(xiàn)為上述存儲(chǔ)管理裝置,且具有在此所描述的附加功能性)。多處理器系統(tǒng)1638包括多個(gè)處理器模塊1678、1678′、1678″、1678,其中所述處理器模塊中每一個(gè)均包括其各自的內(nèi)部時(shí)鐘1675、1675′、1675″、1675。再次,在圖23的多處理器系統(tǒng)1638中所描述的四個(gè)處理器模塊1678、1678′、1678″、1678僅僅是說明性的,并且更一般地說,多處理器系統(tǒng)1638可包括任何數(shù)目或類型的處理器模塊。
多處理器系統(tǒng)1638的多個(gè)處理器模塊中一個(gè)或更多個(gè)的內(nèi)部時(shí)鐘(一個(gè)或多個(gè))可從其它處理器模塊的內(nèi)部時(shí)鐘“漂移”,例如由于一個(gè)處理器模塊相對其它處理器模塊升溫而導(dǎo)致的處理器模塊之間的溫差。例如,可能的情況是,處理器模塊1678″的內(nèi)部時(shí)鐘1675″開始比多處理器系統(tǒng)1638的其它內(nèi)部時(shí)鐘1675、1675′、1675″運(yùn)行得更快并漂離多處理器系統(tǒng)1638的其它內(nèi)部時(shí)鐘1675、1675′、1675″。因此,為了同步多處理器系統(tǒng)1638的內(nèi)部時(shí)鐘1675、1675′、1675″、1675,并且從而為多處理器系統(tǒng)1638維持可靠的運(yùn)行時(shí)鐘,內(nèi)部時(shí)鐘1675″被校正,例如,如在此根據(jù)本發(fā)明該方面所描述的而被校正。
在本發(fā)明該方面的一個(gè)實(shí)施例中,第一處理器模塊,例如如所說明的,處理器模塊1678被指派為多處理器系統(tǒng)1638的主處理器模塊。主處理器模塊1678包括用于多處理器系統(tǒng)1638的主內(nèi)部時(shí)鐘。在一個(gè)這樣的實(shí)施例中,每個(gè)其它處理器模塊(也就是,至少一個(gè)其它處理器模塊)1678′、1678″、1678被指派為多處理器系統(tǒng)1638的從屬處理器模塊。每個(gè)從屬處理器模塊1678′、1678″、1678(通稱1678′)包括其各自的從屬處理器模塊內(nèi)部時(shí)鐘1675′、1675″、1675(通稱1675′)。在一個(gè)實(shí)施例中,從屬處理器模塊1678′,根據(jù)下面將被描述的方法,周期地將它們的內(nèi)部時(shí)鐘與主內(nèi)部時(shí)鐘1675比較,并且必要時(shí)校正它們的內(nèi)部時(shí)鐘。
現(xiàn)在參照圖24,在用于為多處理器系統(tǒng)1638維持基本上一致的運(yùn)行時(shí)鐘的方法1700的一個(gè)實(shí)施例中,從屬處理器模塊1678′通過迭代地執(zhí)行方法1700的步驟1704、1708、1712、1716以及必要時(shí)執(zhí)行1720,從而使從屬處理器模塊內(nèi)部時(shí)鐘1675′與主內(nèi)部時(shí)鐘1675同步。可選地,還可在步驟1704和1708之后,而在步驟1712、1716和1720之前執(zhí)行步驟1710。在一個(gè)實(shí)施例中,方法1700的經(jīng)由步驟1704、1708、1710(可選地)、1712、1716以及必要時(shí)1720的迭代,是由從屬處理器模塊1675′周期地執(zhí)行的,例如一秒的每一部分(例如,半秒)或其它時(shí)間量。此外,在一些實(shí)施例中,在迭代地執(zhí)行步驟1704、1708、1710(可選地)、1712、1716以及必要時(shí)1720之前,從屬處理器模塊1678′在步驟1702初始化從屬處理器模塊內(nèi)部時(shí)鐘1675′。
在一個(gè)實(shí)施例中,為了在步驟1702初始化從屬處理器模塊內(nèi)部時(shí)鐘1675′,從屬處理器模塊1678′請求主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間并在某時(shí)段后,接收主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間。在一個(gè)實(shí)施例中,如果從屬處理器模塊對主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的請求和接收之間的時(shí)段小于第一預(yù)先確定的時(shí)間量,則從屬處理器模塊1678′將從屬處理器模塊內(nèi)部時(shí)鐘1675′初始化為接收到的主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間和從屬處理器模塊對主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的請求和接收之間的時(shí)段的一半之和。否則,如果從屬處理器模塊對主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的請求和接收之間的時(shí)段大于第一預(yù)先確定的時(shí)間量,從屬處理器模塊1678′就丟棄接收到的主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間并請求在主內(nèi)部時(shí)鐘1675的新當(dāng)前時(shí)間。在一些實(shí)施例中,從屬處理器模塊1678′持續(xù)丟棄接收到的主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間并請求主內(nèi)部時(shí)鐘1675的新當(dāng)前時(shí)間,直到其接收到的主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間在第一預(yù)先確定的時(shí)間量之內(nèi)。從屬處理器模塊1678′然后如上所描述的那樣初始化從屬處理器內(nèi)部時(shí)鐘1675′。
在一個(gè)實(shí)施例中,第一預(yù)先確定的時(shí)間量被預(yù)存在從屬處理器模塊1675′的內(nèi)存296(參見圖9)中。此外,第一預(yù)先確定的時(shí)間量是基于多處理器系統(tǒng)1638的硬件布局可配置的。在一個(gè)實(shí)施例中,第一預(yù)先確定的時(shí)間量被設(shè)置為落在大約26微秒和大約35微秒之間的具體時(shí)間。
在一替代性實(shí)施例中,不是如上所描述那樣初始化從屬處理器模塊內(nèi)部時(shí)鐘1675,不執(zhí)行步驟1702且從屬處理器模塊1678′代之以計(jì)算,如下所描述的,從屬處理器模塊內(nèi)部時(shí)鐘1675′和主內(nèi)部時(shí)鐘1675之間的偏移量。
總之,為使從屬處理器模塊內(nèi)部時(shí)鐘1675′與主內(nèi)部時(shí)鐘1675同步,從屬處理器模塊1678′首先在步驟1704,并且在根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間,請求根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間。該請求可被以任何對進(jìn)行請求有用的形式或方式傳遞。在一個(gè)實(shí)施例中,例如,該請求以數(shù)據(jù)分組的形式傳遞。從屬處理器模塊1678′還記錄根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間,在所述第一時(shí)間進(jìn)行該請求。隨后某時(shí)間,在步驟1708,從屬處理器模塊1678′,在根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間,接收根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間。根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間可以任何對傳遞這樣的信息有用的形式或方式被傳送到從屬處理器模塊1678′,或由從屬處理器模塊1678′接收到。例如,根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間可在一數(shù)據(jù)分組中被傳送到從屬處理器模塊1678′,以及由從屬處理器模塊1678′接收到。再次,以類似于步驟1704的方式,從屬處理器模塊1678′記錄根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間,在所述第二時(shí)間根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間被接收到。
可選地,在完成步驟1704和1708之后,而在執(zhí)行步驟1712、1716以及必要時(shí)執(zhí)行1720之前,從屬處理器模塊1678′在步驟1710確定根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在步驟1704記錄)與根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘的第二時(shí)間(由從屬處理器模塊1678′在步驟1708記錄)之間的差是否小于第二預(yù)先確定的時(shí)間量。在一個(gè)這樣的實(shí)施例中,如圖24所說明的,僅當(dāng)從屬處理器模塊1678′確定根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間與根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間之間的差小于第二預(yù)先確定的時(shí)間量時(shí)才會(huì)執(zhí)行步驟1712、1716以及必要時(shí),執(zhí)行1720。否則,從屬處理器模塊1678′返回到步驟1704。通過照這樣進(jìn)行,從屬處理器模塊1678′排除對在紊亂的延遲之后接收到的主內(nèi)部時(shí)鐘1675的所有當(dāng)前時(shí)間的考慮,并從而防止錯(cuò)誤的時(shí)鐘同步。
以和上面關(guān)于步驟1702所描述的第一預(yù)先確定的時(shí)間量類似的形式,第二預(yù)先確定的時(shí)間量可被預(yù)存在從屬處理器模塊1675′的內(nèi)存296(參見圖9)中,并基于多處理器系統(tǒng)1638的硬件布局是可配置的。在一個(gè)實(shí)施例中,類似第一預(yù)先確定的時(shí)間量,第二預(yù)先確定的時(shí)間量被設(shè)置為落在大約26微秒和大約35微秒之間的具體時(shí)間。
繼步驟1704、1708和,可選地,1710完成之后,從屬處理器模塊1678′在步驟1712通過使用至少根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在步驟1704記錄)與根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間(由從屬處理器模塊1678′在步驟1708記錄)來計(jì)算一預(yù)計(jì)時(shí)間。可選地,在一些實(shí)施例中,從屬處理器模塊1678′還在計(jì)算預(yù)計(jì)時(shí)間時(shí)使用一偏移量,例如如下所描述的。在一個(gè)實(shí)施例中,計(jì)算出的預(yù)計(jì)時(shí)間表示,響應(yīng)從屬處理器模塊對根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的請求,從屬處理器模塊1678′期望從主處理器模塊1678接收到什么。換言之,在一個(gè)實(shí)施例中,從屬處理器模塊1678′假定主內(nèi)部時(shí)鐘1675和從屬處理器模塊內(nèi)部時(shí)鐘1675′以相同速度運(yùn)行。照這樣,從屬處理器模塊1678′期待能夠基于請求時(shí)間(由從屬處理器模塊1678′在步驟1704記錄)、響應(yīng)時(shí)間(由從屬處理器模塊1678′在步驟1708記錄)以及可選地,任何前面已確定的從屬處理器模塊內(nèi)部時(shí)鐘1675′與主內(nèi)部時(shí)鐘1675之間的偏移量(如下所描述的),計(jì)算出根據(jù)主內(nèi)部時(shí)鐘1675′的當(dāng)前時(shí)間。
在步驟1716,從屬處理器模塊1678′確定預(yù)計(jì)時(shí)間是否不同于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間。如果是,從屬處理器模塊內(nèi)部時(shí)鐘1675′和主內(nèi)部時(shí)鐘1675就與從屬處理器模塊在步驟1712的假定相反,以不同的速度運(yùn)行(也就是,從屬處理器模塊內(nèi)部時(shí)鐘1675′漂離主內(nèi)部時(shí)鐘1675)??蛇x地,在一個(gè)實(shí)施例中,從屬處理器模塊1678′,在執(zhí)行步驟1716中,確定預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差是否超過第三預(yù)先確定的時(shí)間量。在這樣一個(gè)實(shí)施例中,當(dāng)從屬處理器模塊1678′確定預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差超過第三預(yù)先確定的時(shí)間量時(shí),從屬處理器模塊1678′僅執(zhí)行步驟1720。否則,如圖24所說明的,從屬處理器模塊1678′返回到步驟1704。通過照這樣進(jìn)行,從屬處理器模塊1678′不會(huì)校正從屬處理器模塊內(nèi)部時(shí)鐘1675′與主內(nèi)部時(shí)鐘1675之間的微小的、經(jīng)??珊雎缘钠?。
再次,第三預(yù)先確定的時(shí)間量可被預(yù)存在從屬處理器模塊1675′的內(nèi)存296(參見圖9)中,并且是可配置的。較低的第三預(yù)先確定的時(shí)間量引起從屬處理器模塊內(nèi)部時(shí)鐘1675′與主內(nèi)部時(shí)鐘1675之間的更緊密的同步。在一個(gè)實(shí)施例中,第三預(yù)先確定的時(shí)間量被設(shè)置為大約5微秒。
在步驟1716,剛一確定預(yù)計(jì)時(shí)間不同于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間,或可選地,確定預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差超過第三預(yù)先確定的時(shí)間量,從屬處理器模塊1678′就在步驟1720校正從屬處理器模塊內(nèi)部時(shí)鐘1675′。在一個(gè)實(shí)施例中,通過有效地“減慢”或“加快”從屬處理器模塊內(nèi)部時(shí)鐘1675′來實(shí)現(xiàn)校正,如下面進(jìn)一步描述,雖然其它校正技術(shù)也可被使用。已完成步驟1720,從屬處理器模塊1678′然后在貫穿方法1700步驟的下一次迭代中返回執(zhí)行步驟1704。如果,另一方面,預(yù)計(jì)時(shí)間并非不同于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間,或可選地,預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差不超過第三預(yù)先確定的時(shí)間量,從屬處理器模塊1678′不執(zhí)行步驟1720,而是,相反地從步驟1716返回至步驟1704以開始貫穿方法1700步驟的下一次迭代。
一般而言,在多處理器系統(tǒng)比如在圖23中所描述的多處理器系統(tǒng)1638中,任何兩個(gè)處理器模塊的內(nèi)部時(shí)鐘,比方說主處理器模塊1678和從屬處理器模塊1678′,即使它們可能不會(huì)相互漂離,也不會(huì)完全在時(shí)間上同步,而是在給定時(shí)間點(diǎn),相互相差一定量。在一個(gè)實(shí)施例中,不在如上所描述的步驟1702中初始化從屬處理器模塊內(nèi)部時(shí)鐘1675′,從屬處理器模塊1678′代之以計(jì)算從屬處理器模塊內(nèi)部時(shí)鐘1675′和主內(nèi)部時(shí)鐘1675之間的差或偏移量。該偏移量是在貫穿方法1700的步驟的第一次迭代期間在一時(shí)間點(diǎn)上計(jì)算出來的,并此后被從屬處理器模塊1678′用在校正從屬處理器模塊內(nèi)部時(shí)鐘1675′。
因此,在一個(gè)這樣的實(shí)施例中,在貫穿方法1700的步驟的第一次迭代中,在已完成步驟1704、1708以及可選的1710之后,但在完成步驟1712、1716以及必要時(shí)完成1720之前,從屬處理器模塊1678′計(jì)算偏移量。例如,在一個(gè)實(shí)施例中,從屬處理器模塊1678′通過從根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在步驟1704記錄)與根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間(由從屬處理器模塊1678′在步驟1708′記錄)之和的一半減去接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間(由從屬處理器模塊1678′在步驟1708接收),來計(jì)算偏移量。實(shí)際來說,在這樣的實(shí)施例中,從屬處理器模塊1678′假定將對根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的請求發(fā)送至主處理器模塊1678所用的時(shí)間等于將主處理器模塊1678的響應(yīng)發(fā)送回從屬處理器模塊1678′所用的時(shí)間。因此,如果,在這樣的實(shí)施例中,根據(jù)從屬處理器模塊1678′的內(nèi)部時(shí)鐘1675′的時(shí)間正好等于根據(jù)主處理器模塊1678的主內(nèi)部時(shí)鐘1675的時(shí)間,那么根據(jù)主處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在步驟1704記錄)與根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間(由從屬處理器模塊1678′在步驟1708′記錄)之和的一半應(yīng)該等于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間(由從屬處理器模塊1678′在步驟1708接收)。如果實(shí)際上情況并非如此,那么從屬處理器模塊1678′的內(nèi)部時(shí)鐘1675′偏離了主內(nèi)部時(shí)鐘1675。
此外,在另一個(gè)這樣的實(shí)施例中,在完成偏移量的計(jì)算之后,從屬處理器模塊1678′然后將偏移量用于在貫穿方法1700步驟的第一次迭代中的步驟1712以及貫穿方法1700的步驟的隨后迭代中的步驟1712計(jì)算預(yù)計(jì)時(shí)間。在一個(gè)實(shí)施例中,當(dāng)從屬處理器模塊1678′貫穿方法1700的步驟迭代時(shí),其不會(huì)在貫穿方法1700的步驟的第一次迭代之后再次計(jì)算偏移量。
在方法1700(在此從屬處理器模塊計(jì)算偏移量)的另一個(gè)實(shí)施例中,從屬處理器模塊1678′不調(diào)整從屬處理器模塊內(nèi)部時(shí)鐘1678′,所以它的時(shí)間完全等于根據(jù)主內(nèi)部時(shí)鐘1675的時(shí)間,然而,相反地,從屬處理器模塊1678′如下所解釋的那樣在步驟1720校正從屬處理器模塊內(nèi)部時(shí)鐘1675′,以使偏移量不漂移。換言之,從屬處理器模塊1678′試圖保持從屬處理器模塊內(nèi)部時(shí)鐘1675′從主內(nèi)部時(shí)鐘1675偏移一定量。在一個(gè)這樣的實(shí)施例中,每個(gè)從屬處理器模塊1678′的目標(biāo)模式驅(qū)動(dòng)器382(參見圖10)使用根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1678′的I/O請求被接收的時(shí)間加上或減去為該從屬處理器模塊內(nèi)部時(shí)鐘所計(jì)算的偏移量,為接收到的I/O請求的控制信息加上時(shí)間戳。因此,在這樣的實(shí)施例中,多處理器系統(tǒng)1638中每個(gè)從屬處理器模塊1678′使用與根據(jù)主內(nèi)部時(shí)鐘1675的I/O請求被接收的時(shí)間基本相等的時(shí)間,來為接收到的I/O請求加上時(shí)間戳。然而,注意由于在此所描述的時(shí)鐘漂移現(xiàn)象,接收到的I/O請求被加時(shí)間戳的時(shí)間可能不會(huì)正好等于根據(jù)主內(nèi)部時(shí)鐘1675的I/O請求被接收的時(shí)間。然而,后一問題是由如下所描述的多處理器系統(tǒng)1638處理的,并且它不影響多處理器系統(tǒng)1638的正常運(yùn)轉(zhuǎn)。
在方法1700的更詳細(xì)的細(xì)節(jié)中,在一個(gè)實(shí)施例中,對于貫穿方法1700的步驟的每一次迭代,從屬處理器模塊1678′,在步驟1712計(jì)算預(yù)計(jì)時(shí)間時(shí),首先通過從根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第二時(shí)間(由從屬處理器模塊1678′在步驟1708記錄)減去根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在步驟1704記錄)來計(jì)算迭代的往返時(shí)間。此外從屬處理器模塊1678′可將所計(jì)算的貫穿方法1700的步驟的每一次迭代的往返時(shí)間存儲(chǔ)在,例如,它的內(nèi)存296(參見圖9)中。因此,在貫穿方法1700的步驟的第一次迭代之后的貫穿方法1700步驟的任何當(dāng)前迭代中,從屬處理器模塊1678′可通過使用所計(jì)算的貫穿方法1700的步驟的當(dāng)時(shí)當(dāng)前迭代的往返時(shí)間,以及通過使用貫穿方法1700的步驟的一個(gè)或更多個(gè)先前迭代的往返時(shí)間,來計(jì)算平均的往返時(shí)間。
在一個(gè)實(shí)施例中,由從屬處理器模塊1678′計(jì)算的平均往返時(shí)間只不過是貫穿方法1700步驟的當(dāng)時(shí)當(dāng)前迭代的往返時(shí)間與貫穿方法1700步驟的所有先前迭代的往返時(shí)間的平均。在另一個(gè)實(shí)施例中,由從屬處理器模塊1678′計(jì)算的平均往返時(shí)間是貫穿方法1700步驟的當(dāng)時(shí)當(dāng)前迭代的往返時(shí)間與一個(gè)或更多個(gè)貫穿方法1700步驟的最近的先前迭代的往返時(shí)間的移動(dòng)平均。在又一個(gè)實(shí)施例中,由從屬處理器模塊1678′計(jì)算的平均往返時(shí)間是加權(quán)的移動(dòng)平均往返時(shí)間。
在一個(gè)實(shí)施例中,在貫穿方法1700的步驟的第一次以及隨后每次迭代上,從屬處理器模塊1678′在步驟1712通過計(jì)算根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在當(dāng)前迭代的步驟1704記錄)與貫穿方法1700的步驟的該迭代的往返時(shí)間的一半之和,以及可選地從其中減去偏移量,來計(jì)算預(yù)計(jì)時(shí)間。在另一個(gè)實(shí)施例中,在貫穿方法1700步驟的第一次迭代之后的一貫穿方法1700步驟的迭代上,從屬處理器模塊1678′在步驟1712通過計(jì)算根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的第一時(shí)間(由從屬處理器模塊1678′在該迭代的步驟1704記錄)與所計(jì)算的平均往返時(shí)間的一半(例如,如上所描述的)之和,以及可選地從其中減去偏移量,來計(jì)算預(yù)計(jì)時(shí)間。
一旦從屬處理器模塊1678′已計(jì)算出預(yù)計(jì)時(shí)間,其然后在步驟1716確定預(yù)計(jì)時(shí)間是否不同于根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間,或可選地,預(yù)計(jì)時(shí)間與根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差是否超過第三預(yù)先確定的時(shí)間量。在一個(gè)實(shí)施例中,為作出該確定,從屬處理器模塊1678′首先通過從根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)時(shí)當(dāng)前時(shí)間(由從屬處理器模塊1678′在該迭代的步驟1708接收)減去預(yù)計(jì)時(shí)間(由從屬處理器模塊1678′在該迭代的步驟1712計(jì)算),從而為貫穿方法1700的步驟的每一次迭代計(jì)算該迭代的漂移值。此外,從屬處理器模塊1678′可將貫穿方法1700步驟的每一次迭代的計(jì)算漂移值存儲(chǔ)在,例如,它的內(nèi)存296(參見圖9)中。因此,如前所述,在貫穿方法1700步驟的第一次迭代之后的貫穿方法1700步驟的任何當(dāng)前迭代中,從屬處理器模塊1678′可通過使用貫穿方法1700步驟的當(dāng)時(shí)當(dāng)前迭代的所計(jì)算的漂移值,以及通過使用貫穿方法1700步驟的一個(gè)或更多個(gè)先前迭代的漂移值,來計(jì)算平均漂移值。
在一個(gè)實(shí)施例中,由從屬處理器模塊1678′計(jì)算的平均漂移值只不過是貫穿方法1700步驟的當(dāng)時(shí)當(dāng)前迭代的漂移值與貫穿方法1700步驟的所有先前迭代的漂移值的平均。在另一個(gè)實(shí)施例中,由從屬處理器模塊1678′計(jì)算的平均漂移值是貫穿方法1700步驟的當(dāng)時(shí)當(dāng)前迭代的漂移值與貫穿方法1700步驟的一個(gè)或更多個(gè)最近先前迭代的漂移值的移動(dòng)平均。在又一個(gè)實(shí)施例中,由從屬處理器模塊1678′計(jì)算的平均漂移值是加權(quán)的移動(dòng)平均漂移值。
在一個(gè)實(shí)施例中,在貫穿方法1700步驟的第一次以及每個(gè)隨后的迭代上,當(dāng)該迭代的漂移值是非零的時(shí),從屬處理器模塊1678′在步驟1716確定預(yù)計(jì)時(shí)間不同于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間(由從屬處理器模塊1678′在當(dāng)前迭代的步驟1708接收)。在另一個(gè)實(shí)施例中,在貫穿方法1700步驟的第一次迭代之后的一貫穿方法1700步驟的迭代上,當(dāng)所計(jì)算的平均漂移值,例如,如上所描述的那樣是非零時(shí),從屬處理器模塊1678′確定預(yù)計(jì)時(shí)間不同于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間(由從屬處理器模塊1678′在該迭代的步驟1708接收)。
剛一確定預(yù)計(jì)時(shí)間不同于接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間,或可選地,剛一確定預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差超過第三預(yù)先確定的時(shí)間量,從屬處理器模塊1678′就在步驟1720校正從屬處理器模塊內(nèi)部時(shí)鐘1675′。在一個(gè)實(shí)施例中,預(yù)計(jì)時(shí)間超過接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間(或可選地,超過接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間多于第三預(yù)先確定的時(shí)間量)的情況下,這意味著從屬處理器模塊內(nèi)部時(shí)鐘1675′已經(jīng)比主內(nèi)部時(shí)鐘1675運(yùn)行得快,從屬處理器模塊1678′就通過減慢從屬處理器模塊內(nèi)部時(shí)鐘1675′來校正從屬處理器模塊內(nèi)部時(shí)鐘1675′。在另一個(gè)實(shí)施例中,在接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間超過預(yù)計(jì)時(shí)間(或可選地,超過預(yù)計(jì)時(shí)間多于第三預(yù)先確定的時(shí)間量)的情況下,這意味著從屬處理器模塊內(nèi)部時(shí)鐘1675′已經(jīng)比主內(nèi)部時(shí)鐘1675運(yùn)行得慢,從屬處理器模塊1678′就通過加快從屬處理器模塊內(nèi)部時(shí)鐘1675′來校正從屬處理器模塊內(nèi)部時(shí)鐘1675′。
在一個(gè)實(shí)施例中,多處理器系統(tǒng)1638包括自由運(yùn)行的計(jì)數(shù)器,所述計(jì)數(shù)器可在單個(gè)CPU指令的每次執(zhí)行時(shí)被增加,并且從屬處理器模塊1678′被配置以通過將自由運(yùn)行的計(jì)數(shù)器的計(jì)數(shù)校準(zhǔn)到微秒來實(shí)現(xiàn)從屬處理器模塊內(nèi)部時(shí)鐘1675′。從屬處理器模塊1678′可,例如,起初被配置以設(shè)想1微秒等于2800個(gè)自由運(yùn)行計(jì)數(shù)器的計(jì)數(shù)(例如,從屬處理器模塊1678′可,例如,起初被配置以設(shè)想1微秒等于執(zhí)行2800條CPU指令所需的時(shí)間,如可能2.8GHz(千兆赫茲)的CPU時(shí)鐘,以及每一時(shí)鐘周期執(zhí)行一條指令的CPU的情況)。因此,在一個(gè)實(shí)施例中,為減慢從屬處理器模塊內(nèi)部時(shí)鐘1675′,從屬處理器模塊1678′增加其設(shè)想在一給定時(shí)間間隔的自由運(yùn)行計(jì)數(shù)器的計(jì)數(shù)數(shù)目,而不影響自由運(yùn)行計(jì)數(shù)器。同樣地,為加快從屬處理器模塊內(nèi)部時(shí)鐘1675′,從屬處理器模塊1678′可減少其設(shè)想在一給定時(shí)間間隔的自由運(yùn)行計(jì)數(shù)器的計(jì)數(shù)數(shù)目,而不影響自由運(yùn)行計(jì)數(shù)器。重要地,在一些這樣的實(shí)施例中,從屬處理器模塊1678′以這種形式校正從屬處理器模塊內(nèi)部時(shí)鐘1675′以使其從不在時(shí)間上向后退。更確切地,從屬處理器模塊內(nèi)部時(shí)鐘1675′在時(shí)間上不斷地向前進(jìn),如上所描述通過減慢或加快用于校正。
圖25描述了根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的時(shí)間與根據(jù)主內(nèi)部時(shí)鐘1675的時(shí)間的關(guān)系的示范曲線圖1800。在該示范曲線圖中,為解釋的簡單起見,可以假定,如果如上所描述的那樣計(jì)算,偏移量為零,即使如果實(shí)際上如上所描述的那樣計(jì)算它,它不會(huì)一定為零。因此,理想地,如線1804所表示的,根據(jù)從屬處理器模塊內(nèi)部時(shí)鐘1675′的時(shí)間總是等于根據(jù)主內(nèi)部時(shí)鐘1675的時(shí)間。然而,實(shí)際上,從屬處理器模塊1678′可相對主處理器模塊1678發(fā)生漂移(例如,由于溫度變化),這樣從屬處理器模塊內(nèi)部時(shí)鐘1675′比主內(nèi)部時(shí)鐘1675運(yùn)行得快(如線段1808和1812所表示的)。替代性地,主處理器模塊1678可相對從屬處理器模塊1678′發(fā)生漂移(例如,由于溫度變化),這樣主內(nèi)部時(shí)鐘1675比從屬處理器模塊內(nèi)部時(shí)鐘1675′運(yùn)行得快(如線段1816所表示的)。照這樣,從屬處理器模塊1678′根據(jù)上面所描述的方法1700,校正從屬處理器模塊內(nèi)部時(shí)鐘1675′,以相對主內(nèi)部時(shí)鐘1675“減慢”從屬處理器模塊內(nèi)部時(shí)鐘1675′(如示范線段1816所表示的),或替代性地,相對主內(nèi)部時(shí)鐘1675“加快”從屬處理器模塊內(nèi)部時(shí)鐘1675′(如示范線段1812所表示的)。如所描述的,從屬處理器模塊1678′以這種形式校正從屬處理器模塊內(nèi)部時(shí)鐘1675′以使其從不在時(shí)間上向后退。
在另一個(gè)實(shí)施例中,圖23的多處理器系統(tǒng)1638是網(wǎng)絡(luò)(未顯示)中的服務(wù)器。因此,處理器模塊,比方說從屬處理器模塊1678′,可從網(wǎng)絡(luò)中的另一個(gè)計(jì)算裝置(例如,一主機(jī))接收一個(gè)或更多個(gè)寫操作。在這樣一個(gè)實(shí)施例中,從屬處理器模塊1678′可在一貫穿方法1700步驟的迭代的步驟1716確定預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間(由從屬處理器模塊1678′在貫穿方法1700步驟的該迭代的步驟1708接收)的差小于一指定時(shí)間量1820,這被顯示在圖25的曲線1800上并且大于之前描述的第三預(yù)先確定的時(shí)間量。在這種情況下,從屬處理器模塊1678′在寫操作實(shí)際上被完成之前確認(rèn)接收到的寫操作。替代性地,從屬處理器模塊1678′可確定預(yù)計(jì)時(shí)間與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差大于指定時(shí)間量1820。在這種情況下,從屬處理器模塊1678′制止對接收到的寫操作的確認(rèn),直到通過如上參考方法1700所描述的從屬處理器模塊內(nèi)部時(shí)鐘1675′的校正,預(yù)計(jì)時(shí)間再次被確定其與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差小于指定時(shí)間量1820。同樣地,就后一情況來說,多處理器系統(tǒng)1638中的所有其它處理器模塊可同時(shí)制止對接收到的寫操作的確認(rèn),直到如從屬處理器模塊1678′所計(jì)算的,預(yù)計(jì)時(shí)間再次被確定其與接收到的根據(jù)主內(nèi)部時(shí)鐘1675的當(dāng)前時(shí)間的差小于指定時(shí)間量1820。在這些實(shí)施例中,當(dāng)?shù)谝粡膶偬幚砥髂K的內(nèi)部時(shí)鐘運(yùn)行得比主內(nèi)部時(shí)鐘1675快并且在正方向漂移到指定時(shí)間量1820,而第二從屬處理器模塊的內(nèi)部時(shí)鐘運(yùn)行得比主內(nèi)部時(shí)鐘1675慢并且在負(fù)方向漂移到指定時(shí)間量1820時(shí),最極端的情況,即多處理器系統(tǒng)1638將持續(xù)確認(rèn)接收到的寫操作,就會(huì)發(fā)生。
在一個(gè)實(shí)施例中,指定時(shí)間量1820是網(wǎng)絡(luò)中的主機(jī)可請求多處理器系統(tǒng)1638處理第一寫操作,其后接收來自多處理器系統(tǒng)1638對請求的確認(rèn),以及其后請求多處理器系統(tǒng)1638處理第二寫操作的最小時(shí)間量的二分之一。在這樣的實(shí)施例中,假定上面所描述的極端情況,主機(jī)可將第一寫操作發(fā)送至其內(nèi)部時(shí)鐘已在正方向漂移至指定時(shí)間量1820的第一從屬處理器模塊,其后接收來自多處理器系統(tǒng)1638的對第一寫操作的確認(rèn),并其后緊接著將第二寫操作發(fā)送至其內(nèi)部時(shí)鐘已在反方向漂移至指定時(shí)間量1820的第二從屬處理器模塊,并仍保證第二從屬處理器模塊的目標(biāo)模式驅(qū)動(dòng)器382(參見圖10)將以一個(gè)時(shí)間為接收到的第二寫操作加時(shí)間戳,該時(shí)間比第一從屬處理器模塊的目標(biāo)模式驅(qū)動(dòng)器382(參見圖10)為接收到的第一寫操作加時(shí)間戳所用時(shí)間要晚。替代性地,仍在其它實(shí)施例中,指定時(shí)間量另外可設(shè)置為保證在多處理器系統(tǒng)1638中處理接收的寫操作的正確次序的任何時(shí)間量。
在又一個(gè)實(shí)施例中,在多處理器系統(tǒng)1638包括自由運(yùn)行計(jì)數(shù)器和主處理器模塊1678被配置以通過將自由運(yùn)行計(jì)數(shù)器的計(jì)數(shù)校準(zhǔn)到微秒來實(shí)現(xiàn)主內(nèi)部時(shí)鐘1675的情況下,如上對于從屬處理器模塊內(nèi)部時(shí)鐘1675′所描述的,主處理器模塊1678維持一校準(zhǔn)表,所述校準(zhǔn)表將主內(nèi)部時(shí)鐘1675與現(xiàn)實(shí)世界時(shí)鐘聯(lián)系起來。在一個(gè)實(shí)施例中,如上所描述的,自由運(yùn)行計(jì)數(shù)器上的2800個(gè)計(jì)數(shù)等于現(xiàn)實(shí)世界時(shí)鐘上的1微秒。在一個(gè)這樣的實(shí)施例中,當(dāng)多處理器系統(tǒng)1638將一時(shí)間呈現(xiàn)給網(wǎng)絡(luò)中主機(jī)處的用戶時(shí),主處理器模塊1678處的校準(zhǔn)表首先被查閱以將多處理器系統(tǒng)1638所保持的運(yùn)行時(shí)間轉(zhuǎn)換為現(xiàn)實(shí)世界時(shí)間。
映射產(chǎn)生和使用 通常,本發(fā)明的另外的方面涉及通過使用在指定的過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)的位置的映射(例如,時(shí)間映射)產(chǎn)生該數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象的系統(tǒng)、方法和制品。該映射允許數(shù)據(jù)存儲(chǔ)系統(tǒng)快速高效地地確定在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)的位置,而不用搜索有關(guān)過去數(shù)據(jù)位置的記錄的整個(gè)索引。
簡要綜述,在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)存儲(chǔ)系統(tǒng)包括存儲(chǔ)管理裝置,所述存儲(chǔ)管理裝置包括用于接收過去時(shí)間規(guī)約的接收器,以及用于處理被指引到數(shù)據(jù)存儲(chǔ)器中一個(gè)或更多個(gè)目標(biāo)存儲(chǔ)單元的I/O請求的I/O處理器。如之前所描述的,在一個(gè)實(shí)施例中,存儲(chǔ)單元是數(shù)據(jù)存儲(chǔ)器塊的單字節(jié)或多字節(jié)群。存儲(chǔ)管理裝置還包括用于記錄由I/O處理器處理的寫請求的編索引模塊。編索引模塊包括內(nèi)存,所述內(nèi)存為每一寫請求存儲(chǔ)一個(gè)記錄,所述記錄可包括1)目標(biāo)存儲(chǔ)單元的標(biāo)識(shí);2)之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置;以及3)寫時(shí)間,其表示寫請求被接收的時(shí)間。另外,存儲(chǔ)管理裝置包括映射模塊,所述映射模塊使用一個(gè)或更多個(gè)記錄來產(chǎn)生在指定過去時(shí)間存儲(chǔ)在目標(biāo)存儲(chǔ)單元的數(shù)據(jù)的位置的映射。包含于存儲(chǔ)管理裝置內(nèi)的映象產(chǎn)生(image generation)模塊至少部分地基于映射模塊產(chǎn)生的映射,呈現(xiàn)在過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象。
圖26說明了根據(jù)本發(fā)明該方面的一實(shí)施例的存儲(chǔ)管理裝置1938。存儲(chǔ)管理裝置1938可被集成于在此所描述的數(shù)據(jù)儲(chǔ)存系統(tǒng)中,例如,參考圖1、4、5和13描述的數(shù)據(jù)儲(chǔ)存系統(tǒng)。作為一個(gè)例子,存儲(chǔ)管理裝置1938可與主機(jī)和物理存儲(chǔ)器通信,從而向主機(jī)提供對存儲(chǔ)在物理存儲(chǔ)器中的數(shù)據(jù)的存取。另外,可使用各種方法來組織存儲(chǔ)在物理存儲(chǔ)器中的數(shù)據(jù)并將其呈現(xiàn)給主機(jī)。例如,存儲(chǔ)管理裝置1938可將一個(gè)或更多個(gè)卷,包括邏輯卷,呈現(xiàn)給主機(jī)。并且,如之前所討論的,存儲(chǔ)管理裝置1938可向主機(jī)提供對與多個(gè)數(shù)據(jù)存儲(chǔ)器相聯(lián)系的一個(gè)或更多個(gè)當(dāng)前存儲(chǔ)器和一個(gè)或更多個(gè)時(shí)間存儲(chǔ)器的存取。另外,如之前所描述的,呈現(xiàn)給主機(jī)的映象可以是固定或動(dòng)態(tài)映象。存儲(chǔ)管理裝置1938還可以實(shí)現(xiàn)歸因于之前所描述的方面和實(shí)施例的存儲(chǔ)管理裝置的另外的功能性。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1938包括相互通信的接收器1961、處理器1962、編索引模塊1995、映射模塊1997和映象產(chǎn)生模塊1999。這些單元中的每個(gè)均可以軟件、硬件或軟件和硬件兩者的某種組合的形式實(shí)現(xiàn)。接收器1961,例如,可被實(shí)現(xiàn)為圖10的一個(gè)或更多個(gè)主機(jī)接口361的一部分。接收器1961,在一個(gè)實(shí)施例中,被實(shí)現(xiàn)于圖10的目標(biāo)模式驅(qū)動(dòng)器382中。接收器1961與主機(jī)通信并接收過去時(shí)間的規(guī)約。過去時(shí)間是主機(jī)對存儲(chǔ)管理裝置呈現(xiàn)在過去時(shí)間的數(shù)據(jù)存儲(chǔ)器映象的請求的一部分。該請求還可以包括特定的數(shù)據(jù)存儲(chǔ)器的標(biāo)識(shí),有時(shí)還包括邏輯塊地址和長度。
在一個(gè)實(shí)施例中,對過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象的請求在帶內(nèi)由接收器1961接收,也就是說,從主機(jī)通過與主機(jī)傳遞數(shù)據(jù)命令時(shí)所使用的通信協(xié)議(例如,讀請求與寫請求)相同的通信協(xié)議。在另一個(gè)實(shí)施例中,接收器1961接收帶外的請求。例如,接收器1961接收請求是通過與主機(jī)傳遞數(shù)據(jù)命令時(shí)所用的通信協(xié)議不同的通信協(xié)議,通過不同信道(例如,通過用戶接口、物理接口或不同于主機(jī)的命令行控制臺(tái),例如,系統(tǒng)管理員接口),或通過它們的某種組合。
處理器1962處理被指引到一個(gè)或更多個(gè)目標(biāo)存儲(chǔ)單元的I/O請求。處理器1962可被實(shí)現(xiàn)于之前在本文所描述的元件之一中。例如處理器1962可被實(shí)現(xiàn)于圖10的處理器模塊378中所顯示的一個(gè)或更多個(gè)元件中。在一個(gè)實(shí)施例中,處理器1962被實(shí)現(xiàn)于圖10中所顯示的I/O管理器362中。處理器1962處理被指引到數(shù)據(jù)存儲(chǔ)器中存儲(chǔ)單元(例如,邏輯塊)的I/O請求。作為讀或?qū)懻埱竽繕?biāo)的存儲(chǔ)單元也被稱為目標(biāo)存儲(chǔ)單元。
如以前所描述的,寫請求經(jīng)常被指引到多個(gè)存儲(chǔ)單元。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1938在執(zhí)行寫請求之前重寫存儲(chǔ)于目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)之前在目標(biāo)存儲(chǔ)單元上執(zhí)行寫時(shí)拷貝操作。所拷貝的數(shù)據(jù)(也就是,過去的數(shù)據(jù))然后被存儲(chǔ)管理裝置1938移到另一個(gè)位置。如所描述的,數(shù)據(jù)的實(shí)際拷貝可能不會(huì)在特例中的寫操作剛一發(fā)生就被執(zhí)行,這是因?yàn)?,例如,將被重寫的?shù)據(jù)已經(jīng)保存在別處,或因?yàn)閿?shù)據(jù)在被寫之前被暫時(shí)地保存在內(nèi)存中,或因?yàn)閿?shù)據(jù)不是被移動(dòng),而是指向該數(shù)據(jù)的指針被修改。例如在一個(gè)實(shí)施例中,每個(gè)被指引到目標(biāo)存儲(chǔ)單元的寫請求可引起數(shù)據(jù)被寫到當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器兩者。因此,對于緊接著隨后的被指引到相同目標(biāo)存儲(chǔ)單元的寫操作,執(zhí)行實(shí)際的寫時(shí)拷貝是不必要的,這是因?yàn)檫^去的數(shù)據(jù)已被存儲(chǔ)在時(shí)間存儲(chǔ)器中。因此,這里寫時(shí)拷貝操作可意味著實(shí)際的拷貝,而且還可以包括把寫時(shí)拷貝的效果考慮進(jìn)去的最優(yōu)化。如前所述,下面描述的例子通常呈現(xiàn)的存儲(chǔ)管理裝置1938的操作,就好象寫時(shí)拷貝總是被執(zhí)行一樣,且要理解的是最優(yōu)化可被用于實(shí)踐。
存儲(chǔ)管理裝置1938還包括編索引模塊1995,所述編索引模塊1995在存儲(chǔ)管理系統(tǒng)中存儲(chǔ)過去數(shù)據(jù)的位置記錄,以便便于隨后對用于呈現(xiàn)過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象的(連同其他用途)過去數(shù)據(jù)的檢索。編索引模塊1995還可被實(shí)現(xiàn)于軟件、硬件或它們的某種組合中,以及例如實(shí)現(xiàn)于本文之前所描述的元件之一中。例如,在一個(gè)實(shí)施例中,編索引模塊1995被實(shí)現(xiàn)于圖10的I/O管理器362之一或更多個(gè)中。編索引模塊1995包括用于存儲(chǔ)位置記錄的內(nèi)存1996。在該實(shí)施例的一個(gè)版本中,內(nèi)存1996是編索引模塊1995組成部分。在另一個(gè)版本中,內(nèi)存不是編索引模塊1995的組成部分,而是在存儲(chǔ)管理裝置1938內(nèi)的其它地方,例如,在圖10的處理器模塊378中的其它地方。功能上,編索引模塊1995記錄由I/O處理器1962處理的寫請求,并在內(nèi)存1996中存儲(chǔ)被處理的每個(gè)寫請求的記錄。該記錄包括目標(biāo)存儲(chǔ)單元的標(biāo)識(shí)、之前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置、以及表示相應(yīng)寫命令被接收的時(shí)間的寫入時(shí)間。每個(gè)寫請求可被指引到單個(gè)存儲(chǔ)單元,例如,一個(gè)塊,或多個(gè)存儲(chǔ)單元。然而,由編索引模塊存儲(chǔ)的記錄提供一種機(jī)制,通過該機(jī)制在指定過去時(shí)間存儲(chǔ)在每一存儲(chǔ)單元中的數(shù)據(jù)可被定位。在一個(gè)實(shí)施例中,所述時(shí)間是存儲(chǔ)管理裝置1938接收寫命令的時(shí)間。
存儲(chǔ)管理裝置1938還包括映射模塊1997,所述映射模塊1997使用由編索引模塊1995存儲(chǔ)的記錄以映射指定過去時(shí)間的數(shù)據(jù)存儲(chǔ)器中存儲(chǔ)單元的過去數(shù)據(jù)的當(dāng)前位置。映射功能性考慮到數(shù)據(jù)存儲(chǔ)器的過去映象的快速產(chǎn)生。映射模塊1997可被實(shí)現(xiàn)于圖10的處理器模塊378所顯示的一個(gè)或更多個(gè)元件中。例如,在一個(gè)實(shí)施例中,映射模塊1997被實(shí)現(xiàn)于圖10所示的I/O管理器362之一或更多個(gè)中。功能上,映射模塊1997創(chuàng)建指向存儲(chǔ)管理系統(tǒng)中位置的指針的列表,例如,指向過去數(shù)據(jù)在指定過去時(shí)間處于物理存儲(chǔ)器中的位置。一旦映射被創(chuàng)建,其可被存儲(chǔ)管理裝置1938存儲(chǔ)在一位置,在該位置其可在將來被快速存取以再次呈現(xiàn)在過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象。在一個(gè)實(shí)施例中,例如,圖10和11的I/O管理器362之一或更多個(gè)管理該映射。
該映射可以是動(dòng)態(tài)的,例如,當(dāng)附加寫請求被處理器1962處理時(shí),其可被更新。通常,這樣的更新對在映射被產(chǎn)生的時(shí)間之后執(zhí)行寫時(shí)拷貝操作時(shí)確保該映射保持準(zhǔn)確來說是必要的。映射的動(dòng)態(tài)性質(zhì)將參照圖27和28被進(jìn)一步解釋。
存儲(chǔ)管理裝置1938還包括映象產(chǎn)生模塊1999,所述映象產(chǎn)生模塊1999至少部分地基于由映射模塊1997產(chǎn)生的映射,來呈現(xiàn)在過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象。映象產(chǎn)生模塊1999還可被實(shí)現(xiàn)于圖10的處理器模塊378中所顯示的一個(gè)或更多個(gè)元件中。例如,在一個(gè)實(shí)施例中,映象產(chǎn)生模塊1999被實(shí)現(xiàn)于圖10中所示的主機(jī)接口361中。
接收器1961、處理器1962、編索引模塊1995、映射模塊1997和映象產(chǎn)生模塊1999可被實(shí)現(xiàn)于分布式體系結(jié)構(gòu)(如圖10中所示的)中。在這種方法中,每個(gè)處理器模塊378均負(fù)責(zé)處理和編索引被指引到一個(gè)或更多個(gè)數(shù)據(jù)存儲(chǔ)器中的特定存儲(chǔ)單元的寫命令。因此,包含于每個(gè)處理器模塊378中的編索引模塊1995為被指引到編索引模塊1995負(fù)責(zé)的存儲(chǔ)單元的每一寫命令存儲(chǔ)記錄。當(dāng)請求過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的映象時(shí),每一映射模塊1997均為其負(fù)責(zé)的數(shù)據(jù)存儲(chǔ)器部分(如果有的話)產(chǎn)生在指定過去時(shí)間的一映射。該映射是使用存儲(chǔ)在相應(yīng)編索引模塊1995中的記錄而產(chǎn)生的。至少部分地基于該映射,每個(gè)處理器模塊378中的映象產(chǎn)生模塊1999然后呈現(xiàn)其負(fù)責(zé)的數(shù)據(jù)存儲(chǔ)器的映象的一部分(如果有的話)。在一個(gè)實(shí)施例中,每個(gè)處理器模塊378包括對數(shù)據(jù)存儲(chǔ)器的公共部分(例如,相同的存儲(chǔ)單元)負(fù)責(zé)的編索引模塊1995、映射模塊1997和映象產(chǎn)生模塊1999。
上面所描述的方法還允許存儲(chǔ)管理裝置1938包括增加數(shù)據(jù)存儲(chǔ)系統(tǒng)可靠性的內(nèi)置冗余。例如,兩個(gè)獨(dú)立的處理器模塊378可被指定以執(zhí)行上面所描述的對相同存儲(chǔ)單元的接收、處理、編索引、映射和映象產(chǎn)生操作。在一個(gè)實(shí)施例中,第一處理器模塊378被用作主處理模塊,而第二處理器模塊378′作為備份,例如,如果第一處理器模塊378發(fā)生問題。
圖27說明了用于被指引到數(shù)據(jù)存儲(chǔ)器,由處理器1962處理并由編索引模塊1995記錄的寫請求小集合的記錄索引2009。索引2009包括四個(gè)記錄2010、2010′、2010″和2010,所述四個(gè)記錄每個(gè)分別由唯一的寫請求標(biāo)識(shí)符1287、1288、1290和1291標(biāo)識(shí)。每個(gè)記錄2010標(biāo)識(shí)出相關(guān)聯(lián)的寫命令被指引到的目標(biāo)邏輯單元(LUN),也就是目標(biāo)LUN標(biāo)識(shí)。另外,每個(gè)記錄均包括目標(biāo)LUN之上的存儲(chǔ)單元的位置(一個(gè)或更多個(gè)),被重寫的過去數(shù)據(jù)的位置,以及存儲(chǔ)管理裝置1938接收到寫命令的時(shí)間。在圖27所示的實(shí)施例中,存儲(chǔ)單元的位置由與寫請求相聯(lián)系的邏輯塊地址(LBA)和長度(也就是,包含目標(biāo)存儲(chǔ)單元的LBA的數(shù)目)指示。雖然圖27中的每個(gè)記錄2010包括目標(biāo)LUN標(biāo)識(shí),但是該標(biāo)識(shí)可從索引本身被限于單個(gè)LUN的記錄排除。并且,在圖27中,LUN標(biāo)識(shí)被包含在用于每個(gè)記錄2010的過去數(shù)據(jù)的位置中。目標(biāo)LUN和過去數(shù)據(jù)被存儲(chǔ)所在的LUN在圖27所示的每一記錄2010都不同。例如,圖27的每個(gè)寫請求1287、1288、1290和1291都標(biāo)識(shí)為LUN2502的目標(biāo)LUN相聯(lián)系,而與寫請求1287、1288和1291相聯(lián)系的過去數(shù)據(jù)被存儲(chǔ)在LUN2500中,并且與寫請求1290相聯(lián)系的過去數(shù)據(jù)被存儲(chǔ)在LUN2501中。雖然,這些例子呈現(xiàn)寫時(shí)拷貝操作,其中不同的LUN被用于存儲(chǔ)新的數(shù)據(jù)和過去數(shù)據(jù),但是實(shí)際上,新的數(shù)據(jù)和舊數(shù)據(jù)可被存儲(chǔ)在相同LUN上。當(dāng)目標(biāo)LUN還被用于存儲(chǔ)過去數(shù)據(jù)時(shí),所有的LUN標(biāo)識(shí)可從每一個(gè)體記錄排除,例如,在索引本身被限于單個(gè)LUN的記錄之處。
至于索引2009中的位置值,在“新的數(shù)據(jù)”列中左邊的第一個(gè)值是邏輯塊地址(也就是,存儲(chǔ)單元),其中相應(yīng)的寫操作開始于所述邏輯塊地址。第二個(gè)值,“新的數(shù)據(jù)”列中右邊的項(xiàng)是長度,也就是,寫操作被指引到的存儲(chǔ)單元的數(shù)目。在圖27中所示的實(shí)施例中,在“過去數(shù)據(jù)”列中最左邊的項(xiàng)是過去數(shù)據(jù)被寫入的LUN的LUN標(biāo)識(shí)。出現(xiàn)在“過去數(shù)據(jù)”列中的中央項(xiàng),是由于相關(guān)聯(lián)的寫時(shí)拷貝操作而過去數(shù)據(jù)開始被存儲(chǔ)的邏輯塊地址。出現(xiàn)在“過去數(shù)據(jù)”列中最右邊的項(xiàng),是當(dāng)過去數(shù)據(jù)被拷貝以及寫到該位置時(shí)其所占的存儲(chǔ)單元的數(shù)目。因此,索引2009提供充足的信息,從而允許系統(tǒng)標(biāo)識(shí)與每個(gè)記錄2010相聯(lián)系的新近被寫入的數(shù)據(jù)以及過去數(shù)據(jù)的特定位置。
在一個(gè)實(shí)施例中,存儲(chǔ)單元是特定的512字節(jié)塊,所述512字節(jié)塊是LUN的一部分,因此長度指示寫請求將操作于多少個(gè)512字節(jié)塊上。例如,寫請求1287發(fā)生在時(shí)間(t)6100。它被指引到LUN2502中的目標(biāo)存儲(chǔ)單元,開始于LBA 0且長度為17個(gè)塊。存儲(chǔ)在塊0-16的過去數(shù)據(jù)被拷貝并重寫到LUN2500的塊64-80(也就是,位置64,17)。應(yīng)該了解的是,其它塊長度也可被使用。
類似地,寫請求1288導(dǎo)致LUN2502的塊16-20中的數(shù)據(jù)被復(fù)制到LUN2500的位置85-89。在寫請求1288執(zhí)行之后,塊16在t=6100以及t=6117已成為兩個(gè)寫操作的目標(biāo),而塊0-15和17-20中的每個(gè)已成為單個(gè)寫操作的目標(biāo)。寫請求1290是下一個(gè)記錄的寫請求。在其執(zhí)行之后,LUN2502的塊6-9中的數(shù)據(jù)被拷貝并寫到LUN2501的塊37-40,并且新的數(shù)據(jù)被寫到LUN2502的塊6-9中。在此,塊6-9和塊16已成為兩個(gè)寫操作的目標(biāo),而塊0-5、10-15和17-20中的每個(gè)已成為單個(gè)寫操作的目標(biāo)。寫請求1291在處理寫請求1290之后被處理。作為寫請求1291的結(jié)果,塊7-10中的數(shù)據(jù)作為過去數(shù)據(jù)被寫到LUN2500的塊46-49,而新的數(shù)據(jù)被存儲(chǔ)在LUN2502的塊7-10中。在寫請求1291執(zhí)行之后,塊7-9已成為三個(gè)寫操作的目標(biāo),塊6、10和16已成為兩個(gè)寫操作的目標(biāo),并且塊0-5、11-15和17-20每個(gè)均已成為單個(gè)寫操作的目標(biāo)。
圖28說明了由缺射模塊1997根據(jù)記錄2010產(chǎn)生的兩個(gè)簡化示范映射2100、2101,所述記錄2010由編索引模塊1995存儲(chǔ)在索引2009中。所述映射演示由記錄2010提供的信息如何被映射模塊1997使用,以映射在指定過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)的位置。為便于解釋,所述映射被指引到一數(shù)據(jù)存儲(chǔ)器中的20個(gè)存儲(chǔ)單元。存儲(chǔ)管理裝置1938可同任何大小的數(shù)據(jù)存儲(chǔ)器,或任何數(shù)目的數(shù)據(jù)存儲(chǔ)器一起被使用,因此應(yīng)該了解的是,采用存儲(chǔ)管理裝置1938的數(shù)據(jù)管理系統(tǒng)將不會(huì)限于如該說明性例子中的具有20個(gè)存儲(chǔ)單元的單個(gè)數(shù)據(jù)存儲(chǔ)器。
通常,映射2100、2101是為指定的過去時(shí)間產(chǎn)生的并被顯示在產(chǎn)生時(shí)間。為準(zhǔn)確地反映發(fā)生在映射的初始產(chǎn)生之后的寫請求,映射可在其初始產(chǎn)生之后被再生或修改。此處,術(shù)語“初始產(chǎn)生時(shí)間”指的是映射最初被創(chuàng)建的時(shí)間。術(shù)語“產(chǎn)生時(shí)間”指的是,在初始產(chǎn)生時(shí)間之后,映射被更新的時(shí)間點(diǎn)。映射2100是映射在初始產(chǎn)生時(shí)間t=6127的視圖。映射2100是響應(yīng)接收器1961接收對在指定過去時(shí)間t=6106的數(shù)據(jù)存儲(chǔ)器的映象的請求而被創(chuàng)建的。在圖28所示的方法中,映射2100、2101僅包括關(guān)于自指定過去時(shí)間以來以成為寫請求主體的存儲(chǔ)單元的消息。其它存儲(chǔ)單元中的數(shù)據(jù)可被定位而不用映射,這是因?yàn)檫@樣的數(shù)據(jù)仍存在于其原始被寫入的存儲(chǔ)單元(也就是,當(dāng)前存儲(chǔ)器)中。雖然不限于該方法,但是這樣一種實(shí)現(xiàn)是有利的,因?yàn)樗紤]到更快的映射產(chǎn)生以及,因此更快的映象產(chǎn)生。
在一個(gè)實(shí)施例中,過去時(shí)間的規(guī)約是在請求時(shí)間從主機(jī)提供,并基本上地同時(shí)地由接收器1961接收。在該實(shí)施例的一個(gè)版本中,映射模塊1997開始產(chǎn)生映射2100,基本上與接收器1961收到請求是同時(shí)的。
參照存儲(chǔ)在圖27的索引2009中的時(shí)間,寫請求1287發(fā)生在指定過去時(shí)間(t=6106)之前。這些位置記錄2010所關(guān)心的不是產(chǎn)生映射2100,這是因?yàn)椋?,與寫請求1287相聯(lián)系的過去數(shù)據(jù)的位置到指定過去時(shí)間時(shí)已經(jīng)被重寫。然而,對于發(fā)生在指定過去時(shí)間之后以及初始產(chǎn)生時(shí)間之前(以及就更新映射來說,在映射產(chǎn)生時(shí)間之前)的每個(gè)寫請求都采用了映射。例如,發(fā)生在過去時(shí)間之后以及初始產(chǎn)生時(shí)間之前的寫請求1288和1290中的每一個(gè)。因此,映射模塊1997將使用與寫請求1288和1290相聯(lián)系的記錄2010來產(chǎn)生映射2100。那些發(fā)生在產(chǎn)生時(shí)間之后的寫請求,當(dāng)然,當(dāng)映射2100被產(chǎn)生時(shí)可能仍不存在。這是真實(shí)的,例如在映射2100基本上與請求同時(shí)產(chǎn)生的情況下,這是因?yàn)樵谶@樣的情況中,寫請求還沒有發(fā)生。然而,如下更詳細(xì)地描述的,映射模塊1997可更新現(xiàn)有映射2101以反映發(fā)生在映射的初始產(chǎn)生時(shí)間之后的寫請求的處理(和相關(guān)聯(lián)的寫時(shí)拷貝操作)。
在圖28中,映射2100包括指向存儲(chǔ)單元的過去數(shù)據(jù)的位置的指針,所述存儲(chǔ)單元自指定過去時(shí)間t=6106以來已成為寫請求主體。因此,塊6-9被映射到LUN2501的塊37-40,且塊16-20被映射到LUN2500的塊85-89。映射模塊1997使用存儲(chǔ)在索引2009(圖27)中的信息以產(chǎn)生映射。在圖28中所示的實(shí)施例中,塊0-5和塊10-15的存儲(chǔ)單元未被包含在映射中,這是因?yàn)槟切┐鎯?chǔ)單元自指定過去時(shí)間t=6106以來未成為寫命令的目標(biāo),因此它們?nèi)钥芍苯訌漠?dāng)前存儲(chǔ)器得到。
第二映射2101說明通常映射可如何隨時(shí)間變化以反映在初始產(chǎn)生時(shí)間之后的寫請求的處理。例如如果存儲(chǔ)單元之前未被映射,那么一指針就被加到那些成為后續(xù)寫請求目標(biāo)的存儲(chǔ)單元的映射。在本例中,映射2101具有產(chǎn)生時(shí)間6131,所述產(chǎn)生時(shí)間6131反映寫請求1291。寫請求1291對LUN 2502中的塊7、8、9和10起作用。因此,塊10提供了映射更新所應(yīng)用的一個(gè)位置例子。塊10表示指針的添加,這是由于寫請求1291而需要的指針添加。所述指針反映這樣的事實(shí),在指定過去時(shí)間t=6106存儲(chǔ)在塊10中的數(shù)據(jù)已被移動(dòng),并且此刻存儲(chǔ)在LUN2500的塊49中。映射2101的其余部分,包括塊6-9的映射,自第一映射2100以來保持不變。塊6-9的映射保持未改變是因?yàn)?,雖然在時(shí)間t=6130,寫時(shí)拷貝操作被執(zhí)行于塊6-9上,但其不影響在指定過去時(shí)間t=6106存儲(chǔ)在塊6-9中的數(shù)據(jù)的位置。該數(shù)據(jù)仍然存儲(chǔ)在LUN2501的塊37-40中。
映射2100和2101可被存儲(chǔ)于允許已映射的數(shù)據(jù)范圍的高效檢索的任何結(jié)構(gòu)中。在一個(gè)實(shí)施例中,映射2100和2101被存儲(chǔ)在二叉樹中以允許包含在映射中的塊的快速標(biāo)識(shí),并定位自指定過去時(shí)間以來已被重寫的存儲(chǔ)單元的數(shù)據(jù)來源(當(dāng)前位置)。在另一個(gè)實(shí)施例中,映射被存儲(chǔ)在B+樹中。在這些實(shí)施例中每一個(gè)的版本中,查找樹的每個(gè)節(jié)點(diǎn)均包括一指針,該指針指向該范圍的數(shù)據(jù)來源。數(shù)據(jù)庫、文件及其他結(jié)構(gòu)也可以用來存儲(chǔ)映射。
為便于解釋,第二映射2101被認(rèn)為是在t=6131產(chǎn)生的。然而,應(yīng)該認(rèn)識(shí)到,映射2101不必全部是新產(chǎn)生的。映射2101可以是新產(chǎn)生的,但其還可以是對映射2100的更新或修改的結(jié)果。因此,映射2100和映射2101可獨(dú)立并行地存在,或映射2101可替換映射2100。此外,存儲(chǔ)管理裝置1938可以響應(yīng)在初始產(chǎn)生時(shí)間之后被編索引的寫請求而自動(dòng)地產(chǎn)生映射更新。另外,前面有關(guān)圖26-28的描述描述了用于存儲(chǔ)包含在數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)的單個(gè)目標(biāo)LUN的使用。再次,應(yīng)該理解的是,在一些實(shí)現(xiàn)中數(shù)據(jù)存儲(chǔ)器可包括多個(gè)LUN(所述LUN是寫請求的目標(biāo))上的數(shù)據(jù),存儲(chǔ)過去數(shù)據(jù),或其組合。另外,數(shù)據(jù)存儲(chǔ)器可包括時(shí)間存儲(chǔ)器和當(dāng)前存儲(chǔ)器,所述時(shí)間存儲(chǔ)器和當(dāng)前存儲(chǔ)器每個(gè)均包括存儲(chǔ)在多個(gè)LUN上的數(shù)據(jù)。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1938在請求指定過去時(shí)間的映象之處開始處理映射。然而,產(chǎn)生映射可能是耗時(shí)的,因此在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置1938使用映射來響應(yīng)對包含在該映射中的存儲(chǔ)單元的請求,并搜索索引2009查找未包含在該映射中的存儲(chǔ)單元的位置。如果存儲(chǔ)單元被包含在索引記錄2010中,那么該信息被包含在該映射中以作日后參考。如果存儲(chǔ)單元未被包含在該索引中,也在該映射中產(chǎn)生一記號。
當(dāng)映射是完整的,因此全部的適當(dāng)索引記錄2010已經(jīng)被加入到該映射時(shí),存儲(chǔ)管理裝置1938就不再需要查閱該索引2009,并可僅引用該映射。同樣地,映射中用于指示數(shù)據(jù)位于當(dāng)前存儲(chǔ)器中的明確項(xiàng)可從該映射中移除,以使其更有效率。
在另一個(gè)實(shí)施例中,標(biāo)記或其它指示符被用于標(biāo)識(shí)完整的映射。在該實(shí)施例的一個(gè)版本中,直到映射2100被建立時(shí),索引2009才被用作將被用于產(chǎn)生映象的數(shù)據(jù)位置的來源。一旦映射2100完成,其被用作將被用于產(chǎn)生映象的數(shù)據(jù)位置的來源,并且索引不再被使用。在該實(shí)施例的一個(gè)版本中,未包括在映射中的存儲(chǔ)單元不會(huì)被作記號。
用于處理I/O請求的系統(tǒng) 通常,本發(fā)明另外的方面涉及用于處理I/O請求的系統(tǒng)和方法。簡要綜述,在本發(fā)明的一個(gè)實(shí)施例中,系統(tǒng)處理被指引到至少一個(gè)邏輯存儲(chǔ)單元的I/O請求。該系統(tǒng)包括用于存儲(chǔ)多個(gè)有序的操作集合的操作內(nèi)存,每個(gè)集合均與一I/O請求相聯(lián)系。該系統(tǒng)還包括與操作內(nèi)存通信的處理器,其用于將存儲(chǔ)在操作內(nèi)存中的操作排列為第一隊(duì)列或第二隊(duì)列。第一隊(duì)列和第二隊(duì)列與處理器通信。第一隊(duì)列基于目標(biāo)邏輯單元的標(biāo)識(shí)對操作進(jìn)行排隊(duì)。第二隊(duì)列基于操作類型基礎(chǔ)上對操作進(jìn)行排隊(duì)。
通常,在一個(gè)實(shí)施例中,與一請求相聯(lián)系的第一操作被放置在與一個(gè)或更多個(gè)LUN或一個(gè)LUN的一部分相聯(lián)系的隊(duì)列上。該操作在LUN隊(duì)列上被排隊(duì),直到在對被指引到重疊存儲(chǔ)單元(如被排隊(duì)的請求被指引到的存儲(chǔ)單元)的請求的處理中沒有其它操作(例如,重疊可以是兩個(gè)請求被指引到一個(gè)或更多個(gè)相同存儲(chǔ)單元之處)為止。換言之,在該實(shí)施例中,一操作從LUN隊(duì)列被拿掉,并且只有當(dāng)在處理中沒有對當(dāng)時(shí)的重疊存儲(chǔ)單元的操作時(shí)才會(huì)被處理。與請求相聯(lián)系的第一和其余操作可隨后被處理,而不用關(guān)心與其它操作重疊。用于多個(gè)請求的操作可被,例如,批量處理以提高效率。其余操作可被有序地放置在操作特定的隊(duì)列上,以便于這樣的批量處理。因此,所描述的兩種類型的隊(duì)列促進(jìn)了請求的處理而沒有地址沖突。
圖29說明根據(jù)本發(fā)明該方面的用于處理I/O請求的系統(tǒng)。主機(jī)2234通過存儲(chǔ)管理裝置2238與物理存儲(chǔ)器2236通信。物理存儲(chǔ)器2236可包括一個(gè)或更多個(gè)邏輯單元(LUN),例如,LUN 1到LUN X。存儲(chǔ)在這些LUN中的數(shù)據(jù)可通過存儲(chǔ)管理裝置2238被呈現(xiàn)給主機(jī)2234。存儲(chǔ)管理裝置2238通過第一通信鏈路2240與主機(jī)2234通信。存儲(chǔ)管理裝置2238通過第二通信鏈路2242與物理存儲(chǔ)器2236通信。如同之前所描述的方面一樣,第一通信鏈路2240可以是任何類型的數(shù)據(jù)通信鏈路,例如LAN、存儲(chǔ)網(wǎng)絡(luò)或包括光纖信道和小型計(jì)算機(jī)系統(tǒng)接口(SCSI)的總線。以太網(wǎng)(例如,吉比特以太網(wǎng))和無線通信是可用于第一通信鏈路2240的其它可能。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置在邏輯層傳遞SCSI協(xié)議,并且能使用各種物理層的一個(gè)或更多個(gè)來傳遞,所述物理層包括SCSI總線、光纖信道、光纖信道2或以太網(wǎng)上的iSCSI。在通信鏈路2240上,響應(yīng)主機(jī)2234的/O請求,存儲(chǔ)管理裝置2238所起的作用就好象其是物理存儲(chǔ)器2236一樣。主機(jī)2234的I/O請求可包括對存儲(chǔ)單元的讀和寫請求。
一旦從主機(jī)2234接收到I/O請求,存儲(chǔ)管理裝置2238就產(chǎn)生操作的有序集合,所述操作被有序地處理以執(zhí)行該I/O請求。在一個(gè)實(shí)施例中,例如,被指引到一存儲(chǔ)單元的寫請求導(dǎo)致五個(gè)操作的有序集合,其包括1)讀存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的現(xiàn)有數(shù)據(jù);2)將現(xiàn)有數(shù)據(jù)寫至另一個(gè)位置;3)為在步驟2執(zhí)行的操作建立索引;4)將新的數(shù)據(jù)寫至目標(biāo)存儲(chǔ)單元;以及5)釋放該寫請求,例如,產(chǎn)生一肯定應(yīng)答或確認(rèn)該寫請求被完成。另一個(gè)例子是導(dǎo)致兩個(gè)操作的有序集合的讀請求。第一操作是讀存儲(chǔ)在目標(biāo)存儲(chǔ)單元的數(shù)據(jù),并且第二步驟是釋放該讀請求。在其它實(shí)施例中,上面所描述的I/O請求被修改以包括對若干系統(tǒng)配置有利的額外操作。例如,如上所描述的,寫請求可包括被指引到更新時(shí)間映射的操作。在其它實(shí)施例中,作為最優(yōu)化的一部分,與I/O請求相聯(lián)系的操作的數(shù)目可被減少或重排序。
存儲(chǔ)管理裝置2238的硬件和軟件體系結(jié)構(gòu)對高效處理操作的有序集合是有利的。存儲(chǔ)管理裝置2238包括通過內(nèi)部網(wǎng)絡(luò)2280相互通信的操作內(nèi)存2296、處理器2262、LUN隊(duì)列2221以及操作—類型隊(duì)列2222。在一個(gè)實(shí)施例中,LUN隊(duì)列2221包括每一相應(yīng)LUN的獨(dú)立隊(duì)列,所述LUN包含在物理存儲(chǔ)器2236中,例如,LUN 1到LUN X。操作—類型隊(duì)列2222包括用于基于將被排隊(duì)的操作的類型組織操作的獨(dú)立隊(duì)列。例如,編索引隊(duì)列被用于存儲(chǔ)來自多個(gè)有序集合的索引操作。另外,操作—類型隊(duì)列不是專用于單個(gè)LUN;因此,編索引隊(duì)列及其他操作—類型隊(duì)列可存儲(chǔ)被指引到多個(gè)LUN的操作。功能上,在一個(gè)實(shí)施例中,在每一有序操作集合中的第一操作被排列在適當(dāng)?shù)腖UN隊(duì)列中。每一有序操作集合中第一操作之后的操作不被排列在LUN隊(duì)列中。作為替代,隨后的操作被排列在操作—類型隊(duì)列中。
圖30說明了本系統(tǒng)的一個(gè)實(shí)施例所采用的通用處理。在步驟2304,存儲(chǔ)管理裝置2238接收來自主機(jī)2234的I/O請求。例如,在一個(gè)實(shí)施例中,主機(jī)接口361(圖10)接收I/O請求。在步驟2305,存儲(chǔ)管理裝置2238產(chǎn)生與該I/O請求相聯(lián)系的有序操作集合。然后,在步驟2306,來自操作的有序集合的第一操作被放入LUN隊(duì)列,所述LUN隊(duì)列負(fù)責(zé)作為接收到的I/O請求目標(biāo)的LUN。第一操作從隊(duì)列中被拿掉并被處理。在步驟2307,有序集合中隨后的操作被處理。在一個(gè)實(shí)施例中,可用之前在本文描述的實(shí)施例來完成這些步驟的執(zhí)行。例如,通常,每一步驟均可在處理器模塊378(圖10)中執(zhí)行。更具體地說,在該實(shí)施例的一個(gè)版本中,I/O管理器362執(zhí)行步驟2305并產(chǎn)生操作的有序集合,而且LUN隊(duì)列和操作—類型隊(duì)列可被實(shí)現(xiàn)于內(nèi)存296(圖9)中,所述內(nèi)存296可以包含或可以不被包含在I/O管理器362中。在一個(gè)實(shí)施例中,第一操作之后的有序集合中的操作被存儲(chǔ)在內(nèi)存中,而第一操作被存儲(chǔ)在LUN隊(duì)列中。一旦第一操作被處理,來自有序集合的第二操作就從內(nèi)存被拉出并被放入與第二操作對應(yīng)的操作類型的操作—類型隊(duì)列。一旦第二操作被處理,來自有序集合的第三操作就從內(nèi)存被拉出并被存儲(chǔ)在與之對應(yīng)的操作類型的操作—類型隊(duì)列中。對于與I/O請求相聯(lián)系的每一操作,重復(fù)將一操作從操作內(nèi)存2296拉出,將其存儲(chǔ)在適當(dāng)?shù)年?duì)列中,處理該操作,以及將有序集合中的后續(xù)操作拉入適當(dāng)?shù)年?duì)列中的步驟,直到由I/O請求產(chǎn)生的全部操作都被完成。
現(xiàn)在參照圖31,其說明了與I/O請求對應(yīng)的表項(xiàng)2410的表格2407。每個(gè)表項(xiàng)均包括存儲(chǔ)管理裝置2238接收I/O請求的時(shí)間、I/O請求的標(biāo)識(shí)、目標(biāo)LUN的標(biāo)識(shí)(例如,LUN#)、受I/O請求影響的邏輯塊地址(或其它存儲(chǔ)單元)(例如,目標(biāo)存儲(chǔ)單元)、I/O請求類型,以及由于I/O請求而產(chǎn)生的有序操作集合。存儲(chǔ)管理裝置2238能夠處理與1千兆字節(jié)或更大的數(shù)據(jù)儲(chǔ)存系統(tǒng)相聯(lián)系的極大量的I/O請求。然而,該說明性表格呈現(xiàn)一信息的小集合,用于解釋的目的。表格2407中的表項(xiàng)覆蓋一段時(shí)間,至少從t=6100到t=6130。兩種類型的I/O請求被包含在表格2407中,也就是,讀請求(1290)和寫請求(1286、1287、1288、1289和1291)。然而,本系統(tǒng)可處理各種I/O請求比如對修改歷史的請求。另外,I/O請求已在表格2407覆蓋的時(shí)間段中被指引到兩個(gè)不同的LUN,也就是,LUN 2502和LUN 2503。
表格2407包括與每個(gè)I/O請求相聯(lián)系的有序操作集合。在標(biāo)號為1-5的列中操作集合以它們被處理的次序出現(xiàn)。例如,I/O請求1288是包括五個(gè)有序操作的寫請求1)讀目標(biāo)存儲(chǔ)單元中的現(xiàn)有數(shù)據(jù);2)將現(xiàn)有數(shù)據(jù)寫至另一個(gè)位置;3)為在步驟2中執(zhí)行的操作建立索引;4)將新的數(shù)據(jù)寫至目標(biāo)存儲(chǔ)單元;以及5)釋放該寫請求。在另一個(gè)實(shí)施例中,寫請求包括不同的有序操作集合。例如,在使用時(shí)間映射的系統(tǒng)中,寫請求可包括六個(gè)有序操作1)讀目標(biāo)存儲(chǔ)單元中的現(xiàn)有數(shù)據(jù);2)將現(xiàn)有數(shù)據(jù)寫至另一個(gè)位置;3)為在步驟2中執(zhí)行的操作建立索引;4)將新的數(shù)據(jù)寫至目標(biāo)存儲(chǔ)單元;5)必要時(shí)更新一個(gè)或更多個(gè)時(shí)間映射;以及6)釋放該寫請求。此外,可通過將所述有序操作中的一個(gè)或更多個(gè)分成子操作來擴(kuò)展I/O請求—類型中的有序操作的數(shù)量。例如,緊接的前面有序集合的操作5可被分成被指示確定一時(shí)間映射是否在之前已產(chǎn)生的一個(gè)操作,以及被指示映射更新的另一操作。另外,所述步驟可無序執(zhí)行,例如,如本文參考最優(yōu)化所描述的。
圖32提供一簡化圖,所述簡化圖此刻將通過使用圖31的簡化例子而被用于解釋存儲(chǔ)管理裝置2238的操作,所述存儲(chǔ)管理裝置2238包括LUN隊(duì)列和操作—類型隊(duì)列。圖32的表格中的數(shù)據(jù)與圖31的表格2407中的信息對應(yīng)。最左列中的信息表示存儲(chǔ)管理裝置2238接收到相關(guān)聯(lián)的I/O請求的時(shí)間。標(biāo)號為LUN 2502和LUN 2503的列表示兩個(gè)LUN隊(duì)列。圖32的右半邊描述了操作—類型隊(duì)列。其中顯示了四種類型的操作—類型隊(duì)列1)將現(xiàn)有數(shù)據(jù)從目標(biāo)存儲(chǔ)單元寫至另一個(gè)位置的操作隊(duì)列(這些隊(duì)列還被稱為“寫—現(xiàn)有數(shù)據(jù)”隊(duì)列);2)索引隊(duì)列,其用于將記錄由完成前面的寫操作而產(chǎn)生的位置的操作排隊(duì);3)寫新數(shù)據(jù)隊(duì)列,其用于將新的數(shù)據(jù)寫至目標(biāo)存儲(chǔ)單元的操作排隊(duì);以及4)釋放隊(duì)列,其用于將指示有序集合中的前面操作已完成的操作排隊(duì)。
所述隊(duì)列的內(nèi)容表示來自表格2407中顯示的操作的有序集合的各個(gè)操作。每個(gè)操作均由產(chǎn)生該操作的I/O請求標(biāo)識(shí),以及連字符的右邊,操作在其所屬有序集合中所占的位數(shù)來表示。因此,從I/O請求1286產(chǎn)生的操作的有序集合中的第四操作(也就是,寫新數(shù)據(jù)操作)在圖32中表現(xiàn)為1286-4。作為另一個(gè)例子,由于I/O請求1288而產(chǎn)生的操作的有序集合中的第一操作被表示為1288-1。
在時(shí)間t=6100,I/O請求1286由存儲(chǔ)管理裝置2238收到。由于I/O請求1286產(chǎn)生操作的有序集合(也就是,1286-1、1286-2、1286-3、1286-4、和1286-5),所述操作的有序集合對應(yīng)圖31中顯示于t=6100的操作集合。來自該有序集合的操作被存儲(chǔ)在操作內(nèi)存2296中。從該有序集合中的第一操作開始,該有序集合的每一操作均被移入一隊(duì)列中,一次一個(gè),并被處理。因此,在t=6100,操作1286-1被放入LUN2502隊(duì)列中而操作1286-2、1286-3、1286-4和1286-5被存儲(chǔ)在操作內(nèi)存2296中。第一操作(操作1286-1)存儲(chǔ)在LUN2502隊(duì)列中,這是因?yàn)镮/O請求1286被指引到LUN2502。
在圖12中,存儲(chǔ)管理裝置2238的處理狀態(tài)然后在t=6119被查看。到此時(shí),存儲(chǔ)管理裝置2238已接收了兩個(gè)另外的I/O請求,也就是,1287和1288(分別在t=6114和t=6117)。并且,操作1286-1(也就是,讀存在于目標(biāo)存儲(chǔ)單元中的數(shù)據(jù))已被處理。因此,操作1286-2已被標(biāo)識(shí)并存儲(chǔ)在寫—現(xiàn)有數(shù)據(jù)隊(duì)列中。因?yàn)椴僮?286-1被處理,所以它不再被存儲(chǔ)在LUN 2502隊(duì)列中。然而,請求1287和1288兩者都被指引到LUN2502。因此,LUN 2502隊(duì)列此刻包括來自這兩個(gè)未決(pending)I/O請求中每一個(gè)的第一操作。這兩個(gè)操作將被按次序執(zhí)行,所述次序是它們由存儲(chǔ)管理裝置2238接收的次序,也就是,只要在對重疊存儲(chǔ)單元的處理中沒有請求,1287-1后面就是1288-1。
存儲(chǔ)管理裝置2238可包括在此更詳細(xì)地描述的這樣的查找樹、算法及其他系統(tǒng)和方法,從而高效準(zhǔn)確地處理I/O請求。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置2238使用重疊檢測進(jìn)程來確定新接收到的I/O請求是否把任何存儲(chǔ)單元作為目標(biāo),所述存儲(chǔ)單元還是當(dāng)前正被處理的一個(gè)或更多個(gè)I/O請求的目標(biāo)。如果是這樣的話,有序集合中新接收的I/O請求的第一操作將被保持在適當(dāng)?shù)腖UN隊(duì)列中直到前面I/O請求的所有操作都被處理。然而,如這里,在新接收的I/O請求(也就是,1287和1288)沒有如之前接收的I/O請求(一個(gè)或更多個(gè))(例如,1286)一樣把任何相同的目標(biāo)存儲(chǔ)單元作為目標(biāo)的情況下,存儲(chǔ)管理裝置2238可一起處理多個(gè)有序集合中第一操作之后的操作(例如,1286、1287和1288)。為了便于之前描述的處理,存儲(chǔ)管理裝置2238可包括在此更詳細(xì)地描述的系統(tǒng)和方法,從而批量處理排在操作—類型隊(duì)列中的操作。因此,操作可被保持在操作—類型隊(duì)列中直到它們被其它相同類型的操作加入隊(duì)列,從而提高存儲(chǔ)管理裝置2238的總體處理速度和效率。
在時(shí)間t=6122,存儲(chǔ)管理裝置2238已處理操作1286-2(寫現(xiàn)有數(shù)據(jù)),并確定請求1286、1287和1288被指引到目標(biāo)LUN 2502的不相重疊的部分,順序地處理操作1287-1和1288-1,以及接收到另外兩個(gè)I/O請求(也就是,1289和1290)。來自每一新接收的I/O請求的第一操作(也就是,1289-1和1290-1)被存儲(chǔ)在LUN 2502隊(duì)列中。當(dāng)操作1287-1和1288-1被處理時(shí),它們從LUN隊(duì)列中被除去。操作1286-2已從寫現(xiàn)有隊(duì)列被除去,并且操作1286-3已從操作內(nèi)存2296被拉出并被存儲(chǔ)在索引隊(duì)列中。類似地,操作1287-2和1288-2已從操作內(nèi)存2296被拉出并被存儲(chǔ)在寫現(xiàn)有隊(duì)列中。
隊(duì)列在t=6124的視圖示范了上面所描述的批量處理方法的簡化例子。在t=6122和t=6124之間,操作1287-2和1288-2從寫現(xiàn)有隊(duì)列被除去并被一起處理。結(jié)果,操作1287-3和1288-3從操作內(nèi)存2296被彈出并被存儲(chǔ)在索引隊(duì)列中,在所述索引隊(duì)列中它們加入仍未被處理的操作1286-3。關(guān)于LUN隊(duì)列中的操作,操作1289-1被處理,并因此,操作1289-2從操作內(nèi)存2296被彈出并被存儲(chǔ)在寫—現(xiàn)有數(shù)據(jù)隊(duì)列中。然而,因?yàn)樵谧鳛镮/O請求1289和1290目標(biāo)的存儲(chǔ)單元中存在重疊(也就是,如圖31所列的塊26-28),操作1290-1直到I/O請求1289的所有操作都被處理才會(huì)被處理。同時(shí),操作1290-1保持在LUN 2502隊(duì)列中,并且操作1290-2、1290-3、1290-4和1290-5將保持在操作內(nèi)存2296中。
索引隊(duì)列中的三個(gè)操作(也就是,1286-3、1287-3和1288-3)此刻被一起處理。在三個(gè)索引操作完成之后,相應(yīng)的寫新數(shù)據(jù)操作(也就是,分別是1286-4、1287-4和1288-4)從操作內(nèi)存2296被彈出并在t=6125被存儲(chǔ)在寫—新數(shù)據(jù)的隊(duì)列中。并且在t=6125,被指引到LUN2503的I/O請求1291由存儲(chǔ)管理裝置2238收到。來自由于請求1291而產(chǎn)生的有序集合的第一操作被存儲(chǔ)在LUN 2503隊(duì)列中。此外,在t=6125,沒有隊(duì)列中的其它操作被指引到LUN 2503;因此,操作1291-1被存儲(chǔ)為LUN 2503隊(duì)列中的第一操作。隨后的操作(也就是,1291-2、1291-3、1291-4和1291-5)被存儲(chǔ)在操作內(nèi)存2296中。在這個(gè)時(shí)候,在圖32中所顯示的兩個(gè)LUN隊(duì)列中的每一個(gè)均包括單個(gè)操作。雖然操作1291-1在稍后時(shí)間被接收,但它可在操作1290-1之前被處理,這是因?yàn)樵贚UN 2503隊(duì)列中在1291-1之前沒有操作,并且在本例中,沒有LUN2503的操作在處理。相比之下,操作1290-1將保持在隊(duì)列中直到與I/O請求1289相聯(lián)系的所有操作都被完成(也就是,1289-2、1289-3、1289-4和1289-5)。
在時(shí)間t=6127,由于在t=6125已將每一操作存儲(chǔ)在操作—類型隊(duì)列中,操作1291-1已被處理。作為該處理的結(jié)果,操作1286-5、1287-5和1288-5從操作內(nèi)存2296被彈出并被移至釋放隊(duì)列。在這時(shí)候,與I/O請求1286、1287和1288相聯(lián)系的操作不再被存儲(chǔ)在操作內(nèi)存2296中。并且,操作1289-4從操作內(nèi)存被彈出并被存儲(chǔ)在寫—新數(shù)據(jù)隊(duì)列中,而且操作1291-2從操作內(nèi)存被彈出并被存儲(chǔ)在寫—現(xiàn)有數(shù)據(jù)隊(duì)列中。根據(jù)本例應(yīng)該理解,操作—類型隊(duì)列可被用于服務(wù)多個(gè)LUN。例如,操作1291-2可與被指引到LUN 2502或任何其它LUN的組合的操作一起被處理(包括批量處理),所述LUN正由存儲(chǔ)管理裝置2238服務(wù)。
到時(shí)間t=6129,示例I/O請求的第一個(gè)請求被完成。釋放操作1286-5、1287-5和1288-5被一起處理。每個(gè)釋放操作均提供系統(tǒng)肯定應(yīng)答,即相關(guān)聯(lián)的I/O請求被完成。一旦釋放操作被處理,相應(yīng)的I/O請求就被完成,并且LUN隊(duì)列和操作—類型隊(duì)列都不存儲(chǔ)任何與已完成的I/O請求相聯(lián)系的操作。因此,在t=6129,操作—類型隊(duì)列僅包括索引隊(duì)列中的操作1291-3,和釋放隊(duì)列中的1289-5。因?yàn)镮/O請求1289的處理未完成,所以操作1290-1保持在LUN 2502隊(duì)列中。
現(xiàn)在參照圖33,在系統(tǒng)元件的功能描述中,存儲(chǔ)管理裝置2538包括操作產(chǎn)生器2525。操作產(chǎn)生器2525接收源自主機(jī)2534的I/O請求。如之前所描述的,對于每個(gè)I/O請求,有序操作的集合由I/O請求類型決定。在一個(gè)實(shí)施例中,操作產(chǎn)生器2525在剛一接收到I/O請求時(shí)就確定I/O請求類型?;贗/O請求類型,操作產(chǎn)生器2525從每個(gè)從主機(jī)2534接收的I/O請求提取有序操作集合。在一個(gè)實(shí)施例中,操作產(chǎn)生器2525被包含在存儲(chǔ)管理裝置2538的處理模塊378(圖10)中。在該實(shí)施例的一個(gè)版本中,操作產(chǎn)生器被包含在圖10的目標(biāo)模式驅(qū)動(dòng)器382中。存儲(chǔ)管理裝置2538還包括操作池2524,所述操作池存儲(chǔ)在操作被移到隊(duì)列之前所提取的每一操作。在一個(gè)實(shí)施例中,操作池2524被包含在操作內(nèi)存2296中。在該實(shí)施例的一個(gè)版本中,操作內(nèi)存被包含在圖10的緩沖區(qū)363中。
存儲(chǔ)管理裝置2538既包括LUN排隊(duì)模塊2521又包括操作—類型排隊(duì)模塊2522。LUN排隊(duì)模塊2521從操作的每一有序集合,從操作池2524接收第一操作,并將其存儲(chǔ)在其被處理的適當(dāng)LUN中。在圖33中所示的實(shí)施例中,LUN排隊(duì)模塊2521包括處理管理模塊2526。在一個(gè)實(shí)施例中,通常,處理管理模塊2526管理存儲(chǔ)在LUN隊(duì)列中的操作的處理。更具體地說,處理管理模塊2526確保存儲(chǔ)在LUN隊(duì)列中的操作以這種方式處理,以使當(dāng)有序集合中隨后的操作被拉到操作—類型隊(duì)列時(shí),它們相對存儲(chǔ)在操作—類型隊(duì)列中的任何其它操作是冪等的。處理管理模塊2526所使用的處理本文的其他地方被更詳細(xì)地描述。然而,在一個(gè)實(shí)施例中,處理管理模塊2526采用搜索樹數(shù)據(jù)結(jié)構(gòu)來組織存儲(chǔ)在LUN隊(duì)列2221中的操作的執(zhí)行次序。在另一個(gè)實(shí)施例中,處理管理模塊采用公平算法來確保被指引到接收低容量I/O請求的LUN的操作及時(shí)地得到處理。在該實(shí)施例的一個(gè)版本中,處理管理模塊2526監(jiān)控每個(gè)未決操作存儲(chǔ)在LUN隊(duì)列中的時(shí)間量。
操作—類型排隊(duì)模塊2522接收來自操作池2524的每個(gè)有序集合中第一操作之后的操作并將它們存儲(chǔ)在適當(dāng)?shù)牟僮鳌愋完?duì)列中。操作—類型排隊(duì)模塊還包括批處理模塊2528。批處理模塊2528可被用于最優(yōu)化存儲(chǔ)在操作—類型隊(duì)列中的操作的處理。例如,兩個(gè)被指引到相鄰的存儲(chǔ)單元的未決操作可在單批中處理,從而減少必須由物理存儲(chǔ)器執(zhí)行的讀寫操作的數(shù)量。因此,為了增加總體處理速度,批處理可包括延遲未決操作的處理直到獲得較大的批量。
存儲(chǔ)管理裝置2538還包括編索引模塊2523。編索引模塊2523產(chǎn)生由于寫時(shí)拷貝操作而被移動(dòng)的數(shù)據(jù)的位置記錄。編索引模塊2523可被包含在圖10的I/O管理器362中。在一個(gè)實(shí)施例中,索引隊(duì)列(例如,如圖32中所示)存儲(chǔ)在編索引模塊2523中產(chǎn)生記錄創(chuàng)建的操作。
重疊檢測 根據(jù)所公開技術(shù)的至少一些方面實(shí)現(xiàn)的存儲(chǔ)管理裝置可通過高效地處理被指引到來自企業(yè)內(nèi)主機(jī)處理器的特定邏輯存儲(chǔ)單元及/或其部分的I/O請求,從而提高企業(yè)信息技術(shù)基礎(chǔ)結(jié)構(gòu)的性能。和傳統(tǒng)的存儲(chǔ)交互作用要求主機(jī)處理器(或處理線程)等候完成對存儲(chǔ)裝置的I/O請求相對比,所公開的技術(shù)使存儲(chǔ)管理裝置能夠向主機(jī)處理器確認(rèn)I/O請求的完成,在此,至少若干這樣的I/O請求實(shí)際上未被完成,而是被排隊(duì)(基于,例如,它們的接收時(shí)間和它們的目標(biāo)邏輯存儲(chǔ)單元),并且在此,相應(yīng)操作的排隊(duì)順序已被最優(yōu)化以使操作的執(zhí)行最小化磁盤存取的次數(shù)并因此改進(jìn)了企業(yè)存儲(chǔ)系統(tǒng)的性能。
作為這種最優(yōu)化的非限制例子,響應(yīng)于接收對準(zhǔn)邏輯存儲(chǔ)單元中特殊位置的寫請求,和隨后的對準(zhǔn)相同(或部分重疊)位置的讀請求,并入所公開技術(shù)至少一些方面的存儲(chǔ)管理裝置可確定在所述請求之間存在重疊,并抑制讀請求執(zhí)行直到寫請求被完成之后。作為另一個(gè)例子,如果檢測到重疊,通過使用臨時(shí)存儲(chǔ)中的數(shù)據(jù),讀取就可在寫完成之前被服務(wù),例如,所存儲(chǔ)的數(shù)據(jù)可隨后從RAM(而不是從相對低速的磁盤)被讀取,由此減少磁盤存取的總次數(shù)。
并且,在一些I/O請求處理中,比如本文其它地方所描述的,可通過將I/O請求的并行處理(例如,而不是作為特殊最優(yōu)化的一部分)限制到被指引到不相重疊的存儲(chǔ)單元(例如,塊)的I/O請求來增強(qiáng)I/O請求的處理。因此可通過高效地確定是否存在被指引到重疊存儲(chǔ)單元的I/O請求,而不用,例如,對所有未決I/O請求進(jìn)行審閱,以及使用該信息確定一I/O請求是應(yīng)該被處理還是被排隊(duì),從而改進(jìn)這樣的處理。因此,除啟用如上所描述的最優(yōu)化之外,高效地提供有關(guān)作為未決I/O請求目標(biāo)的位置的信息資源(比如列表、數(shù)據(jù)庫、樹狀結(jié)構(gòu)、鏈接表或其它資源)可允許存儲(chǔ)管理系統(tǒng)更高效地處理I/O請求,這是因?yàn)榇鎯?chǔ)管理系統(tǒng)可將并行處理限制到把不相重疊的存儲(chǔ)單元作為目標(biāo)的I/O請求。
現(xiàn)在參照圖34,說明性的存儲(chǔ)管理裝置(未顯示)可包括一個(gè)或更多個(gè)軟件進(jìn)程2602(例如,調(diào)度程序軟件進(jìn)程),所述軟件進(jìn)程2602接收并存儲(chǔ)與特定的邏輯存儲(chǔ)單元2612、2614或其部分相聯(lián)系的請求隊(duì)列2608、2610中的I/O請求2604、2606,這種請求2604、2606把所述邏輯存儲(chǔ)單元2612、2614或其部分作為目標(biāo)。特定請求隊(duì)列2608內(nèi)的I/O請求2604優(yōu)選被組織以確保請求2604以它們被接收的次序(例如,在時(shí)間T1接收到的I/O請求12604′被安置在在隨后時(shí)間T2接收到的I/O請求22604″之前)被處理(或安置在隊(duì)列2608內(nèi))。請求隊(duì)列2608、2610還可以優(yōu)選地被配置以存儲(chǔ)與特定邏輯存儲(chǔ)單元2612、2614或其部分相聯(lián)系的請求2604、2606。特定2608隊(duì)列中的I/O請求2604對準(zhǔn)邏輯存儲(chǔ)單元2612中的各種重疊及/或不相重疊的地址范圍。例如,與被指引到邏輯存儲(chǔ)單元2612的I/O請求2604′相聯(lián)系的地址范圍(地址0到地址15)2616′可與另一個(gè)與另一個(gè)I/O請求2604相聯(lián)系的地址范圍(地址8到地址11)2616重疊。類似地,與I/O請求2604′相聯(lián)系的地址范圍(地址0到地址15)2616′可不同于與另一個(gè)I/O請求2604″相聯(lián)系的地址范圍(地址16到地址32)2616″并因此前者不與后者重疊。
排隊(duì)的I/O請求2604、2606可進(jìn)一步與一個(gè)或更多個(gè)操作序列2618聯(lián)系起來,所述操作序列指定某些操作2620應(yīng)該被執(zhí)行的順序以履行相應(yīng)的I/O請求2604、2606。調(diào)度程序軟件進(jìn)程2602可組織與相應(yīng)的操作隊(duì)列2622中的排隊(duì)的I/O請求2604、2606相聯(lián)系的操作2620,并可用最優(yōu)化與作為目標(biāo)的邏輯存儲(chǔ)單元2612、2614相聯(lián)系的存儲(chǔ)裝置的性能的方式(比如通過,例如最小化對這樣的存儲(chǔ)裝置的磁盤存取次數(shù))來進(jìn)一步執(zhí)行這樣的排隊(duì)操作2620。為了確保排列在一個(gè)或更多個(gè)操作隊(duì)列2622中排隊(duì)的操作2620以和相應(yīng)I/O請求2604、2606接收時(shí)間一致的以及引起性能最優(yōu)化的方式執(zhí)行,調(diào)度程序軟件進(jìn)程2602可搜索排隊(duì)數(shù)據(jù)結(jié)構(gòu)2624(例如,二叉樹及/或其它類型樹形數(shù)據(jù)結(jié)構(gòu))以確定操作2620是否與不相重疊的地址范圍(例如,2616′和2616″)聯(lián)系在一起或是否一個(gè)或更多個(gè)操作2620與重疊的地址范圍(例如,2616′和2616)聯(lián)系在一起。如果地址范圍2616重疊,那么調(diào)度程序軟件進(jìn)程2602拆分二叉樹2624內(nèi)的一個(gè)或更多個(gè)節(jié)點(diǎn)2626,以使每個(gè)節(jié)點(diǎn)2626均與不相重疊的地址范圍相聯(lián)系。
在一個(gè)說明性實(shí)施例中,可根據(jù)所公開技術(shù)的至少一些方面而被調(diào)度程序軟件進(jìn)程2602搜索的二叉樹數(shù)據(jù)結(jié)構(gòu)2624中的每個(gè)節(jié)點(diǎn)2626可包括邏輯存儲(chǔ)單元2612的標(biāo)識(shí)符、指向I/O請求2604列表(例如,鏈接表)的指針、指向一個(gè)或更多個(gè)操作序列2618的指針及/或標(biāo)識(shí)符、指向操作序列2618內(nèi)特定操作2620的指針及/或標(biāo)識(shí)符、指向邏輯存儲(chǔ)單元2612內(nèi)不相重疊的地址范圍2616的指針、指向父節(jié)點(diǎn)的指針(如果父節(jié)點(diǎn)存在,否則指向空)及/或指向子節(jié)點(diǎn)的指針(如果子節(jié)點(diǎn)存在,否則指向空)。與每個(gè)節(jié)點(diǎn)相聯(lián)系的數(shù)據(jù)和指針不僅被用于形成樹形數(shù)據(jù)結(jié)構(gòu)2624內(nèi)的相互關(guān)系,而且被用于當(dāng)確定特定I/O請求2604及/或相關(guān)聯(lián)的操作2620是否被指引到邏輯存儲(chǔ)單元2612或其部分內(nèi)的重疊/不相重疊的地址范圍2616時(shí),促進(jìn)通過調(diào)度程序軟件進(jìn)程2602對有關(guān)數(shù)據(jù)的搜索與取回。
在一個(gè)說明性操作中,并且現(xiàn)在參照圖35,存儲(chǔ)管理裝置(未顯示)的調(diào)度程序軟件進(jìn)程2602從一個(gè)或更多個(gè)主機(jī)接收被指引到一個(gè)或更多個(gè)邏輯存儲(chǔ)單元2612、2614或其部分的I/O請求2604、2606。調(diào)度程序軟件進(jìn)程2602為每個(gè)邏輯存儲(chǔ)單元2612建立一個(gè)請求隊(duì)列2608,如果這樣的請求隊(duì)列2608已經(jīng)不存在,并且所述調(diào)度程序軟件進(jìn)程2602根據(jù)把這樣的邏輯存儲(chǔ)單元2612作為目標(biāo)的I/O請求2604被接收的時(shí)間來存儲(chǔ)所述I/O請求2604(或與此關(guān)聯(lián)的標(biāo)志)(2702)。調(diào)度程序軟件進(jìn)程2602評估排隊(duì)的I/O請求2604以獲得及/或形成上面所討論的數(shù)據(jù)和指針,所述數(shù)據(jù)和指針用于形成排隊(duì)數(shù)據(jù)結(jié)構(gòu)2624的節(jié)點(diǎn)2626,以使每一節(jié)點(diǎn)2626均與不相重疊的地址范圍2616聯(lián)系起來(2704)。
作為非限制的例子,調(diào)度程序軟件進(jìn)程2602可提取及/或形成與一個(gè)或更多個(gè)邏輯存儲(chǔ)單元2612、排隊(duì)的I/O請求2604、與I/O請求2604相聯(lián)系的操作2620和操作序列2618、由I/O請求2604指定的地址范圍2616相聯(lián)系的標(biāo)識(shí)符及/或指針,及/或否則獲得任何其它對形成二叉樹數(shù)據(jù)結(jié)構(gòu)2624的節(jié)點(diǎn)2626是必需的或所希望的信息。如果兩個(gè)或更多排隊(duì)的I/O請求2604對準(zhǔn)重疊的地址范圍2616,那么調(diào)度程序軟件進(jìn)程2602可形成包括相應(yīng)不相重疊的地址范圍的節(jié)點(diǎn)2626。例如,如果第一I/O請求2604′對準(zhǔn)第一邏輯單元2612的地址范圍2616′(地址0到15),并且第二I/O請求2604對準(zhǔn)重疊的地址范圍2616(地址8-12),然后調(diào)度程序2602,例如,可形成關(guān)聯(lián)的地址范圍不相重疊的三個(gè)節(jié)點(diǎn),也就是,第一節(jié)點(diǎn)可與地址0到7(所述地址進(jìn)一步與第一I/O請求2604′相聯(lián)系)相聯(lián)系,第二節(jié)點(diǎn)可與地址8到12(所述地址進(jìn)一步與第一和第二I/O請求2604′、2604相聯(lián)系)相聯(lián)系,以及第三節(jié)點(diǎn)可與地址13到15(所述地址進(jìn)一步與第一I/O請求2604′相聯(lián)系)相聯(lián)系。照這樣,調(diào)度程序2602確保每個(gè)節(jié)點(diǎn)均與邏輯存儲(chǔ)單元內(nèi)明顯不同的不相重疊的地址范圍對應(yīng),而不管I/O請求是指定重疊還是不相重疊的地址范圍。一旦節(jié)點(diǎn)2626形成,調(diào)度程序2602將所述節(jié)點(diǎn)安排到使用例如指向其它節(jié)點(diǎn)的父指針及/或子指針的數(shù)據(jù)結(jié)構(gòu)2624(例如,二叉樹)中,所述數(shù)據(jù)結(jié)構(gòu)2624可以,但是不需要顯示出邏輯存儲(chǔ)單元2612內(nèi)基本上相鄰的地址范圍2616(2706)。
調(diào)度程序2602可通過首先搜索二叉樹2626以證實(shí)沒有具有重疊地址范圍的I/O請求被包含在該請求前面的其節(jié)點(diǎn)2626內(nèi),從而執(zhí)行與I/O請求2604相聯(lián)系的操作2620(2708)。通過如上所描述的那樣排隊(duì)操作隊(duì)列中的操作,與請求相聯(lián)系的操作的執(zhí)行可分級進(jìn)行。例如,與I/O請求相聯(lián)系的寫操作可被執(zhí)行,而另一個(gè)被指引到在隨后出現(xiàn)的I/O請求中指定的相同或重疊地址的寫操作可在第一寫操作完成之后被執(zhí)行,以使兩個(gè)請求的處理以有序的方式發(fā)生。
在一個(gè)實(shí)施例中,由調(diào)度程序2602排隊(duì)的操作2620是基于一批或更多批在特定的時(shí)段接收到的I/O請求2604。在另一個(gè)實(shí)施例中,由調(diào)度程序2602排隊(duì)的操作2620可在I/O請求被接收時(shí)基本上實(shí)時(shí)地發(fā)生。在又一個(gè)實(shí)施例中,調(diào)度程序2602起初可用批量模式排隊(duì)操作2620,并隨后基于基本上實(shí)時(shí)接收的I/O請求2604重新排列操作隊(duì)列2620。不管所實(shí)現(xiàn)的特定排隊(duì)方法如何,調(diào)度程序2602可通過如相應(yīng)的I/O請求2604被添加、處理及/或移動(dòng)的那樣來添加、移動(dòng)及/或拆分所述二叉樹數(shù)據(jù)結(jié)構(gòu)內(nèi)的節(jié)點(diǎn),從而維持并更新二叉樹數(shù)據(jù)結(jié)構(gòu)2624。例如,調(diào)度程序2602可從二叉樹2624移動(dòng)一個(gè)或更多個(gè)節(jié)點(diǎn)2626,如果相應(yīng)的I/O請求完成以及這樣的節(jié)點(diǎn)沒有另外與其它迄今未執(zhí)行的I/O請求相聯(lián)系(2710)。如果新的I/O請求被接收并且未被指引到與那些已在二叉樹2624中的地址重疊的地址,那么調(diào)度程序2602可通過形成與新的I/O請求的不相重疊的地址對應(yīng)的新節(jié)點(diǎn)來擴(kuò)展二叉樹2624,并可將這樣的新節(jié)點(diǎn)添加至二叉樹2624,這可(但是不需要)隨后引起操作隊(duì)列2622內(nèi)操作的重排。如果新的I/O請求被接收并且對準(zhǔn)與那些已在二叉樹2624中的地址重疊的地址,那么調(diào)度程序2602可將二叉樹中的一個(gè)或更多個(gè)現(xiàn)有節(jié)點(diǎn)2626拆分成多個(gè)節(jié)點(diǎn)以確保二叉樹2624中每個(gè)節(jié)點(diǎn)2626均包含不相重疊的地址(注意拆分節(jié)點(diǎn)比創(chuàng)建新的節(jié)點(diǎn)和將新的節(jié)點(diǎn)結(jié)合到二叉樹2624中快)(2714)。
以這個(gè)方式,二叉樹2624基本上保持最新并可支持調(diào)度程序2602正在進(jìn)行的排隊(duì)操作,尤其是確定新近接收的I/O請求是否與重疊操作2620地址的地址相聯(lián)系,所述操作2620已被排在一個(gè)或更多個(gè)操作隊(duì)列2622中。當(dāng)接收到新的I/O請求,調(diào)度程序2602可快速搜尋二叉樹2624的節(jié)點(diǎn)2626以確定在新的I/O請求指定的地址范圍中是否存在相對于與現(xiàn)有及/或已排隊(duì)請求及/或操作相聯(lián)系的地址范圍的任何重疊。如之前所討論的,與新近接收的I/O請求相聯(lián)系并具有相對二叉樹2624中的地址的不重疊的地址的操作可被排隊(duì),而不用過度擔(dān)心會(huì)無序地執(zhí)行這樣的操作,而重疊的地址需要更謹(jǐn)慎的考慮以確保操作以正確次序執(zhí)行,從而避免數(shù)據(jù)破壞問題。
現(xiàn)在參照圖36A中所說明的二叉樹的示范實(shí)施例,通過,例如將與顯示最早接收時(shí)間的I/O請求(也就是I/O請求0)有關(guān)的信息與第一節(jié)點(diǎn)2802聯(lián)系起來,調(diào)度程序軟件進(jìn)程2602可形成二叉樹數(shù)據(jù)結(jié)構(gòu)2624(圖34)的第一節(jié)點(diǎn)2802(也就是,節(jié)點(diǎn)0)。如上,相關(guān)聯(lián)的信息可包括下列被該I/O請求作為目標(biāo)的邏輯存儲(chǔ)單元的標(biāo)識(shí)符2804、指向一個(gè)或更多個(gè)I/O請求的一個(gè)或多個(gè)指針2806、指向與I/O請求相聯(lián)系的操作及/或操作序列的一個(gè)或更多個(gè)指針2808,及/或指向與I/O請求相聯(lián)系的不相重疊的地址范圍的一個(gè)或更多個(gè)指針2810。節(jié)點(diǎn)2802還可以包括指向父節(jié)點(diǎn)的指針2812,條件是這樣的父節(jié)點(diǎn)存在(否則是指向空的指針),以及包括指向一個(gè)或更多個(gè)子節(jié)點(diǎn)的指針2814、2816,條件是這樣的子節(jié)點(diǎn)存在(否則是指向空的指針)。子指針2814中的一個(gè)可隨后被重定向到與一較小的地址范圍相聯(lián)系的子節(jié)點(diǎn),而另一個(gè)子指針2816可被重定向到與一較大的地址范圍相聯(lián)系的子節(jié)點(diǎn)。
現(xiàn)在參照圖36B,通過例如形成與另一個(gè)隨后接收的I/O請求(也就是,I/O請求1)相聯(lián)系的新節(jié)點(diǎn)2818,調(diào)度程序2802可擴(kuò)展二叉樹,所述I/O請求對準(zhǔn)與現(xiàn)有節(jié)點(diǎn)2802的地址范圍(也就是,地址0-15)不相重疊的地址范圍2820(也就是,地址16-32)。為了保持圖的清晰,圖36B-36D不再重復(fù)與所描述的節(jié)點(diǎn)相聯(lián)系的所有信息(之前結(jié)合圖36A中節(jié)點(diǎn)2802所描述的),但是本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到對于每個(gè)這樣的節(jié)點(diǎn)將存在相似的信息。
現(xiàn)在參照圖36C,調(diào)度程序2602可通過拆分一個(gè)或更多個(gè)現(xiàn)有節(jié)點(diǎn)2802來擴(kuò)展二叉樹,以響應(yīng)接收到對準(zhǔn)一地址范圍(也就是,地址8-11)的新I/O請求,所述地址范圍(地址8-11)重疊了與一個(gè)或更多個(gè)這樣的現(xiàn)有節(jié)點(diǎn)2802相聯(lián)系的地址范圍(也就是,地址0-15),在此在二叉樹中由此產(chǎn)生的每個(gè)結(jié)點(diǎn)被組織以使它們與不相重疊的地址范圍相聯(lián)系。例如,原先與地址0-15相聯(lián)系的圖36B的節(jié)點(diǎn)0 2802可被分成兩個(gè)另外的節(jié)點(diǎn)2822、2824(也就是,節(jié)點(diǎn)2和3),所述節(jié)點(diǎn)2822、2824的地址范圍(也就是,分別為地址0-7和8-11)不與節(jié)點(diǎn)0 2802的已更新的地址范圍(也就是,地址12-15)相重疊。與節(jié)點(diǎn)2802、2818、2822、2824中每個(gè)相聯(lián)系的指針、標(biāo)識(shí)符及/或其它信息可根據(jù)需要被更新,以反映更新的樹形結(jié)構(gòu)。例如,節(jié)點(diǎn)0 2802中的地址范圍指針2810可被修改以指向特定邏輯存儲(chǔ)單元內(nèi)的地址范圍12-15,節(jié)點(diǎn)2 2822的地址范圍指針2826可被形成并對準(zhǔn)該邏輯存儲(chǔ)單元內(nèi)的地址范圍0-7,節(jié)點(diǎn)2 2822的I/O請求指針2828可被形成并被指引到I/O請求0,節(jié)點(diǎn)32824中的地址范圍指針2830可被形成并對準(zhǔn)該邏輯存儲(chǔ)單元內(nèi)的地址范圍8-11,以及節(jié)點(diǎn)3 2824的兩個(gè)I/O請求指針2832可被形成并被指引到I/O請求0和2(因?yàn)檫@兩個(gè)請求都對準(zhǔn)地址8-11)。類似地,其它節(jié)點(diǎn)信息,比如被指引到相關(guān)聯(lián)的操作序列、操作及/或父節(jié)點(diǎn)或子結(jié)點(diǎn)的指針和標(biāo)識(shí)符可被更新以形成更新的二叉樹數(shù)據(jù)結(jié)構(gòu)。
現(xiàn)在參照圖36D,當(dāng)相應(yīng)的I/O請求完成時(shí),調(diào)度程序2602可通過移動(dòng)一個(gè)或更多個(gè)節(jié)點(diǎn)來修改二叉樹。例如,當(dāng)I/O請求0完成時(shí),圖36C的節(jié)點(diǎn)0 2802和節(jié)點(diǎn)2 2822可從二叉樹除去,因?yàn)檫@樣的節(jié)點(diǎn)沒有引用任何其它I/O請求(也就是,它們的I/O請求指針2806、2828僅對準(zhǔn)I/O請求0)。二叉樹中的其余節(jié)點(diǎn)2818、2824可被重新組織以反映新的樹形層次,并且它們的關(guān)聯(lián)信息可被類似地更新以反映它們相對除去的節(jié)點(diǎn)2802、2822的獨(dú)立性。例如,節(jié)點(diǎn)3 2824的I/O請求指針2832可被更新以僅指向I/O請求2而不指向I/O請求0,因?yàn)镮/O請求0已被履行,并且節(jié)點(diǎn)1和3 2818、2824的父指針和子指針可被修改以反映新的二叉樹層次。
雖然上面討論的與圖36A-36D有關(guān)的實(shí)施例是相對簡單化的以保持本公開內(nèi)容的清晰,但是本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到所公開的技術(shù)可被應(yīng)用于大量的I/O請求,所述I/O請求可顯示出影響多個(gè)邏輯存儲(chǔ)單元的各種類型交互,在此每個(gè)這樣的邏輯存儲(chǔ)單元(或其部分)包括一組排列在明顯不同的二叉樹中的節(jié)點(diǎn)。如之前所討論的,這些二叉樹使得一個(gè)或更多個(gè)調(diào)度程序2602能夠?yàn)椴檎倚陆邮盏腎/O請求指定的地址范圍而快速搜索二叉樹的地址范圍指針,從而確定是否任何未決I/O請求與新近接收的I/O請求的地址范圍重疊,所述未決I/O請求的操作可在處理中或被排隊(duì)等待處理。調(diào)度程序因此可使用搜索結(jié)果來快速確定是否有可能開始執(zhí)行與請求相聯(lián)系的操作。對大量的請求來說,該效率對性能是有好處的。所公開的技術(shù)還可被用于其它類型的排隊(duì)數(shù)據(jù)結(jié)構(gòu)及/或其它類型的命令/請求。
檢查點(diǎn) 在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置可用于設(shè)立寫時(shí)拷貝操作序列的檢查點(diǎn),并且這些檢查點(diǎn)對從存儲(chǔ)管理裝置故障的實(shí)時(shí)恢復(fù)是有用的。例如,在設(shè)計(jì)具有冗余的存儲(chǔ)管理裝置中,可能有一個(gè)被分配用于處理被指引到特定數(shù)據(jù)存儲(chǔ)器的I/O操作的主處理模塊,以及一個(gè)或更多個(gè)輔助處理模塊,所述輔助處理模塊可在剛一檢測出主處理模塊中的錯(cuò)誤或故障時(shí)就完成主處理模塊的任何正在處理中的I/O操作的處理。剛一接管對為主處理模塊成功地處理未完成的I/O操作有用的信息,所公開技術(shù)的實(shí)施例就啟用這樣的輔助處理模塊。同時(shí),所公開技術(shù)的實(shí)施例以和其它事務(wù)信息的存儲(chǔ)集成的、輕便的以及便于交流的方式,促進(jìn)這些檢查點(diǎn)的使用。
另外,所公開技術(shù)的實(shí)施例促進(jìn)了通過主處理模塊的處理最優(yōu)化的利用,這是因?yàn)檩o助處理模塊不需要知道主處理模塊嘗試的任何最優(yōu)化來在發(fā)生故障時(shí)成功地代替主處理模塊,并且輔助處理模塊可使用所公開的檢查點(diǎn)信息來確定對于任何未完成的I/O操作,輔助處理器需要完成什么處理。這在具有多個(gè)數(shù)據(jù)存儲(chǔ)器的大型系統(tǒng)尤其是有利的,在所述大型系統(tǒng)中在任何給定時(shí)間可能有幾千、幾萬或更多的未完成的I/O事務(wù)。
在一個(gè)說明性實(shí)施例中以及參考圖37和38,存儲(chǔ)管理裝置2938可從主機(jī)2934截取/接收I/O請求2904(例如,寫請求、讀請求等等),該請求以特定的當(dāng)前存儲(chǔ)器2944作為目標(biāo)(3002),并且存儲(chǔ)管理裝置2938可響應(yīng)該請求,從或許多個(gè)這樣的操作序列類型2910(例如,寫請求序列2912、讀請求序列2914等等)來標(biāo)識(shí)與I/O請求2904相聯(lián)系的一特定類型的操作序列(3004)。作為非限制的例子,示范的寫請求序列2912可包括以下關(guān)于圖38的塊3006-3010和3014-3018所討論的操作。
存儲(chǔ)管理裝置2938解析寫請求2904以提取存儲(chǔ)裝置的標(biāo)識(shí)符2916,以及,當(dāng)前存儲(chǔ)器2944內(nèi)的位置2918(包括,例如,特定的開始地址和數(shù)據(jù)長度),其中由寫請求2904指定及/或與寫請求包含在一起的當(dāng)前數(shù)據(jù)將被寫到所述位置2918。存儲(chǔ)管理裝置2938讀存儲(chǔ)在當(dāng)前存儲(chǔ)器2944內(nèi)位置2918的數(shù)據(jù)2920(在此被稱為“原始數(shù)據(jù)”)(3006),并將這樣的數(shù)據(jù)2920拷貝到與選取的存儲(chǔ)裝置相聯(lián)系的時(shí)間存儲(chǔ)器2946中的目的地位置2922(3008)。與寫請求2904相聯(lián)系的事務(wù)信息2926被記錄在一個(gè)或更多個(gè)數(shù)據(jù)結(jié)構(gòu)、文件及/或數(shù)據(jù)庫(未顯示)中,并且可包括,例如,與當(dāng)前存儲(chǔ)器2944及/或時(shí)間存儲(chǔ)器2946相聯(lián)系的裝置標(biāo)識(shí)符2916,唯一地標(biāo)識(shí)寫請求2904的寫請求標(biāo)識(shí)符2928,受寫請求2904影響的當(dāng)前存儲(chǔ)器2944和時(shí)間存儲(chǔ)器2946內(nèi)的位置2918、2922,寫請求2904被接收的時(shí)間2930,及/或與寫請求2904相聯(lián)系的其它信息類型(3010)。事務(wù)信息2926可在拷貝數(shù)據(jù)2920至目的地位置2922之前、之后或同時(shí)被記錄。
如果原始數(shù)據(jù)2920未被成功地拷貝至目的地位置2922,及/或如果事務(wù)信息2926未被正確地記錄,那么存儲(chǔ)管理裝置2938將產(chǎn)生錯(cuò)誤消息,所述錯(cuò)誤消息可被傳遞給存儲(chǔ)管理裝置2938的用戶及/或其它與此關(guān)聯(lián)的實(shí)體或軟件進(jìn)程(3012)。否則,剛一成功拷貝數(shù)據(jù)2920和記錄事務(wù)信息2926,存儲(chǔ)管理裝置2938就產(chǎn)生指示符2932(在此被稱為“索引檢查點(diǎn)”),所述指示符2932確認(rèn)數(shù)據(jù)拷貝和事務(wù)信息記錄操作已成功地完成,并且該索引檢查點(diǎn)2932隨后被存儲(chǔ)或記錄,例如,作為事務(wù)信息2926的一部分(3014)。
在產(chǎn)生和存儲(chǔ)索引檢查點(diǎn)2932之后,存儲(chǔ)管理裝置2938將由寫請求2904指定的當(dāng)前數(shù)據(jù)(還被稱為“有效載荷數(shù)據(jù)”)寫至當(dāng)前存儲(chǔ)器2944內(nèi)的適當(dāng)位置2918(3016)。如果當(dāng)前數(shù)據(jù)未被成功地寫入,那么可產(chǎn)生一錯(cuò)誤消息(3012)。否則,存儲(chǔ)管理裝置2938產(chǎn)生指示符2933(在此被稱為“釋放檢查點(diǎn)”),所述指示符2933確認(rèn)當(dāng)前數(shù)據(jù)已被成功地寫到當(dāng)前存儲(chǔ)器2944中的所需位置2918,并且該釋放檢查點(diǎn)2933隨后作為事務(wù)信息2926的一部分被存儲(chǔ)/記錄(3018)。索引檢查點(diǎn)2932、釋放檢查點(diǎn)2933及/或其它事務(wù)信息2926可為了每一寫請求及/或其它類型的存儲(chǔ)事務(wù)事件而被產(chǎn)生,并因此可被用于從具有間隔尺寸的存儲(chǔ)事務(wù)故障(例如,電源故障、硬件故障、數(shù)據(jù)破壞事件等等)恢復(fù),所述間隔尺寸使得數(shù)據(jù)恢復(fù)、存儲(chǔ)命令隊(duì)列再生/同步,及/或存儲(chǔ)系統(tǒng)重配置能夠發(fā)生在,例如,與剛好在存儲(chǔ)事務(wù)故障發(fā)生之前基本上一致的時(shí)間。
索引和釋放檢查點(diǎn)2932、2933可用于增強(qiáng)存儲(chǔ)系統(tǒng)的容錯(cuò)性,尤其對于硬件故障及/或電源故障的容錯(cuò)性,硬件故障及/或電源故障可影響向存儲(chǔ)單元寫入及/或從存儲(chǔ)單元讀取的處理器模塊或其它類型裝置。例如,包括一個(gè)主處理器模塊和一個(gè)或更多個(gè)備用處理器模塊的容錯(cuò)系統(tǒng)在如下情況中可受益于所公開的技術(shù),在此主處理器模塊失效,且備用處理器模塊之一通過使得備用處理器模塊內(nèi)的存儲(chǔ)、命令/操作隊(duì)列基本上等同于主處理器模塊在剛好在其故障之前或與其故障一致的時(shí)間點(diǎn)的存儲(chǔ)、命令/操作隊(duì)列,從而承擔(dān)對影響一個(gè)或更多個(gè)存儲(chǔ)單元的交互的主要控制。以這種方式,備用處理器模塊可承擔(dān)它的責(zé)任而不用必須再執(zhí)行命令或完成其它操作,所述命令或操作也許已由主處理器模塊在其故障之前完成且另外可能不必傳遞給備用處理器模塊。所公開的技術(shù)還可以被用來復(fù)制排隊(duì)的I/O請求及/或相關(guān)聯(lián)的操作的歷史,用于分析或其它用途。
在一個(gè)說明性實(shí)施例中且現(xiàn)在參照圖39,備用處理器模塊(未顯示)可包括一個(gè)或更多個(gè)請求隊(duì)列3102,所述請求隊(duì)列3102包含,例如,在特定時(shí)間接收并把一個(gè)或更多個(gè)邏輯存儲(chǔ)單元3108的特定地址及/或地址范圍3106作為目標(biāo)的I/O請求3104。在特定的請求隊(duì)列3102′中的I/O請求3104可以,但不需要,被組織以對存儲(chǔ)于特定邏輯單元3108′中地址的數(shù)據(jù)起作用,而在其它請求隊(duì)列3102″中的I/O請求可被組織以對存儲(chǔ)在不同的邏輯單元3108″中地址的數(shù)據(jù)起作用。備用處理器模塊還可以包括一個(gè)或更多個(gè)操作類型隊(duì)列3110,所述操作類型隊(duì)列3110可,例如包括與一個(gè)或更多個(gè)請求隊(duì)列3102中的I/O請求3104相聯(lián)系的操作。每個(gè)操作隊(duì)列3110可以,但不需要,僅包含特定類型的操作。第一說明性操作隊(duì)列3110i可包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系(對應(yīng)于,例如寫請求),并包括從與當(dāng)前存儲(chǔ)器2944(圖37)相聯(lián)系的邏輯存儲(chǔ)單元3108′的第一地址范圍3106″讀原始數(shù)據(jù)。第二說明性操作隊(duì)列3110ii可包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系,并包括將原始數(shù)據(jù)從當(dāng)前存儲(chǔ)器2944的第一地址范圍3106″拷貝到時(shí)間存儲(chǔ)器2946中一位置。第三說明性操作隊(duì)列3110iii可包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系,并包括記錄記錄事務(wù)信息2926(圖37)。第四說明性操作隊(duì)列3110iv可包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系,并包括產(chǎn)生索引檢查點(diǎn)2932。第五說明性操作隊(duì)列3110v包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系,并包括將有效載荷數(shù)據(jù)寫到邏輯單元3108′的地址范圍3106″。第六說明性操作隊(duì)列3110vi包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系,并包括確認(rèn)有效載荷數(shù)據(jù)被成功地寫到邏輯存儲(chǔ)單元3108′的地址范圍3106″。第七說明性操作隊(duì)列3110vii可包含多個(gè)操作,在此一個(gè)或更多個(gè)這樣的操作與I/O請求3104″相聯(lián)系,并包括產(chǎn)生釋放檢查點(diǎn)2933。
在一個(gè)說明性恢復(fù)處理中,所述恢復(fù)處理使用索引檢查點(diǎn)2932及/或釋放檢查點(diǎn)2933從硬件/電源故障中恢復(fù),并且現(xiàn)在參照圖39和40,存儲(chǔ)管理裝置2938、存儲(chǔ)系統(tǒng)管理員及/或被分配了監(jiān)控及/或從這樣的故障恢復(fù)的任務(wù)的其它類型實(shí)體可檢測錯(cuò)誤消息及/或其它類型的錯(cuò)誤標(biāo)志,所述錯(cuò)誤消息及/或其它類型錯(cuò)誤標(biāo)志指示硬件故障及/或電源故障。為了確保備用處理器模塊的請求隊(duì)列3102和操作隊(duì)列3110的內(nèi)容與此刻故障的主處理器模塊的相應(yīng)隊(duì)列的內(nèi)容相符,存儲(chǔ)管理裝置2938可評估在它的請求隊(duì)列3102中的每個(gè)I/O請求3104,至少部分地基于相應(yīng)索引及/或釋放檢查點(diǎn)2932、2933,以確定是否這樣的I/O請求3104之前被主處理器模塊在其故障之前履行或部分地履行。剛一作出這樣的確定,存儲(chǔ)管理裝置2938就可修改備用處理器模塊的請求隊(duì)列3102及/或操作隊(duì)列3110,以使它們基本上與在主處理器模塊故障之前排隊(duì)在其中的I/O請求和相關(guān)聯(lián)的操作相符。
例如,存儲(chǔ)管理裝置2938可搜索備用處理器模塊的請求隊(duì)列3102以標(biāo)識(shí)一個(gè)或更多個(gè)在主處理器模塊故障之前已被排隊(duì)的I/O請求3104(3202)。對于每個(gè)被標(biāo)識(shí)的I/O請求,存儲(chǔ)管理裝置2938可通過例如,在被通信地耦合到存儲(chǔ)管理裝置2938的數(shù)據(jù)結(jié)構(gòu)、文件、數(shù)據(jù)庫及/或其它類型數(shù)據(jù)儲(chǔ)存庫中搜索這樣的索引檢查點(diǎn)2932,來確定相關(guān)聯(lián)的索引檢查點(diǎn)2932是否存在(3204)。在一個(gè)實(shí)施例中,檢查點(diǎn)與其它有關(guān)數(shù)據(jù)庫中的寫請求的信息一起被記錄,所述數(shù)據(jù)庫存儲(chǔ)重寫數(shù)據(jù)的位置及其他上面所描述的信息。
如果關(guān)聯(lián)的索引檢查點(diǎn)2932未被定位(就寫時(shí)拷貝請求來說,表示原始數(shù)據(jù)未被成功地從當(dāng)前存儲(chǔ)器2944拷貝到時(shí)間存儲(chǔ)器2946內(nèi)的一位置),那么存儲(chǔ)管理裝置2938可將與備用處理器模塊的一個(gè)或更多個(gè)操作隊(duì)列3110內(nèi)的I/O請求3104相聯(lián)系的操作的完全集合排隊(duì)以備隨后的執(zhí)行(3206)。否則,存儲(chǔ)管理裝置2938可通過例如在上述的數(shù)據(jù)儲(chǔ)存庫中搜索這樣的釋放檢查點(diǎn)2933,來確定相關(guān)聯(lián)的釋放檢查點(diǎn)2933是否存在(3208)。如果關(guān)聯(lián)的釋放檢查點(diǎn)2933未被定位,那么存儲(chǔ)管理裝置2938可將與備用處理器模塊的一個(gè)或更多個(gè)操作隊(duì)列3110內(nèi)的I/O請求3104相聯(lián)系的操作的一個(gè)子集排隊(duì)(3210)。例如,以及在I/O請求與寫時(shí)拷貝操作序列對應(yīng)的情況下,排隊(duì)操作的子集可包括操作將I/O請求指定的有效載荷數(shù)據(jù)寫到邏輯存儲(chǔ)單元3108內(nèi)的特定位置,確認(rèn)有效載荷數(shù)據(jù)被成功地寫入,及/或產(chǎn)生與這樣的請求相聯(lián)系的釋放檢查點(diǎn)。否則,以及如果相關(guān)聯(lián)的釋放檢查點(diǎn)2933被定位(表示主處理器模塊在其故障之前已完全地履行了I/O請求),那么存儲(chǔ)管理裝置2938可將與這樣的I/O請求相聯(lián)系的操作從備用處理器模塊的操作隊(duì)列3110除去(3212)。
對于備用處理器模塊的請求隊(duì)列3102中的每一I/O請求3104,上述方法可被重復(fù),并因此使備用處理器模塊的隊(duì)列與現(xiàn)在已故障的主處理器模塊的相應(yīng)隊(duì)列一致。以這種方式,備用處理器模塊的請求和操作隊(duì)列3102、3110被清除過時(shí)的請求和操作,從而最小化且或許全部消除不必要的及/或另外的不合需要的操作的數(shù)量,所述不必要的及/或另外的不合需要的操作否則由于在硬件/電源故障事件時(shí)主處理器模塊和備用處理器模塊的隊(duì)列中的不一致而需要被執(zhí)行。一旦備用處理器模塊的隊(duì)列3102、3110已被清除不需要的操作和請求及/或裝載需要的操作,如以上所討論的,這樣的操作隊(duì)列3110中的其余操作序列可根據(jù)請求隊(duì)列3102中的I/O請求序列而被執(zhí)行。在此時(shí),硬件/電源故障恢復(fù)工作已被完成,并且備用處理器模塊可重新開始正常的排隊(duì)操作。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,上述的方法僅僅是說明性的,而且多種相似的方法可被執(zhí)行以產(chǎn)生基本上相同的結(jié)果。例如,相關(guān)聯(lián)的釋放檢查點(diǎn)2933的存在可在確定相關(guān)聯(lián)的索引檢查點(diǎn)2932的存在之前被確定。
用于啟動(dòng)映射產(chǎn)生的寫請求記錄 通常,在另一個(gè)方面,本發(fā)明涉及用于記錄被指引到數(shù)據(jù)存儲(chǔ)器的寫請求的方法和裝置,所述數(shù)據(jù)存儲(chǔ)器具有與之相聯(lián)系的當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器,并且本發(fā)明還涉及用于使得能夠產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器至少一部分的(例如,當(dāng)前存儲(chǔ)器的或其某個(gè)子部分)時(shí)間映射至少一部分的方法與裝置。如上所述,時(shí)間映射是在現(xiàn)在時(shí)間產(chǎn)生的映射,而且具有存儲(chǔ)在指定過去時(shí)間點(diǎn)的數(shù)據(jù)存儲(chǔ)器的至少一部分中的數(shù)據(jù)的當(dāng)前位置。
同樣如上所述,在一個(gè)實(shí)施例中,當(dāng)例如用戶在現(xiàn)在時(shí)間請求過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的至少一部分的(例如,當(dāng)前存儲(chǔ)器的或其某個(gè)子部分)映象時(shí),時(shí)間映射由計(jì)算裝置(例如,如上所描述的存儲(chǔ)管理裝置)產(chǎn)生。通過產(chǎn)生時(shí)間映射,計(jì)算裝置就不需要在對該映象或其一部分覆蓋的數(shù)據(jù)的每個(gè)請求上,貫穿整個(gè)索引搜索舊數(shù)據(jù)的位置。相反,通過引用時(shí)間映射,計(jì)算裝置可快速高效地確定在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器的至少一部分的數(shù)據(jù)位置,并因此,快速高效地響應(yīng)用戶請求。因此,提高了系統(tǒng)效率并增加了用戶滿意度。
雖然產(chǎn)生時(shí)間映射提高了在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器的至少一部分中的數(shù)據(jù)可被存取的速度,但本發(fā)明的當(dāng)前方面涉及用于記錄被指引到數(shù)據(jù)存儲(chǔ)器的寫請求,并從而提高了時(shí)間映射本身可被產(chǎn)生的速度的方法和裝置。另外,本發(fā)明的當(dāng)前方面便于快速呈現(xiàn)在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù),即使時(shí)間映射仍然正在被產(chǎn)生。
在一個(gè)實(shí)施例中,剛一收到對先前映象的請求,計(jì)算裝置就開始產(chǎn)生時(shí)間映射。如果,在時(shí)間映射被完成之前,用戶請求所述映象的一部分覆蓋的數(shù)據(jù)并且所述數(shù)據(jù)的位置還未被加入時(shí)間映射中,那么系統(tǒng)可足夠快地搜索數(shù)據(jù)以提供合理的響應(yīng)時(shí)間,即使該響應(yīng)將不會(huì)象如果時(shí)間映射被完成并使用時(shí)那么快。如此處所描述的,代替貫穿整個(gè)索引搜索過去數(shù)據(jù)的位置,只有所述索引的一部分或多個(gè)部分需要被搜索以響應(yīng)用戶對所述映象的所述部分覆蓋的數(shù)據(jù)的請求。在產(chǎn)生該響應(yīng)中完成的工作(例如,確定數(shù)據(jù)的位置)還可被存儲(chǔ)在時(shí)間映射中,從而提高系統(tǒng)總效率。
因此,在一個(gè)實(shí)施例中,剛一收到對創(chuàng)建先前映象的請求,時(shí)間映射就被產(chǎn)生,例如,作為一后臺(tái)處理。如果對數(shù)據(jù)的請求被指引到所述先前映象,而所請求的數(shù)據(jù)的位置仍未被時(shí)間映射指示(例如,時(shí)間映射還未被完全產(chǎn)生),那么在此所描述的技術(shù)可用于標(biāo)識(shí)所請求數(shù)據(jù)的位置,并響應(yīng)用戶對所述數(shù)據(jù)的請求。時(shí)間映射然后用所請求數(shù)據(jù)的位置被更新。
簡要綜述,在本發(fā)明該方面的一個(gè)實(shí)施例中,第一計(jì)算裝置(例如,如上所描述的存儲(chǔ)管理裝置)從第二計(jì)算裝置(例如,如上所描述的主機(jī))接收多個(gè)寫請求。第一計(jì)算裝置存儲(chǔ)這些寫請求的記錄。在一個(gè)實(shí)施例中,至少一個(gè)第一數(shù)據(jù)庫表和一個(gè)第二數(shù)據(jù)庫表被用于記錄有關(guān)寫請求的信息,以及被用于跟蹤由數(shù)據(jù)存儲(chǔ)器上的寫請求引起的任何變化。更具體地說,對于接收到的每個(gè)寫請求,第一計(jì)算裝置將寫請求項(xiàng)記錄在第一數(shù)據(jù)庫表中。所述寫請求項(xiàng)包含有關(guān)接收到的寫請求的信息。此外,每當(dāng)寫請求項(xiàng)被記錄在第一數(shù)據(jù)庫表中,第一計(jì)算裝置,如果必要,就更新第二數(shù)據(jù)庫表中的記錄。包含在第二數(shù)據(jù)庫表的記錄中的數(shù)據(jù)以匯總形式表示被指引到數(shù)據(jù)存儲(chǔ)器的寫請求。在一個(gè)實(shí)施例中,例如,包含在第二數(shù)據(jù)庫表的記錄中的數(shù)據(jù)指定數(shù)據(jù)存儲(chǔ)器中由于執(zhí)行寫請求而被重寫的特定存儲(chǔ)單元。
根據(jù)本發(fā)明該方面的一個(gè)特征,第一計(jì)算裝置能夠快速高效地解釋存儲(chǔ)在第二數(shù)據(jù)庫表的記錄中的數(shù)據(jù),從而確定哪個(gè)特定的存儲(chǔ)單元已被重寫。此外,在一個(gè)實(shí)施例中,給定一特定的過去時(shí)間點(diǎn),并使其承擔(dān)產(chǎn)生時(shí)間映射的任務(wù),第一計(jì)算裝置能夠解釋存儲(chǔ)在第二數(shù)據(jù)庫表的記錄中的數(shù)據(jù),從而標(biāo)識(shí)多個(gè)第一數(shù)據(jù)庫表的子集來搜索與時(shí)間映射的產(chǎn)生有關(guān)的寫請求項(xiàng)。換言之,在一個(gè)實(shí)施例中,本發(fā)明不需要第一計(jì)算裝置在產(chǎn)生時(shí)間映射時(shí)貫穿全部第一數(shù)據(jù)庫表以及貫穿全部寫請求項(xiàng)進(jìn)行搜索。因此,提高了總效率,并使時(shí)間映射的快速產(chǎn)生成為可能。
另外,在另一個(gè)實(shí)施例中,如果,在時(shí)間映射被完成之前,用戶請求在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù),所述數(shù)據(jù)的當(dāng)前位置仍未被時(shí)間映射指示,但如果時(shí)間映射被完成該當(dāng)前位置就被指示,那么第一計(jì)算裝置仍能快速高效地標(biāo)識(shí)所述數(shù)據(jù)的位置,而不用搜索全部第一數(shù)據(jù)庫表,并能對用戶作出響應(yīng)。此外,在產(chǎn)生該響應(yīng)中完成的工作可被用于完成時(shí)間映射。
圖41說明了存儲(chǔ)管理裝置3338的一個(gè)實(shí)施例,所述存儲(chǔ)管理裝置3338記錄被指引到數(shù)據(jù)存儲(chǔ)器的寫請求,并且使得能夠產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器至少一部分(例如,數(shù)據(jù)存儲(chǔ)器的當(dāng)前存儲(chǔ)器的或其某個(gè)子部分)的時(shí)間映射的至少一部分。一般而言,存儲(chǔ)管理裝置3338可具有上面所描述的存儲(chǔ)管理裝置的能力,并可被實(shí)現(xiàn)為這樣的存儲(chǔ)管理裝置,且具有在此所描述的附加功能性。應(yīng)該了解的是其它實(shí)現(xiàn)也是可能的。
在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置3338使用至少一個(gè)第一數(shù)據(jù)庫表3350,但典型地使用多個(gè)第一數(shù)據(jù)庫表3350,用于記錄多個(gè)寫請求項(xiàng)。存儲(chǔ)管理裝置3338還使用第二數(shù)據(jù)庫表3352,所述第二數(shù)據(jù)庫表3352包括至少一個(gè)用于每個(gè)第一數(shù)據(jù)庫表3350的記錄,所述第一數(shù)據(jù)庫表3350被存儲(chǔ)管理裝置3338使用。此外,存儲(chǔ)管理裝置3338還包括更新模塊3354,所述更新模塊3354用于每當(dāng)寫請求項(xiàng)被記錄在第一數(shù)據(jù)庫表中時(shí)更新第二數(shù)據(jù)庫表3352中的至少一個(gè)記錄。如之前所描述的,存儲(chǔ)管理裝置3338還管理與當(dāng)前存儲(chǔ)器3344和時(shí)間存儲(chǔ)器3346相聯(lián)系的至少一個(gè)數(shù)據(jù)存儲(chǔ)器3343。
可選地,存儲(chǔ)管理裝置3338還可以包括標(biāo)識(shí)模塊3356、搜索模塊3358、時(shí)間映射產(chǎn)生模塊3360和I/O模塊3362。為響應(yīng)對在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器3343的至少一部分中(例如,在當(dāng)前存儲(chǔ)器3344中或其某個(gè)子部分中)的數(shù)據(jù)的請求,存儲(chǔ)管理裝置3338可使用標(biāo)識(shí)模塊3356解釋第二數(shù)據(jù)庫表3352中的一個(gè)或更多個(gè)記錄,并從而標(biāo)識(shí)一個(gè)或更多個(gè)第一數(shù)據(jù)庫表3350來搜索相關(guān)的寫請求項(xiàng)。存儲(chǔ)管理裝置3338然后可使用搜索模塊3358執(zhí)行這樣的搜索并且,在已發(fā)現(xiàn)有關(guān)的寫請求項(xiàng)時(shí),可使用時(shí)間映射產(chǎn)生模塊來產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器至少一部分的時(shí)間映射的至少一部分。此外,存儲(chǔ)管理裝置3338可使用I/O模塊3362來響應(yīng)對在過去時(shí)間存儲(chǔ)在位于數(shù)據(jù)存儲(chǔ)器3343內(nèi)的至少一個(gè)指定存儲(chǔ)單元中的數(shù)據(jù)的讀請求。
第一數(shù)據(jù)庫表3350和第二數(shù)據(jù)庫表3352可分別用任何對記錄寫請求項(xiàng)和記錄有用的形式、方法或方式來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,例如,第一數(shù)據(jù)庫表3350及/或第二數(shù)據(jù)庫表3352被實(shí)現(xiàn)為電子表格。替代性地,第一數(shù)據(jù)庫表3350及/或第二數(shù)據(jù)庫表3352可被實(shí)現(xiàn)為文本或表格式的分隔文件、位圖、數(shù)組、樹、索引、帳目或任何其它對組織數(shù)據(jù)有用的方式。
對它們來說,更新模塊3354、標(biāo)識(shí)模塊3356、搜索模塊3358、時(shí)間映射產(chǎn)生模塊3360和I/O模塊3362可用任何能夠完成如下所描述的功能的形式、方法或方式來實(shí)現(xiàn)。例如,更新模塊3354、標(biāo)識(shí)模塊3356、搜索模塊3358、時(shí)間映射產(chǎn)生模塊3360及/或I/O模塊3362可被實(shí)現(xiàn)為運(yùn)行在微處理器上的軟件模塊或程序及/或硬件裝置,比如,例如專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)。
數(shù)據(jù)存儲(chǔ)器3343可具有上面所描述的數(shù)據(jù)存儲(chǔ)器的能力,并且可用上面所描述的當(dāng)前存儲(chǔ)器和時(shí)間存儲(chǔ)器來實(shí)現(xiàn),且具有在此所描述的附加功能性。例如,與當(dāng)前存儲(chǔ)器3344和時(shí)間存儲(chǔ)器3346中之一或兩者相聯(lián)系的數(shù)據(jù)可被存儲(chǔ)在存儲(chǔ)管理裝置3338的內(nèi)存中或物理存儲(chǔ)器(未顯示)中,對所述數(shù)據(jù)來說,其可被直接地存儲(chǔ)或被虛擬化等等。
典型地,存儲(chǔ)管理裝置3338從一個(gè)或更多個(gè)其它計(jì)算裝置接收多個(gè)寫請求,比如,例如上面所描述的主機(jī)。寫請求被指引到數(shù)據(jù)存儲(chǔ)器3343。在一個(gè)特定的實(shí)施例中,寫請求被指引到數(shù)據(jù)存儲(chǔ)器3343的當(dāng)前存儲(chǔ)器3344。在一個(gè)這樣的實(shí)施例中,每當(dāng)存儲(chǔ)管理裝置3338接收到將新的數(shù)據(jù)寫到當(dāng)前存儲(chǔ)器3344的一個(gè)或更多個(gè)指定塊的請求時(shí),存儲(chǔ)管理裝置3338如之前所描述的,執(zhí)行寫時(shí)拷貝操作。換言之,存儲(chǔ)管理裝置3338拷貝存儲(chǔ)在當(dāng)前存儲(chǔ)器3344的指定塊中的現(xiàn)有數(shù)據(jù),將所述現(xiàn)有數(shù)據(jù)寫到比如時(shí)間存儲(chǔ)器3346內(nèi)的另一個(gè)位置,然后將新的數(shù)據(jù)寫到當(dāng)前存儲(chǔ)器3344的指定塊。作為該寫時(shí)拷貝操作的一部分,有關(guān)寫請求的信息,包括被重寫的數(shù)據(jù)的新位置,可被記錄在第一數(shù)據(jù)庫表3350中。第二數(shù)據(jù)庫表3352然后被更新以反映寫請求的執(zhí)行和將寫請求相聯(lián)系的信息記錄在第一數(shù)據(jù)庫表3350中。
現(xiàn)在參照圖42,在方法3400的一個(gè)實(shí)施例的簡要概述中,所述方法3400例如使用圖41的示范存儲(chǔ)管理裝置,用于記錄被指引到數(shù)據(jù)存儲(chǔ)器的寫請求,存儲(chǔ)管理裝置3338在每個(gè)寫請求執(zhí)行之后(例如,在上面所描述的每個(gè)寫時(shí)拷貝操作之后),在至少一個(gè)第一數(shù)據(jù)庫表3350中記錄一寫請求項(xiàng)(步驟3404)。存儲(chǔ)管理裝置3338還為每個(gè)第一數(shù)據(jù)庫表3350在第二數(shù)據(jù)庫表3352中保留至少一個(gè)記錄(步驟3408),并且每當(dāng)一寫請求項(xiàng)被記錄在第一數(shù)據(jù)庫表3350中時(shí)更新第二數(shù)據(jù)庫表3352中的至少一個(gè)記錄(步驟3412),例如通過使用更新模塊3354。
在一個(gè)實(shí)施例中,當(dāng)構(gòu)造時(shí)間映射或另外確定存儲(chǔ)在特定存儲(chǔ)單元中的數(shù)據(jù)的位置時(shí),以及典型地在比步驟3404、3408和3412更靠后的時(shí)間,存儲(chǔ)管理裝置3338使用標(biāo)識(shí)模塊3356來解釋第二數(shù)據(jù)庫表3352中的一個(gè)或更多個(gè)記錄以標(biāo)識(shí)至少一個(gè)將要搜索的第一數(shù)據(jù)庫表3350(步驟3416),并且使用搜索模塊3358來搜索至少一個(gè)所標(biāo)識(shí)的第一數(shù)據(jù)庫表3350(步驟3420)。存儲(chǔ)管理裝置3338然后使用時(shí)間映射產(chǎn)生模塊3360來產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器3343的至少一部分的(例如,當(dāng)前存儲(chǔ)器3344的或其某個(gè)子部分的)時(shí)間映射的至少一部分(步驟3424),及/或使用I/O模塊3362,來響應(yīng)對在過去時(shí)間存儲(chǔ)在位于數(shù)據(jù)存儲(chǔ)器至少一部分內(nèi)的至少一個(gè)指定存儲(chǔ)單元中的數(shù)據(jù)的請求。
更詳細(xì)地,并且現(xiàn)在參照圖42和43,在一個(gè)實(shí)施例中,在存儲(chǔ)管理裝置3338收到被指引到數(shù)據(jù)存儲(chǔ)器3343的寫請求之后,存儲(chǔ)管理裝置3338在步驟3404,在第一數(shù)據(jù)庫表3350中記錄寫請求項(xiàng)3504。每個(gè)寫請求項(xiàng)3504包括有關(guān)寫請求的信息。例如,寫請求項(xiàng)3504可包括位于數(shù)據(jù)存儲(chǔ)器3343內(nèi)(例如,當(dāng)前存儲(chǔ)器3344內(nèi))的至少一個(gè)存儲(chǔ)單元的標(biāo)識(shí),其中寫請求被指引到所述存儲(chǔ)單元,及/或包括寫請求被存儲(chǔ)管理裝置3338接收到的時(shí)間。
在一個(gè)實(shí)施例中,每個(gè)接收的寫請求引起如上所描述的寫時(shí)拷貝操作的執(zhí)行。在這樣的實(shí)施例中,每個(gè)寫請求引起之前存儲(chǔ)于位于數(shù)據(jù)存儲(chǔ)器3343內(nèi)(例如,當(dāng)前存儲(chǔ)器3344內(nèi))的至少一個(gè)存儲(chǔ)單元的以前的數(shù)據(jù)被拷貝到新的位置,比如數(shù)據(jù)存儲(chǔ)器3343的時(shí)間存儲(chǔ)器3346內(nèi)。包含在寫請求中的數(shù)據(jù)然后被寫到位于數(shù)據(jù)存儲(chǔ)器3343內(nèi)(例如,當(dāng)前存儲(chǔ)器3344內(nèi))的至少一個(gè)存儲(chǔ)單元,其中以前的數(shù)據(jù)是從所述存儲(chǔ)單元拷貝的。因此,寫請求項(xiàng)3504還可包括以前的數(shù)據(jù)被拷貝到的新位置(例如,時(shí)間存儲(chǔ)器3346內(nèi)的位置)。
如在圖43中所說明的,當(dāng)存儲(chǔ)管理裝置3338收到一個(gè)以上被指引到數(shù)據(jù)存儲(chǔ)器3343的寫請求時(shí),存儲(chǔ)管理裝置3338在第一數(shù)據(jù)庫表3350中記錄多個(gè)寫請求項(xiàng)3504。在一個(gè)實(shí)施例中,存儲(chǔ)管理裝置3338在單個(gè)第一數(shù)據(jù)庫表3350中記錄全部的寫請求項(xiàng)3504,例如第一數(shù)據(jù)庫表33501,直到達(dá)到寫請求項(xiàng)3504的最大數(shù)目。典型地,第一數(shù)據(jù)庫表33501的寫請求項(xiàng)3504的最大數(shù)目是針對效率,或基于分配給第一數(shù)據(jù)庫表33501的儲(chǔ)存容量而設(shè)置的。一旦第一數(shù)據(jù)庫表33501中的寫請求項(xiàng)3504的數(shù)目達(dá)到最大值,存儲(chǔ)管理裝置3338就采用新的第一數(shù)據(jù)庫表33502并且每當(dāng)收到寫請求時(shí)就將寫請求項(xiàng)3504記錄在其中。再次,當(dāng)記錄在第一數(shù)據(jù)庫表33502中的寫請求項(xiàng)3504達(dá)到最大值時(shí),存儲(chǔ)管理裝置3338采用新的第一數(shù)據(jù)庫表33503(未顯示),等等。
在步驟3408,存儲(chǔ)管理裝置3338為每個(gè)第一數(shù)據(jù)庫表3350在第二數(shù)據(jù)庫表3352中保留至少一個(gè)記錄3508。參照圖43,數(shù)據(jù)存儲(chǔ)器3343的至少一部分(例如,數(shù)據(jù)存儲(chǔ)器3343的當(dāng)前存儲(chǔ)器3344或其某個(gè)子部分)可被存儲(chǔ)管理裝置3338概念地組織成數(shù)目為m的“存儲(chǔ)桶”,在此m>1,并且m個(gè)存儲(chǔ)桶中的每個(gè)均和位于數(shù)據(jù)存儲(chǔ)器3343的至少一部分內(nèi)的固定數(shù)目的存儲(chǔ)單元有關(guān)。在一個(gè)這樣的實(shí)施例中,對于每個(gè)第一數(shù)據(jù)庫表3350,存儲(chǔ)管理裝置3338在第二數(shù)據(jù)庫表3352中,如所說明的,為m個(gè)存儲(chǔ)桶中的每個(gè)保留一記錄3508。替代性地,在另一個(gè)實(shí)施例中,存儲(chǔ)管理裝置3338沒有把數(shù)據(jù)存儲(chǔ)器3343的至少一部分分成存儲(chǔ)桶。在這樣的實(shí)施例(未顯示)中,存儲(chǔ)管理裝置3338在第二數(shù)據(jù)庫表3352中為第一數(shù)據(jù)庫表3350中的每一個(gè)保留單個(gè)記錄3508。
仍然參照圖43,每個(gè)記錄3508包括多個(gè)比特項(xiàng),且每個(gè)比特項(xiàng)被置位(也就是,″1″)或復(fù)位(也就是,″0″)。此外,在一個(gè)實(shí)施例中,如圖43中豎向定線出于解釋目的而說明的,記錄3508中每個(gè)比特項(xiàng)與位于數(shù)據(jù)存儲(chǔ)器3343的至少一部分內(nèi)的至少一個(gè)存儲(chǔ)單元對應(yīng)。
起初,在一個(gè)實(shí)施例中,當(dāng)?shù)谝粩?shù)據(jù)庫表3350為空時(shí)(也就是,當(dāng)沒有寫請求項(xiàng)3504已被記錄在第一數(shù)據(jù)庫表3350中時(shí)),與該第一數(shù)據(jù)庫表3350相聯(lián)系的每個(gè)記錄3508中的所有比特項(xiàng)都被復(fù)位(也就是″0″)。其后,每當(dāng)存儲(chǔ)管理裝置3338在該第一數(shù)據(jù)庫表3350中記錄一寫請求項(xiàng)3504時(shí),存儲(chǔ)管理裝置3338在步驟3412更新第二數(shù)據(jù)庫表3352中的至少一個(gè)記錄3508(與該第一數(shù)據(jù)庫表3350相聯(lián)系的)。在一個(gè)實(shí)施例中,通過使用更新模塊3354來將至少一個(gè)記錄3508中每個(gè)復(fù)位的比特項(xiàng)置位,存儲(chǔ)管理裝置3338更新至少一個(gè)記錄3508,且所述每個(gè)比特項(xiàng)與位于數(shù)據(jù)存儲(chǔ)器3343的至少一部分內(nèi)的被與瞬時(shí)寫請求項(xiàng)相聯(lián)系的寫請求重寫的存儲(chǔ)單元對應(yīng)。因此,與第一數(shù)據(jù)庫表3350相聯(lián)系的記錄3508中每個(gè)置位(也就是,″1″)的比特項(xiàng)指出,與所述比特項(xiàng)對應(yīng)的位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的至少一個(gè)存儲(chǔ)單元在該第一數(shù)據(jù)庫表3350的形成期間被重寫至少已一次。另一方面,與第一數(shù)據(jù)庫表3350相聯(lián)系的記錄3508中每個(gè)復(fù)位(也就是,″0″)的比特項(xiàng)指出,與所述比特項(xiàng)對應(yīng)的位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的至少一個(gè)存儲(chǔ)單元在該第一數(shù)據(jù)庫表3350的形成期間沒有被重寫至少一次。照這樣,第二數(shù)據(jù)庫3352中一個(gè)或更多個(gè)記錄3508的數(shù)據(jù)(也就是,比特項(xiàng))表示,寫請求對數(shù)據(jù)存儲(chǔ)器3343至少一部分的狀態(tài)的影響(也就是,所述數(shù)據(jù)標(biāo)識(shí)被寫請求重寫的位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的至少一個(gè)存儲(chǔ)單元)。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,在圖43中所說明的每個(gè)記錄3508的五比特項(xiàng)僅僅是說明性的,并且用于解釋本發(fā)明的當(dāng)前方面的目的。實(shí)際上,每個(gè)記錄3508可包括,例如,比特項(xiàng)的一個(gè)或更多個(gè)字節(jié)或比特項(xiàng)的一個(gè)或更多個(gè)字(任何長度的)。此外,雖然在圖43中每個(gè)記錄3508的數(shù)據(jù)以二進(jìn)制表示的方式說明,但每個(gè)記錄3508可替代性地以十進(jìn)制、十六進(jìn)制或其它表示法存儲(chǔ)其數(shù)據(jù)。此外,除了表示寫請求對數(shù)據(jù)存儲(chǔ)器3343至少一部分的狀態(tài)的影響的比特項(xiàng)之外,每個(gè)記錄3508可包括用于標(biāo)識(shí)該記錄3508所關(guān)聯(lián)的第一數(shù)據(jù)庫表3350的標(biāo)識(shí)符。
如剛剛描述的,例如使用如上的數(shù)據(jù)庫表3350、3352存儲(chǔ)所述數(shù)據(jù)并為它編索引之后,存儲(chǔ)管理裝置3338可高效地確定第一數(shù)據(jù)庫表3350的寫請求項(xiàng)3504是否與到數(shù)據(jù)存儲(chǔ)器3343中特定存儲(chǔ)單元的寫入相聯(lián)系。因此,響應(yīng)對在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器3343至少一部分中(例如,當(dāng)前存儲(chǔ)器3344中或其某個(gè)子部分中)的數(shù)據(jù)的請求,例如來自用戶,存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356首先,在步驟3416,標(biāo)識(shí)至少一個(gè)第一數(shù)據(jù)庫表3350以搜索相關(guān)的寫請求項(xiàng)3504。在一個(gè)實(shí)施例中,為標(biāo)識(shí)哪個(gè)(或哪些個(gè))第一數(shù)據(jù)庫表3350要被搜索,存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356確定位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的哪個(gè)存儲(chǔ)單元已被重寫。在一個(gè)這樣的實(shí)施例中,存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356,為位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的每個(gè)存儲(chǔ)單元(所述存儲(chǔ)單元具有對應(yīng)的比特項(xiàng)),確定第二數(shù)據(jù)庫表3352中的至少一個(gè)記錄3508是否具有用于所述存儲(chǔ)單元的被置位(也就是,″1″)的比特項(xiàng)。
更具體地說,在一個(gè)實(shí)施例中,對數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的每個(gè)特定存儲(chǔ)單元來說,存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356在與該特定存儲(chǔ)單元對應(yīng)的每個(gè)記錄3508中的數(shù)據(jù)的比特項(xiàng)之上執(zhí)行一布爾邏輯“或”操作。為便于解釋,并仍參照圖43,當(dāng)存儲(chǔ)管理裝置3338已經(jīng)采用一個(gè)以上的第一數(shù)據(jù)庫表3350時(shí),這可視地解釋為在垂直對齊的記錄3508中的數(shù)據(jù)列上執(zhí)行一布爾邏輯“或”操作。如果布爾邏輯“或”操作為特定列返回″1″,那么與該列對應(yīng)的特定存儲(chǔ)單元已被重寫,并且在至少一個(gè)第一數(shù)據(jù)庫表3350中存在與一個(gè)或更多個(gè)被指引到該特定存儲(chǔ)單元的寫請求相聯(lián)系的一個(gè)或更多個(gè)寫請求項(xiàng)3504。否則,如果布爾邏輯“或”操作為特定列返回″0″,那么與該列對應(yīng)的特定存儲(chǔ)單元在第二數(shù)據(jù)庫表3352中的記錄3508所覆蓋的任何時(shí)間都未被重寫。
例如,取在圖43中所說明的數(shù)據(jù)存儲(chǔ)器3343至少一部分的存儲(chǔ)桶1的三個(gè)記錄中的示范數(shù)據(jù)(也就是,記錄1,1、記錄2,1、和記錄n,1),在這些記錄的垂直對齊的比特項(xiàng)之上執(zhí)行之前描述的布爾邏輯“或”操作(也就是,10010 OR 10010 OR 01010),從而生成結(jié)果11010。該結(jié)果指出,在圖43中表示的位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的第一、第二和第四存儲(chǔ)單元在某個(gè)時(shí)間點(diǎn)已被重寫,而且對于這些存儲(chǔ)單元中的每一個(gè),用于存儲(chǔ)桶1的至少一個(gè)記錄3508具有與該存儲(chǔ)單元對應(yīng)的比特項(xiàng),且該比特項(xiàng)被置位(也就是,″1″)的。該結(jié)果還指出,在圖43中所表示的位于數(shù)據(jù)存儲(chǔ)器3343所述部分內(nèi)的第三和第五存儲(chǔ)單元在該數(shù)據(jù)覆蓋的時(shí)間點(diǎn)未被重寫,而且對于這些存儲(chǔ)單元的每一個(gè),與該存儲(chǔ)單元對應(yīng)的存儲(chǔ)桶1的記錄3508中的每個(gè)比特項(xiàng)被復(fù)位(也就是″0″)。
存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356,剛一為位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的特定存儲(chǔ)單元確定至少一個(gè)記錄3508具有一個(gè)用于該特定存儲(chǔ)單元的被置位(也就是,″1″)的比特項(xiàng),就標(biāo)識(shí)那些一個(gè)或更多個(gè)記錄3508,所述記錄3508具有用于該特定存儲(chǔ)單元的被置位的比特項(xiàng)。標(biāo)識(shí)模塊3356然后還標(biāo)識(shí)一個(gè)或更多個(gè)第一數(shù)據(jù)庫表3350,那些標(biāo)識(shí)的記錄3508為所述第一數(shù)據(jù)庫表3350而保存。在一個(gè)實(shí)施例中,為完成這些步驟,存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356首先僅僅掃描有關(guān)的比特項(xiàng)以確定哪個(gè)已被置位為″1″?;氐轿覀兊睦?,所述例子包括在圖43中所說明的數(shù)據(jù)存儲(chǔ)器3343至少一部分的存儲(chǔ)桶1的三個(gè)記錄3508(也就是,記錄1,1、記錄2,1和記錄n,1),存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356掃描與第一、第二和第四存儲(chǔ)單元對應(yīng)的那些記錄的比特項(xiàng),所述第一、第二和第四存儲(chǔ)單元位于在圖43中所說明的數(shù)據(jù)存儲(chǔ)器3343的至少一部分內(nèi)。然而,存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356不需要,并且沒有掃描,與位于在圖43中所說明的數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的第三和第五存儲(chǔ)單元對應(yīng)的這些記錄的比特項(xiàng),這是因?yàn)闃?biāo)識(shí)模塊3356知道,由于之前描述的布爾邏輯“或”操作的執(zhí)行,它們?nèi)勘粡?fù)位(也就是,″0″)。
由于如此掃描那些記錄3508的比特項(xiàng),存儲(chǔ)管理裝置3338的標(biāo)識(shí)模塊3356于是將根據(jù)本發(fā)明,標(biāo)識(shí)以下的第一數(shù)據(jù)庫表3350以搜索寫請求項(xiàng)3504,所述寫請求項(xiàng)與對位于在圖43中所說明的數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的第一、第二和第四存儲(chǔ)單元的寫請求有關(guān)
在標(biāo)識(shí)模塊3356在步驟3416已標(biāo)識(shí)一個(gè)或更多個(gè)將要搜索的第一數(shù)據(jù)庫表3350之后,存儲(chǔ)管理裝置3338的搜索模塊3358在步驟3420搜索那些被標(biāo)識(shí)的第一數(shù)據(jù)庫表3350。在此,應(yīng)該記得,存儲(chǔ)管理裝置3338將已被請求,例如,被用戶請求在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器3343至少一部分中(例如,在當(dāng)前存儲(chǔ)器3344中或在其某個(gè)子部分中)的數(shù)據(jù)。因此,在一個(gè)實(shí)施例中,對每一位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的至少一個(gè)存儲(chǔ)單元來說,所述存儲(chǔ)單元在記錄3508中具有對應(yīng)的被置位的比特項(xiàng)(例如,回到我們上面的例子,對在圖43中所說明的數(shù)據(jù)存儲(chǔ)器3343至少一部分中的第一、第二和第四存儲(chǔ)單元中的每一個(gè)來說),存儲(chǔ)管理裝置3338的搜索模塊3358執(zhí)行下列步驟。首先,搜索模塊3358,如上所描述的,搜索通過標(biāo)識(shí)模塊3356標(biāo)識(shí)的第一數(shù)據(jù)庫表3350的寫請求項(xiàng)3504。搜索模塊3358然后根據(jù)那些寫請求項(xiàng)3504確定過去時(shí)間之后的第一時(shí)間,在所述第一時(shí)間,存儲(chǔ)在該至少一個(gè)存儲(chǔ)單元的以前數(shù)據(jù)由于執(zhí)行之前描述的寫時(shí)拷貝操作而被拷貝到新位置(比如數(shù)據(jù)存儲(chǔ)器3343的時(shí)間存儲(chǔ)器3346內(nèi)),并在該至少一個(gè)存儲(chǔ)單元被重寫。在確定第一時(shí)間之后,搜索模塊3358然后根據(jù)寫請求項(xiàng)3504確定以前的數(shù)據(jù)在該第一時(shí)間被拷貝到的新位置,例如時(shí)間存儲(chǔ)器3346內(nèi)的新位置。以前的數(shù)據(jù)當(dāng)前正被存儲(chǔ)在該新位置。所述新位置被用于產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器3343至少一部分的時(shí)間映射的至少一部分,及/或用于響應(yīng)用戶對在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器3343至少一部分中的數(shù)據(jù)的讀請求,每個(gè)均如下所描述的。
當(dāng)然,在一些實(shí)施例中,即使位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的存儲(chǔ)單元具有在記錄3508中的被置位的對應(yīng)比特項(xiàng),搜索模塊3358也將不能確定在所述過去時(shí)間之后的第一時(shí)間,在所述第一時(shí)間存儲(chǔ)在該存儲(chǔ)單元的以前數(shù)據(jù)被拷貝到新位置(例如,時(shí)間存儲(chǔ)器3346內(nèi))并在該存儲(chǔ)單元被重寫。搜索模塊3358將不能作出該確定的情況的一個(gè)例子是,位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的存儲(chǔ)單元在過去時(shí)間之前的時(shí)間被重寫,而不是在過去時(shí)間之后被重寫。在這種情況下,在過去時(shí)間存儲(chǔ)在該存儲(chǔ)單元中的數(shù)據(jù)將不會(huì)已被復(fù)制到新位置,但作為替代,仍將在現(xiàn)在時(shí)間被存儲(chǔ)在該存儲(chǔ)單元中。
如上所解釋的,在布爾邏輯“或”操作為圖43中垂直對齊的比特項(xiàng)的特定行返回″0″的情況下,數(shù)據(jù)存儲(chǔ)器3343至少一部分中的與該列對應(yīng)的特定存儲(chǔ)單元在由第二數(shù)據(jù)庫表3352中的記錄覆蓋的任何時(shí)間都未被重寫。因此,在這種情況下,在過去時(shí)間存儲(chǔ)在該特定存儲(chǔ)單元中的數(shù)據(jù)同樣將不會(huì)已被復(fù)制到新位置,但作為替代,仍將在現(xiàn)在時(shí)間被存儲(chǔ)在該存儲(chǔ)單元中。
在一個(gè)實(shí)施例中,在搜索模塊3358已經(jīng)為位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的每個(gè)存儲(chǔ)單元標(biāo)識(shí)了在過去時(shí)間存儲(chǔ)在該存儲(chǔ)單元的數(shù)據(jù)現(xiàn)在當(dāng)前存儲(chǔ)所在的位置(如所解釋的,其仍在該存儲(chǔ)單元中還是其位于新位置中,比如時(shí)間存儲(chǔ)器3346內(nèi))之后,存儲(chǔ)管理裝置3338的時(shí)間映射產(chǎn)生模塊3360在步驟3424產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器3343至少一部分的時(shí)間映射的至少一部分。在一個(gè)實(shí)施例中,時(shí)間映射產(chǎn)生模塊3360通過將位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的每個(gè)存儲(chǔ)單元映射到在過去時(shí)間存儲(chǔ)在該存儲(chǔ)單元中的數(shù)據(jù)現(xiàn)在當(dāng)前存儲(chǔ)所在的位置來產(chǎn)生時(shí)間映射。映射可以是,例如,如在數(shù)據(jù)庫中為位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的每個(gè)存儲(chǔ)單元記錄在過去時(shí)間存儲(chǔ)在該存儲(chǔ)單元中的數(shù)據(jù)現(xiàn)在當(dāng)前存儲(chǔ)所在位置的標(biāo)識(shí)一樣簡單。
在另一個(gè)實(shí)施例中,存儲(chǔ)管理裝置3338,例如從如上所描述的主機(jī)接收對在過去時(shí)間存儲(chǔ)在位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的至少一個(gè)指定存儲(chǔ)單元中的數(shù)據(jù)的讀請求。在一個(gè)實(shí)施例中,在存儲(chǔ)管理裝置3338的時(shí)間映射產(chǎn)生模塊3360已開始為相同的過去時(shí)間產(chǎn)生一時(shí)間映射之后,而在其完成該時(shí)間映射之前,讀請求被收到。在這種情況下,如果完成的時(shí)間映射的某個(gè)部分覆蓋在讀請求中指定的少一個(gè)存儲(chǔ)單元,那么存儲(chǔ)管理裝置3338的I/O模塊3362就在步驟3428從該時(shí)間映射確定數(shù)據(jù)的位置(如所解釋的,如果所請求的數(shù)據(jù)未被重寫,其可以是位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的指定存儲(chǔ)單元,或者如果所請求的數(shù)據(jù)已被重寫,其可以是比如時(shí)間存儲(chǔ)器3346內(nèi)的新位置)。替代性地,如果,在這種情況下,完成的時(shí)間映射的某個(gè)部分沒有覆蓋在讀請求中指定的至少一個(gè)存儲(chǔ)單元,或者如果,在其它實(shí)施例中,存儲(chǔ)管理裝置3338,例如沒有被配置以生成時(shí)間映射或僅生成或開始生成一過去時(shí)間(其不同于在讀請求中指定的過去時(shí)間)的時(shí)間映射,那么存儲(chǔ)管理裝置3338就執(zhí)行上面所描述的方法3400的步驟3416和3420。然而,在這樣執(zhí)行方法3400的步驟3416和3420時(shí),存儲(chǔ)管理裝置3338不需要為位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的每個(gè)存儲(chǔ)單元執(zhí)行之前描述的操作。相反,存儲(chǔ)管理裝置3338僅需為在讀請求中指定的每個(gè)存儲(chǔ)單元執(zhí)行方法3400的步驟3416和3420的之前描述的操作。換言之,存儲(chǔ)管理裝置3338僅需確定新位置(一個(gè)或更多個(gè)),其中之前存儲(chǔ)在讀請求中指定的每個(gè)存儲(chǔ)單元的數(shù)據(jù)被拷貝到所述新位置并且現(xiàn)在位于所述新位置。
在確定所述新位置之后,在步驟3428響應(yīng)讀請求,存儲(chǔ)管理裝置3338的I/O模塊3362從新位置讀數(shù)據(jù)并將其發(fā)送至請求方,例如如上所描述的主機(jī)。此外,在如下情況中,即存儲(chǔ)管理裝置3338的時(shí)間映射產(chǎn)生模塊3360已開始為一過去時(shí)間(其與在讀請求中指定的過去時(shí)間相同)產(chǎn)生時(shí)間映射,但在讀請求被接收時(shí)還未完成該時(shí)間映射,以及在已被完成的時(shí)間映射的某個(gè)部分沒有覆蓋在讀請求中指定的至少一個(gè)存儲(chǔ)單元的情況下,存儲(chǔ)管理裝置3338在對讀請求產(chǎn)生響應(yīng)時(shí)完成的工作(也就是,執(zhí)行方法3400的步驟3416和3420以確定新位置(一個(gè)或更多個(gè)),其中之前存儲(chǔ)在讀請求中指定的每個(gè)存儲(chǔ)單元中的數(shù)據(jù)被拷貝到并且現(xiàn)在位于所述新位置)可被存儲(chǔ)管理裝置3338的時(shí)間映射產(chǎn)生模塊3360用于完成該時(shí)間映射。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,上面所描述的方法3400的實(shí)現(xiàn)可用各種方法改變或修改,同時(shí)仍然采用所描述的原理而不會(huì)影響方法的結(jié)果。例如,在一個(gè)實(shí)施例中,記錄3508中每個(gè)被置位的比特項(xiàng)可由″0″表示,與″1″相反,而每個(gè)被復(fù)位的比特項(xiàng)可由″1″表示,與″0″相反。在這樣的實(shí)施例中,在為位于數(shù)據(jù)存儲(chǔ)器3343至少一部分內(nèi)的特定存儲(chǔ)單元確定至少一個(gè)記錄3508是否具有用于該特定存儲(chǔ)單元的且被置位的比特項(xiàng)時(shí),標(biāo)識(shí)模塊3356在與該特定存儲(chǔ)單元對應(yīng)的每個(gè)記錄3508的比特項(xiàng)上執(zhí)行布爾邏輯“和”操作,與上面所描述的布爾邏輯“或”操作相反。在這種情況下,如果布爾邏輯“和”操作為特定列返回″0″,那么與該列對應(yīng)的特定存儲(chǔ)單元已被重寫,并且在至少一個(gè)第一數(shù)據(jù)庫表3350中存在與一個(gè)或更多個(gè)被指引到該特定存儲(chǔ)單元的寫請求相聯(lián)系的一個(gè)或更多個(gè)寫請求項(xiàng)3504。否則,如果布爾邏輯“和”操作為特定列返回1,那么與該列對應(yīng)的特定存儲(chǔ)單元未在被第二數(shù)據(jù)庫表3508中的記錄3508覆蓋的任何時(shí)間被重寫。此外,作為另一個(gè)例子,比特項(xiàng)可用于表示任何數(shù)目的存儲(chǔ)單元,只要當(dāng)數(shù)據(jù)被寫或讀時(shí)轉(zhuǎn)換被一致地應(yīng)用。
本發(fā)明可作為包含在一個(gè)或更多個(gè)制造物品之上或之中的一個(gè)或更多個(gè)計(jì)算機(jī)可讀的程序的一個(gè)或更多個(gè)模塊來提供。所述制造物品可以是,作為非限制的例子,軟盤、硬盤、CD ROM(光盤只讀存儲(chǔ)器)、快速存儲(chǔ)卡、PROM(可編程只讀存儲(chǔ)器)、RAM(隨機(jī)存取存儲(chǔ)器)、ROM(只讀存儲(chǔ)器)或磁帶。通常,計(jì)算機(jī)可讀的程序可用任何程序設(shè)計(jì)語言實(shí)現(xiàn)。一些可被使用的語言的例子包括C、C++或JAVA。軟件程序可作為目標(biāo)碼被存儲(chǔ)在一個(gè)或更多個(gè)制造物品之上或之中。
在此所描述的內(nèi)容的變動(dòng)、修改及其它實(shí)現(xiàn)將被本領(lǐng)域普通技術(shù)人員想到而不脫離如所要求的本發(fā)明的精神和范圍。因此,本發(fā)明將不由前述說明性的描述限定,而是由權(quán)利要求的精神和范圍限定。
權(quán)利要求是
權(quán)利要求
1.一種能夠呈現(xiàn)數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象的數(shù)據(jù)存儲(chǔ)系統(tǒng),所述系統(tǒng)包括接收器,其用于接收過去時(shí)間的規(guī)約;I/O處理器,其用于處理被指引到所述數(shù)據(jù)存儲(chǔ)器中一個(gè)或更多個(gè)目標(biāo)存儲(chǔ)單元的I/O請求;編索引模塊,其記錄由所述I/O處理器處理的寫請求,所述編索引模塊包括內(nèi)存,其為每個(gè)寫請求存儲(chǔ)記錄,所述記錄包括i)目標(biāo)存儲(chǔ)單元的標(biāo)識(shí);ii)之前存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置;以及iii)寫入時(shí)間,其表示寫請求被接收的時(shí)間;映射模塊,其使用一個(gè)或更多個(gè)記錄來產(chǎn)生在指定過去時(shí)間存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置的映射;以及映象產(chǎn)生模塊,其至少部分地基于由所述映射模塊產(chǎn)生的所述映射,呈現(xiàn)所述數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲(chǔ)系統(tǒng),其中所述映象還基于當(dāng)前存儲(chǔ)在自所述過去時(shí)間以來都不是寫請求的目標(biāo)的存儲(chǔ)單元中的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲(chǔ)系統(tǒng),其中當(dāng)新近接收的寫請求被所述I/O處理器處理時(shí),所述映射模塊使用額外的表項(xiàng)。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲(chǔ)系統(tǒng),其中所述數(shù)據(jù)存儲(chǔ)器是虛擬數(shù)據(jù)存儲(chǔ)器。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)存儲(chǔ)系統(tǒng),其中所述位置是物理存儲(chǔ)器中的位置。
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲(chǔ)系統(tǒng),其中之前存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置可位于所述數(shù)據(jù)存儲(chǔ)系統(tǒng)內(nèi)的任何地方。
7.一種產(chǎn)生過去時(shí)間的數(shù)據(jù)存儲(chǔ)器的時(shí)間映射的方法,所述方法包括步驟創(chuàng)建被指引到位于數(shù)據(jù)存儲(chǔ)器中一個(gè)或更多個(gè)目標(biāo)存儲(chǔ)單元的寫請求的記錄,每個(gè)記錄包括i)至少一個(gè)目標(biāo)存儲(chǔ)單元的標(biāo)識(shí);ii)寫時(shí)間,其表示被指引到所述至少一個(gè)目標(biāo)存儲(chǔ)單元的寫請求被接收的時(shí)間;以及iii)位置,存儲(chǔ)在所述至少一個(gè)目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)響應(yīng)所述寫請求而被移至所述位置;以及對于第一過去時(shí)間,通過使用所述記錄來定位自所述第一過去時(shí)間以來作為寫請求的目標(biāo)的存儲(chǔ)單元的數(shù)據(jù)的當(dāng)前位置,從而在產(chǎn)生時(shí)間產(chǎn)生所述數(shù)據(jù)存儲(chǔ)器的時(shí)間映射。
8.根據(jù)權(quán)利要求7所述的方法,進(jìn)一步包括步驟為每個(gè)存儲(chǔ)單元,在自所述第一過去時(shí)間創(chuàng)建的一組記錄中選取一最舊的記錄。
9.根據(jù)權(quán)利要求7所述的方法,進(jìn)一步包括步驟在所述產(chǎn)生時(shí)間之后,用附加記錄補(bǔ)充所述時(shí)間映射以響應(yīng)被指引到自所述第一過去時(shí)間以來之前不是寫請求的目標(biāo)的存儲(chǔ)單元的寫請求。
10.根據(jù)權(quán)利要求7所述的方法,進(jìn)一步包括步驟對于第二過去時(shí)間,通過使用自所述第二過去時(shí)間以來作為寫請求的目標(biāo)的存儲(chǔ)單元的記錄,產(chǎn)生所述數(shù)據(jù)存儲(chǔ)器的時(shí)間映射。
11.根據(jù)權(quán)利要求10所述的方法,進(jìn)一步包括步驟使用所述第一過去時(shí)間的所述時(shí)間映射創(chuàng)建第一邏輯單元。
12.根據(jù)權(quán)利要求11所述的方法,進(jìn)一步包括步驟使用所述第二過去時(shí)間的所述時(shí)間映射創(chuàng)建第二邏輯單元。
13.根據(jù)權(quán)利要求12所述的方法,其中所述第一邏輯單元和第二邏輯單元是虛擬邏輯單元。
14.一種產(chǎn)生數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象的方法,所述方法包括步驟處理被指引到數(shù)據(jù)存儲(chǔ)器中多個(gè)目標(biāo)存儲(chǔ)單元的I/O請求;響應(yīng)一個(gè)或更多個(gè)I/O請求,記錄所述目標(biāo)存儲(chǔ)單元的標(biāo)識(shí),數(shù)據(jù)之前存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元中的位置,以及一個(gè)時(shí)間;映射所述目標(biāo)存儲(chǔ)單元和之前在過去時(shí)間存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的當(dāng)前位置的關(guān)聯(lián);以及對于所述過去時(shí)間,至少部分地基于所映射的關(guān)聯(lián),產(chǎn)生所述數(shù)據(jù)存儲(chǔ)器的映象。
15.根據(jù)權(quán)利要求14所述的方法,其中所述方法由存儲(chǔ)系統(tǒng)執(zhí)行,并且之前存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元的數(shù)據(jù)可位于所述存儲(chǔ)系統(tǒng)內(nèi)的任何地方。
16.根據(jù)權(quán)利要求15所述的方法,其中所述存儲(chǔ)系統(tǒng)包括存儲(chǔ)管理裝置和物理存儲(chǔ)器。
17.根據(jù)權(quán)利要求16所述的方法,其中所述物理存儲(chǔ)器包括多個(gè)邏輯單元。
18.根據(jù)權(quán)利要求14所述的方法,其中如果I/O請求自過去時(shí)間以來未被指引到所述存儲(chǔ)單元,那么所述映象還基于當(dāng)前存儲(chǔ)在目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)。
19.根據(jù)權(quán)利要求14所述的方法,其中所述映射的步驟進(jìn)一步包括響應(yīng)在所述映射被最初產(chǎn)生之后接收的I/O請求,持續(xù)記錄所述目標(biāo)存儲(chǔ)單元的標(biāo)識(shí)、之前存儲(chǔ)在所述目標(biāo)存儲(chǔ)單元中的數(shù)據(jù)的位置,以及時(shí)間;以及當(dāng)原先未包含在所述映射中的存儲(chǔ)單元是I/O請求的目標(biāo)時(shí),映射額外的關(guān)聯(lián)。
20.根據(jù)權(quán)利要求14所述的方法,其中所述I/O請求是寫請求。
21.根據(jù)權(quán)利要求14所述的方法,其中所述時(shí)間是被指引到所述目標(biāo)存儲(chǔ)單元的所述I/O請求被接收的時(shí)間。
22.根據(jù)權(quán)利要求14所述的方法,其中所述數(shù)據(jù)存儲(chǔ)器的當(dāng)前映象和所述數(shù)據(jù)存儲(chǔ)器的時(shí)間映象同時(shí)存在。
全文摘要
本發(fā)明涉及用于通過使用在指定過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器(1938)中數(shù)據(jù)的位置的映射(例如,時(shí)間映射)(1997)來產(chǎn)生數(shù)據(jù)存儲(chǔ)器在過去時(shí)間的映象(1999)的系統(tǒng)、方法。所述映射使數(shù)據(jù)存儲(chǔ)系統(tǒng)能夠快速確定在過去時(shí)間存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)的位置,而不用搜索有關(guān)過去數(shù)據(jù)的位置的記錄的整個(gè)索引(1995)。
文檔編號G06F11/00GK101080710SQ200580036276
公開日2007年11月28日 申請日期2005年8月24日 優(yōu)先權(quán)日2004年8月24日
發(fā)明者R·帕舍瑞尼, T·張 申請人:塞門鐵克操作公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
申扎县| 开江县| 交口县| 礼泉县| 双牌县| 黔东| 浮山县| 桓台县| 巴马| 青海省| 诏安县| 汝州市| 固镇县| 托里县| 枣阳市| 太康县| 丰宁| 桐庐县| 紫金县| 永昌县| 尉氏县| 越西县| 颍上县| 保亭| 建德市| 博野县| 石河子市| 高州市| 二连浩特市| 峨边| 敖汉旗| 丽水市| 呈贡县| 塔河县| 依兰县| 西丰县| 读书| 临澧县| 万载县| 岳池县| 广灵县|