專利名稱:具有鏡象存儲盤的替換延遲更新的數(shù)字存儲系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及到容錯數(shù)字存儲盤系統(tǒng),更具體地涉及到鏡象盤類型的數(shù)字存儲盤系統(tǒng),其中數(shù)字信息一式兩份地存儲在兩個單獨的存儲盤上,以保證可靠性。
隨著對于在線數(shù)據(jù)庫事務(wù)處理(OLTP)的要求的增長,以每秒數(shù)千事務(wù)計的高事務(wù)率必須由OLTP系統(tǒng)支持。此外,這些應(yīng)用程序要求高度可靠性和容錯能力。在諸如OLTP那樣的應(yīng)用程序中,大部分請求是對數(shù)據(jù)的隨機訪問。由于大部分?jǐn)?shù)據(jù)存放在盤上,所以盤子系統(tǒng)必須支持高的隨機訪問率,它高達(dá)每秒數(shù)千次隨機訪問的數(shù)量級。還有,盤應(yīng)能有容錯能力,以滿足OLTP對可靠性的要求。
當(dāng)對盤實行隨機訪問時,一般情況下盤需要轉(zhuǎn)動至新方位,使所需數(shù)據(jù)位于盤臂之下,而該盤臂上的讀/寫頭也必須沿該臂移動至新的徑向位置,以使所需數(shù)據(jù)位于讀/寫頭之下。遺憾的是,這種物理操作的技術(shù)性能,并且因而隨機盤輸入/輸出(I/O)技術(shù)性能不像其它系統(tǒng)參量如CPU MIPS改善得那么快。因此,對于那些隨機訪問數(shù)據(jù)操作處于主導(dǎo)地位的應(yīng)用程序,例如OLTP,本因素有著限制作用,這在本門技術(shù)中稱為受盤臂所限。在受盤臂所限系統(tǒng)中,盤成本在整個系統(tǒng)成本中所占比例變得愈來愈大。因此,需要一種盤子系統(tǒng),它能比常規(guī)盤系統(tǒng)支持更高的每秒隨機訪問率,并有更好的性能價格比特性。
鏡象盤系統(tǒng)和RAID盤系統(tǒng)(獨立盤的冗余陣列,即Redundant Array of Independent Disks)兩者都曾為OLTP提供容錯盤系統(tǒng)。在鏡象盤系統(tǒng)中,每個盤的信息在第二個(也即冗余)盤上有備份。在RAID陣列中,幾個盤上相對應(yīng)的塊地址上的信息用來在另一個盤上建立一個奇偶校驗塊。當(dāng)發(fā)生故障時,RAID陣列中任一盤可依靠陣列中其他盤進(jìn)行重建。RAID體系對于特定存儲容量講,所用盤數(shù)較少,但鏡象盤一般性能較好。1990年5月在科羅拉多的博爾德舉行的計算機系統(tǒng)的測量和建模SIGMETRICS會議的論文集74-85頁上的論文“使用Amdahl5890的盤冗余陣列的估價”中P.Chen等人證明了,當(dāng)隨機寫操作占主導(dǎo)地位時,鏡象盤比RAID-5盤陣列更好(就是說,當(dāng)隨機讀/寫操作占主導(dǎo)地位時,鏡象盤體系的平均讀/寫時間比RAID-5體系的時間短些)。例如,1988年6月在伊利諾伊的芝加哥舉行的數(shù)據(jù)管理的ACM SIGMOD國際會議的論文集109-116頁上的論文“價格低廉盤冗余陣列的一例”中D.Patterson等人介紹了RAID-5體系。然而,鏡象盤要求每一個數(shù)據(jù)都應(yīng)寫到鏡象盤對的兩個盤上。因此,一般認(rèn)為,為了保證容錯性,鏡象盤存儲系統(tǒng)會增加性能代價。
在轉(zhuǎn)讓給本專利申請的同一受讓人的未決專利申請系列號8-036636(1993年3月24日遞交),名為“在保留盤上物理群集的情況下用于將隨機寫操作轉(zhuǎn)換為順序?qū)懖僮鞯谋P存儲方法和裝置”的申請中,本發(fā)明的一些發(fā)明人公開了一種用于改善單個盤或RAID陣列的性能的方法。這是通過以下操作實現(xiàn)的在內(nèi)存中建立寫盤操作的分類運行數(shù)據(jù),將它們寫入運行記錄盤,再將運行記錄盤的分類運行數(shù)據(jù)加以合并,依靠大的成批寫操作將它們一次地施加到數(shù)據(jù)盤上。本方法的優(yōu)點是將大量的隨機寫操作轉(zhuǎn)換成順序?qū)懖僮?。本方法的問題是,當(dāng)隨機讀盤操作中斷了成批寫操作時,將增加以下代價如成批寫操作繼續(xù)進(jìn)行,則盤的讀請求被延遲,導(dǎo)致讀盤響應(yīng)時間增大的代價;或如成批寫操作被讀盤所中斷,結(jié)果大量損失寫操作(當(dāng)然也是總的)吞吐量。只要是成批寫操作時經(jīng)常需要讀盤,則以上兩種情況中任何一種都會降低總的性能,以致建立分類運行數(shù)據(jù)的優(yōu)點被大量抵消掉。
鏡象盤系統(tǒng)中的常規(guī)恢復(fù)方法是將鏡象盤對中保存完好的盤的數(shù)據(jù)復(fù)制到空閑的備份盤上。典型做法是對保存完好盤的數(shù)據(jù)加以掃描,并將在此過程中插進(jìn)來的寫操作運用于兩個盤。這個方法的問題是在恢復(fù)過程中盤系統(tǒng)性能將顯著地下降。
當(dāng)需要將每個寫盤操作一式兩份地使用到鏡象盤對的兩個盤上時,正常情況下會增加代價。相應(yīng)地,本發(fā)明的目的是通過大量地消除該代價,因而改善鏡象盤系統(tǒng)的性能。
本發(fā)明的另一個目的是提供一種鏡象盤子系統(tǒng),它通過將隨機盤I/O寫操作轉(zhuǎn)換成近似于順序I/O的方法來改善隨機盤I/O的性能。
本發(fā)明的又一個目的是不增加讀響應(yīng)時間的代價而改善鏡象盤吞吐量。
本發(fā)明還有一個目的是在從故障盤恢復(fù)的過程中,在保留快速恢復(fù)性能的同時,保證恢復(fù)過程中的讀盤和寫盤性能,因而改善了性能。
這些和更多的目的和優(yōu)點可由本發(fā)明提供的鏡象盤類的容錯盤存儲子系統(tǒng)所得到,在該子系統(tǒng)中將盤的更新(即要寫的數(shù)據(jù)塊)積累起來并調(diào)度成連續(xù)的成批更新操作,該調(diào)度可以產(chǎn)生一種順序,從而能有效地寫到鏡象盤上。雖非必要,但更新數(shù)據(jù)最好積累在盤控制器的內(nèi)存中;雖非必要,但最好由鏡象盤的盤控制器進(jìn)行調(diào)度。內(nèi)存最好是非易失性或是容錯的。
在最佳實施例中,調(diào)度是按照鏡象盤的更新數(shù)據(jù)的起始地址將更新數(shù)據(jù)分類而完成的(也即按照更新數(shù)據(jù)將寫到盤上的地址)。這種順序也對應(yīng)于對盤的掃描。
每個鏡象盤對的盤就運行于彼此不同的相位。一個在讀狀態(tài),而另一個在寫狀態(tài)。按照調(diào)度順序,每一次成批寫操作都有效地施加于寫狀態(tài)下的盤。因為更新數(shù)據(jù)是按照盤上的物理順序復(fù)制到鏡象盤對的每一個盤,所以寫操作時性能良好。
因此隨機寫操作轉(zhuǎn)換成大量的順序?qū)懕P操作,并且數(shù)據(jù)群集保留在盤上。應(yīng)用這種方法寫一個塊的平均時間通常不到隨機寫一個塊到盤上的時間的一半,因此大大地消除了不得不將一個塊向鏡象盤對寫兩次的問題。
這時候,讀請求是通過從內(nèi)存讀取數(shù)據(jù)或從處于讀狀態(tài)下的盤讀出而得到處理的。因此,也能得到所保證的讀請求的性能。當(dāng)成批更新數(shù)據(jù)應(yīng)用到鏡象盤對中的一個盤時(就是處于寫狀態(tài)的那個),各盤就變換運行狀態(tài)。也可能會出現(xiàn)一段時間,在這兩個運行狀態(tài)中間,兩個盤都處于讀狀態(tài)。也會出現(xiàn)這樣的時刻,這時鏡象盤對的兩個盤都處于寫狀態(tài),例如在裝載或其他大量復(fù)制操作時。
在處理鏡象盤對中一個故障盤的恢復(fù)時,引用了一對備用鏡象盤。后者用替換鏡象方案進(jìn)行操作。在恢復(fù)過程中,新的寫操作加到備用盤對上。讀操作或從保存完好的盤或從替換鏡象備用盤對加以處理。在后臺,在備用周期內(nèi),對保存完好盤的數(shù)據(jù)加以掃描并復(fù)制到備用替換鏡象對上。本方法提供快速恢復(fù),并在恢復(fù)過程中保證讀和寫請求兩者的性能。
通過下列對最佳實施例的詳細(xì)描述和附圖,本發(fā)明的這些和更多的目的、優(yōu)點、和特征將更加清楚。
圖1是本發(fā)明最佳實施例的總框圖;
圖2描述了I/O處理器的非易失存儲器的數(shù)據(jù)的最佳組織;
圖3是一幅流程圖,用于顯示正常操作時處理寫請求的步驟;
圖4是一幅流程圖,用于顯示正常操作時對盤進(jìn)行成批寫操作的過程的步驟;
圖5是一幅時序圖,顯示對兩個鏡象盤進(jìn)行成批寫操作的兩個過程之間的時序關(guān)系;
圖6是一幅流程圖,顯示正常操作時處理讀請求的步驟;
圖7示意性圖示故障盤恢復(fù)時的配置;
圖8是一幅流程圖,顯示恢復(fù)過程中處理讀請求的步驟;
圖9是一幅流程圖,顯示后臺進(jìn)程對保存完好的盤掃描的步驟。
圖1是一幅具有鏡象存儲盤的盤存儲子系統(tǒng)的計算機系統(tǒng)的最佳實施例的框圖,該鏡象存儲盤用積累的更新數(shù)據(jù)以成批方式替換地進(jìn)行更新,而該積累的更新數(shù)據(jù)曾按照本發(fā)明加以分類,以得到有效寫操作(以后有時稱為AMDU,即替換延遲更新的鏡象盤)。該系統(tǒng)包括一個控制器或I/O處理器(IOP)200,多個的鏡象盤對300-1至300-N,至少一對備用盤400,和一個中央處理單元(CPU)100??刂破?00接至CPU100,并有處理器210和非易失存儲器220。為簡單起見,假設(shè)非易失存儲器分區(qū)220-1區(qū)至220-N區(qū),其中每一區(qū)對應(yīng)于一個鏡象對。
熟悉技術(shù)的人能容易地理解,存儲器和控制器不一定要如描述那樣組成單獨的物理子系統(tǒng),而作為代替,可由主計算機系統(tǒng)中所運行的軟件來實現(xiàn)。還有,為了得到本發(fā)明的有用優(yōu)點,存儲器不一定必須是非易失性的,而在很多環(huán)境下也可以是容錯的(例如通過應(yīng)用三重冗余和表決機構(gòu))。存儲器也不必是分區(qū)的,可以有不止一對備用盤。正常情況下不使用備用盤對,它們只在鏡象盤出故障的情況下使用。
每一對鏡象盤包括對300-1的標(biāo)號為300-a1和300-b1的兩個盤(相應(yīng)地盤對300-N包括300-aN和300-bN)。每個鏡象盤對中的兩個盤基本上包括相同的數(shù)據(jù)。然而,將如在下面描述中理解得那樣,對每個鏡象盤對的更新操作并不像常規(guī)鏡象盤那樣同時進(jìn)行。根據(jù)本發(fā)明,作為代替,更新數(shù)據(jù)積累在非易失存儲器220中并分類為成批更新數(shù)據(jù),后者并不同時送到一對盤中的兩個,而是先送到一個盤,再送到另一個盤。另外,當(dāng)同樣的更新數(shù)據(jù)實質(zhì)上送到一對盤中的每一個盤時(除了由于更新數(shù)據(jù)在送到兩個盤之前已在非易失存儲器220中進(jìn)一步更新過,因而已經(jīng)過時之外),由于它們在不同時間送到這兩個盤,并且盤對中的每一個盤的單獨批量中包括更新些的數(shù)據(jù)塊,所以一般情況下單獨送到每個盤的成批更新數(shù)據(jù)是不相同的。
圖2更詳細(xì)地顯示了非易失存儲器220-i的一個區(qū)。該區(qū)具有標(biāo)號為221-1至221-K的數(shù)據(jù)塊。對應(yīng)于每個數(shù)據(jù)塊的是兩個標(biāo)號為222-1和223-1的標(biāo)記(用于221-1塊)至222-K和223-K的標(biāo)記(用于221-K塊)。每個數(shù)據(jù)塊的兩個標(biāo)記對應(yīng)于鏡象盤對中的兩個盤,它們用于指出所對應(yīng)的盤是否仍須寫該數(shù)據(jù)塊。
在非易失存儲器的每一區(qū)中還有一組標(biāo)號為225-1至225-L的指針。每個指針指向非易失存儲器中某區(qū)的一個數(shù)據(jù)塊。該組中指針順序標(biāo)志著為了提高效率,應(yīng)寫到盤上的塊的順序。
非易失存儲器用作寫到盤上的數(shù)據(jù)塊的高速緩存。熟悉技術(shù)的人將容易理解,這類高速緩存可以像任何其它高速緩存一樣加以管理,例如使用散列表(用于確定高速緩存中有哪些塊)和自由表(將自由塊鏈接起來)。圖2中未示出散列表和自由表。
根據(jù)本發(fā)明的最佳子系統(tǒng)中,正常操作時產(chǎn)生四個進(jìn)程。第一個進(jìn)程用于處理寫請求并示于圖3,當(dāng)提出寫請求時(塊510),控制器的非易失存儲器接受檢查,以確定是否存在著該塊的舊版本(圖3中塊520)。如果用于相應(yīng)盤對的非易失存儲器中早已有該塊的先前版本,則存儲器中的該先前版本即被改寫(塊530),同時對應(yīng)于該塊的兩個標(biāo)記都打開(塊560),以指出兩個盤都應(yīng)安裝該塊的新版本。
如果在非易失存儲器中沒有發(fā)現(xiàn)要寫的塊的舊版本,則控制器在它的非易失存儲器中尋找自由空間,以便暫時存放要寫的塊(塊540)。如果存在著自由空間可供該塊使用,則由寫請求指定的數(shù)據(jù)塊就寫入該自由空間,同時在指針表中插入一個指針,該新指針指向新塊(塊550),而它在指針表中的位置(相對于表中的其他指針)是如此安排,以便在把指針?biāo)赶虻臄?shù)據(jù)塊寫到盤上時,指針表提供了有效的調(diào)度。相應(yīng)的兩個標(biāo)記都打開,以指出兩個盤都應(yīng)執(zhí)行新數(shù)據(jù)塊的寫操作(塊560)。
如果非易失存儲器中沒有要寫的數(shù)據(jù)塊,而又沒有可用的自由塊空間,則該新塊就同步地寫到兩個盤上(塊570),如果非易失存儲器足夠大,可以容納寫操作的大量負(fù)荷,則正常時不會出現(xiàn)這種情況(除非可能有裝載和其他很大量的復(fù)制操作),但無論如何應(yīng)明確規(guī)定在遇到寫請求而非易失存儲器中沒有自由空間的事件下應(yīng)采取的行動。
指針表225確定由該表包含的數(shù)據(jù)塊(在非易失存儲器內(nèi)的)的次序或調(diào)度。這種次序或調(diào)度是最優(yōu)地建立起來,以使得如果盤按這種次序訪問塊時,訪問所有塊(以及將它們寫到盤上)的總時間將是最短的,作為一次近似,可以按柱面進(jìn)行安排,這樣一來,對整個盤掃描一次(巡視)即能夠在一遍內(nèi)完成所有更新操作。在進(jìn)入下一個柱面前,特定柱面的所有塊都能寫完。還可以有更精心的方案,將一個柱面內(nèi)的塊加以安排,以使柱面的旋轉(zhuǎn)執(zhí)行時間最小。更完善的方案能將尋找時間和旋轉(zhuǎn)延遲結(jié)合起來加以考慮。這種方案在1990年1月于Washington,D.C.召開的Winter1990 USENIX會議論文集中313至323頁上的M.Seltzer等人寫的“重新訪問的盤調(diào)度”中已有所描述。
有兩個進(jìn)程(每個盤一個),它們周期地蘇醒并將非易失存儲器內(nèi)等待的更新數(shù)據(jù)使用到相應(yīng)的盤。使用更新數(shù)據(jù)的邏輯對兩個進(jìn)程是相同的,并示于圖4。當(dāng)進(jìn)程蘇醒時(塊610),它找到指針表的始端并走遍整個指針表,依次檢查每一塊。每一步它都檢查看是否已抵達(dá)表尾(塊620)。如果已到,它即進(jìn)入睡眠狀態(tài)(塊680),并在下一周期蘇醒。如果指針表還有更多的塊,它檢查指針表中當(dāng)前塊的標(biāo)記(塊630),如果對應(yīng)于該進(jìn)程的盤的標(biāo)記是關(guān)閉的,該進(jìn)程即移向表中的下一個指針(塊670)。如果標(biāo)記是打開的,則該進(jìn)程將塊寫到盤上并將標(biāo)記關(guān)閉(塊640)。在關(guān)閉該標(biāo)記后,它檢查另一個標(biāo)記(塊650)。如果另一標(biāo)記是打開的,該進(jìn)程移至表中下一個指針(塊670)。如果另一標(biāo)記是關(guān)閉的,兩個盤已經(jīng)使用了更新數(shù)據(jù),所以將該指針從表中去除(塊660),該塊仍然有效(對該塊的讀操作仍將獲得高速緩存命中),但它是自由的,并會被下一次對任何塊的寫操作所重寫。接著該進(jìn)程移至表中下一個指針(塊670)。
使用更新數(shù)據(jù)到兩個盤上的兩個進(jìn)程具有相同的邏輯,并最好有相同的周期,也即,對于兩個進(jìn)程講,進(jìn)程的寫階段的兩個連續(xù)的激活動作之間的時間最好是相同的。在所描述的實施例中這個周期稱作T。這兩個進(jìn)程不必要同步,圖5解釋它們時相差180度。用于盤a的進(jìn)程在時刻O、T、2T、3T等蘇醒,并開始向盤a寫成批更新數(shù)據(jù),直至完成,然后切換到讀狀態(tài),而用于盤b的進(jìn)程在時刻T/2、T+T/2、2T+T/2、3T+T/2等蘇醒,并開始向盤b寫成批更新數(shù)據(jù),直至完成,然后切換到讀狀態(tài)。圖5使用時序圖來對此解釋,其中高值標(biāo)志著相應(yīng)盤的寫進(jìn)程為活動的時間周期。當(dāng)寫進(jìn)程進(jìn)入睡眠狀態(tài)(非活動)時,相應(yīng)的盤可處理隨機讀通信。
如圖5所述,這導(dǎo)致3種不同的控制器狀態(tài),具體說在控制器狀態(tài)1下,盤a處于寫狀態(tài)而盤b處于讀狀態(tài);在控制器狀態(tài)2下,盤b處于寫狀態(tài)而盤a處于讀狀態(tài);在控制器狀態(tài)3下,盤a和盤b都處于讀狀態(tài)。正如和早先對圖3塊570的描述有關(guān)的那樣,還存在著控制器狀態(tài)4,其中盤a和盤b都處于寫狀態(tài)。只要成批寫操作每次都在短于T/2的時間內(nèi)完成,控制器狀態(tài)4就不會出現(xiàn)。最好如此設(shè)計系統(tǒng)以極力避免出現(xiàn)兩個盤同時都處于寫狀態(tài)的局面,要做到這點可以設(shè)計使成批寫操作將在短于T/2的時間內(nèi)完成。
將兩個進(jìn)程保持180度的相位差,可以保證只要寫操作能在短于一半周期的時間內(nèi)完成,則總有一個盤臂可專用于處理隨機讀操作,這樣做允許批量可取得很大(因而提高寫操作效率),而不致于損害讀操作的響應(yīng)時間。周期T是一個決定于系統(tǒng)的參量,主要決定于可用的存儲器容量,因為周期T內(nèi)累積的寫操作的數(shù)據(jù)應(yīng)能在存儲器容納得下。
圖6所示是處理讀請求進(jìn)程的邏輯。當(dāng)讀請求到達(dá)時(塊810),檢查非易失存儲器(塊820)是否具有要讀的塊。如果存儲器中有該塊,它立即被返回(塊830)。如果存儲器中沒有該塊,則檢查(塊840)是否兩個盤都正在處理讀請求(也即,控制器是否處于控制器狀態(tài)3)。如果不是,則由目前處于只讀狀態(tài)的盤處理該請求(塊850),也就是其中寫進(jìn)程未激活的那個盤。如兩個盤都處于只讀狀態(tài)(也即控制器狀態(tài)3),任何一個盤都可處理該請求,但最好由磁頭最靠近目標(biāo)塊的盤進(jìn)行處理(塊860)。
熟悉技術(shù)的人容易理解,需要某些同步子程序(如鎖存)保持共享數(shù)據(jù)結(jié)構(gòu)(如標(biāo)記、指針表)的完整性,該共享數(shù)據(jù)結(jié)構(gòu)由多個上述進(jìn)程同時訪問。還有,由于每個盤一般都向盤寫入非易失存儲器中所存儲的不同子集,所以用于獲得最小成批寫操作時間的指針次序?qū)τ趦蓚€盤講可能是不同的。
圖7將描述和解釋故障局面下的操作。假定鏡象對300-g中300-bg盤出了故障。常規(guī)的恢復(fù)方案是使用一個替代盤,此時保存完好的盤300-ag的內(nèi)容即復(fù)制到該替代盤,以代替丟失的鏡象盤,因此鏡象盤對即得到恢復(fù)。根據(jù)本發(fā)明的最佳恢復(fù)方案不是只用一個替代盤,而是用一對替代盤400a和400b。當(dāng)恢復(fù)操作結(jié)束時,盤400內(nèi)容是最新的,而保存完好的盤300-ag則退回給系統(tǒng),另作他用。
在恢復(fù)期間,保存完好的盤一直處于只讀狀態(tài)。保存完好的盤并不參與對寫請求的處理。熟悉技術(shù)的人容易理解,非易失存儲器內(nèi)所存的位映象(圖7中標(biāo)號230)能用于追蹤了解在恢復(fù)操作完成前,有哪些塊等著從保存完好的盤加以恢復(fù)。位映象為每一盤塊配備一位,而在恢復(fù)操作開始時所有位都清零。作為代替,位映象可存于系統(tǒng)的其他存儲部件內(nèi)。
總的說來,有五個進(jìn)程用于恢復(fù)操作。兩個進(jìn)程(每個盤有一個)周期地蘇醒并將高速緩存中等待的寫操作使用于相應(yīng)的盤。這些進(jìn)程具有相同周期,并保持在相位上相差180度。這些進(jìn)程的邏輯等同于圖4所示正常操作所用邏輯。第三進(jìn)程處理操作并示于圖8。當(dāng)提出讀請求時(塊910),檢查存儲器(塊920)以確定要讀的塊是否存在。如果存儲器內(nèi)有該塊,它即被立即送回(塊930)。如果非易失存儲器內(nèi)沒有該塊,它必須從盤讀出。首先檢查位映象以確定替代盤上是否有可用的塊(塊940),如沒有,則由保存完好的盤處理讀請求(塊960)。在從保存完好的盤讀出該塊后,進(jìn)程去檢查非易失存儲器內(nèi)是否有自由空間(塊970)。如果沒有,則進(jìn)程結(jié)束。如非易失存儲器內(nèi)有自由空間,則該塊也寫入非易失存儲器,新指針插入到表中,并將兩個標(biāo)記打開(塊980),以使兩個盤在它們下一寫階段內(nèi)將塊寫入,此外,位映象中對應(yīng)于該塊的那位設(shè)置為1,以指出不再需要從保存完好的盤中提取該塊。
如果提出讀請求時,非易失存儲器內(nèi)沒有該塊,同時位映象顯示出在替代盤上有可用的塊,則從替代盤中的一個盤讀出該塊。該進(jìn)程最好檢查一下此時有多少替代盤處于讀狀態(tài)(塊950)。如只有一個替代盤處于讀狀態(tài),則由該替代盤處理讀請求(塊954)。如兩個替代盤都處于讀狀態(tài),最好由盤臂最靠近請求塊的那個盤去處理讀請求(塊952)。如果該塊是從替代盤中讀出的,就不必要更新位映象或?qū)⒃搲K存入高速緩存。
第4個進(jìn)程在恢復(fù)期間處理寫操作,并且包括和圖3所示完全相同的步驟。此外,在任何情況下,位映象中對應(yīng)于所寫塊的那一位被設(shè)置(如它還沒有設(shè)置),以指出不再需要從保存完好的盤復(fù)制該塊。
第5個進(jìn)程(示于圖9)是一個后臺進(jìn)程,它將保存完好的盤加以掃描并找到該盤中尚未寫到替代盤上的塊。當(dāng)系統(tǒng)進(jìn)入恢復(fù)狀態(tài)時,進(jìn)程啟動(塊1000),替代盤激活,進(jìn)程一直等待直至保存完好的盤進(jìn)入空閑狀態(tài)(塊1010),也即,直至不再有等待處理的隨機讀請求。接著它檢查是否還有未掃描塊(塊1020),也即,位映象中尚未設(shè)置的那些位的塊。如果所有塊都已掃描過,恢復(fù)操作完成,進(jìn)程結(jié)束(塊1060);保存完好的盤即退回系統(tǒng),另作他用。如果還有未掃描塊,進(jìn)程檢查非易失存儲器內(nèi)是否有自由空間(塊1030)。如果沒有,該進(jìn)程在一段時間內(nèi)進(jìn)入睡眠狀態(tài)(塊1040)。如果非易失存儲器中有自由空間,該進(jìn)程將最靠近保存完好的盤的磁頭的當(dāng)前位置的未掃描塊讀出來(塊1050)。位映象用于確定哪些未被掃描。所讀出的塊放置于非易失存儲器內(nèi),同時兩個標(biāo)記都打開,以指出替代盤必須寫該塊。一個指針也插入指針表。此外,設(shè)置位映象中的相應(yīng)位,這指出保存完好的盤不必再掃描該塊。接著該進(jìn)程重復(fù)以上步驟(至塊1010)。如果有一個隨機讀請求,則該進(jìn)程掛起(在塊1010內(nèi)),一直等到讀操作結(jié)束。
熟悉技術(shù)的人容易理解。保存完好的盤可以利用機會的策略,以加速恢復(fù)進(jìn)程,例如,當(dāng)保存完好的盤處理隨機讀請求時,在它等待盤轉(zhuǎn)動至目標(biāo)塊的過程中,它也可以將正好經(jīng)過其盤臂的任何未掃描塊(即未復(fù)制過的塊)讀出來,此外,圖9所示進(jìn)程顯然能夠同時讀出不止一塊。
權(quán)利要求
1.一種用于存儲數(shù)字信息數(shù)據(jù)塊的容錯盤存儲子系統(tǒng),它包括用于存儲數(shù)字信息數(shù)據(jù)塊的鏡象盤對,所述數(shù)據(jù)塊一式兩份地存儲在所述鏡象對的兩個盤上;和一個用于所述鏡象盤對的控制器,所述控制器具有一個存儲器;其特征在于所述控制器暫時將所述計算機系統(tǒng)所提供的數(shù)據(jù)塊累積在所述存儲器內(nèi),直至一式兩份地存儲在所述鏡象對的兩個盤上;所述控制器按一定次序?qū)⑺龃鎯ζ鲀?nèi)積累的所述數(shù)據(jù)塊加以調(diào)度,以便有效地寫到所述鏡象盤對;所述控制器有第一運行狀態(tài)和第二運行狀態(tài),在所述第一運行狀態(tài)下所述鏡象對的一個盤處于寫狀態(tài),而所述鏡象對的另一盤處于讀狀態(tài);在所述第二運行狀態(tài)下所述一個盤處于讀狀態(tài),而所述另一盤處于寫狀態(tài);所述控制器在所述第一運行狀態(tài)下按調(diào)度次序?qū)⑸形磳懙剿鲆粋€盤上的數(shù)據(jù)塊從所述存儲器復(fù)制到所述一個盤上,并在所述第二運行狀態(tài)下按調(diào)度次序?qū)⑸形磳懙剿隽硪槐P上的數(shù)據(jù)塊從所述存儲器復(fù)制到所述另一盤上;所述控制器在相隔的時間周期內(nèi)使所述鏡象盤對運行在所述第一運行狀態(tài),同時在所述相隔的時間周期之間的至少一部分時間內(nèi)使所述鏡象盤對運行在所述第二運行狀態(tài);和如果所述存儲內(nèi)存在著所述所請求的數(shù)據(jù)塊,則所述控制器從所述存儲器中取出所請求的數(shù)據(jù)塊,并提供給所述計算機系統(tǒng);否則的話,如果所述鏡象盤對正運行在第一運行狀態(tài),則從所述另一盤?。蝗绻鲧R象盤正運行在所述第二運行狀態(tài),則從所述一個盤取;如果所述鏡象盤對正運行在所述第二運行狀態(tài),則從所述一個盤?。黄渲袛?shù)據(jù)塊按一定調(diào)度次序?qū)懙剿鲧R象盤對上,并且既不受干擾也不會干擾所述計算機系統(tǒng)所請求的數(shù)據(jù)塊讀操作。
2.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述控制器由所述計算機系統(tǒng)中軟件所實現(xiàn),所述控制器的所述存儲器是所述計算機系統(tǒng)的一般存儲資源的一部分。
3.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述控制器和存儲器用專門的硬件所實現(xiàn)。
4.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述存儲器是非易失性的。
5.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述存儲器是容錯的。
6.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述第一運行狀態(tài)被調(diào)度為周期性啟動的。
7.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述數(shù)據(jù)塊以對應(yīng)于整個盤的物理掃描次序被調(diào)整。
8.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于在變換狀態(tài)前在所述第一運行狀態(tài)期間,所述控制器按調(diào)度次序?qū)λe累的數(shù)據(jù)進(jìn)行單次掃描。
9.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述控制器還有一個第三運行狀態(tài),在所述第三運行狀態(tài)下所述鏡象對的兩個所述盤都處于讀狀態(tài),同時當(dāng)所請求的數(shù)據(jù)塊不在所述存儲器內(nèi)的情況下,可從所述鏡象對的任一個所述盤檢索所述所請求數(shù)據(jù)塊。
10.權(quán)利要求9所定義的容錯盤存儲子系統(tǒng),其特征在于任何時候在下一個調(diào)度好的所述第二運行狀態(tài)開始之前所述第一運行狀態(tài)就已結(jié)束時,和任何時候在下一個調(diào)度好的所述第一運行狀態(tài)開始之前所述第二運行狀態(tài)就已結(jié)束時,所述控制器都使所述鏡象盤對運行在所述第三運行狀態(tài)。
11.權(quán)利要求9所定義的容錯盤存儲子系統(tǒng),其特征在于在所述第三運行狀態(tài)下,當(dāng)所述計算機系統(tǒng)請求數(shù)據(jù)塊而所述數(shù)據(jù)塊不在所述存儲器內(nèi)時,將由所述控制器決定所述鏡象對中哪一個盤能在最短時間內(nèi)發(fā)送所述所請求的數(shù)據(jù)塊并從所述決定的盤檢索所述所請求的數(shù)據(jù)塊。
12.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述控制器還有第四運行狀態(tài),在此狀態(tài)下所述鏡象對的兩個所述盤都運行于寫狀態(tài)。
13.權(quán)利要求9所定義的容錯盤存儲子系統(tǒng),其特征在于任何時候當(dāng)所述第二運行狀態(tài)被調(diào)度重新啟動,而在所述第一運行狀態(tài)啟動時處于調(diào)度次序的數(shù)據(jù)塊尚未全部寫至所述一個盤上時,和任何時候當(dāng)所述第一運行狀態(tài)被調(diào)度重新啟動,而所述第二運行狀態(tài)啟動時處于調(diào)度次序的數(shù)據(jù)塊尚未全部寫至所述另一盤上時,則所述控制器使所述鏡象盤對運行于所述第四運行狀態(tài)。
14.權(quán)利要求1所定義的容錯盤存儲子系統(tǒng),其特征在于所述子系統(tǒng)包括一對備用存儲盤,并當(dāng)所述鏡象對中只有一個所述盤處于運行狀態(tài)時,所述控制器在運行的恢復(fù)狀態(tài)下為所述鏡象對增添所述備用對。
15.權(quán)利要求14所定義的容錯盤存儲子系統(tǒng),其特征在于所述控制器在所述運行的恢復(fù)狀態(tài)期間將保持運行的所述盤連續(xù)地置在讀狀態(tài)下,直至所述保持運行的盤上的所有塊或已向所述存儲器傳送完,或已向所述備用對的一個或兩個盤傳送完,此時所述備用對代替了所述鏡象對,而所述保持運行的盤改變?yōu)閭溆帽P,并且所述運行的恢復(fù)狀態(tài)結(jié)束。
16.一種把從計算機系統(tǒng)接收的數(shù)字信息數(shù)據(jù)塊存入存儲子系統(tǒng)的方法,所述存儲子系統(tǒng)具有一對鏡象存儲盤,所述方法同時用于在所述計算機系統(tǒng)提出請求時從所述存儲子系統(tǒng)檢索出數(shù)據(jù)塊,所述方法的特征在于包括以下步驟暫時將一組要存儲的數(shù)據(jù)塊加以積累;將所述累積的數(shù)據(jù)塊組以一種次序加以調(diào)度,以便有效地將它們寫到所述鏡象盤對上;使所述鏡象盤對運行于第一運行狀態(tài)和第二運行狀態(tài),在所述第一運行狀態(tài)下所述鏡象對的一個盤處于寫狀態(tài),而所述鏡象對的另一盤處于讀狀態(tài),在所述第二運行狀態(tài)下所述一個盤處于讀狀態(tài),而所述另一盤處于寫狀態(tài);在所述第一運行狀態(tài)下將所述積累組內(nèi)尚未寫到所述一個盤上的排好序的數(shù)據(jù)塊復(fù)制到所述一個盤上;在所述第二運行狀態(tài)下將所述積累組內(nèi)尚未寫到所述另一盤上的排好序的數(shù)據(jù)塊復(fù)制到所述另一盤上;在相隔的時間間隔內(nèi)使所述鏡象盤對運行在所述第一運行狀態(tài),同時在所述相隔的時間間隔之間的至少一部分時間內(nèi)使所述鏡象盤對運行在所述第二運行狀態(tài);和如果所述積累組內(nèi)存在著所述請求的數(shù)據(jù)塊,則從所述積累組內(nèi)檢索所述計算機系統(tǒng)請求的數(shù)據(jù)塊,否則的話,如所述鏡象盤對正運行于所述第一運行狀態(tài),則從所述另一盤檢索,如所述鏡象盤對正運行于所述第二運行狀態(tài),則從所述一個盤檢索。其中數(shù)據(jù)塊按一定調(diào)度次序?qū)懙剿鲧R象盤對上,并且既不受干擾也不會干擾所述計算機系統(tǒng)所請求的數(shù)據(jù)塊讀操作。
17.權(quán)利要求16所定義的用于存儲數(shù)據(jù)信息數(shù)據(jù)塊的方法,其特征在于包括下一步驟從所述積累組中柵除已寫到所述鏡象對的兩個所述盤上的任何數(shù)據(jù)塊。
18.權(quán)利要求17所定義的方法,其特征在于包括下一步驟將第一和第二標(biāo)志和所述組內(nèi)的每個積累數(shù)據(jù)塊相聯(lián),和任何特定數(shù)據(jù)組相聯(lián)的所述第一標(biāo)志用于指出所述特定數(shù)據(jù)組是否已復(fù)制到所述一個盤上,而和所述特定數(shù)據(jù)組相聯(lián)的所述第二標(biāo)志用于指出所述特定數(shù)據(jù)組是否已復(fù)制到所述另一盤上。
全文摘要
一種容錯鏡象盤子系統(tǒng),它具有改善的寫盤方案以便為隨機寫盤提供高吞吐量,并保證讀盤的高性能。要寫到盤上的數(shù)據(jù)塊或頁暫時按一定次序(或調(diào)度)積累并分類(或調(diào)度),以便有效地寫到盤上,在最佳實施例中這對應(yīng)于每塊寫到盤上的物理地址。一般情況下這也對應(yīng)于在物理掃描磁盤時寫磁頭所用的順序。鏡象對的兩個盤彼此反相運行,使它們一個處于讀狀態(tài)而另一個處于寫狀態(tài)。
文檔編號G06F3/06GK1102896SQ94114809
公開日1995年5月24日 申請日期1994年7月25日 優(yōu)先權(quán)日1993年8月23日
發(fā)明者克里斯托·阿爾基維阿迪斯·波利佐斯, 丹尼爾·曼紐爾·迪亞斯, 阿努潘·克沙夫·布海德 申請人:國際商業(yè)機器公司