專利名稱:利用異或校驗磁盤陣列寫數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及》茲盤陣列的寫數(shù)據(jù)技術(shù),尤其涉及利用異或校驗的 磁盤陣列寫數(shù)據(jù)的技術(shù)。
背景技術(shù):
3蟲立/f茲盤冗余卩車歹'J(RAID, Redundant Array of Inexpensive Disks) 技術(shù)已經(jīng)廣泛地被應(yīng)用在數(shù)據(jù)存儲備份領(lǐng)域中。可以將現(xiàn)有的 RAID級別劃分為三類無冗余、基于銷:像的、基于XOR的。RAIDO 就是無冗余的,它不存在校驗數(shù)據(jù)?;阽R像的磁盤陣列包括 RAID1、 RAIDIO等,這種才支術(shù)4吏用一個或多個獨立的^茲盤來備4分 數(shù)據(jù),這些磁盤通常被稱為"鏡像盤"。而基于XOR校驗的磁盤陣 列,例如RAID3、 RAID5、 RAID6等,這種才支術(shù)^)尋凄史據(jù)以條帶(Stripe) 的方式存方文,條帶中分布在每個》茲盤上的^t據(jù)稱為條帶單元(Stripe Unit),也可成為段(Segment)。以RAID5為例,在一個條帶中,佳_ 用 一個條帶單元來存放校驗數(shù)據(jù),校驗數(shù)據(jù)等于該條帶中其它條帶 單元異或的結(jié)果。至于條帶單元大小視系統(tǒng)而定, 一般為64KB。 如圖l所示,為5個盤的RAID5,其中條帶單元大小為4KB, D代 表數(shù)據(jù)塊,P代表校驗數(shù)據(jù)。圖2描述的是存儲子系統(tǒng)的結(jié)構(gòu)圖。存儲子系統(tǒng)100包括一個 或多個RAID控制器103。 RAID控制器103通過通信協(xié)_漢102連接到主機101上。通信協(xié)議102包括并4亍SCSI, SAS(Serial attached SCSI), FC(FiberChannel)和一些其它并行接口 、高速串4亍才妄口等。RAID控制器103通過通信協(xié)議104與》茲盤子系統(tǒng)109連接。 協(xié)議104與協(xié)議102類似?!菲澅P子系統(tǒng)109由一個或多個f茲盤108 以某種RAID算法組織起來陣列的集合。磁盤子系統(tǒng)108可以包括 多種RAIDO、 RAID1、 RAID5等多種RAID算法。圖3描述的是RAID控制器內(nèi)部結(jié)構(gòu)。在RAID控制器103中, 中央處理器(CPU)201通過處理器總線207連接到內(nèi)存設(shè)備、外圍設(shè) 備以及協(xié)助處理單元上。RAM 204和NVRAM 205屬于內(nèi)存設(shè)備, 它們存儲操作系統(tǒng)指令、控制器配置信息、buffer空間、cache空間 等。主機接口 200將主機端傳送過來的信號與總線信號相互轉(zhuǎn)換, 而磁盤接口 206則是將總線信號與磁盤驅(qū)動信號相互轉(zhuǎn)換。DMA202用于提高RAID控制器的性能。DMA202可以使數(shù)據(jù) 在RAM 204與主才幾端口 200和^茲盤端口 206直4妾進4亍傳llr,古丈而 減少了 CPU負才旦。RPA(RAID Parity assist)203提供才交-驗孑言息計算功 能。RAID控制器103接收來自磁盤端口 206的數(shù)據(jù),然后將數(shù)據(jù) 發(fā)送到RPA 203, RPA 203計算凄t據(jù)的才i-瞼信息,之后通過石茲盤端 口 206將校驗信息傳回磁盤子系統(tǒng)。當(dāng)向使用異或校驗的磁盤陣列中寫數(shù)據(jù)時,必須更新要寫數(shù)據(jù) 所在條帶的校驗數(shù)據(jù),這樣才能保證在有》茲盤失效的情況下,可以 通過其它數(shù)據(jù)以校驗數(shù)據(jù)計算出失效盤的數(shù)據(jù)。也就是說,在寫數(shù) 據(jù)同時,要先預(yù)讀條帶中的數(shù)據(jù),這樣才能得出正確的校驗數(shù)據(jù)。 寫數(shù)據(jù)主要有兩種方式 一種叫小寫(small write)或讀-修改-寫 (read-modify畫write), 另 一 種叫大寫(large write)或重建寫 (reconstrut-write)。這兩種方法其目的是要減少在寫數(shù)據(jù)過程中預(yù)讀 的次凄t。仍以RAID5為例,數(shù)據(jù)讀寫的基本單位是條帶。如果想要向0 扇區(qū)寫入數(shù)據(jù)"Q,按照小寫的方式,有以下步驟
1 )首先確定0扇區(qū)所在的條帶,讀出0扇區(qū)數(shù)據(jù)^以及條帶 中校驗數(shù)據(jù)P。,存入緩存中;
2 )計算新校驗P。 = P。
"。
A ,存入緩存;將新數(shù)據(jù)"。寫入 扇區(qū)0,新4交-驗^寫入凄t據(jù)塊Po 。
按照大寫的方式,有以下步驟
1 )首先確定扇區(qū)0所在的條帶0,讀出8號扇區(qū)"8、 16號扇 區(qū)"is以及24號扇區(qū)"24,存入緩存;
2 )然后計算新校驗A = "Q "8 "16 "24 ,存入緩存;最后將
新數(shù)據(jù)"。寫入扇區(qū)0,新校驗&寫入數(shù)據(jù)塊Po 。
上面的例子中,由于rmw要預(yù)讀2次數(shù)據(jù),rcw要預(yù)讀3次彰: 據(jù),所以選擇rmw作為這次寫數(shù)據(jù)的方式。
但是,無論是rmw還是rcw,在寫一次數(shù)據(jù)時都需要預(yù)讀數(shù)據(jù), 即在寫數(shù)據(jù)過程中伴隨著讀數(shù)據(jù)。有一種特殊情況,在寫數(shù)據(jù)時, 條帶中每個數(shù)據(jù)塊都有寫請求,這時就不需要預(yù)讀數(shù)據(jù),這種情況 稱為"滿條帶寫,,(full stripe write)。仍以圖l為例,O號扇區(qū)、8號
扇區(qū)、16號扇區(qū)、24號扇區(qū)均有新數(shù)據(jù)寫入,分別記為< 、"8 、《、
"24 ,那么新校驗A = 4 《6 "24 ,不需要預(yù)讀數(shù)據(jù),就完成 了一次寫請求。
6文獻US5506977中,根據(jù)條帶中寫請求的個數(shù)來決定使用rcw 或者rmw的方式。這種方法可以有效地減少了預(yù)讀數(shù)據(jù)的次數(shù)。但 是沒有提供一種機制來盡量達到滿條帶寫的條件。并且沒有區(qū)別對 待滿條帶寫與部分條帶寫(partial stripe write),影響了寫梯:作的性能 和帶寬。
發(fā)明內(nèi)容
基于此,本發(fā)明的主要目的在于才是供一種一次處理專交多的寫請 求的方法,盡量滿足滿條帶寫條件,以減少預(yù)讀的次數(shù),提高了寫 操作的帶寬。同時,該方法優(yōu)先處理滿條帶寫,并為部分條帶寫請 求設(shè)置最后期限,避免了部分條帶寫請求餓死的情況,從而進一步 提高寫操作的帶寬。
本發(fā)明提出了一種利用異或校驗磁盤陣列寫數(shù)據(jù)的方法,包括 以下步驟將寫請求轉(zhuǎn)換為一個或多個條帶請求;將條帶請求加入 到優(yōu)先級隊列中;以及對優(yōu)先級隊列中的所述條帶i青求進4亍處理。
其中,在將寫請求轉(zhuǎn)換為一個或多個條帶請求的步驟之后,還 包括以下步驟判斷條帶請求的預(yù)讀是否^^皮激活,如果沒有^C激活, 則將條帶請求延遲一個時間tl,并且在時間tl過去之后,激活條帶 的預(yù)讀,執(zhí)行將條帶請求加入到優(yōu)先級隊列中的步驟。
其中,在判斷條帶請求的預(yù)讀是否被激活的步驟中,如果判斷 條帶請求的預(yù)讀是被激活的,則立即處理所述條帶請求。
其中,在將條帶請求加入到優(yōu)先級隊列中的步驟中,具體包括 以下步驟判斷條帶請求是否為滿條帶寫,如果為滿條帶寫,則將 所述條帶請求加入到高優(yōu)先級隊列中。
7其中,如果條帶請求不為滿條帶寫,則將條帶請求加入到低優(yōu) 先級隊列中,并為條帶請求設(shè)置一個最后期限。
其中,在對優(yōu)先級隊列中的條帶請求進行處理的步驟中,具體
包括以下步驟判斷低優(yōu)先級隊列中是否有超過所述最后期限的條 帶請求;如果有,則處理低優(yōu)先級隊列中的條帶請求。
其中,如果低優(yōu)先級隊列中沒有超過最后期限的條帶請求,則 判斷高優(yōu)先級隊列是否為空,如果是,則處理低優(yōu)先級隊列中的條 帶請求。
其中,如果高優(yōu)先級隊列不為空,則處理高優(yōu)先級隊列中的條 帶"i青求。
其中,對優(yōu)先級隊列中的條帶請求進4亍處理的步驟由一個單獨 的線禾呈來完成。
本發(fā)明還提出了 一種利用異或校驗磁盤陣列寫數(shù)據(jù)的裝置,包 括條帶請求轉(zhuǎn)換單元,用于將寫請求轉(zhuǎn)換為一個或多個條帶請求;
存儲單元,用于以優(yōu)先級隊列的形式存儲條帶請求;以及處理單元, 用于對優(yōu)先級隊列中的條帶請求進行處理。
與現(xiàn)有技術(shù)相比,本發(fā)明引入了條帶延遲機制,這有利于一次 處理更多的寫請求,減少了在寫操作中預(yù)讀數(shù)據(jù)的次數(shù),提高了寫 操作的帶寬。此外,本發(fā)明又引入了優(yōu)先級隊列,使得滿條帶寫請 求優(yōu)先處理,并為部分條帶寫請求設(shè)置了最后期限值,保證了低優(yōu) 先級隊列中的請求不會被餓死,進一步提高了寫請求的帶寬及性能。
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申 請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并
不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中
圖1是RAID5磁盤陣列數(shù)據(jù)分布的示意圖2是存儲子系統(tǒng)結(jié)構(gòu)示意圖3是RAID控制器內(nèi)部結(jié)構(gòu)示意圖4是根據(jù)本發(fā)明使用異或校驗的》茲盤子系統(tǒng)結(jié)構(gòu)示意圖5是根據(jù)本發(fā)明引入條帶延遲機制后處理寫數(shù)據(jù)的算法流程
圖6是根據(jù)本發(fā)明引入優(yōu)先級隊列之后處理寫數(shù)據(jù)的算法流程圖。
具體實施例方式
下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步的說明。
本發(fā)明纟是供一種方法,該方法優(yōu)先處理滿條帶寫,并為部分條 帶寫請求設(shè)置最后期限,避免了部分條帶寫請求餓死的情況,從而
進一步提高寫操作的帶寬。本發(fā)明提高寫操作帶寬的方法大體上包 ^括以下步驟
第一步將寫請求加入到相應(yīng)的條帶請求中,記條帶請求集合 為RA,條帶i青求為R。第二步對于RA每個R,首先判斷R的預(yù)讀是否激活,如果 R的預(yù)讀被激活,且R中有寫請求,那么立即處理這個請求。否則 轉(zhuǎn)到步驟3。
第三步R的預(yù)讀沒有被激活,延遲R,將R放到延遲隊列中。 啟動定時器,當(dāng)定時器到期時,激活R的預(yù)讀。
第四步判斷R是否為滿條帶寫,如果是的話,則將R加入到 高優(yōu)先級隊列中,否則,將R加入到^f氐優(yōu)先級隊列,并為R^殳置最
后期限。
第五步啟動一個線程,該線程首先判斷^氐優(yōu)先級隊列中是否 有R超時。如果R超時的話,便優(yōu)先處理R。否則線程從高優(yōu)先級 隊列中取出R進行處理。如果高優(yōu)先級隊列為空,那么則從4氐優(yōu)先 級隊列中取出R。如果兩個隊列均為空,則線程停止。
第六步獲取與R相關(guān)的條帶S,對條帶S進行處理。根據(jù)R 的狀態(tài)(滿條帶寫,小寫,大寫)扭Z亍相應(yīng)的寫處理流程。
第七步當(dāng)RA中所有的R均凈皮處理完畢時,返回寫命令。
圖4描述的是使用異或校驗的磁盤子系統(tǒng)結(jié)構(gòu)。請求處理器401 負責(zé)將控制器傳過來的請求轉(zhuǎn)換為條帶請求,然后轉(zhuǎn)發(fā)到虛擬設(shè)備 405中。請求處理器401接收請求,然后條帶請求轉(zhuǎn)換器402將相 應(yīng)請求轉(zhuǎn)換為條帶請求。定時器403負責(zé)將條帶請求延遲一段時間 再進行處理。當(dāng)定時器到期時,會根據(jù)條帶請求的狀態(tài)(大小、小 寫或滿條帶寫)將條帶請求放入相應(yīng)的隊列中。如果請求的狀態(tài)是 滿條帶寫,則將條帶請求放入高優(yōu)先級隊列407中。否則,將條帶 :清求i文入l氐優(yōu)先級隊列408中,并設(shè)置條帶請求最后期限。請求選擇器404首先檢查低優(yōu)先級隊列408中是否有條帶請求過期。如果沒有請求過期,則從高優(yōu)先級隊列407中取出條帶請求,然后從條帶緩沖區(qū)406中為條帶請求分配相應(yīng)的條帶資源。由于是滿條帶寫,無需再預(yù)讀數(shù)據(jù),條帶中的數(shù)據(jù)均是最新的,所以直接將條帶中的數(shù)據(jù)發(fā)送到RPA 203計算校驗信息。校驗信息計算完畢后,RPA 203會通知請求處理器401條帶校驗信息計算完畢,請求處理器401將條帶發(fā)送到虛擬》茲盤405進行寫操作。
如果低優(yōu)先級隊列408中有寫請求過期,則請求選擇器404會優(yōu)先選4奪該-清求進^f亍處理,以保3正該i青求不會^K我死。由于^f氐優(yōu)先級隊列408中條帶寫請求是部分條帶寫,所以預(yù)讀條帶中的一些數(shù)據(jù)。請求處理器401從條帶緩沖區(qū)406中為條帶請求分配相應(yīng)的條帶資源,然后將要預(yù)讀請求發(fā)送到虛擬^磁盤405。當(dāng)數(shù)據(jù)讀取完畢之后,虛擬磁盤405會通知請求處理器401預(yù)讀數(shù)據(jù)完畢,然后請求處理器401將條帶數(shù)據(jù)發(fā)送到RPA203計算校驗信息。計算完畢之后,RPA 203通知請求處理器4014交驗信息計算完畢,之后請求處理器401將條帶發(fā)送到虛擬磁盤405進行寫操作。
本發(fā)明提供使用異或校驗的》茲盤陣列寫數(shù)據(jù)的方法,該方法在處理寫請求過程中引入條帶延遲處理機制,其步驟如圖5所示
步驟501:首先將寫請求加入到相應(yīng)的條帶請求R中。由控制器發(fā)來的寫請求可能^皮加入到多個條帶請求中,記為條帶請求集合RA。當(dāng)RA中所有的條帶請求R均被處理之后,那么寫請求才會被處理完畢。
步驟502:由于由控制器發(fā)送過來的不同的寫請求可能會加入到相同的條帶請求R中,所以要判斷條帶請求R的預(yù)讀是否被激活。如果被激活的話,則執(zhí)行步驟503,否則執(zhí)行步驟505。
ii步驟503:條帶請求R的預(yù)讀纟皮激活,為該條帶請求R分配相應(yīng)的條帶資源。
步驟504:為條帶請求R分配相應(yīng)的條帶資源之后,處理該請求。首先判斷該條帶i青求R^f吏用哪種寫方式——RCW、 RMW、滿條帶寫。然后才艮據(jù)不同的寫方式,^M亍不同的處理流程。RMW、RCW的處理過程已經(jīng)在前面i并述,這里不在重復(fù)。
當(dāng)該條帶請求執(zhí)行完畢之后,關(guān)閉該條帶請求的預(yù)讀,然后判斷該寫請求是否被處理完成。如果條帶請求集合中所有的條帶請求均-故處理,則寫"i青求處理完畢。否則轉(zhuǎn)到步驟501。
步驟505:條帶請求R的預(yù)讀沒有^皮激活,延遲處理該條帶請求,并啟動定時器。該定時器負責(zé)在未來的某個時間激活條帶的預(yù)讀。
步驟506:定時器到期,激活條帶請求的預(yù)讀。此時,條帶請求可能已經(jīng)堆積了大量請求,判斷條帶請求的寫數(shù)據(jù)方式。如果條帶請求時滿條帶寫的話,執(zhí)行步驟508,將該條帶請求加入高優(yōu)先級隊列末尾。否則執(zhí)行步驟507,將條帶請求放入到低優(yōu)先級隊列末尾,并設(shè)置最后期限值。
將條帶請求放入到優(yōu)先級隊列中之后,由另外一個線程負責(zé)處理隊列中的條帶請求。本發(fā)明引入優(yōu)先級隊列,目的在于區(qū)別對待滿條帶寫于部分條帶寫的區(qū)別,優(yōu)先處理滿條帶寫。同時,對部分條帶寫設(shè)置一個最后期限值,保證了部分條帶寫不會被俄死。步驟如圖6所示
步驟601:線程首先判斷低優(yōu)先級隊列中是否有條帶請求到期,如果有的話,則執(zhí)行步驟605。否則執(zhí)行步驟602。步驟602:判斷高優(yōu)先級隊列是否為空。如果為空,則執(zhí)行步驟603。否則才丸行步驟604。
步驟603:判斷〗氐優(yōu)先級隊列是否為空。如果為空,則不存在待處理的條帶請求,結(jié)束線程。否則,執(zhí)行步驟605。
步驟604:高優(yōu)先級隊列不為空,從高優(yōu)先級隊首取出第一個條帶請求,作為待處理的條帶請求。
步驟605:高優(yōu)先級隊列為空,判斷低優(yōu)先級隊列是否為空,如果為空的話,則線程退出。否則從低優(yōu)先級隊首取出第一個條帶請求,作為待處理的條帶請求。
步驟606:為條帶請求分配相應(yīng)的條帶資源,判斷使用何種寫方式(RCW或RMW)來處理條帶請求。然后將條帶請求轉(zhuǎn)發(fā)到下層,轉(zhuǎn)到步驟601繼續(xù)處理,直到兩個優(yōu)先級隊列均為空時,線程退出。
領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述〗又為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在
本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種利用異或校驗磁盤陣列寫數(shù)據(jù)的方法,其特征在于,所述方法包括以下步驟將所述寫請求轉(zhuǎn)換為一個或多個條帶請求;將所述條帶請求加入到優(yōu)先級隊列中;以及對所述優(yōu)先級隊列中的所述條帶請求進行處理。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在將寫請求轉(zhuǎn)換為 一個或多個條帶請求的步驟之后,還包括以下步驟判斷所述條帶請求的預(yù)讀是否4皮激活,如果沒有被激活, 則將所述條帶^青求延遲一個時間tl,并且在所述時間tl過去 之后,激活所述條帶的預(yù)讀,執(zhí)行將所述條帶請求加入到優(yōu)先 級隊列中的步驟。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,在判斷所述條帶請 求的預(yù)讀是否被激活的步驟中,如果判斷所述條帶請求的預(yù)讀 是被激活的,則立即處理所述條帶請求。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在將所述條帶請求 加入到優(yōu)先級隊列中的步驟中,具體包括以下步驟判斷所述條帶請求是否為滿條帶寫,如果為滿條帶寫,則 將所述條帶請求加入到高優(yōu)先級隊列中。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,如果所述條帶請求 不為滿條帶寫,則將所述條帶請求加入到低優(yōu)先級隊列中,并 為所述條帶請求設(shè)置一個最后期限。
6. 才艮據(jù)^又利要求5所述的方法,其特;f正在于,在對優(yōu)先級隊列中 的所述條帶請求進行處理的步驟中,具體包括以下步驟判斷所述^氐優(yōu)先級隊列中是否有超過所述最后期限的所 述條帶請求;如果有,則處理所述低優(yōu)先級隊列中的所述條帶請求。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,如果低優(yōu)先級隊列 中沒有超過所述最后期限的所述條帶請求,則判斷所述高優(yōu)先 級隊列是否為空,如果是,則處理所述低優(yōu)先級隊列中的條帶 請求。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,如果所述高優(yōu)先級 隊列不為空,則處理所述高優(yōu)先級隊列中的條帶請求。
9. 根據(jù)權(quán)利要求1所述的方法,其特征在于,對優(yōu)先級隊列中的 所述條帶請求進行處理的步驟由一個單獨的線程來完成。
10. —種利用異或校驗f茲盤陣列寫數(shù)據(jù)的裝置,其特征在于,所述 裝置包括條帶請求轉(zhuǎn)換單元,用于將寫請求轉(zhuǎn)換為一個或多個條帶請求;存儲單元,用于以優(yōu)先級隊列的形式存儲所述條帶請求;以及處理單元,用于對所述優(yōu)先級隊列中的所述條帶請求進行 處理。
全文摘要
本發(fā)明提供了一種利用異或校驗磁盤陣列寫數(shù)據(jù)的方法,包括將寫請求轉(zhuǎn)換為一個或多個條帶請求;將條帶請求加入到優(yōu)先級隊列中;以及對優(yōu)先級隊列中的所述條帶請求進行處理。本發(fā)明引入了條帶延遲機制和優(yōu)先級隊列,提高了寫請求的帶寬及性能。
文檔編號G06F11/10GK101650675SQ20091016759
公開日2010年2月17日 申請日期2009年8月28日 優(yōu)先權(quán)日2009年8月28日
發(fā)明者斌 梁 申請人:中興通訊股份有限公司