本發(fā)明涉及數(shù)據(jù)遷移技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)遷移過程中對IO請求的控制方法及系統(tǒng)。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,在存儲軟件領(lǐng)域常常會遇到數(shù)據(jù)遷移的情況。數(shù)據(jù)遷移指的是不同存儲設(shè)備之間的數(shù)據(jù)轉(zhuǎn)移,將數(shù)據(jù)移動到新的存儲空間,原來的存儲空間釋放,以便可以容納新數(shù)據(jù)。
數(shù)據(jù)遷移可以平衡不同存儲設(shè)備的可用空間,也可以平衡不同控制器的IO負(fù)載。自動分層技術(shù)就是借助遷移完成數(shù)據(jù)的交換。遷移涉及大量數(shù)據(jù)復(fù)制,所以整個遷移過程通常耗費(fèi)時間較長,但是對用戶透明,不應(yīng)影響用戶的IO操作。如果在數(shù)據(jù)遷移過程中,用戶恰好對進(jìn)行遷移的存儲單元執(zhí)行IO操作,此時如果不控制IO請求,可能會導(dǎo)致遷移完成后數(shù)據(jù)不一致、丟失、破壞等情況。
因此,如何在數(shù)據(jù)遷移過程中對IO請求進(jìn)行控制,避免對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn),是本領(lǐng)域技術(shù)人員目前需要解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種數(shù)據(jù)遷移過程中對IO請求的控制方法及系統(tǒng),可以在數(shù)據(jù)遷移過程中對IO請求進(jìn)行控制,避免對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
為解決上述技術(shù)問題,本發(fā)明提供了如下技術(shù)方案:
一種數(shù)據(jù)遷移過程中對IO請求的控制方法,包括:
將邏輯卷劃分為若干大小相等的第一數(shù)據(jù)區(qū)段,定義所述第一數(shù)據(jù)區(qū)段為數(shù)據(jù)遷移的單位;
檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài);
根據(jù)所述當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制所述IO請求的執(zhí)行動作。
優(yōu)選地,所述檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài),包括:
將所述當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段分解為若干LBA;
通過預(yù)設(shè)算法對該第一數(shù)據(jù)區(qū)段進(jìn)行遷移標(biāo)記,標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的LBA和未完成數(shù)據(jù)遷移的LBA;
計算所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和終止LBA;
檢測所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
優(yōu)選地,所述通過預(yù)設(shè)算法對該第一數(shù)據(jù)區(qū)段進(jìn)行遷移標(biāo)記,標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的LBA和未完成數(shù)據(jù)遷移的LBA,包括:
通過High Water Mark算法來標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的位置,定義High Water以下的數(shù)據(jù)已完成數(shù)據(jù)遷移,High Water以上的數(shù)據(jù)未完成數(shù)據(jù)遷移。
優(yōu)選地,所述檢測所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài),包括:
根據(jù)所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA與所述High Water的位置關(guān)系,判定所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
優(yōu)選地,所述根據(jù)所述當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制所述IO請求的執(zhí)行動作,包括:
若所述起始LBA大于所述High Water,則直接執(zhí)行IO請求;
若所述終止LBA小于所述High Water,則控制所述IO請求作用于數(shù)據(jù)遷移的目的第一數(shù)據(jù)區(qū)段;
若所述High Water在所述起始LBA和所述終止LBA之間,則控制所述IO請求在該第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移不影響所述IO請求的操作時再執(zhí)行所述IO請求。
一種數(shù)據(jù)遷移過程中對IO請求的控制系統(tǒng),包括:
劃分模塊,用于將邏輯卷劃分為若干大小相等的第一數(shù)據(jù)區(qū)段,定義所述第一數(shù)據(jù)區(qū)段為數(shù)據(jù)遷移的單位;
檢測模塊,用于檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài);
控制模塊,用于根據(jù)所述當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制所述IO請求的執(zhí)行動作。
優(yōu)選地,所述檢測模塊包括:
分解單元,用于將所述當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段分解為若干LBA;
標(biāo)記單元,用于通過預(yù)設(shè)算法對該第一數(shù)據(jù)區(qū)段進(jìn)行遷移標(biāo)記,標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的LBA和未完成數(shù)據(jù)遷移的LBA;
計算單元,用于計算所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和終止LBA;
檢測單元,用于檢測所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
優(yōu)選地,所述標(biāo)記單元為High Water標(biāo)記單元,用于通過High Water Mark算法來標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的位置,定義High Water以下的數(shù)據(jù)已完成數(shù)據(jù)遷移,High Water以上的數(shù)據(jù)未完成數(shù)據(jù)遷移。
優(yōu)選地,所述檢測單元包括:
對比子單元,用于比對所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA與所述High Water的位置關(guān)系;
判定子單元,用于根據(jù)所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA與所述High Water的位置關(guān)系,判定所述當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或所述終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
優(yōu)選地,所述控制模塊包括:
第一控制單元,用于在所述起始LBA大于所述High Water時,直接執(zhí)行IO請求;
第二控制單元,用于在所述終止LBA小于所述High Water時,控制所述IO請求作用于數(shù)據(jù)遷移的目的第一數(shù)據(jù)區(qū)段;
第三控制單元,用于在所述High Water在所述起始LBA和所述終止LBA之間時,控制所述IO請求在該第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移不影響所述IO請求的操作時再執(zhí)行所述IO請求。
與現(xiàn)有技術(shù)相比,上述技術(shù)方案具有以下優(yōu)點(diǎn):
本發(fā)明所提供的一種數(shù)據(jù)遷移過程中對IO請求的控制方法,包括:將邏輯卷劃分為若干大小相等的第一數(shù)據(jù)區(qū)段,定義第一數(shù)據(jù)區(qū)段為數(shù)據(jù)遷移的單位;檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài);根據(jù)當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制IO請求的執(zhí)行動作。在本技術(shù)方案中,通過對邏輯卷進(jìn)行數(shù)據(jù)區(qū)段劃分,以第一數(shù)據(jù)區(qū)段作為數(shù)據(jù)遷移的單位,當(dāng)在數(shù)據(jù)遷移過程中,用戶恰好對遷移的存儲單元執(zhí)行IO請求,則判斷當(dāng)前IO請求對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移狀態(tài),判斷此時第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移和該IO請求是否沖突,然后根據(jù)判斷的結(jié)果來對IO請求進(jìn)行相應(yīng)控制,從而避免了對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作,在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一種具體實(shí)施方式所提供的數(shù)據(jù)遷移過程中對IO請求的控制方法流程圖;
圖2為本發(fā)明一種具體實(shí)施方式所提供的數(shù)據(jù)遷移過程中對IO請求的控制系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明的核心是提供一種數(shù)據(jù)遷移過程中對IO請求的控制方法及系統(tǒng),可以在數(shù)據(jù)遷移過程中對IO請求進(jìn)行控制,避免對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
為了使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式做詳細(xì)的說明。
在以下描述中闡述了具體細(xì)節(jié)以便于充分理解本發(fā)明。但是本發(fā)明能夠以多種不同于在此描述的其它方式來實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開的具體實(shí)施的限制。
請參考圖1,圖1為本發(fā)明一種具體實(shí)施方式所提供的數(shù)據(jù)遷移過程中對IO請求的控制方法流程圖。
本發(fā)明的一種具體實(shí)施方式提供了一種數(shù)據(jù)遷移過程中對IO請求的控制方法,包括:
S11:將邏輯卷劃分為若干大小相等的第一數(shù)據(jù)區(qū)段,定義第一數(shù)據(jù)區(qū)段為數(shù)據(jù)遷移的單位。
經(jīng)邏輯卷劃分為多個大小相等的第一數(shù)據(jù)區(qū)段Extent,每個Extent對應(yīng)實(shí)際的存儲區(qū)域。
S12:檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)。
即檢測當(dāng)前IO請求的數(shù)據(jù)塊對應(yīng)的存儲區(qū)域的數(shù)據(jù)的遷移狀態(tài),檢測該存儲區(qū)域的數(shù)據(jù)是否已完成遷移。
S13:根據(jù)當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制IO請求的執(zhí)行動作。
由于IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)的遷移狀態(tài)不同,對IO請求的影響不同。若該數(shù)據(jù)區(qū)域的數(shù)據(jù)未遷移,則表示對IO請求沒有影響,可以控制IO請求繼續(xù)執(zhí)行;若該數(shù)據(jù)區(qū)域的數(shù)據(jù)已遷移完成,則IO請求還需要作用于該數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移的目的Extent;若該數(shù)據(jù)區(qū)域的數(shù)據(jù)正在遷移,則會對請求造成很大的影響,此時若不控制IO請求,使其繼續(xù)執(zhí)行則可能會造成數(shù)據(jù)遷移之后數(shù)據(jù)不一致或者丟失破壞等情況,因此,此時應(yīng)該暫停IO請求,需要等待該數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)不會對IO請求造成影響時再繼續(xù)執(zhí)行IO請求的操作。
通過對邏輯卷進(jìn)行數(shù)據(jù)區(qū)段劃分,以第一數(shù)據(jù)區(qū)段作為數(shù)據(jù)遷移的單位,當(dāng)在數(shù)據(jù)遷移過程中,用戶恰好對遷移的存儲單元執(zhí)行IO請求,則判斷當(dāng)前IO請求對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移狀態(tài),判斷此時第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移和該IO請求是否沖突,然后根據(jù)判斷的結(jié)果來對IO請求進(jìn)行相應(yīng)控制,從而避免了對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作,在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
在本發(fā)明的一種實(shí)施方式中,檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài),包括:
將當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段分解為若干LBA,即每個Extent包含多個LBA(Logical Block Address),用Extent作為數(shù)據(jù)遷移的單位。
通過預(yù)設(shè)算法對該第一數(shù)據(jù)區(qū)段進(jìn)行遷移標(biāo)記,標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的LBA和未完成數(shù)據(jù)遷移的LBA。通過預(yù)設(shè)算法對該第一數(shù)據(jù)區(qū)段進(jìn)行遷移標(biāo)記,標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的LBA和未完成數(shù)據(jù)遷移的LBA,包括:通過High Water Mark算法來標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的位置,定義High Water以下的數(shù)據(jù)已完成數(shù)據(jù)遷移,High Water以上的數(shù)據(jù)未完成數(shù)據(jù)遷移。
當(dāng)一個Extent在做數(shù)據(jù)遷移時,此時如果存在用戶對該Extent進(jìn)行IO請求,則需要確定數(shù)據(jù)遷移是否影響該IO請求。因此,計算當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和終止LBA。
檢測當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
在本實(shí)施方式中,檢測當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài),優(yōu)選包括:
根據(jù)當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA與High Water的位置關(guān)系,判定當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
其中,根據(jù)當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制IO請求的執(zhí)行動作,包括:
若起始LBA大于High Water,表示該IO請求的數(shù)據(jù)區(qū)域還未遷移過,該Extent的數(shù)據(jù)遷移不會與該IO請求沖突,則直接正常執(zhí)行IO請求即可;
若終止LBA小于High Water,這時表示IO請求的數(shù)據(jù)區(qū)域已經(jīng)被遷移,為了保證數(shù)據(jù)的一致性,則控制IO請求作用于數(shù)據(jù)遷移的目的第一數(shù)據(jù)區(qū)段,即控制IO請求作用于數(shù)據(jù)遷移的目的Extent;
若High Water在起始LBA和終止LBA之間,表示遷移對IO請求有影響,需要等待該Extent的數(shù)據(jù)遷移不會對IO執(zhí)行產(chǎn)生影響再執(zhí)行IO請求,則控制IO請求在該第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移不影響IO請求的操作時再執(zhí)行IO請求。
在本實(shí)施方式中,以Extent為單位進(jìn)行數(shù)據(jù)遷移和IO請求,即每個IO請求作用于單個的Extent。采用了High Water Mark算法標(biāo)記Extent的數(shù)據(jù)遷移位置,實(shí)現(xiàn)數(shù)據(jù)遷移過程中對IO請求的控制,最大限度地降低數(shù)據(jù)遷移對IO請求的影響。避免對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
請參考圖2,圖2為本發(fā)明一種具體實(shí)施方式所提供的數(shù)據(jù)遷移過程中對IO請求的控制系統(tǒng)結(jié)構(gòu)示意圖。
相應(yīng)地,本發(fā)明一種實(shí)施方式還提供了一種數(shù)據(jù)遷移過程中對IO請求的控制系統(tǒng),包括:
劃分模塊1,用于將邏輯卷劃分為若干大小相等的第一數(shù)據(jù)區(qū)段,定義第一數(shù)據(jù)區(qū)段為數(shù)據(jù)遷移的單位;
檢測模塊2,用于檢測當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài);
控制模塊3,用于根據(jù)當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)控制IO請求的執(zhí)行動作。
通過對邏輯卷進(jìn)行數(shù)據(jù)區(qū)段劃分,以第一數(shù)據(jù)區(qū)段作為數(shù)據(jù)遷移的單位,當(dāng)在數(shù)據(jù)遷移過程中,用戶恰好對遷移的存儲單元執(zhí)行IO請求,則判斷當(dāng)前IO請求對應(yīng)的第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移狀態(tài),判斷此時第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移和該IO請求是否沖突,然后根據(jù)判斷的結(jié)果來對IO請求進(jìn)行相應(yīng)控制,從而避免了對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作,在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
在本發(fā)明的一種實(shí)施方式中,檢測模塊包括:分解單元,用于將當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段分解為若干LBA;標(biāo)記單元,用于通過預(yù)設(shè)算法對該第一數(shù)據(jù)區(qū)段進(jìn)行遷移標(biāo)記,標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的LBA和未完成數(shù)據(jù)遷移的LBA;計算單元,用于計算當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和終止LBA;檢測單元,用于檢測當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
優(yōu)選標(biāo)記單元為High Water標(biāo)記單元,用于通過High Water Mark算法來標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的位置,定義High Water以下的數(shù)據(jù)已完成數(shù)據(jù)遷移,High Water以上的數(shù)據(jù)未完成數(shù)據(jù)遷移。
進(jìn)一步地,檢測單元包括:對比子單元,用于比對當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA與High Water的位置關(guān)系;判定子單元,用于根據(jù)當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA與High Water的位置關(guān)系,判定當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和/或終止LBA所對應(yīng)的第一數(shù)據(jù)區(qū)段的LBA的數(shù)據(jù)遷移狀態(tài)。
控制模塊包括:第一控制單元,用于在起始LBA大于High Water時,直接執(zhí)行IO請求;第二控制單元,用于在終止LBA小于High Water時,控制IO請求作用于數(shù)據(jù)遷移的目的第一數(shù)據(jù)區(qū)段;第三控制單元,用于在High Water在起始LBA和終止LBA之間時,控制IO請求在該第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移不影響IO請求的操作時再執(zhí)行IO請求。
在本實(shí)施方式中,將當(dāng)前IO請求的數(shù)據(jù)塊所對應(yīng)的第一數(shù)據(jù)區(qū)段分解為若干LBA,即每個Extent包含多個LBA(Logical Block Address),用Extent作為數(shù)據(jù)遷移的單位。以Extent為單位進(jìn)行數(shù)據(jù)遷移和IO請求,即每個IO請求作用于單個的Extent。
通過High Water Mark算法來標(biāo)記該第一數(shù)據(jù)區(qū)段中已完成數(shù)據(jù)遷移的位置,定義High Water以下的數(shù)據(jù)已完成數(shù)據(jù)遷移,High Water以上的數(shù)據(jù)未完成數(shù)據(jù)遷移。當(dāng)一個Extent在做數(shù)據(jù)遷移時,此時如果存在用戶對該Extent進(jìn)行IO請求,則需要確定數(shù)據(jù)遷移是否影響該IO請求。因此,計算當(dāng)前IO請求的數(shù)據(jù)塊的起始LBA和終止LBA。若起始LBA大于High Water,表示該IO請求的數(shù)據(jù)區(qū)域還未遷移過,該Extent的數(shù)據(jù)遷移不會與該IO請求沖突,則直接正常執(zhí)行IO請求即可;若終止LBA小于High Water,這時表示IO請求的數(shù)據(jù)區(qū)域已經(jīng)被遷移,為了保證數(shù)據(jù)的一致性,則控制IO請求作用于數(shù)據(jù)遷移的目的第一數(shù)據(jù)區(qū)段,即控制IO請求作用于數(shù)據(jù)遷移的目的Extent;若High Water在起始LBA和終止LBA之間,表示遷移對IO請求有影響,需要等待該Extent的數(shù)據(jù)遷移不會對IO執(zhí)行產(chǎn)生影響再執(zhí)行IO請求,則控制IO請求在該第一數(shù)據(jù)區(qū)段的數(shù)據(jù)遷移不影響IO請求的操作時再執(zhí)行IO請求。
在本實(shí)施方式中,以Extent為單位進(jìn)行數(shù)據(jù)遷移和IO請求,采用了High Water Mark算法標(biāo)記Extent的數(shù)據(jù)遷移位置,實(shí)現(xiàn)數(shù)據(jù)遷移過程中對IO請求的控制,最大限度地降低數(shù)據(jù)遷移對IO請求的影響。避免對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
綜上所述,本發(fā)明所提供的數(shù)據(jù)遷移過程中對IO請求的控制方法及系統(tǒng),以Extent為單位進(jìn)行數(shù)據(jù)遷移和IO請求,采用了High Water Mark算法標(biāo)記Extent的數(shù)據(jù)遷移位置,可以在數(shù)據(jù)遷移過程中根據(jù)當(dāng)前IO請求對應(yīng)的數(shù)據(jù)區(qū)域的數(shù)據(jù)遷移狀態(tài)獲知對IO請求的影響,從而控制IO請求的執(zhí)行進(jìn)程,避免對正在進(jìn)行遷移的存儲單元執(zhí)行IO操作在成遷移完成后的數(shù)據(jù)不一致、丟失和破壞等情況的出現(xiàn)。
以上對本發(fā)明所提供的一種數(shù)據(jù)遷移過程中對IO請求的控制方法及系統(tǒng)進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。