一種遠程復制記錄數(shù)據(jù)變化的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)備份技術(shù),具體涉及一種遠程復制記錄數(shù)據(jù)變化的方法。
【背景技術(shù)】
[0002]在遠程復制中,數(shù)據(jù)在寫入源卷同時需要傳輸數(shù)據(jù)到備份主機并寫入備份卷中,如果此時主節(jié)點發(fā)生異常,存在一些數(shù)據(jù)已經(jīng)寫入源卷,但還沒有傳輸?shù)絺浞荻?,這樣會造成源卷與備份卷數(shù)據(jù)將是不一致的,反之,如果備份卷發(fā)生異常,寫到源卷的數(shù)據(jù)無法在備份卷備份,同樣會造成數(shù)據(jù)不一致。當前的主流實現(xiàn)使用位圖記錄變化塊,如當備份端發(fā)生異常時,源卷的數(shù)據(jù)變化使用位圖元數(shù)據(jù)記錄,當備份卷恢復后,源卷可以根據(jù)位圖元數(shù)據(jù)查找變化的數(shù)據(jù)塊,然后將源卷的數(shù)據(jù)同步到備份卷中去,每個位圖位代表的數(shù)據(jù)塊大小為一個chunk,當chunk長度太大時,需要同步的數(shù)據(jù)量較大,原因是如果只改變chunk的一個bit位,也同樣需要傳輸整個chunk的大小,在數(shù)據(jù)寫時沒有太大問題,但當隨機寫時,會造成傳輸大量無效數(shù)據(jù)。chunk長度太小時會導致一個位圖位表示的數(shù)據(jù)長度短,當出現(xiàn)海量數(shù)據(jù)量時,位圖元數(shù)據(jù)所占用的存儲開銷也是巨大的,同時位圖元數(shù)據(jù)的讀寫對同步性能會造成大的影響。
【發(fā)明內(nèi)容】
[0003]為了解決上述現(xiàn)有技術(shù)中存在的技術(shù)問題,提出一種遠程復制記錄數(shù)據(jù)變化的方法,包括:
[0004]S1:判斷內(nèi)存中的數(shù)據(jù)塊內(nèi)容發(fā)生變化;
[0005]S2:使用位圖記錄內(nèi)容發(fā)生變化的數(shù)據(jù)塊,構(gòu)成新位圖記錄;
[0006]S3:確定當前最久未被使用的活動日志,將該活動日志中已經(jīng)保存的位圖記錄所對應的數(shù)據(jù)塊內(nèi)容寫入磁盤,將該活動日志的狀態(tài)記錄為當前正使用;
[0007]S4:將所述新位圖記錄保存到所述當前正使用狀態(tài)的活動日志。
[0008]進一步:
[0009]在所述步驟SI前還包括在內(nèi)存中申請對應于所述活動日志的活動塊。
[0010]進一步:
[0011]所述活動塊按照使用狀態(tài)的不同被依次存放在鏈表中,所述當前正使用狀態(tài)的活動日志所對應的數(shù)據(jù)塊位于所述鏈表的頭部,所述鏈表的尾部記錄當前最久未被使用的活動日志所對應的數(shù)據(jù)塊。
[0012]本發(fā)明的有益效果是:當內(nèi)存中的數(shù)據(jù)塊的內(nèi)容發(fā)生變化時,不是立刻寫入磁盤中進行同步備份,而是使用位圖記錄發(fā)生變化的數(shù)據(jù)塊,將位圖記錄到活動日志中。然后,將當前最久未被使用的活動日志中已經(jīng)記錄的位圖所對應的數(shù)據(jù)塊的內(nèi)容寫入磁盤,這樣就實現(xiàn)了更新數(shù)據(jù)塊的延遲寫入,避免了一有數(shù)據(jù)塊內(nèi)容發(fā)生更新就執(zhí)行寫磁盤,減少了寫磁盤的頻率。
【附圖說明】
[0013]圖1為本發(fā)明提出的一種遠程復制記錄數(shù)據(jù)變化的方法的流程;
[0014]圖2為本發(fā)明提出的鏈表結(jié)構(gòu)。
【具體實施方式】
[0015]下面結(jié)合附圖對本發(fā)明的技術(shù)方案進行詳細說明。
[0016]本發(fā)明提出的技術(shù)方案使用大粒度的活動日志元數(shù)據(jù)和小粒度的位圖元數(shù)據(jù)共同記錄數(shù)據(jù)塊的變化,活動日志記錄代表4MB大小的數(shù)據(jù)塊,位圖代表4K大小的數(shù)據(jù)塊,每個活動日志可以表示IK個位圖位,活動日志為確定的數(shù)目,可以配置。當發(fā)生數(shù)據(jù)寫導致數(shù)據(jù)塊發(fā)生變化時需要更改內(nèi)存中數(shù)據(jù)塊對應的活動日志和位圖記錄,活動日志被標識為活動狀態(tài),當有新數(shù)據(jù)寫導致需要使用活動日志記錄數(shù)據(jù)塊變化,而所有的活動日志狀態(tài)都為活動狀態(tài)時,選擇最近沒有被使用的活動日志并將活動日志之前代表的位圖刷寫到元數(shù)據(jù)卷中。本發(fā)明提出的技術(shù)方案延遲了位圖元數(shù)據(jù)刷寫到元數(shù)據(jù)卷的頻率,提高數(shù)據(jù)寫性能。
[0017]參見附圖1,其示出了本發(fā)明提出的一種遠程復制記錄數(shù)據(jù)變化的方法的流程圖。詳細描述如下:
[0018]S1:初始化活動日志;
[0019]活動日志存儲在源數(shù)據(jù)盤中,根據(jù)源數(shù)據(jù)盤的超級塊中記錄的數(shù)據(jù),可以找到活動日志在源數(shù)據(jù)盤的偏移地址。活動日志在磁盤中是以頁(4KB)為單位存儲的,即內(nèi)存將活動日志的信息組織成4KB大小的頁,向磁盤進行寫操作,其中主要存放的是內(nèi)存中活動塊的塊號信息。
[0020]活動日志在內(nèi)存中體現(xiàn)為活動塊,活動日志的初始化包括:
[0021]確定活動塊數(shù)量:
[0022]1、越少的活動塊總數(shù)意味著主端恢復后較少的數(shù)據(jù)同步,同時也意味活動日志對于內(nèi)存的較少占用;但同時因為活動塊總數(shù)小,活動塊和非活動塊的換入換出操作就越多,這造成了對于磁盤上的活動日志頻繁的寫操作,一定程度上影響了總體的寫性能。
[0023]2、越多的活動塊減少了塊換入換出的操作,但主端恢復意味著需要更多的同步時間。
[0024]因此活動塊總數(shù)和寫速率成正比,和網(wǎng)絡傳輸速率成反比。因為活動塊信息以哈希表的形式存在于內(nèi)存中,因此活動塊總數(shù)建議設置為素數(shù)。
[0025]根據(jù)實際情況,可以根據(jù)以下公式計算活動塊數(shù)量:
[0026]N = Rt/m (I)
[0027]其中N代表活動塊數(shù)量,R為傳輸速率(以MB/S為單位),t為期望完成同步的時間,m為一個活動塊中活動日志條目代表的數(shù)據(jù)塊的大小,一般為4M,也就是活動塊的字節(jié)容量大小。
[0028]在初始化活動日志時,要申請N個活動塊,N為根據(jù)上述公式(I)定義好的活動塊總數(shù)?;顒訅K中定義了哈希表信息,LRU相關(guān)鏈表信息,引用計數(shù)及活動塊號等信息。
[0029]S2:判斷內(nèi)存中的數(shù)據(jù)塊的內(nèi)容是否發(fā)生變化,在確定數(shù)據(jù)塊的內(nèi)容發(fā)生變化時,使用位圖記錄內(nèi)容發(fā)生變化的數(shù)據(jù)塊,構(gòu)成新位圖記錄;
[0030]S3:確定當前最久未被使用的活動日志;
[0031]本步驟中使用LRU相關(guān)鏈表記錄活動日志的使用情況。首先介紹LRU相關(guān)鏈表。
[0032]參見附圖2,這里利用四個雙向鏈表來保證本發(fā)明提出的LRU策略,分別是free_list,lru_list,to_be_changed_list,in_use_list。
[0033]free_list:初始化活動日志時,所有活動日志申請的活動塊都位于這個鏈表中,并且其活動塊號信息為空。
[0034]lru_list:當位于in_use_list中活動塊的引用計數(shù)為零時,該活動塊被移入lru_list中,活動塊號信息保持不變。
[0035]to_be_changed_list:當free_list和lru_list中的活動塊即將被使用時,將該活動塊移入這個鏈表中,等待使用。
[0036]in_use_list:當前處于內(nèi)存中、正在被使用的活動塊位于該鏈表中。
[0037]當free_list為空時,將會把lru_list中鏈表尾的活動塊置為活動狀態(tài),因為lru_list每次都是從鏈表頭插入,表尾保存的即是最近最久未使用的活動塊。
[0038]其次,引入哈希表概念,所述哈希表用于索引活動塊,表頭總數(shù)為活動塊總數(shù)。
[0039]S4:將所述最久未被使用的活動日志中已保存的位圖記錄所對應的數(shù)據(jù)塊內(nèi)容寫入磁盤,將該活動日志的狀態(tài)記錄為當前正使用;
[0040]本步驟中,將當前最久未被使用的活動日志中已經(jīng)記錄的位圖所對應的數(shù)據(jù)塊的內(nèi)容寫入磁盤,這樣就實現(xiàn)了更新數(shù)據(jù)塊的延遲寫入,避免了一有數(shù)據(jù)塊內(nèi)容發(fā)生更新就執(zhí)行寫磁盤,減少了寫磁盤的頻率。
[0041]S5:將上述新位圖記錄保存到該當前正使用狀態(tài)的活動日志,返回步驟S2,以執(zhí)行下一輪數(shù)據(jù)塊更新記錄。
【主權(quán)項】
1.一種遠程復制記錄數(shù)據(jù)變化的方法,其特征在于,包括: 51:判斷內(nèi)存中的數(shù)據(jù)塊內(nèi)容發(fā)生變化; 52:使用位圖記錄內(nèi)容發(fā)生變化的數(shù)據(jù)塊,構(gòu)成新位圖記錄; 53:確定當前最久未被使用的活動日志,將該活動日志中已經(jīng)保存的位圖記錄所對應的數(shù)據(jù)塊內(nèi)容寫入磁盤,將該活動日志的狀態(tài)記錄為當前正使用; 54:將所述新位圖記錄保存到所述當前正使用狀態(tài)的活動日志。
2.如權(quán)利要求1所述的方法,其特征在于: 在所述步驟SI前還包括在內(nèi)存中申請對應于所述活動日志的活動塊。
3.如權(quán)利要求2所述的方法,其特征在于: 所述活動塊按照使用狀態(tài)的不同被依次存放在鏈表中,所述當前正使用狀態(tài)的活動日志所對應的數(shù)據(jù)塊位于所述鏈表的頭部,所述鏈表的尾部記錄當前最久未被使用的活動日志所對應的數(shù)據(jù)塊。
【專利摘要】提出一種遠程復制記錄數(shù)據(jù)變化的方法,使用位圖記錄內(nèi)容發(fā)生變化的數(shù)據(jù)塊,將位圖記錄在活動日志中;確定當前最久未被使用的活動日志,將該活動日志中已經(jīng)保存的位圖記錄所對應的數(shù)據(jù)塊內(nèi)容寫入磁盤。所述方法減少了由于數(shù)據(jù)更新導致的寫磁盤頻率。
【IPC分類】G06F3-06, G06F11-14
【公開號】CN104615505
【申請?zhí)枴緾N201510072832
【發(fā)明人】張在理, 孟憲偉
【申請人】浪潮(北京)電子信息產(chǎn)業(yè)有限公司
【公開日】2015年5月13日
【申請日】2015年2月11日