專利名稱:一種存儲(chǔ)系統(tǒng)的緩存鏡像方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲(chǔ)系統(tǒng)的緩存鏡像領(lǐng)域,尤其涉及多控制器存儲(chǔ)系統(tǒng)的緩存鏡像方法。
背景技術(shù):
緩存鏡像技術(shù)是針對(duì)于存儲(chǔ)處理出現(xiàn)故障時(shí)可能產(chǎn)生的緩存中的數(shù)據(jù)丟失而制定的解決方案,他將緩存數(shù)據(jù)同時(shí)保存在多個(gè)控制器上,系統(tǒng)工作時(shí)會(huì)自動(dòng)向其他控制器進(jìn)行備份,是多控制器存儲(chǔ)系統(tǒng)中常用的緩存保護(hù)技術(shù),其基本原理就是在每個(gè)控制器上建立緩存鏡像,保證多控制器間的緩存一致性。申請(qǐng)?zhí)枮?00910253317.5的專利文件描述了一種雙控制器存儲(chǔ)系統(tǒng)的緩存鏡像系統(tǒng)及方法。該系統(tǒng)和方法提出了包含有兩個(gè)控制器的存儲(chǔ)系統(tǒng),第一控制器和第二控制器之間通過(guò)存儲(chǔ)器直接訪問(wèn)DMA建立直接通訊鏈路,第一控制器在接收到寫(xiě)請(qǐng)求后將數(shù)據(jù)寫(xiě)入本地緩存中,然后將數(shù)據(jù)轉(zhuǎn)發(fā)到第二控制器進(jìn)行鏡像,第二控制器回復(fù)鏡像完成后,結(jié)束寫(xiě)請(qǐng)求。但是,在該發(fā)明中,使用的存儲(chǔ)系統(tǒng)僅限于雙控制器存儲(chǔ)系統(tǒng),不支持多控制器存儲(chǔ)系統(tǒng),并且寫(xiě)請(qǐng)求只通過(guò)第一控制器下發(fā),第二控制器只作為鏡像,并未提及寫(xiě)請(qǐng)求從兩個(gè)控制器同時(shí)下發(fā)時(shí)的處理方法。
發(fā)明內(nèi)容
為了能夠在多控制器存儲(chǔ)系統(tǒng)中,同時(shí)通過(guò)多個(gè)控制器寫(xiě)數(shù)據(jù)時(shí),保證控制器間的緩存一致性,本發(fā)明提出一種存儲(chǔ)系統(tǒng)的緩存鏡像方法。為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種存儲(chǔ)系統(tǒng)的緩存鏡像方法,所述存儲(chǔ)系統(tǒng)包括η個(gè)控制器,其中一個(gè)控制器為主控制器,剩余η-l個(gè)控制器為從控制器,所述存儲(chǔ)系統(tǒng)的各個(gè)控制器之間通過(guò)通訊鏈路連接;η > 2 ;任何一個(gè)或者多個(gè)控制器收到寫(xiě)請(qǐng)求后將對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入本地緩存,并且向其他控制器轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求;收到轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求的控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存。進(jìn)一步地,主控制器的功能包括:執(zhí)行緩存鏡像的功能和執(zhí)行對(duì)物理存儲(chǔ)設(shè)備讀寫(xiě)的功能,從控制器的功能包括:執(zhí)行緩存鏡像的功能。進(jìn)一步地,在η個(gè)控制器的本地緩存的每一個(gè)緩存塊中增加一個(gè)標(biāo)記位,所述標(biāo)記位用于記錄所述緩存塊進(jìn)行寫(xiě)操作的次數(shù),記為count。進(jìn)一步地,當(dāng)收到寫(xiě)請(qǐng)求的控制器是主控制器時(shí),所述方法包括:A)主控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器;B)從控制器收到主控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存;C)從控制器寫(xiě)入完成后,從控制器將備份完成的回復(fù)返回給主控制器;D)主控制器收到所有從控制器備份完成的回復(fù)后,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存;E)主控制器寫(xiě)入完成后,返回寫(xiě)請(qǐng)求執(zhí)行成功。
進(jìn)一步地,當(dāng)收到寫(xiě)請(qǐng)求的控制器是從控制器時(shí),所述方法包括:a)從控制器將寫(xiě)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入到本地緩存,b)從控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到主控制器和其他從控制器;c)主控制器和其他從控制器收到從控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存;d)主控制器和其他從控制器寫(xiě)入完成后,將備份完成的回復(fù)返回給從控制器;e )從控制器收到所有主控制器和其他從控制器備份完成的回復(fù)后,返回寫(xiě)請(qǐng)求執(zhí)行成功。進(jìn)一步地,控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存為:Zl)控制器判斷寫(xiě)請(qǐng)求指定的寫(xiě)入位置是否在本地緩存中,若不存在,則執(zhí)行步驟Z2),若存在,則執(zhí)行步驟Z3);Z2)增加新的緩存塊;并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到增加新的緩存塊中;結(jié)束寫(xiě)入;Z3)根據(jù)寫(xiě)請(qǐng)求指定的寫(xiě)入位置定位到對(duì)應(yīng)的緩存塊,并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)的緩存塊中;結(jié)束寫(xiě)入。進(jìn)一步地,當(dāng)收到寫(xiě)請(qǐng)求的控制器是主控制器時(shí),所述方法包括:Aff)主控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器;Bff)從控制器收到主控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中,并將所述緩存塊的count值加I ;CW)從控制器寫(xiě)入完成后,從控制器將備份完成的回復(fù)返回給主控制器;所述備份完成的恢復(fù)中包括所述緩存塊的count值;DW)主控制器收到所有從控制器備份完成的回復(fù)后,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中;Eff)主控制器比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值;若主控制器收到的從控制器返回的緩存塊的count值大于本地緩存對(duì)應(yīng)緩存塊的count值,則執(zhí)行步驟FW);否則執(zhí)行步驟GW);Fff)將收到的從控制器返回的緩存塊的count值賦值給主控制器本地緩存對(duì)應(yīng)緩存塊的count值;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功;Gff)主控制器本地緩存對(duì)應(yīng)緩存塊的count值加I ;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功。進(jìn)一步地,當(dāng)收到寫(xiě)請(qǐng)求的控制器是從控制器時(shí),所述方法包括:aw)從控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中,并將所述緩存塊的count值加I ;bw)從控制器將寫(xiě)請(qǐng)求和本地緩存對(duì)應(yīng)緩存塊的count值一并轉(zhuǎn)發(fā)到主控制器和其他從控制器;cw)主控制器和其他從控制器收到從控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中;dw)主控制器和其他從控制器分別比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值;若收到的從控制器發(fā)送的對(duì)應(yīng)緩存塊的count值大于本地緩存對(duì)應(yīng)緩存塊的count值,則執(zhí)行步驟ew);否則執(zhí)行步驟fw);
ew)將收到的從控制器發(fā)送的緩存塊的count值賦值給主控制器或其他從控制器本地緩存對(duì)應(yīng)緩存塊的count值;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功;fw)主控制器或其他從控制器本地緩存對(duì)應(yīng)緩存塊的count值加I ;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功。進(jìn)一步地,所述方法還包括釋放緩存塊的步驟。進(jìn)一步地,所述釋放緩存塊的步驟包括 I)主控制器釋放一組緩存塊,保存釋放時(shí)所述緩存塊的count值;2)主控制器把釋放緩存塊的命令和釋放時(shí)緩存塊的count值發(fā)送到從控制器;3)從控制器收到釋放緩存塊的命令,比較釋放緩存塊的命令指定的緩存塊的count值和收到的主控制器緩存塊的count值;若從控制器對(duì)應(yīng)緩存塊的count值小于收到的主控制器緩存塊的count值,則執(zhí)行步驟4);否則執(zhí)行步驟5);4)從控制器釋放釋放緩存塊的命令指定的緩存塊;所述緩存塊的count值清零,流程結(jié)束;5)從控制器釋放緩存塊的命令指定的緩存塊不能釋放;流程結(jié)束。與現(xiàn)有技術(shù)相比,本發(fā)明的存儲(chǔ)系統(tǒng)的緩存鏡像方法在多控制器存儲(chǔ)系統(tǒng)中,通過(guò)多個(gè)控制器同時(shí)寫(xiě)數(shù)據(jù),而不破壞多控制器間的緩存一致性,從而提高存儲(chǔ)系統(tǒng)的讀寫(xiě)性能。
圖1為本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖;圖2為本發(fā)明實(shí)施例的近端寫(xiě)的流程圖;圖3為本發(fā)明實(shí)施例的遠(yuǎn)端寫(xiě)的流程圖;圖4為本發(fā)明實(shí)施例的釋放緩存快的流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。本發(fā)明實(shí)施例提出了一種存儲(chǔ)系統(tǒng)的緩存鏡像方法,應(yīng)用于存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)包括η個(gè)控制器,其中一個(gè)控制器為主控制器,剩余η-l個(gè)控制器為從控制器,所述存儲(chǔ)系統(tǒng)的各個(gè)控制器之間通過(guò)通訊鏈路連接;n ^ 2 ;如圖1所示。任何一個(gè)或者多個(gè)控制器收到寫(xiě)請(qǐng)求后將對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入本地緩存,并且向其他控制器轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求;收到轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求的控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存。本發(fā)明實(shí)施例所述控制器分為主控制器和從控制器,這是人為指定的,只有主控制器可以執(zhí)行對(duì)物理存儲(chǔ)設(shè)備讀寫(xiě)的動(dòng)作,從控制器只執(zhí)行緩存的鏡像功能。無(wú)論主控制器還是從控制器中的任何一個(gè)控制器收到寫(xiě)請(qǐng)求后將對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入本地緩存和向其他控制器轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求,促使其他控制器進(jìn)行寫(xiě)鏡像。當(dāng)多個(gè)控制器同時(shí)收到寫(xiě)請(qǐng)求時(shí),由于多個(gè)控制器不會(huì)同時(shí)收到對(duì)同一位置的寫(xiě)請(qǐng)求,因此多個(gè)控制器可以按照本發(fā)明實(shí)施例的方法各自處理自己收到的寫(xiě)請(qǐng)求??刂破魇盏綄?xiě)請(qǐng)求的時(shí)候,首先將需要寫(xiě)的數(shù)據(jù)存到本地緩存中,然后再由本地的緩存模塊將數(shù)據(jù)寫(xiě)入到物理存儲(chǔ)設(shè)備。第一步,如果存在多個(gè)控制器,則要將本身緩存中的數(shù)據(jù)發(fā)送到其他控制器上,進(jìn)行備份,這個(gè)過(guò)程叫做緩存鏡像。第二步,執(zhí)行對(duì)物理存儲(chǔ)設(shè)備的讀寫(xiě),是在緩存鏡像過(guò)程完成后,再將數(shù)據(jù)寫(xiě)入實(shí)際的物理存儲(chǔ)設(shè)備。若收到寫(xiě)請(qǐng)求的控制器是主控制器,主控制器首先將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器,在從控制器上進(jìn)行鏡像,這個(gè)過(guò)程稱為近端寫(xiě)。若收到寫(xiě)請(qǐng)求的控制器是從控制器,從控制器首先將寫(xiě)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)保存到本地緩存,然后轉(zhuǎn)發(fā)到其他控制器上進(jìn)行鏡像。這個(gè)過(guò)程稱為遠(yuǎn)端寫(xiě)。分別結(jié)合圖2和圖3說(shuō)明近端寫(xiě)和遠(yuǎn)端寫(xiě)的存儲(chǔ)系統(tǒng)的緩存鏡像方法。如圖2所示,對(duì)于近端寫(xiě),收到寫(xiě)請(qǐng)求的控制器是主控制器,所述方法包括:A)主控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器;B)從控制器收到主控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存;C)從控制器寫(xiě)入完成后,從控制器將備份完成的回復(fù)返回給主控制器;D)主控制器收到所有從控制器備份完成的回復(fù)后,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存;E)主控制器寫(xiě)入完成后,返回寫(xiě)請(qǐng)求執(zhí)行成功。步驟B)和D)將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存前,控制器首先判斷寫(xiě)請(qǐng)求指定的寫(xiě)入位置是否在本地緩存中,若存在,根據(jù)寫(xiě)請(qǐng)求指定的寫(xiě)入位置定位到對(duì)應(yīng)的緩存塊,并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)的緩存塊中。若不存在,則增加新的緩存塊,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到增加新的緩存塊中。寫(xiě)請(qǐng)求執(zhí)行結(jié)果返回給向主控制器發(fā)送寫(xiě)請(qǐng)求的模塊或者應(yīng)該調(diào)用寫(xiě)操作的其他模塊。如圖3所示,對(duì)于遠(yuǎn)端寫(xiě),收到寫(xiě)請(qǐng)求的控制器是從控制器,所述方法包括:a)從控制器將寫(xiě)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入到本地緩存,b)從控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到主控制器和其他從控制器;c)主控制器和其他從控制器收到從控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存;d)主控制器和其他從控制器寫(xiě)入完成后,將備份完成的回復(fù)返回給從控制器;
e )從控制器收到所有主控制器和其他從控制器備份完成的回復(fù)后,返回寫(xiě)請(qǐng)求執(zhí)行成功。步驟a)和c)將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存前,與近端寫(xiě)的過(guò)程一樣,控制器首先判斷寫(xiě)請(qǐng)求指定的寫(xiě)入位置是否在本地緩存中,若存在,根據(jù)寫(xiě)請(qǐng)求指定的寫(xiě)入位置定位到對(duì)應(yīng)的緩存塊,并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)的緩存塊中。若不存在,則增加新的緩存塊,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到增加新的緩存塊中。寫(xiě)請(qǐng)求執(zhí)行結(jié)果返回給從主控制器發(fā)送寫(xiě)請(qǐng)求的模塊或者應(yīng)該調(diào)用寫(xiě)操作的其他模塊。由于控制器中的緩存塊是有限的,只能暫時(shí)存儲(chǔ)數(shù)據(jù),當(dāng)寫(xiě)請(qǐng)求結(jié)束后,用于暫存數(shù)據(jù)的緩存塊就是可以被釋放的,通過(guò)其他的機(jī)制,在必要時(shí)候會(huì)釋放出來(lái)。主控制器釋放緩存塊的時(shí)候,會(huì)通知從控制器進(jìn)行相應(yīng)的釋放。但是,如果從控制器上正在進(jìn)行一個(gè)遠(yuǎn)端寫(xiě)流程,就會(huì)將最新的緩存數(shù)據(jù)也釋放掉,造成多控制器鏡像間數(shù)據(jù)不一致。因此,本發(fā)明實(shí)施例通過(guò)記錄緩存塊寫(xiě)計(jì)數(shù)機(jī)制,保證多控制器間緩存一致性。
在η個(gè)控制器的本地緩存的每一個(gè)緩存塊中增加一個(gè)標(biāo)記位,所述標(biāo)記位用于記錄所述緩存塊進(jìn)行寫(xiě)操作的次數(shù),記為count。本發(fā)明實(shí)施例對(duì)于每一個(gè)用于暫存數(shù)據(jù)的緩存塊,增加一個(gè)標(biāo)記位,用來(lái)記錄該緩存塊進(jìn)行寫(xiě)操作的計(jì)數(shù),主控制器和從控制器在寫(xiě)數(shù)據(jù)時(shí),通過(guò)不同的機(jī)制增加該計(jì)數(shù),保證計(jì)數(shù)的一致。在釋放緩存塊時(shí),通過(guò)比較count值,判斷是否可以釋放該緩存塊。如圖2所示,在近端寫(xiě)流程中,收到寫(xiě)請(qǐng)求的控制器是主控制器,所述方法包括:Aff)主控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器;Bff)從控制器收到主控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中,并將所述緩存塊的count值加I ;CW)從控制器寫(xiě)入完成后,從控制器將備份完成的回復(fù)返回給主控制器;所述備份完成的恢復(fù)中包括所述緩存塊的count值;DW)主控制器收到所有從控制器備份完成的回復(fù)后,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中;Eff)主控制器比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值;若主控制器收到的從控制器返回的緩存塊的count值大于本地緩存對(duì)應(yīng)緩存塊的count值,則執(zhí)行步驟FW);否則執(zhí)行步驟GW);Fff)將收到的從控制器返回的緩存塊的count值賦值給主控制器本地緩存對(duì)應(yīng)緩存塊的count值;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功;Gff)主控制器本地緩存對(duì)應(yīng)緩存塊的count值加I ;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功。如圖3所示,在遠(yuǎn)端寫(xiě)流程中,收到寫(xiě)請(qǐng)求的控制器是從控制器,所述方法包括:aw)從控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中,并將所述緩存塊的count值加I ;bw)從控制器將寫(xiě)請(qǐng)求和本地緩存對(duì)應(yīng)緩存塊的count值一并轉(zhuǎn)發(fā)到主控制器和其他從控制器;cw)主控制器和其他從控制器收到從控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中;dw)主控制器和其他從控制器分別比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值;若收到的從控制器發(fā)送的對(duì)應(yīng)緩存塊的count值大于本地緩存對(duì)應(yīng)緩存塊的count值,則執(zhí)行步驟ew);否則執(zhí)行步驟fw);ew)將收到的從控制器發(fā)送的緩存塊的count值賦值給主控制器或其他從控制器本地緩存對(duì)應(yīng)緩存塊的count值;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功;fw)主控制器或其他從控制器本地緩存對(duì)應(yīng)緩存塊的count值加I ;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功。步驟BW)、DW)、aw)和cw),將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中時(shí),控制器首先判斷寫(xiě)請(qǐng)求指定的寫(xiě)入位置是否在本地緩存中,若存在,根據(jù)寫(xiě)請(qǐng)求指定的寫(xiě)入位置定位到對(duì)應(yīng)的緩存塊,并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)的緩存塊中。若不存在,則增加新的緩存塊,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到增加新的緩存塊中。當(dāng)存儲(chǔ)系統(tǒng)中主控制器將緩存塊的內(nèi)容寫(xiě)到物理設(shè)備上以后,會(huì)進(jìn)行緩存塊的釋放動(dòng)作。當(dāng)主控制器釋放一組緩存塊時(shí),記錄這些緩存塊在被釋放時(shí)候的count值,主控制器端釋放完成后,向從控制器發(fā)送釋放的命令。步驟EW)和ew),主控制器和其他從控制器分別比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值時(shí),原則上收到一個(gè)回復(fù),比較一次,最終的值為最大值。一般情況下,只有兩個(gè)控制器做備份,不存在多個(gè)從控制器,在有多個(gè)控制器存在的情況下,也是做兩兩備份。當(dāng)從控制器收到釋放緩存塊的命令,找到相應(yīng)的緩存塊時(shí),比較該緩存塊當(dāng)前的count值和收到的count值,如果當(dāng)前的count小于收到的count值,則釋放該緩存塊,否貝U,說(shuō)明該緩存塊比主控制器相應(yīng)的緩存塊內(nèi)容更新,不能釋放。當(dāng)釋放緩存塊時(shí),該緩存塊對(duì)應(yīng)的count值清零。具體為:I)主控制器釋放一組緩存塊,保存釋放時(shí)所述緩存塊的count值;2)主控制器把釋放緩存塊的命令和釋放時(shí)緩存塊的count值發(fā)送到從控制器;3)從控制器收到釋放緩存塊的命令,比較釋放緩存塊的命令指定的緩存塊的count值和收到的主控制器緩存塊的count值;若從控制器對(duì)應(yīng)緩存塊的count值小于收到的主控制器緩存塊的count值,則執(zhí)行步驟4);否則執(zhí)行步驟5);4)從控制器釋放釋放緩存塊的命令指定的緩存塊;該緩存塊對(duì)應(yīng)的count值清零,流程結(jié)束;5)從控制器釋放緩存塊的命令指定的緩存塊不能釋放;流程結(jié)束。本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)的緩存鏡像方法,應(yīng)用于兩個(gè)以上控制器的存儲(chǔ)系統(tǒng),每個(gè)控制器收到寫(xiě)請(qǐng)求后將對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入本地緩存和向其他控制器轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求,促使其他控制器進(jìn)行寫(xiě)鏡像。通過(guò)記錄緩存塊寫(xiě)計(jì)數(shù)機(jī)制,保證多控制器間緩存一致性。以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制,僅僅參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明。本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種存儲(chǔ)系統(tǒng)的緩存鏡像方法,其特征在于:所述存儲(chǔ)系統(tǒng)包括η個(gè)控制器,其中一個(gè)控制器為主控制器,剩余η-l個(gè)控制器為從控制器,所述存儲(chǔ)系統(tǒng)的各個(gè)控制器之間通過(guò)通訊鏈路連接;η彡2 ; 任何一個(gè)或者多個(gè)控制器收到寫(xiě)請(qǐng)求后將對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入本地緩存,并且向其他控制器轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求;收到轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求的控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存。
2.按權(quán)利要求1所述的方法,其特征在于:主控制器的功能包括:執(zhí)行緩存鏡像的功能和執(zhí)行對(duì)物理存儲(chǔ)設(shè)備讀寫(xiě)的功能,從控制器的功能包括:執(zhí)行緩存鏡像的功能。
3.按權(quán)利要求1所述的方法,其特征在于:在η個(gè)控制器的本地緩存的每一個(gè)緩存塊中增加一個(gè)標(biāo)記位,所述標(biāo)記位用于記錄所述緩存塊進(jìn)行寫(xiě)操作的次數(shù),記為count。
4.按權(quán)利要求1所述的方法,其特征在于:當(dāng)收到寫(xiě)請(qǐng)求的控制器是主控制器時(shí),所述方法包括: A)主控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器; B)從控制器收到主控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存; C)從控制器寫(xiě)入完成后,從控制器將備份完成的回復(fù)返回給主控制器; D)主控制器收到所有從控制器備份完成的回復(fù)后,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存; E)主控制器寫(xiě)入完成后,返回寫(xiě)請(qǐng)求執(zhí)行成功。
5.按權(quán)利要求1所述的方法,其特征在于:當(dāng)收到寫(xiě)請(qǐng)求的控制器是從控制器時(shí),所述方法包括: a)從控制器將寫(xiě)請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入到本地緩存, b)從控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到主控制器和其他從控制器; c)主控制器和其他從控制器收到從控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存; d)主控制器和其他從控制器寫(xiě)入完成后,將備份完成的回復(fù)返回給從控制器; e )從控制器收到所有主控制器和其他從控制器備份完成的回復(fù)后,返回寫(xiě)請(qǐng)求執(zhí)行成功。
6.按權(quán)利要求4或5所述的方法,其特征在于:控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存為: Zl)控制器判斷寫(xiě)請(qǐng)求指定的寫(xiě)入位置是否在本地緩存中,若不存在,則執(zhí)行步驟Z2),若存在,則執(zhí)行步驟Z3); Z2)增加新的緩存塊;并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到增加新的緩存塊中;結(jié)束寫(xiě)入; Z3)根據(jù)寫(xiě)請(qǐng)求指定的寫(xiě)入位置定位到對(duì)應(yīng)的緩存塊,并將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到對(duì)應(yīng)的緩存塊中;結(jié)束寫(xiě)入。
7.按權(quán)利要求3所述的方法,其特征在于:當(dāng)收到寫(xiě)請(qǐng)求的控制器是主控制器時(shí),所述方法包括: Aff)主控制器將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到從控制器; Bff)從控制器收到主控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中,并將所述緩存塊的count值加I ; CW)從控制器寫(xiě)入完成后,從控制器將備份完成的回復(fù)返回給主控制器;所述備份完成的恢復(fù)中包括所述緩存塊的count值;DW)主控制器收到所有從控制器備份完成的回復(fù)后,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中; Eff)主控制器比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值;若主控制器收到的從控制器返回的緩存塊的count值大于本地緩存對(duì)應(yīng)緩存塊的count值,則執(zhí)行步驟FW);否則執(zhí)行步驟GW); Fff)將收到的從控制器返回的緩存塊的count值賦值給主控制器本地緩存對(duì)應(yīng)緩存塊的count值;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功; Gff)主控制器本地緩存對(duì)應(yīng)緩存塊的count值加I ;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功。
8.按權(quán)利要求3所述的方法,其特征在于:當(dāng)收到寫(xiě)請(qǐng)求的控制器是從控制器時(shí),所述方法包括: aw)從控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中,并將所述緩存塊的count 值加 I ; bw)從控制器將寫(xiě)請(qǐng)求和本地緩存對(duì)應(yīng)緩存塊的count值一并轉(zhuǎn)發(fā)到主控制器和其他從控制器; cw)主控制器和其他從控制器收到從控制器轉(zhuǎn)發(fā)過(guò)來(lái)的寫(xiě)請(qǐng)求,將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存相應(yīng)的緩存塊中; dw)主控制器和其他從控制器分別比較本地緩存對(duì)應(yīng)緩存塊的count值與從控制器返回的緩存塊的count值;若收到的從控制器發(fā)送的對(duì)應(yīng)緩存塊的count值大于本地緩存對(duì)應(yīng)緩存塊的count值,則執(zhí)行步驟ew);否則執(zhí)行步驟fw); ew)將收到的從控制器發(fā)送的緩存塊的count值賦值給主控制器或其他從控制器本地緩存對(duì)應(yīng)緩存塊的count值;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功; fw)主控制器或其他從控制器本地緩存對(duì)應(yīng)緩存塊的count值加I ;流程結(jié)束,返回寫(xiě)請(qǐng)求執(zhí)行成功。
9.按權(quán)利要求7或8所述的方法,其特征在于:所述方法還包括釋放緩存塊的步驟。
10.按權(quán)利要求9所述的方法,其特征在于:所述釋放緩存塊的步驟包括 1)主控制器釋放一組緩存塊,保存釋放時(shí)所述緩存塊的count值; 2)主控制器把釋放緩存塊的命令和釋放時(shí)緩存塊的count值發(fā)送到從控制器; 3)從控制器收到釋放緩存塊的命令,比較釋放緩存塊的命令指定的緩存塊的count值和收到的主控制器緩存塊的count值;若從控制器對(duì)應(yīng)緩存塊的count值小于收到的主控制器緩存塊的count值,則執(zhí)行步驟4);否則執(zhí)行步驟5); 4)從控制器釋放釋放緩存塊的命令指定的緩存塊;所述緩存塊的count值清零,流程結(jié)束; 5)從控制器釋放緩存塊的命令指定的緩存塊不能釋放;流程結(jié)束。
全文摘要
一種存儲(chǔ)系統(tǒng)的緩存鏡像方法,及存儲(chǔ)系統(tǒng)的緩存鏡像領(lǐng)域,能夠在多控制器存儲(chǔ)系統(tǒng)中,同時(shí)通過(guò)多個(gè)控制器寫(xiě)數(shù)據(jù)時(shí),保證控制器間的緩存一致性,所述存儲(chǔ)系統(tǒng)包括n個(gè)控制器,其中一個(gè)控制器為主控制器,剩余n-1個(gè)控制器為從控制器,所述存儲(chǔ)系統(tǒng)的各個(gè)控制器之間通過(guò)通訊鏈路連接;n≥2;所述方法為任何一個(gè)或者多個(gè)控制器收到寫(xiě)請(qǐng)求后將對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入本地緩存,并且向其他控制器轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求;收到轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求的控制器將寫(xiě)請(qǐng)求的數(shù)據(jù)寫(xiě)入到本地緩存。本發(fā)明的存儲(chǔ)系統(tǒng)的緩存鏡像方法在多控制器存儲(chǔ)系統(tǒng)中,通過(guò)多個(gè)控制器同時(shí)寫(xiě)數(shù)據(jù),而不破壞多控制器間的緩存一致性,從而提高存儲(chǔ)系統(tǒng)的讀寫(xiě)性能。
文檔編號(hào)G06F12/16GK103092778SQ20131002549
公開(kāi)日2013年5月8日 申請(qǐng)日期2013年1月23日 優(yōu)先權(quán)日2013年1月23日
發(fā)明者王倩 申請(qǐng)人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司