調(diào)度io的方法和裝置制造方法
【專利摘要】本發(fā)明實施例提供一種調(diào)度IO的方法和裝置,該方法包括:接收主機(jī)發(fā)送的第一讀IO,該第一讀IO用于讀取RAID的第一存儲區(qū)域中的第一數(shù)據(jù);根據(jù)該第一讀IO和重構(gòu)預(yù)讀IO生成第二讀IO,其中該重構(gòu)預(yù)讀IO用于讀取該RAID的第二存儲區(qū)域中的第二數(shù)據(jù),該第二存儲區(qū)域與該第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,該第二讀IO用于讀取該RAID的第三存儲區(qū)域中的第三數(shù)據(jù),該第三存儲區(qū)域包括該至少部分交疊的存儲區(qū)域;向該RAID發(fā)送該第二讀IO。本發(fā)明實施例中,第一讀IO與重構(gòu)預(yù)讀IO訪問的存儲區(qū)域部分交疊,利用第二讀IO讀取交疊部分的存儲區(qū)域,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
【專利說明】調(diào)度IO的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實施例涉及數(shù)據(jù)處理領(lǐng)域,更為具體地,涉及一種調(diào)度IO的方法和裝置?!颈尘凹夹g(shù)】
[0002]RAID (Redundant Arrays of Independent Disks,獨立磁盤冗余陣列)將不同硬盤組成陣列的形式進(jìn)行數(shù)據(jù)的存儲與讀寫。RAID (RAID0除外)具有冗余性,可以在單盤故障的情況下,對故障盤進(jìn)行數(shù)據(jù)重構(gòu),并將重構(gòu)后的數(shù)據(jù)寫入RAID的熱備存儲區(qū)域(又稱熱備空間,例如可以是熱備盤)中,以保證RAID數(shù)據(jù)的完整性、正確性以及一致性。
[0003]主機(jī)下發(fā)的數(shù)據(jù)流包括主機(jī)的讀IO (Input Output,輸入輸出)和主機(jī)的寫10。當(dāng)主機(jī)下發(fā)的數(shù)據(jù)流對正在重構(gòu)或待重構(gòu)的存儲空間進(jìn)行訪問時,重構(gòu)數(shù)據(jù)流(重構(gòu)預(yù)讀IO和重構(gòu)寫10)與主機(jī)下發(fā)的數(shù)據(jù)流之間會分別對同一存儲空間進(jìn)行多次訪問,增加硬盤負(fù)擔(dān),浪費系統(tǒng)資源。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實施例提供一種調(diào)度IO的方法和裝置,以減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬浪費。
[0005]第一方面,提供一種調(diào)度IO的方法,包括:接收主機(jī)發(fā)送的第一讀10,所述第一讀IO用于讀取RAID的第一存儲區(qū)域中的第一數(shù)據(jù);根據(jù)所述第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,其中所述重構(gòu)預(yù)讀IO用于讀取所述RAID的第二存儲區(qū)域中的第二數(shù)據(jù),所述第二存儲區(qū)域與所述第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,所述第二讀IO用于讀取所述RAID的第三存儲區(qū)域中的第三數(shù)據(jù),所述第三存儲區(qū)域包括所述至少部分交疊的存儲區(qū)域;向所述RAID發(fā)送所述第二讀10。
[0006]結(jié)合第一方面,在第一方面的一種實現(xiàn)方式中,所述第三存儲區(qū)域為所述RAID的非故障存儲區(qū)域,且所述第三存儲區(qū)域包括所述第一存儲區(qū)域和所述第二存儲區(qū)域,所述根據(jù)所述第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,包括:將所述第一讀IO和所述重構(gòu)預(yù)讀IO合并為所述第二讀10。
[0007]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,還包括:根據(jù)所述第二讀10,從所述RAID接收所述第三數(shù)據(jù);向所述主機(jī)返回包含在所述第三數(shù)據(jù)中的所述第一數(shù)據(jù);根據(jù)包含在所述第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)所述RAID的故障存儲區(qū)域中的數(shù)據(jù)。
[0008]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,還包括:接收所述主機(jī)發(fā)送的寫10,所述寫IO用于將第四數(shù)據(jù)寫入所述RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域;將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
[0009]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。[0010]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域,包括:當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
[0011]第二方面,提供一種調(diào)度IO的方法,包括:接收主機(jī)發(fā)送的寫10,所述寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域;將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
[0012]結(jié)合第二方面,在第二方面的一種實現(xiàn)方式中,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0013]結(jié)合第二方面或其上述實現(xiàn)方式的任一種,在第二方面的另一種實現(xiàn)方式中,所述將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域,包括:當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
[0014]第三方面,提供一種調(diào)度IO的裝置,其特征在于,包括:第一接收單元,用于接收主機(jī)發(fā)送的第一讀10,所述第一讀IO用于讀取RAID的第一存儲區(qū)域中的第一數(shù)據(jù);生成單元,用于根據(jù)所述第一接收單元接收到的所述第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,其中所述重構(gòu)預(yù)讀IO用于讀取所述RAID的第二存儲區(qū)域中的第二數(shù)據(jù),所述第二存儲區(qū)域與所述第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,所述第二讀IO用于讀取所述RAID的第三存儲區(qū)域中的第三數(shù)據(jù),所述第三存儲區(qū)域包括所述至少部分交疊的存儲區(qū)域;第一發(fā)送單元,用于向所述RAID發(fā)送所述生成單元生成的所述第二讀10。
[0015]結(jié)合第三方面,在第三方面的一種實現(xiàn)方式中,所述第三存儲區(qū)域為所述RAID的非故障存儲區(qū)域,且所述第三存儲區(qū)域包括所述第一存儲區(qū)域和所述第二存儲區(qū)域,所述生成單元具體用于將所述第一讀IO和所述重構(gòu)預(yù)讀IO合并為所述第二讀10。
[0016]結(jié)合第三方面或其上述實現(xiàn)方式的任一種,在第三方面的另一種實現(xiàn)方式中,所述裝置還包括:第二接收單元,用于根據(jù)所述第二讀10,從所述RAID接收所述第三數(shù)據(jù);第二發(fā)送單元,用于向所述主機(jī)返回包含在所述第二接收單元接收的所述第三數(shù)據(jù)中的所述第一數(shù)據(jù);重構(gòu)單元,用于根據(jù)包含在第二接收單元接收的所述第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)所述RAID的故障存儲區(qū)域中的數(shù)據(jù)。
[0017]結(jié)合第三方面或其上述實現(xiàn)方式的任一種,在第三方面的另一種實現(xiàn)方式中,還包括:第三接收單元,用于接收所述主機(jī)發(fā)送的寫10,所述寫IO用于將第四數(shù)據(jù)寫入所述RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域;寫入單元,用于將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
[0018]結(jié)合第三方面或其上述實現(xiàn)方式的任一種,在第三方面的另一種實現(xiàn)方式中,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0019]結(jié)合第三方面或其上述實現(xiàn)方式的任一種,在第三方面的另一種實現(xiàn)方式中,所述寫入單元具體用于當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
[0020]第四方面,提供一種調(diào)度IO的裝置,其特征在于,包括:接收單元,用于接收主機(jī)發(fā)送的寫10,所述寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域;寫入單元,用于將所述接收單元接收的所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
[0021]結(jié)合第四方面,在第四方面的一種實現(xiàn)方式中,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0022]結(jié)合第四方面或其上述實現(xiàn)方式的任一種,在第四方面的另一種實現(xiàn)方式中,所述寫入單元具體用于當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
[0023]本發(fā)明實施例中,第一讀IO與重構(gòu)預(yù)讀IO訪問的存儲區(qū)域部分交疊,利用第二讀IO讀取交疊部分的存儲區(qū)域,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
【專利附圖】
【附圖說明】
[0024]為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0025]圖1是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的結(jié)構(gòu)框架圖。
[0026]圖2是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的示意性流程圖。
[0027]圖3是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的示意性流程圖。
[0028]圖4是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的流程圖。
[0029]圖5是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的流程圖。
[0030]圖6是根據(jù)本發(fā)明實施例的調(diào)度IO的裝置的示意性框圖。
[0031]圖7是根據(jù)本發(fā)明另一實施例的調(diào)度IO的裝置的示意性框圖。
[0032]圖8是根據(jù)本發(fā)明另一實施例的調(diào)度IO的裝置的示意性框圖。
[0033]圖9是根據(jù)本發(fā)明另一實施例的調(diào)度IO的裝置的示意性框圖。
【具體實施方式】[0034]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明的一部分實施例,而不是全部實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。
[0035]在現(xiàn)有技術(shù)中,由于RAID具有冗余性,當(dāng)RAID中的某個存儲區(qū)域出現(xiàn)故障時(例如硬盤發(fā)生故障),可以對該存儲區(qū)域中的數(shù)據(jù)進(jìn)行恢復(fù),該過程即為存儲區(qū)域的數(shù)據(jù)重構(gòu)過程。在該數(shù)據(jù)重構(gòu)過程中,發(fā)生故障的存儲區(qū)域可以分為正在重構(gòu)的存儲區(qū)域和待重構(gòu)的存儲區(qū)域。當(dāng)主機(jī)數(shù)據(jù)流與重構(gòu)數(shù)據(jù)流對RAID進(jìn)行訪問時,基于故障存儲區(qū)域的上述劃分,采用不同的IO調(diào)度策略,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而降低硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
[0036]具體地,如圖1所示,RAID130由n個磁盤組成,在主機(jī)的緩存110與RAID130之間設(shè)置“緩存-RAID適配器”(Cache-RAID Adaptor,簡稱CRA),可通過CRA控制根據(jù)本發(fā)明實施例的IO的調(diào)度,以降低相同存儲區(qū)域的重復(fù)訪問。該CRA可以是邏輯的功能實體,也可以是獨立的硬件裝置,本發(fā)明實施例對此不作具體限定。
[0037]圖2是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的示意性流程圖。圖2的方法可由圖1中的CRA執(zhí)行。該方法包括:
[0038]210、接收主機(jī)發(fā)送的第一讀10,第一讀IO用于讀取RAID的第一存儲區(qū)域中的第
一數(shù)據(jù)。
[0039]220、根據(jù)第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,其中重構(gòu)預(yù)讀IO用于讀取RAID的第二存儲區(qū)域中的第二數(shù)據(jù),第二存儲區(qū)域與第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,第二讀IO用于讀取RAID的第三存儲區(qū)域中的第三數(shù)據(jù),第三存儲區(qū)域包括至少部分交置的存儲區(qū)域。
[0040]應(yīng)理解,本發(fā)明實施例對步驟210中的第一存儲區(qū)域的具體位置不作限定,例如,第一存儲區(qū)域可以全部位于RAID的非故障存儲區(qū)域,也可以一部分位于RAID的非故障存儲區(qū)域、一部分位于RAID的故障存儲區(qū)域。
[0041]上述第三存儲區(qū)域可以是第一存儲區(qū)域和第二存儲區(qū)域的交疊區(qū)域,或者是第一存儲區(qū)域,或者是第三存儲區(qū)域,或者是第一存儲區(qū)域和第三存儲區(qū)域之和(即第一存儲區(qū)域和第三存儲區(qū)域的合集,假設(shè)第一存儲區(qū)域?qū)?yīng)的存儲地址1000H?2000H,第三存儲區(qū)域的存儲地址為1050H?2050H,則第一存儲區(qū)域和第三存儲區(qū)域的合集為1000H?2050H),本發(fā)明實施例對此不作具體限定。
[0042]重構(gòu)預(yù)讀IO是重構(gòu)數(shù)據(jù)流的一部分,目的是通過讀取非故障存儲區(qū)域中的數(shù)據(jù)來重構(gòu)故障存儲區(qū)域的數(shù)據(jù)。當(dāng)?shù)谝蛔xIO與故障區(qū)域中某個重構(gòu)預(yù)讀IO讀取的存儲區(qū)域部分重疊時,即可生成上述第二讀10。
[0043]230、向 RAID 發(fā)送第二讀 10。
[0044]本發(fā)明實施例中,第一讀IO與重構(gòu)預(yù)讀IO訪問的存儲區(qū)域部分交疊,利用第二讀IO讀取交疊部分的存儲區(qū)域,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
[0045]可選地,作為一個實施例,第三存儲區(qū)域為RAID的非故障存儲區(qū)域,且第三存儲區(qū)域包括第一存儲區(qū)域和第二存儲區(qū)域,步驟220可包括:將第一讀IO和重構(gòu)預(yù)讀IO合并為第二讀10。
[0046]具體地,在該實施例下,第三存儲區(qū)域可全部位于非故障存儲區(qū)域,第三存儲區(qū)域可取第一存儲區(qū)域和第二存儲區(qū)域的并集,上述將第一讀IO和重構(gòu)預(yù)讀IO合并為第二讀IO具體可指:生成第二讀10,該第二讀IO讀取的存儲空間是第一讀IO和重構(gòu)預(yù)讀IO讀取的存儲空間之和。
[0047]進(jìn)一步地,圖2方法還可包括:根據(jù)第二讀10,從RAID接收第三數(shù)據(jù);向主機(jī)返回包含在第三數(shù)據(jù)中的第一數(shù)據(jù);根據(jù)包含在第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)RAID的故障存儲區(qū)域中的數(shù)據(jù)。
[0048]具體地,RAID根據(jù)第二讀IO將上述第三數(shù)據(jù)返回至CRA,由于第三存儲空間包括第一存儲空間和第二存儲空間,所以第三數(shù)據(jù)中包括第一數(shù)據(jù)和第二數(shù)據(jù)。當(dāng)CRA獲得第三數(shù)據(jù)時,可以優(yōu)先向主機(jī)返回第一讀IO對應(yīng)的第一數(shù)據(jù),再根據(jù)第二數(shù)據(jù)異步計算重構(gòu)數(shù)據(jù),進(jìn)而完成重構(gòu)數(shù)據(jù)的下盤(即將重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域)。
[0049]可選地,作為另一個實施例,圖1的方法還可包括:接收主機(jī)發(fā)送的寫10,寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中第四存儲區(qū)域位于RAID的故障存儲區(qū)域;將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域。
[0050]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,避免了系統(tǒng)帶寬的浪費。
[0051]上述將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域具體可指:將第四數(shù)據(jù)存儲至所述RAID的熱備存儲區(qū)域中的、用于存儲所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)的存儲區(qū)域。
[0052]舉例說明,當(dāng)數(shù)據(jù)重構(gòu)以CHUNK為單位進(jìn)行時,假設(shè)當(dāng)前正在重構(gòu)第i CHUNK,且第四存儲區(qū)域為該第i CHUNK中的存儲區(qū)域,那么在熱備存儲區(qū)域會建立一個與第i CHUNK對應(yīng)的存儲區(qū)域i,用于存儲第i CHUNK的重構(gòu)數(shù)據(jù),此時僅需要將第四數(shù)據(jù)寫入該存儲區(qū)域i對應(yīng)位置即可。
[0053]進(jìn)一步地,如果第四存儲區(qū)域為待重構(gòu)的存儲區(qū)域(不屬于第i CHUNK,屬于還未重構(gòu)的CHUNK)時,可以采用預(yù)先劃分的方式,預(yù)先建立所有待重構(gòu)的CHUNK在熱備存儲空間的對應(yīng)區(qū)域,以存儲各自的重構(gòu)數(shù)據(jù)。此時,即可根據(jù)預(yù)先劃分好的存儲區(qū)域,將第四數(shù)據(jù)存入熱備空間的對應(yīng)位置即可。需要說明的是,為了避免重構(gòu)第四存儲區(qū)域時,重構(gòu)數(shù)據(jù)覆蓋了該寫IO的數(shù)據(jù),可以先檢測第四存儲區(qū)域是否已經(jīng)寫入了主機(jī)寫IO的數(shù)據(jù),如果已經(jīng)寫入主機(jī)寫10,則可以跳過第四存儲區(qū)域,繼續(xù)下一存儲區(qū)域的數(shù)據(jù)重構(gòu)。
[0054]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,進(jìn)而減少硬盤負(fù)擔(dān),避免了系統(tǒng)帶寬的浪費。
[0055]應(yīng)理解,上述第四存儲區(qū)域可以是正在重構(gòu)的存儲區(qū)域或者待重構(gòu)的存儲區(qū)域。當(dāng)上述第四存儲區(qū)域為正在重構(gòu)的存儲區(qū)域時,如果第四存儲區(qū)域中的數(shù)據(jù)還未重構(gòu)成功,可以直接將該第四數(shù)據(jù)作為該第四存儲區(qū)域的重構(gòu)數(shù)據(jù);如果第四存儲區(qū)域已經(jīng)重構(gòu)完成,準(zhǔn)備下盤,則可用該第四數(shù)據(jù)替換第四存儲區(qū)域中的重構(gòu)數(shù)據(jù),再寫入硬盤中。
[0056]可選地,作為另一個實施例,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域可包括:當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域;當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域,其中日志信息用于指示寫IO的邏輯地址。
[0057]具體地,上述日志信息可包括上述第四數(shù)據(jù)的內(nèi)容、故障盤的邏輯ID、邏輯塊地址(LBA, Logic Block Address)、邏輯塊長度等,以便后續(xù)利用元數(shù)據(jù)和數(shù)據(jù)的映射關(guān)系恢復(fù)上述第四數(shù)據(jù)。
[0058]圖3是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的示意性流程圖。圖3的方法可由圖1中的CRA執(zhí)行。該方法包括:
[0059]310、接收主機(jī)發(fā)送的寫10,寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中第四存儲區(qū)域位于RAID的故障存儲區(qū)域;
[0060]320、將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域。
[0061]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,避免了系統(tǒng)帶寬的浪費。
[0062]可選地,作為一個實施例,第四存儲區(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0063]可選地,作為另一個實施例,步驟320可包括:當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域;當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域,其中日志信息用于指示寫IO的邏輯地址。
[0064]下面結(jié)合具體例子,更加詳細(xì)地描述本發(fā)明實施例。應(yīng)注意,圖4至圖5的例子僅僅是為了幫助本領(lǐng)域技術(shù)人員理解本發(fā)明實施例,而非要將本發(fā)明實施例限于所例示的具體數(shù)值或具體場景。本領(lǐng)域技術(shù)人員根據(jù)所給出的圖4至圖5的例子,顯然可以進(jìn)行各種等價的修改或變化,這樣的修改或變化也落入本發(fā)明實施例的范圍內(nèi)。
[0065]圖4是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的流程圖。圖4的方法可以由圖1中的CRA執(zhí)行。在圖4的實施例中,主機(jī)發(fā)送的第一讀IO用于讀取第一存儲區(qū)域中的第一數(shù)據(jù),該實施例以第一存儲區(qū)域為非故障存儲區(qū)域為例進(jìn)行說明,當(dāng)?shù)谝淮鎯^(qū)域位于故障存儲區(qū)域時,可以采用降級讀的方式,先記錄第一讀IO的日志,以便該故障存儲區(qū)域的數(shù)據(jù)重構(gòu)后,根據(jù)該日志向主機(jī)返回第一數(shù)據(jù)。
[0066]410、接收主機(jī)發(fā)送的第一讀10。
[0067]該第一讀IO用于讀取RAID的第一存儲區(qū)域中的第一數(shù)據(jù)。
[0068]420、判斷第一讀IO與重構(gòu)預(yù)讀IO是否可以合并,如果是,執(zhí)行步驟430 ;如果否,執(zhí)行步驟440。
[0069]具體地,可以搜索重構(gòu)數(shù)據(jù)流中重構(gòu)預(yù)讀10,當(dāng)某個重構(gòu)預(yù)讀IO讀取的第二存儲區(qū)域與第一存儲區(qū)域至少部分交疊時,即可判斷該重構(gòu)預(yù)讀IO與第一讀IO可以合并。
[0070]430、與重構(gòu)預(yù)讀IO合并,生成第二讀10。[0071]第二讀IO讀取第三存儲區(qū)域的第三數(shù)據(jù),第三存儲區(qū)域可包括上述第一存儲區(qū)域和第二存儲區(qū)域。
[0072]440、向 RAID 發(fā)送第二讀 10。
[0073]即向RAID下發(fā)讀盤命令,讀取第三存儲區(qū)域的數(shù)據(jù)。
[0074]450、返回讀盤數(shù)據(jù)。
[0075]該讀盤數(shù)據(jù)即為上述第三數(shù)據(jù)。
[0076]460、優(yōu)先向主機(jī)返回第一數(shù)據(jù);同時異步計算重構(gòu)數(shù)據(jù)。
[0077]由于第三存儲區(qū)域包括第一存儲區(qū)域,所以第三數(shù)據(jù)包括第一數(shù)據(jù),只需要從第三數(shù)據(jù)中提取出第一數(shù)據(jù),并向主機(jī)返回即可。
[0078]進(jìn)一步地,第三數(shù)據(jù)中包括第二數(shù)據(jù),該第二數(shù)據(jù)用于重構(gòu)上述重構(gòu)預(yù)讀IO對應(yīng)的故障存儲區(qū)域中的數(shù)據(jù),所以需要異步計算重構(gòu)數(shù)據(jù)。
[0079]470、在返回主機(jī)IO之后查看本次硬盤的讀是否有效提高硬盤讀命中,如果是則下次硬盤讀IO采用本次預(yù)讀策略,否則更換預(yù)讀策略。
[0080]本發(fā)明實施例中,緩存的預(yù)讀策略與故障存儲區(qū)域的重構(gòu)順序有關(guān)(假設(shè)故障存儲區(qū)域的恢復(fù)以CHUNK為單位,該重構(gòu)順序用于指示CHUNK恢復(fù)的先后順序)。當(dāng)按照某種重構(gòu)順序恢復(fù)數(shù)據(jù)時,可以計算出主機(jī)IO與重構(gòu)預(yù)讀IO能夠合并的概率。如果該概率過低(如低于預(yù)設(shè)閾值),可以通過調(diào)整重構(gòu)順序,相應(yīng)地調(diào)整CACHE的預(yù)讀策略,以提高主機(jī)IO與重構(gòu)預(yù)讀IO能夠合并的概率。
[0081]480、結(jié)束。
[0082]本發(fā)明實施例中,第一讀IO與重構(gòu)預(yù)讀IO訪問的存儲區(qū)域部分交疊,利用第二讀IO讀取交疊部分的存儲區(qū)域,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
[0083]圖5是根據(jù)本發(fā)明實施例的調(diào)度IO的方法的流程圖。圖5的方法可以由圖1中的CRA執(zhí)行。
[0084]510、接收主機(jī)發(fā)送的寫10。
[0085]該寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域。
[0086]520、判斷第四存儲區(qū)域是否位于故障盤,如果是,執(zhí)行步驟530 ;如果不是,執(zhí)行步驟560。
[0087]530、判斷第四存儲區(qū)域的類型,當(dāng)?shù)谒拇鎯^(qū)域為已重構(gòu)的存儲區(qū)域時,執(zhí)行步驟560;當(dāng)?shù)谒拇鎯^(qū)域為正在重構(gòu)的存儲區(qū)域時,執(zhí)行步驟540 ;當(dāng)?shù)谒拇鎯^(qū)域為待重構(gòu)的存儲區(qū)域時,執(zhí)行步驟550。
[0088]540、將所述第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,然后執(zhí)行步驟560。
[0089]當(dāng)?shù)谒拇鎯^(qū)域的重構(gòu)數(shù)據(jù)已經(jīng)完成,準(zhǔn)備寫盤時,可以用第四數(shù)據(jù)替換該重構(gòu)數(shù)據(jù);當(dāng)?shù)谒拇鎯^(qū)域的重構(gòu)數(shù)據(jù)還未開始重構(gòu)或者完成重構(gòu)時,直接將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫盤。
[0090]進(jìn)一步地,如果本發(fā)明實施例中的RAID采用RAID5或RAID6,還可以更新寫校驗位,以提聞與數(shù)據(jù)的容錯率。
[0091]這種情況下可與Cache刷臟數(shù)據(jù)結(jié)合,優(yōu)先刷第四存儲區(qū)域所在數(shù)據(jù)塊。[0092]550、記錄寫IO的日志信息,然后執(zhí)行步驟570。
[0093]記錄寫IO的日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)該日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域。具體地,上述日志信息可包括上述第四數(shù)據(jù)的內(nèi)容、故障盤的邏輯ID、邏輯塊地址、邏輯塊長度等。
[0094]560、下發(fā)寫盤命令。
[0095]570、結(jié)束。
[0096]上文中結(jié)合圖1至圖5,詳細(xì)描述了根據(jù)本發(fā)明實施例的調(diào)度IO的方法,下面將結(jié)合圖6至圖9,詳細(xì)描述根據(jù)本發(fā)明實施例的調(diào)度IO的裝置。
[0097]圖6是根據(jù)本發(fā)明實施例的調(diào)度IO的裝置的示意性框圖。
[0098]應(yīng)理解,圖6的裝置600能夠?qū)崿F(xiàn)圖2至圖5流程中的各個步驟,為避免重復(fù),不再詳細(xì)描述。
[0099]裝置600包括:第一接收單元610、生成單元620和第一發(fā)送單元630。
[0100]第一接收單元610,用于接收主機(jī)發(fā)送的第一讀10,第一讀IO用于讀取獨立磁盤冗余陣列RAID的第一存儲區(qū)域中的第一數(shù)據(jù);
[0101 ] 生成單元620,用于根據(jù)第一接收單元610接收到的第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,其中重構(gòu)預(yù)讀IO用于讀取RAID的第二存儲區(qū)域中的第二數(shù)據(jù),第二存儲區(qū)域與第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,第二讀IO用于讀取RAID的第三存儲區(qū)域中的第三數(shù)據(jù),第三存儲區(qū)域包括至少部分交疊的存儲區(qū)域;
[0102]第一發(fā)送單元630,用于向RAID發(fā)送生成單元620生成的第二讀10。
[0103]本發(fā)明實施例中,第一讀IO與重構(gòu)預(yù)讀IO訪問的存儲區(qū)域部分交疊,利用第二讀IO讀取交疊部分的存儲區(qū)域,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
[0104]可選地,作為一個實施例,第三存儲區(qū)域為RAID的非故障存儲區(qū)域,且第三存儲區(qū)域包括第一存儲區(qū)域和第二存儲區(qū)域,生成單元620具體用于將第一讀IO和重構(gòu)預(yù)讀IO合并為第二讀10。
[0105]可選地,作為另一個實施例,裝置600還包括:第二接收單元,用于根據(jù)第二讀10,從RAID接收第三數(shù)據(jù);第二發(fā)送單元,用于向主機(jī)返回包含在第二接收單元接收的第三數(shù)據(jù)中的第一數(shù)據(jù);重構(gòu)單元,用于根據(jù)包含在第二接收單元接收的第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)RAID的故障存儲區(qū)域中的數(shù)據(jù)。
[0106]可選地,作為另一個實施例,裝置600還包括:第三接收單元,用于接收主機(jī)發(fā)送的寫10,寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中第四存儲區(qū)域位于RAID的故障存儲區(qū)域;寫入單元,用于將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域。
[0107]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,避免了系統(tǒng)帶寬的浪費。
[0108]可選地,作為另一個實施例,第四存儲區(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0109]可選地,作為另一個實施例,寫入單元具體用于當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域;當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域,其中日志信息用于指示寫IO的邏輯地址。
[0110]圖7是根據(jù)本發(fā)明另一實施例的調(diào)度IO的裝置的示意性框圖。
[0111]應(yīng)理解,圖7的裝置700能夠?qū)崿F(xiàn)圖2至圖5流程中的各個步驟,為避免重復(fù),不再詳細(xì)描述。
[0112]裝置700包括:接收單元710和寫入單元720。
[0113]接收單元710,用于接收主機(jī)發(fā)送的寫10,寫IO用于將第四數(shù)據(jù)寫入獨立磁盤冗余陣列RAID的第四存儲區(qū)域,其中第四存儲區(qū)域位于RAID的故障存儲區(qū)域;
[0114]寫入單元720,用于將接收單元710接收的第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域。
[0115]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,避免了系統(tǒng)帶寬的浪費。
[0116]可選地,作為一個實施例,第四存儲區(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0117]可選地,作為另一個實施例,寫入單元720具體用于當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域;當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域,其中日志信息用于指示寫IO的邏輯地址。
[0118]圖8是根據(jù)本發(fā)明另一實施例的調(diào)度IO的裝置的示意性框圖。
[0119]應(yīng)理解,圖8的裝置800能夠?qū)崿F(xiàn)圖2至圖5中的各個步驟,為避免重復(fù),不再詳細(xì)描述。
[0120]裝置800包括:控制器810和存儲器820。
[0121]存儲器820,用于存儲程序。
[0122]控制器810,用于執(zhí)行存儲器820存儲的程序,程序被控制器810執(zhí)行時,用于接收主機(jī)發(fā)送的第一讀10,第一讀IO用于讀取RAID的第一存儲區(qū)域中的第一數(shù)據(jù);根據(jù)接收到的第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,其中重構(gòu)預(yù)讀IO用于讀取RAID的第二存儲區(qū)域中的第二數(shù)據(jù),第二存儲區(qū)域與第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,第二讀IO用于讀取RAID的第三存儲區(qū)域中的第三數(shù)據(jù),第三存儲區(qū)域包括至少部分交疊的存儲區(qū)域;向RAID發(fā)送第二讀10。
[0123]本發(fā)明實施例中,第一讀IO與重構(gòu)預(yù)讀IO訪問的存儲區(qū)域部分交疊,利用第二讀IO讀取交疊部分的存儲區(qū)域,減少不同數(shù)據(jù)流對相同存儲區(qū)域的重復(fù)訪問,進(jìn)而減少硬盤負(fù)擔(dān),避免系統(tǒng)帶寬的浪費。
[0124]可選地,作為一個實施例,第三存儲區(qū)域為RAID的非故障存儲區(qū)域,且第三存儲區(qū)域包括第一存儲區(qū)域和第二存儲區(qū)域,控制器810具體用于將第一讀IO和重構(gòu)預(yù)讀IO合并為第二讀10。[0125]可選地,作為另一個實施例,控制器810還用于根據(jù)第二讀10,從RAID接收第三數(shù)據(jù);向主機(jī)返回包含在第三數(shù)據(jù)中的第一數(shù)據(jù);根據(jù)包含在第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)RAID的故障存儲區(qū)域中的數(shù)據(jù)。
[0126]可選地,作為另一個實施例,控制器810還用于接收主機(jī)發(fā)送的寫10,寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中第四存儲區(qū)域位于RAID的故障存儲區(qū)域;將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域。
[0127]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,避免了系統(tǒng)帶寬的浪費。
[0128]可選地,作為另一個實施例,第四存儲區(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0129]可選地,作為另一個實施例,控制器810具體用于當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域;當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域,其中日志信息用于指示寫IO的邏輯地址。
[0130]圖9是根據(jù)本發(fā)明另一實施例的調(diào)度IO的裝置的示意性框圖。
[0131]應(yīng)理解,圖9的裝置900能夠?qū)崿F(xiàn)圖2至圖5中的各個步驟,為避免重復(fù),不再詳細(xì)描述。
[0132]裝置900包括:控制器910和存儲器920。
[0133]存儲器920,用于存儲程序。
[0134]控制器910,用于執(zhí)行存儲器920的程序,程序被控制器910執(zhí)行時,接收主機(jī)發(fā)送的寫10,寫IO用于將第四數(shù)據(jù)寫入RAID的第四存儲區(qū)域,其中第四存儲區(qū)域位于RAID的故障存儲區(qū)域;將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域。
[0135]本發(fā)明實施例中,通過將主機(jī)發(fā)送的寫IO的數(shù)據(jù)作為重構(gòu)數(shù)據(jù)寫入RAID的熱備存儲區(qū)域,避免了重構(gòu)寫IO和主機(jī)寫IO對同一熱備存儲區(qū)域的多次寫操作,避免了系統(tǒng)帶寬的浪費。
[0136]可選地,作為一個實施例,第四存儲區(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
[0137]可選地,作為另一個實施例,控制器910具體用于當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域;當(dāng)?shù)谒拇鎯^(qū)域為故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)第四存儲區(qū)域時,根據(jù)日志信息將第四數(shù)據(jù)作為第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入熱備存儲區(qū)域,其中日志信息用于指示寫IO的邏輯地址。
[0138]本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機(jī)軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。[0139]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
[0140]在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0141]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
[0142]另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
[0143]所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0144]以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種調(diào)度輸入輸出IO的方法,其特征在于,包括: 接收主機(jī)發(fā)送的第一讀10,所述第一讀IO用于讀取獨立磁盤冗余陣列RAID的第一存儲區(qū)域中的第一數(shù)據(jù); 根據(jù)所述第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,其中所述重構(gòu)預(yù)讀IO用于讀取所述RAID的第二存儲區(qū)域中的第二數(shù)據(jù),所述第二存儲區(qū)域與所述第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,所述第二讀IO用于讀取所述RAID的第三存儲區(qū)域中的第三數(shù)據(jù),所述第三存儲區(qū)域包括所述至少部分交疊的存儲區(qū)域; 向所述RAID發(fā)送所述第二讀10。
2.如權(quán)利要求1所述的方法,其特征在于,所述第三存儲區(qū)域為所述RAID的非故障存儲區(qū)域,且所述第三存儲區(qū)域包括所述第一存儲區(qū)域和所述第二存儲區(qū)域,所述根據(jù)所述第一讀IO和重構(gòu)預(yù)讀IO生成第二讀10,包括: 將所述第一讀IO和所述重構(gòu)預(yù)讀IO合并為所述第二讀10。
3.如權(quán)利要求2所述的方法,其特征在于,還包括: 根據(jù)所述第二讀10,從所述RAID接收所述第三數(shù)據(jù); 向所述主機(jī)返回包含在所述第三數(shù)據(jù)中的所述第一數(shù)據(jù); 根據(jù)包含在所述第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)所述RAID的故障存儲區(qū)域中的數(shù)據(jù)。
4.如權(quán)利要求1-3中任一項所述的方法,其特征在于,還包括: 接收所述主機(jī)發(fā)送的寫10,所述寫IO用于將第四數(shù)據(jù)寫入所述RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域;` 將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
5.如權(quán)利要求4所述的方法,其特征在于,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
6.如權(quán)利要求4所述的方法,其特征在于,所述將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域,包括: 當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域; 當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
7.—種調(diào)度輸入輸出IO的方法,其特征在于,包括: 接收主機(jī)發(fā)送的寫10,所述寫IO用于將第四數(shù)據(jù)寫入獨立磁盤冗余陣列RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域; 將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
8.如權(quán)利要求7所述的方法,其特征在于,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
9.如權(quán)利要求7所述的方法,其特征在于,所述將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域,包括: 當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
10.一種調(diào)度輸入輸出IO的裝置,其特征在于,包括: 第一接收單元,用于接收主機(jī)發(fā)送的第一讀IO,所述第一讀IO用于讀取獨立磁盤冗余陣列RAID的第一存儲區(qū)域中的第一數(shù)據(jù); 生成單元,用于根據(jù)所述第一接收單元接收到的所述第一讀IO和重構(gòu)預(yù)讀IO生成第二讀IO,其中所述重構(gòu)預(yù)讀IO用于讀取所述RAID的第二存儲區(qū)域中的第二數(shù)據(jù),所述第二存儲區(qū)域與所述第一存儲區(qū)域具有至少部分交疊的存儲區(qū)域,所述第二讀IO用于讀取所述RAID的第三存儲區(qū)域中的第三數(shù)據(jù),所述第三存儲區(qū)域包括所述至少部分交疊的存儲區(qū)域; 第一發(fā)送單元,用于向所述RAID發(fā)送所述生成單元生成的所述第二讀IO。
11.如權(quán)利要求10所述的裝置,其特征在于,所述第三存儲區(qū)域為所述RAID的非故障存儲區(qū)域,且所述第三存儲區(qū)域包括所述第一存儲區(qū)域和所述第二存儲區(qū)域,所述生成單元具體用于將所述第一讀IO和所述重構(gòu)預(yù)讀IO合并為所述第二讀IO。
12.如權(quán)利要求11所述的裝置,其特征在于,所述裝置還包括: 第二接收單元,用于根據(jù)所述第二讀IO,從所述RAID接收所述第三數(shù)據(jù); 第二發(fā)送單元,用于向所述主機(jī)返回包含在所述第二接收單元接收的所述第三數(shù)據(jù)中的所述第一數(shù)據(jù); 重構(gòu)單元,用于根據(jù)包含在第二接收單元接收的所述第三數(shù)據(jù)中的第二數(shù)據(jù),重構(gòu)所述RAID的故障存儲區(qū)域中的數(shù)據(jù)。
13.如權(quán)利要求10-12中任一項所述的裝置,其特征在于,還包括: 第三接收單元,用于接收所述主機(jī)發(fā)送的寫IO,所述寫IO用于將第四數(shù)據(jù)寫入所述RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域; 寫入單元,用于將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
14.如權(quán)利要求13所述的裝置,其特征在于,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
15.如權(quán)利要求13所述的裝置,其特征在于,所述寫入單元具體用于當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
16.一種調(diào)度輸入輸出IO的裝置,其特征在于,包括: 接收單元,用于接收主機(jī)發(fā)送的寫IO,所述寫IO用于將第四數(shù)據(jù)寫入獨立磁盤冗余陣列RAID的第四存儲區(qū)域,其中所述第四存儲區(qū)域位于所述RAID的故障存儲區(qū)域; 寫入單元,用于將所述接收單元接收的所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述RAID的熱備存儲區(qū)域。
17.如權(quán)利要求16所述的裝置,其特征在于,所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域。
18.如權(quán)利要求16所述的裝置,其特征在于,所述寫入單元具體用于當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的正在重構(gòu)的存儲區(qū)域時,將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域;當(dāng)所述第四存儲區(qū)域為所述故障存儲區(qū)域中的待重構(gòu)的存儲區(qū)域時,記錄日志信息,以便重構(gòu)所述第四存儲區(qū)域時,根據(jù)所述日志信息將所述第四數(shù)據(jù)作為所述第四存儲區(qū)域的重構(gòu)數(shù)據(jù)寫入所述熱備存儲區(qū)域,其中所述日志信息用于指示所述寫IO的邏輯地址。
【文檔編號】G06F3/06GK103677669SQ201310633914
【公開日】2014年3月26日 申請日期:2013年11月29日 優(yōu)先權(quán)日:2013年11月29日
【發(fā)明者】雷延釗 申請人:華為技術(shù)有限公司