專利名稱:一種自適應(yīng)應(yīng)用負(fù)載變化的快照生成方法
技術(shù)領(lǐng)域:
一種自適應(yīng)應(yīng)用負(fù)載變化的快照生成方法屬于計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,具體涉及其 中的快照自動(dòng)生成領(lǐng)域。
背景技術(shù):
隨著信息技術(shù)的飛速發(fā)展,人們要處理的數(shù)據(jù)量不斷增加,這對(duì)存儲(chǔ)系統(tǒng)可靠性 和可用性提出了巨大需求??煺帐顷P(guān)于指定數(shù)據(jù)集的一個(gè)完全可用的拷貝,該拷貝包括相 應(yīng)數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)的印象。應(yīng)用快照技術(shù)能夠保留存儲(chǔ)系統(tǒng)不同時(shí)刻的數(shù)據(jù),一方面在 發(fā)生故障時(shí)能將系統(tǒng)數(shù)據(jù)恢復(fù)到過去某個(gè)時(shí)間點(diǎn),提高系統(tǒng)可靠性,另一方面可以實(shí)現(xiàn)在 線數(shù)據(jù)備份。快照技術(shù)廣泛應(yīng)用在各種大規(guī)模存儲(chǔ)系統(tǒng)中以提供數(shù)據(jù)備份和數(shù)據(jù)恢復(fù)支 持。隨著存儲(chǔ)系統(tǒng)規(guī)模的不斷擴(kuò)大,快照的數(shù)量和進(jìn)行快照的頻度也不斷增加,以人 工手動(dòng)輸入命令來進(jìn)行快照的方式已經(jīng)不能適應(yīng)數(shù)據(jù)保護(hù)的需要。定時(shí)生成快照的方式 每隔一段時(shí)間自動(dòng)生成快照,簡(jiǎn)化了快照過程中的人工操作,但是生成快照的時(shí)間間隔是 固定的,不能適應(yīng)應(yīng)用負(fù)載的動(dòng)態(tài)化,如果某一間隔內(nèi)應(yīng)用沒有對(duì)源數(shù)據(jù)區(qū)進(jìn)行修改,那新 創(chuàng)建快照將造成資源的浪費(fèi),如果某一間隔應(yīng)用對(duì)源數(shù)據(jù)區(qū)的修改非常頻繁,該間隔內(nèi)只 創(chuàng)建一個(gè)快照則將造成大量歷史數(shù)據(jù)的丟失。本發(fā)明提出的自適應(yīng)應(yīng)用負(fù)載變化的快照生 成方法,隨著源數(shù)據(jù)區(qū)上應(yīng)用負(fù)載的變化,以動(dòng)態(tài)的時(shí)間間隔自動(dòng)生成快照,并具有以下特占.
^ \\\ ·1.負(fù)載變化的自適應(yīng)性當(dāng)應(yīng)用負(fù)載對(duì)數(shù)據(jù)的修改頻度提高時(shí),生成快照的時(shí)間 間隔縮短,有效地保護(hù)歷史數(shù)據(jù),當(dāng)應(yīng)用負(fù)載對(duì)數(shù)據(jù)的修改頻度降低時(shí),生成快照的間隔延 長(zhǎng),節(jié)省存儲(chǔ)資源;2.簡(jiǎn)單的計(jì)數(shù)結(jié)構(gòu)采用占用空間很小的位圖記錄數(shù)據(jù)修改頻度,并將位圖緩 存,使其查找和修改操作對(duì)讀寫性能的影響幾乎可以忽略;3.高度的靈活性提供了基于平均修改數(shù)和最大修改數(shù)的快照自動(dòng)生成策略,通 過靈活選擇策略和配置不同的參數(shù),可以滿足各種應(yīng)用負(fù)載的數(shù)據(jù)保護(hù)要求。
發(fā)明內(nèi)容
本發(fā)明的目的是設(shè)計(jì)一種自適應(yīng)應(yīng)用負(fù)載變化的快照生成方法,根據(jù)被保護(hù)數(shù)據(jù) 的修改頻率等信息調(diào)節(jié)快照的生成頻率,通過本方法既能達(dá)到自動(dòng)保留有用數(shù)據(jù)的要求, 又能保證較好的系統(tǒng)性能與空間利用率。本發(fā)明構(gòu)建在采用寫時(shí)拷貝(Copy-0n-Write,C0W)技術(shù)的快照之上。寫時(shí)拷貝快 照技術(shù),在創(chuàng)建快照時(shí),無需保存任何數(shù)據(jù),創(chuàng)建過程瞬間即可完成,由于其只保存要更改 的數(shù)據(jù)塊,這種基于數(shù)據(jù)塊改變的增量方式最大限度地減少了對(duì)存儲(chǔ)容量的消耗?;趯?時(shí)拷貝方法的快照系統(tǒng),每次創(chuàng)建快照后,主機(jī)發(fā)送的寫請(qǐng)求若是第一次修改源數(shù)據(jù)區(qū)中 的數(shù)據(jù),一般要分解為以下三個(gè)步驟1.從源數(shù)據(jù)區(qū)中讀出需要快照保存的數(shù)據(jù);2.將此快照數(shù)據(jù)寫入快照區(qū);3.將主機(jī)發(fā)送的新數(shù)據(jù)寫入源數(shù)據(jù)區(qū)相應(yīng)位置。本發(fā)明的特征在于,所述方法是在用戶端依次按以下步驟實(shí)現(xiàn)的步驟(1).用戶端的初始化,步驟(1. 1).用戶通過應(yīng)用程序接口 API在快照計(jì)算機(jī)中設(shè)定快照的數(shù)據(jù)結(jié)構(gòu),包 括元數(shù)據(jù)區(qū)、索引區(qū)、數(shù)據(jù)區(qū)和計(jì)數(shù)區(qū),其中元數(shù)據(jù)區(qū)包括用戶賦予的快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,該快照中數(shù)據(jù)塊 的大小,數(shù)據(jù)區(qū)的長(zhǎng)度以及標(biāo)識(shí)位,其中源數(shù)據(jù)區(qū),存儲(chǔ)用戶訪問請(qǐng)求的數(shù)據(jù),對(duì)源數(shù)據(jù)區(qū)創(chuàng)建一個(gè)快照將會(huì)保留一個(gè)快 照創(chuàng)建時(shí)刻源數(shù)據(jù)區(qū)的映像,源數(shù)據(jù)區(qū)在邏輯上是按照所述元數(shù)據(jù)區(qū)中所述數(shù)據(jù)塊的大小 分為多個(gè)數(shù)據(jù)塊,數(shù)據(jù)塊的編號(hào)從1開始,其分塊號(hào)依次為1,2,3,…,N,N為源數(shù)據(jù)區(qū)中數(shù) 據(jù)塊數(shù)目,這個(gè)編號(hào)就是源數(shù)據(jù)區(qū)的分塊號(hào),標(biāo)識(shí)位,值為1時(shí),表示快照是對(duì)源數(shù)據(jù)區(qū)最新創(chuàng)建的快照,為0,則不是,當(dāng)對(duì)源 數(shù)據(jù)區(qū)新創(chuàng)建一個(gè)快照時(shí),將新創(chuàng)建的快照的標(biāo)識(shí)位置為1,并將對(duì)源數(shù)據(jù)區(qū)創(chuàng)建的其它快 照的標(biāo)識(shí)位置為0索引區(qū),記錄源數(shù)據(jù)區(qū)被修改過的數(shù)據(jù)塊的分塊號(hào)以及該數(shù)據(jù)塊原來的數(shù)據(jù)在所 述數(shù)據(jù)區(qū)存放位置的新分塊號(hào),數(shù)據(jù)區(qū),存儲(chǔ)快照需要保存的數(shù)據(jù),在邏輯上按照所述元數(shù)據(jù)區(qū)中所述數(shù)據(jù)塊的 大小分為多個(gè)數(shù)據(jù)塊,塊大小與所述源數(shù)據(jù)區(qū)中每個(gè)數(shù)據(jù)塊的塊大小相同,初始化時(shí)數(shù)據(jù) 區(qū)的所有數(shù)據(jù)塊都標(biāo)記為未被使用,當(dāng)所述源數(shù)據(jù)區(qū)中的一個(gè)數(shù)據(jù)塊在快照創(chuàng)建后第一次 被修改,這個(gè)數(shù)據(jù)塊原來的數(shù)據(jù)將被存放到數(shù)據(jù)區(qū)中一個(gè)未被使用的數(shù)據(jù)塊中,相應(yīng)的數(shù) 據(jù)區(qū)中的數(shù)據(jù)塊標(biāo)記為已被使用,計(jì)數(shù)區(qū),用位圖的方式存儲(chǔ)所述源數(shù)據(jù)區(qū)中各數(shù)據(jù)塊被修改的次數(shù),所述源數(shù)據(jù) 區(qū)中第η個(gè)數(shù)據(jù)塊被修改的次數(shù)用計(jì)數(shù)區(qū)中第η位的值Wn表示,η = 1,2,…,N,步驟(1. 2).用戶通過應(yīng)用程序接口 API在所述快照計(jì)算機(jī)中創(chuàng)建用以創(chuàng)建新快 照的守護(hù)進(jìn)程Daemon,并指定守護(hù)進(jìn)程Daemon在創(chuàng)建新快照時(shí)所用到的參數(shù)的值,這些參 數(shù)包括所述快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,數(shù)據(jù)塊的大小,數(shù)據(jù)區(qū)的長(zhǎng)度,步驟(2).當(dāng)所述快照計(jì)算機(jī)通過應(yīng)用程序接口 API接收到用戶對(duì)源數(shù)據(jù)區(qū)的寫 入請(qǐng)求和寫入數(shù)據(jù)時(shí),依次執(zhí)行以下步驟步驟(2. 1).找到對(duì)所述源數(shù)據(jù)區(qū)最新創(chuàng)建的快照,即標(biāo)識(shí)位為1的快照,步驟(2. 2).將含有起始地址和長(zhǎng)度的所述寫入數(shù)據(jù),按步驟(2. 1)所述快照中的 所述數(shù)據(jù)塊的大小分為多個(gè)寫入數(shù)據(jù)塊,每個(gè)寫入數(shù)據(jù)塊對(duì)應(yīng)一個(gè)源數(shù)據(jù)區(qū)的數(shù)據(jù)塊,步驟(2. 3).對(duì)步驟(2. 2)所述的每個(gè)寫入數(shù)據(jù)塊,按其對(duì)應(yīng)的源數(shù)據(jù)區(qū)數(shù)據(jù)塊的 分塊號(hào)在步驟(2. 1)所述快照的索引區(qū)中查找,若存在該分塊號(hào),則說明源數(shù)據(jù)區(qū)數(shù)據(jù)塊 原來的數(shù)據(jù)已經(jīng)被保存在數(shù)據(jù)區(qū)中,轉(zhuǎn)步驟(2. 6),若不存在,則執(zhí)行下一步驟(2. 4),步驟(2. 4).把步驟(2. 3)所述寫入數(shù)據(jù)塊對(duì)應(yīng)的源數(shù)據(jù)區(qū)數(shù)據(jù)塊中的數(shù)據(jù)拷貝 到步驟(2. 1)所述快照的數(shù)據(jù)區(qū),修改所述快照的索引區(qū)中的分塊號(hào),步驟(2. 5).再把步驟(2. 3)所述寫入數(shù)據(jù)塊的數(shù)據(jù)寫入其對(duì)應(yīng)的源數(shù)據(jù)區(qū)數(shù)據(jù) 塊中,步驟(2. 6).把所述快照的計(jì)數(shù)區(qū)中與步驟(2. 3)所述源數(shù)據(jù)區(qū)數(shù)據(jù)塊的分塊號(hào)對(duì)應(yīng)的修改次數(shù)位的值加1,步驟(2. 7).判斷步驟(2. 2)所述的所有寫入數(shù)據(jù)塊是否都處理完畢,是,則結(jié)束, 否則,重復(fù)步驟(2. 3) 步驟(2. 6),步驟(2. 8).根據(jù)用戶設(shè)定的判定策略及閾值確定是否需要生成新快照若用戶設(shè)定最大平均修改次數(shù)策略,則判斷源數(shù)據(jù)區(qū)各數(shù)據(jù)塊的平均修改次數(shù)是 否超過設(shè)定的平均修改次數(shù)閾值,若超過,則需要生成新快照,否則,不需要,若用戶設(shè)定最大修改次數(shù)策略,則判斷所述源數(shù)據(jù)區(qū)各數(shù)據(jù)塊的修改次數(shù)中最大 的修改次數(shù)是否大于設(shè)定的最大修改次數(shù)閾值,若為大,則需要生成新快照,若為小或等 于,則不需要生成新快照,當(dāng)判斷為需要生成新快照時(shí),執(zhí)行步驟(2. 9),否則,轉(zhuǎn)步驟(2. 10),步驟(2.9).所述快照計(jì)算機(jī)利用所述守護(hù)進(jìn)程Daemon創(chuàng)建新快照,其步驟如 下步驟(2. 9. 1).停止所述源數(shù)據(jù)區(qū)的讀寫服務(wù),步驟(2. 9. 2).按照步驟(1. 2)中用戶設(shè)定的快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱, 數(shù)據(jù)塊的大小,快照的數(shù)據(jù)區(qū)長(zhǎng)度,創(chuàng)建新快照結(jié)構(gòu),并建立與所述源數(shù)據(jù)區(qū)的映射關(guān)系,步驟(2. 9. 3).在內(nèi)存中建立新快照的計(jì)數(shù)區(qū)緩存,步驟(2. 9. 4).恢復(fù)所述源數(shù)據(jù)區(qū)的讀寫服務(wù),步驟(2.10).結(jié)束。通過實(shí)驗(yàn)表明,該方法在源數(shù)據(jù)區(qū)數(shù)據(jù)修改頻繁時(shí)生成快照的時(shí)間間隔短,在數(shù) 據(jù)較少時(shí)生成快照的時(shí)間間隔延長(zhǎng),一段時(shí)間內(nèi)所生成的多個(gè)快照,每個(gè)快照卷所保留的 歷史數(shù)據(jù)量基本相同,能夠適應(yīng)應(yīng)用負(fù)載的動(dòng)態(tài)變化。另外由于計(jì)數(shù)區(qū)以位圖的方式存儲(chǔ) 各個(gè)塊的修改計(jì)數(shù),占用的空間很小,能夠?qū)⒂?jì)數(shù)區(qū)數(shù)據(jù)全部緩存以提高訪問速度,增加的 計(jì)數(shù)區(qū)的查找和修改操作給讀寫性能帶來的影響幾乎可以忽略。
圖1.快照的數(shù)據(jù)結(jié)構(gòu)圖。
圖2.元數(shù)據(jù)區(qū)的數(shù)據(jù)結(jié)構(gòu)
圖3.源數(shù)據(jù)區(qū)寫請(qǐng)求執(zhí)行的流程圖。
圖4.增加計(jì)數(shù)和判定是否生成快照的流程圖。
圖5.系統(tǒng)結(jié)構(gòu)圖。
圖6.內(nèi)核中創(chuàng)建快照的流程圖。
具體實(shí)施例方式本發(fā)明的核心是通過快照的計(jì)數(shù)區(qū)記錄各個(gè)源數(shù)據(jù)區(qū)各個(gè)塊的修改次數(shù),以此作 為判斷源數(shù)據(jù)區(qū)應(yīng)用負(fù)載高低的依據(jù),動(dòng)態(tài)地生成新快照,實(shí)現(xiàn)數(shù)據(jù)按需保護(hù)??煺盏慕Y(jié)構(gòu)如圖1所示,元數(shù)據(jù)區(qū)、索引區(qū)、數(shù)據(jù)區(qū)和計(jì)數(shù)區(qū),其中元數(shù)據(jù)區(qū)包括用戶賦予的快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,該快照的數(shù)據(jù)塊 的大小,數(shù)據(jù)區(qū)的長(zhǎng)度以及標(biāo)識(shí)位,其結(jié)構(gòu)如圖2所示。其中,源數(shù)據(jù)區(qū),存儲(chǔ)用戶訪問請(qǐng)求 的數(shù)據(jù),對(duì)源數(shù)據(jù)區(qū)創(chuàng)建一個(gè)快照將保留一個(gè)快照創(chuàng)建時(shí)刻源數(shù)據(jù)區(qū)的映像,源數(shù)據(jù)區(qū)在邏輯上是按照所述元數(shù)據(jù)區(qū)中數(shù)據(jù)塊的大小分為多個(gè)數(shù)據(jù)塊,數(shù)據(jù)塊的編號(hào)從1開始,其 分塊號(hào)依次為1,2,3,…,N,這個(gè)編號(hào)就是源數(shù)據(jù)區(qū)的分塊號(hào);標(biāo)識(shí)位,它的值為1時(shí),表示 快照是對(duì)源數(shù)據(jù)區(qū)最新創(chuàng)建的快照,為0則不是,當(dāng)對(duì)源數(shù)據(jù)區(qū)新創(chuàng)建一個(gè)快照時(shí),將新創(chuàng) 建的快照的標(biāo)識(shí)位置為1,并將對(duì)源數(shù)據(jù)區(qū)創(chuàng)建的其它快照的標(biāo)識(shí)位置為0索引區(qū),記錄源數(shù)據(jù)區(qū)被修改過的塊的分塊號(hào)以及該塊原來的數(shù)據(jù)在數(shù)據(jù)區(qū)存放 位置的新分塊號(hào);數(shù)據(jù)區(qū),存儲(chǔ)快照需要保存的數(shù)據(jù),它在邏輯上按照所述元數(shù)據(jù)區(qū)中數(shù)據(jù)塊的大 小分為多個(gè)數(shù)據(jù)塊,塊大小與所述源數(shù)據(jù)區(qū)中每個(gè)數(shù)據(jù)塊的塊大小相同,初始化時(shí)數(shù)據(jù)區(qū) 的所有塊都標(biāo)記為未被使用,當(dāng)所述源數(shù)據(jù)區(qū)中的一個(gè)數(shù)據(jù)塊在快照創(chuàng)建后第一次被修 改,這個(gè)數(shù)據(jù)塊原來的數(shù)據(jù)將被存放到數(shù)據(jù)區(qū)中一個(gè)未被使用的塊中,相應(yīng)的數(shù)據(jù)區(qū)中的 塊標(biāo)記為已被使用;計(jì)數(shù)區(qū),以位圖的方式存儲(chǔ)所述源數(shù)據(jù)區(qū)中各數(shù)據(jù)塊被修改的次數(shù),所述源數(shù)據(jù) 區(qū)中第η個(gè)數(shù)據(jù)塊被修改的次數(shù)用位圖中的第η位表示,η = 1,2,…,N,N為源數(shù)據(jù)區(qū)中 數(shù)據(jù)塊數(shù)目。當(dāng)快照計(jì)算機(jī)接收到對(duì)源數(shù)據(jù)區(qū)的寫請(qǐng)求時(shí),順序進(jìn)行圖3所示流程(1)找到對(duì)應(yīng)所述源數(shù)據(jù)區(qū)的最新創(chuàng)建的快照,即標(biāo)識(shí)位為1的快照(2)根據(jù)步驟1中所述快照設(shè)定的塊大小,將含有起始地址和長(zhǎng)度的寫請(qǐng)求數(shù)據(jù) 按快照設(shè)定的數(shù)據(jù)塊大小分為多個(gè)寫入數(shù)據(jù)塊,每個(gè)寫入數(shù)據(jù)塊對(duì)應(yīng)一個(gè)源數(shù)據(jù)區(qū)的數(shù)據(jù) 塊;(3)對(duì)每個(gè)寫入數(shù)據(jù)塊,按其對(duì)應(yīng)源數(shù)據(jù)區(qū)數(shù)據(jù)塊的分塊號(hào)在快照索引區(qū)中查找, 若已存在,則轉(zhuǎn)步驟5,否則按順序執(zhí)行;(4)將源數(shù)據(jù)區(qū)上需要保存的數(shù)據(jù)拷貝到快照的數(shù)據(jù)區(qū),更新快照索引區(qū);(5)將寫入數(shù)據(jù)塊的數(shù)據(jù)寫入源數(shù)據(jù)區(qū);(6)把所述快照的計(jì)數(shù)區(qū)中與步驟3所述源數(shù)據(jù)區(qū)數(shù)據(jù)塊的分塊號(hào)對(duì)應(yīng)的修改次 數(shù)位的值加1 ;(7)是否所有分塊都處理完畢,是則順序執(zhí)行,否則轉(zhuǎn)步驟3 ;(8)判斷是否需要生成新快照,若不需要,則轉(zhuǎn)步驟10,否則順序執(zhí)行;(9)守護(hù)進(jìn)程Daemon創(chuàng)建新快照;(10)結(jié)束判斷快照是否為對(duì)源數(shù)據(jù)區(qū)最新的快照,可查找該快照元數(shù)據(jù)中的標(biāo)識(shí)位,如果 該標(biāo)識(shí)位的值為1,則為對(duì)源數(shù)據(jù)區(qū)最新的快照,否則不是;在新創(chuàng)建快照時(shí),將新創(chuàng)建快 照的標(biāo)識(shí)位為1,并將其他快照的標(biāo)識(shí)位置為0。有最大平均修改次數(shù)和最大修改次數(shù)兩種策略判定是否需要生成新快照。最大平 均修改次數(shù)策略下,如果各個(gè)數(shù)據(jù)塊的平均修改次數(shù)超過某個(gè)閾值,則需要生成新快照。最 大修改次數(shù)策略下,只要其中一個(gè)數(shù)據(jù)塊的修改次數(shù)超過閾值就需要生成新快照。選擇相 同的閾值時(shí),平均修改次數(shù)策略下各個(gè)快照保護(hù)的歷史數(shù)據(jù)量更加平均,相鄰兩個(gè)快照之 間的數(shù)據(jù)更新量大約為塊數(shù)量*閾值;最大修改次數(shù)策略保證對(duì)每個(gè)塊的數(shù)據(jù)更新量不超 過閾值。不管哪種策略,當(dāng)閾值越小,對(duì)源數(shù)據(jù)區(qū)數(shù)據(jù)保護(hù)的強(qiáng)度越大,但快照的開銷也會(huì) 有一定的增加。當(dāng)閾值為1時(shí),則是數(shù)據(jù)保護(hù)的極端模式,CDP保護(hù)模式,通過頻繁生成快照而保留被保護(hù)邏輯卷中數(shù)據(jù)塊任意時(shí)刻的數(shù)值,使數(shù)據(jù)能夠回滾到過去的任意時(shí)刻。上述判斷是否需要生成新快照生所用的閾值由用戶通過應(yīng)用程序接口 API指定。增加計(jì)數(shù)區(qū)計(jì)數(shù)值并判斷是否需要生成新快照的流程如圖4所示,(1)根據(jù)源數(shù)據(jù)區(qū)數(shù)據(jù)塊的分塊號(hào)將計(jì)數(shù)區(qū)位圖中對(duì)應(yīng)位的值即該塊的修改次數(shù) 加1 ;(2)如果判定策略為平均修改次數(shù)策略,轉(zhuǎn)步驟3,否則,轉(zhuǎn)步驟4 ;(3)判斷源數(shù)據(jù)區(qū)各數(shù)據(jù)塊的平均修改次數(shù)是否大于設(shè)定的平均修改次數(shù)閾值, 若為大,則轉(zhuǎn)步驟5,若為小或等于,則轉(zhuǎn)步驟6 ;(4)判斷所述源數(shù)據(jù)區(qū)各數(shù)據(jù)塊的修改次數(shù)中最大的修改次數(shù)是否大于設(shè)定的最 大修改次數(shù)閾值,若為大,則轉(zhuǎn)步驟5,若為小或等于,則轉(zhuǎn)步驟6,(5)判定需要生成新快照,結(jié)束;(6)判定不需要生成新快照,結(jié)束。系統(tǒng)結(jié)構(gòu)如圖5所示,快照計(jì)算機(jī)(Snapshot Manager)包括用以控制新快照創(chuàng)建 的守護(hù)進(jìn)程Daemon,快照計(jì)算機(jī)接收和處理用戶的訪問請(qǐng)求,并判斷是否需要生成新快照, 快照計(jì)算機(jī)在進(jìn)行決策時(shí)需要了解快照和源數(shù)據(jù)區(qū)的信息;應(yīng)用程序接口(API)供用戶訪 問數(shù)據(jù)以及設(shè)置快照參數(shù)和獲取快照狀態(tài)??煺沼?jì)算機(jī)中的守護(hù)進(jìn)程Daemon創(chuàng)建新快照的流程如圖6所示(1)停止源數(shù)據(jù)區(qū)的讀寫服務(wù);(2)按照用戶設(shè)定的快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,數(shù)據(jù)塊的大小,快照的數(shù) 據(jù)區(qū)長(zhǎng)度創(chuàng)建快照結(jié)構(gòu),并建立與源數(shù)據(jù)區(qū)的映射關(guān)系;(3)在內(nèi)存中建立快照的計(jì)數(shù)區(qū)緩存;(4)恢復(fù)源數(shù)據(jù)區(qū)的讀寫服務(wù);(5)結(jié)束。由于計(jì)數(shù)區(qū)以位圖的方式存儲(chǔ)源數(shù)據(jù)區(qū)各個(gè)數(shù)據(jù)塊的修改次數(shù),占用的空間很 小,能夠緩存以提高訪問速度,由于位圖的查找和修改效率為0(1),所以更改計(jì)數(shù)區(qū)中的源 數(shù)據(jù)區(qū)數(shù)據(jù)塊修改次數(shù)值和判定是否生成新快照的開銷僅為幾次內(nèi)存訪問的時(shí)間,對(duì)寫操 作帶來的影響幾乎可以忽略。緩存將定時(shí)寫入快照中以保證系統(tǒng)崩潰或重啟后修改計(jì)數(shù)能 正常讀取。
權(quán)利要求
一種自適應(yīng)應(yīng)用負(fù)載變化的快照生成方法,其特征在于,所述方法是在用戶端依次按以下步驟實(shí)現(xiàn)的步驟(1).用戶端的初始化,步驟(1.1).用戶通過應(yīng)用程序接口API在快照計(jì)算機(jī)中設(shè)定快照的數(shù)據(jù)結(jié)構(gòu),包括元數(shù)據(jù)區(qū)、索引區(qū)、數(shù)據(jù)區(qū)和計(jì)數(shù)區(qū),其中元數(shù)據(jù)區(qū)包括用戶賦予的快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,該快照中數(shù)據(jù)塊的大小,數(shù)據(jù)區(qū)的長(zhǎng)度以及標(biāo)識(shí)位,其中源數(shù)據(jù)區(qū),存儲(chǔ)用戶訪問請(qǐng)求的數(shù)據(jù),對(duì)源數(shù)據(jù)區(qū)創(chuàng)建一個(gè)快照將會(huì)保留一個(gè)快照創(chuàng)建時(shí)刻源數(shù)據(jù)區(qū)的映像,源數(shù)據(jù)區(qū)在邏輯上是按照所述元數(shù)據(jù)區(qū)中所述數(shù)據(jù)塊的大小分為多個(gè)數(shù)據(jù)塊,數(shù)據(jù)塊的編號(hào)從1開始,其分塊號(hào)依次為1,2,3,…,N,N為源數(shù)據(jù)區(qū)中數(shù)據(jù)塊數(shù)目,這個(gè)編號(hào)就是源數(shù)據(jù)區(qū)的分塊號(hào),標(biāo)識(shí)位,值為1時(shí),表示快照是對(duì)源數(shù)據(jù)區(qū)最新創(chuàng)建的快照,為0,則不是,當(dāng)對(duì)源數(shù)據(jù)區(qū)新創(chuàng)建一個(gè)快照時(shí),將新創(chuàng)建的快照的標(biāo)識(shí)位置為1,并將對(duì)源數(shù)據(jù)區(qū)創(chuàng)建的其它快照的標(biāo)識(shí)位置為0索引區(qū),記錄源數(shù)據(jù)區(qū)被修改過的數(shù)據(jù)塊的分塊號(hào)以及該數(shù)據(jù)塊原來的數(shù)據(jù)在所述數(shù)據(jù)區(qū)存放位置的新分塊號(hào),數(shù)據(jù)區(qū),存儲(chǔ)快照需要保存的數(shù)據(jù),在邏輯上按照所述元數(shù)據(jù)區(qū)中所述數(shù)據(jù)塊的大小分為多個(gè)數(shù)據(jù)塊,塊大小與所述源數(shù)據(jù)區(qū)中每個(gè)數(shù)據(jù)塊的塊大小相同,初始化時(shí)數(shù)據(jù)區(qū)的所有數(shù)據(jù)塊都標(biāo)記為未被使用,當(dāng)所述源數(shù)據(jù)區(qū)中的一個(gè)數(shù)據(jù)塊在快照創(chuàng)建后第一次被修改,這個(gè)數(shù)據(jù)塊原來的數(shù)據(jù)將被存放到數(shù)據(jù)區(qū)中一個(gè)未被使用的數(shù)據(jù)塊中,相應(yīng)的數(shù)據(jù)區(qū)中的數(shù)據(jù)塊標(biāo)記為已被使用,計(jì)數(shù)區(qū),用位圖的方式存儲(chǔ)所述源數(shù)據(jù)區(qū)中各數(shù)據(jù)塊被修改的次數(shù),所述源數(shù)據(jù)區(qū)中第n個(gè)數(shù)據(jù)塊被修改的次數(shù)用計(jì)數(shù)區(qū)中第n位的值wn表示,n=1,2,…,N,步驟(1.2).用戶通過應(yīng)用程序接口API在所述快照計(jì)算機(jī)中創(chuàng)建用以創(chuàng)建新快照的守護(hù)進(jìn)程Daemon,并指定守護(hù)進(jìn)程Daemon在創(chuàng)建新快照時(shí)所用到的參數(shù)的值,這些參數(shù)包括所述快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,數(shù)據(jù)塊的大小,數(shù)據(jù)區(qū)的長(zhǎng)度,步驟(2).當(dāng)所述快照計(jì)算機(jī)通過應(yīng)用程序接口API接收到用戶對(duì)源數(shù)據(jù)區(qū)的寫入請(qǐng)求和寫入數(shù)據(jù)時(shí),依次執(zhí)行以下步驟步驟(2.1).找到對(duì)所述源數(shù)據(jù)區(qū)最新創(chuàng)建的快照,即標(biāo)識(shí)位為1的快照,步驟(2.2).將含有起始地址和長(zhǎng)度的所述寫入數(shù)據(jù),按步驟(2.1)所述快照中的所述數(shù)據(jù)塊的大小分為多個(gè)寫入數(shù)據(jù)塊,每個(gè)寫入數(shù)據(jù)塊對(duì)應(yīng)一個(gè)源數(shù)據(jù)區(qū)的數(shù)據(jù)塊,步驟(2.3).對(duì)步驟(2.2)所述的每個(gè)寫入數(shù)據(jù)塊,按其對(duì)應(yīng)的源數(shù)據(jù)區(qū)數(shù)據(jù)塊的分塊號(hào)在步驟(2.1)所述快照的索引區(qū)中查找,若存在該分塊號(hào),則說明源數(shù)據(jù)區(qū)數(shù)據(jù)塊原來的數(shù)據(jù)已經(jīng)被保存在數(shù)據(jù)區(qū)中,轉(zhuǎn)步驟(2.6),若不存在,則執(zhí)行下一步驟(2.4),步驟(2.4).把步驟(2.3)所述寫入數(shù)據(jù)塊對(duì)應(yīng)的源數(shù)據(jù)區(qū)數(shù)據(jù)塊中的數(shù)據(jù)拷貝到步驟(2.1)所述快照的數(shù)據(jù)區(qū),修改所述快照的索引區(qū)中的分塊號(hào),步驟(2.5).再把步驟(2.3)所述寫入數(shù)據(jù)塊的數(shù)據(jù)寫入其對(duì)應(yīng)的源數(shù)據(jù)區(qū)數(shù)據(jù)塊中,步驟(2.6).把所述快照的計(jì)數(shù)區(qū)中與步驟(2.3)所述源數(shù)據(jù)區(qū)數(shù)據(jù)塊的分塊號(hào)對(duì)應(yīng)的修改次數(shù)位的值加1,步驟(2.7).判斷步驟(2.2)所述的所有寫入數(shù)據(jù)塊是否都處理完畢,是,則結(jié)束,否則,重復(fù)步驟(2.3)~步驟(2.6),步驟(2.8).根據(jù)用戶設(shè)定的判定策略及閾值確定是否需要生成新快照若用戶設(shè)定最大平均修改次數(shù)策略,則判斷源數(shù)據(jù)區(qū)各數(shù)據(jù)塊的平均修改次數(shù)是否超過設(shè)定的平均修改次數(shù)閾值,若超過,則需要生成新快照,否則,不需要,若用戶設(shè)定最大修改次數(shù)策略,則判斷所述源數(shù)據(jù)區(qū)各數(shù)據(jù)塊的修改次數(shù)中最大的修改次數(shù)是否大于設(shè)定的最大修改次數(shù)閾值,若為大,則需要生成新快照,若為小或等于,則不需要生成新快照,當(dāng)判斷為需要生成新快照時(shí),執(zhí)行步驟(2.9),否則,轉(zhuǎn)步驟(2.10),步驟(2.9).所述快照計(jì)算機(jī)利用所述守護(hù)進(jìn)程Daemon創(chuàng)建新快照,其步驟如下步驟(2.9.1).停止所述源數(shù)據(jù)區(qū)的讀寫服務(wù),步驟(2.9.2).按照步驟(1.2)中用戶設(shè)定的快照名稱,快照編號(hào),源數(shù)據(jù)區(qū)名稱,數(shù)據(jù)塊的大小,快照的數(shù)據(jù)區(qū)長(zhǎng)度,創(chuàng)建新快照結(jié)構(gòu),并建立與所述源數(shù)據(jù)區(qū)的映射關(guān)系,步驟(2.9.3).在內(nèi)存中建立新快照的計(jì)數(shù)區(qū)緩存,步驟(2.9.4).恢復(fù)所述源數(shù)據(jù)區(qū)的讀寫服務(wù),步驟(2.10).結(jié)束。
全文摘要
一種自適應(yīng)應(yīng)用負(fù)載變化的快照生成方法屬于計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,目的是設(shè)計(jì)一種應(yīng)用感知的自適應(yīng)快照生成方法,根據(jù)被保護(hù)數(shù)據(jù)的修改頻率調(diào)節(jié)生成快照的頻率,既達(dá)到自動(dòng)保留有用歷史數(shù)據(jù)的要求,又保證較好的系統(tǒng)性能與空間利用率,其特征在于為快照分配一個(gè)計(jì)數(shù)區(qū)記錄源數(shù)據(jù)區(qū)各個(gè)塊的修改次數(shù),創(chuàng)建守護(hù)進(jìn)程,控置快照生成。當(dāng)快照計(jì)算機(jī)收到對(duì)源數(shù)據(jù)區(qū)的寫請(qǐng)求時(shí),將其對(duì)應(yīng)源數(shù)據(jù)區(qū)數(shù)據(jù)塊的修改次數(shù)增加,并根據(jù)設(shè)定的閾值判斷是否需要生成快照,如果是,則發(fā)送消息給守護(hù)進(jìn)程,守護(hù)進(jìn)程控制生成新快照。本方法具有自適應(yīng)應(yīng)用負(fù)載變化、實(shí)現(xiàn)簡(jiǎn)單幾乎不影響讀寫性能影響和使用靈活方便的優(yōu)點(diǎn)。
文檔編號(hào)G06F11/14GK101968755SQ20101053195
公開日2011年2月9日 申請(qǐng)日期2010年11月4日 優(yōu)先權(quán)日2010年11月4日
發(fā)明者周煒, 易樂天, 舒繼武 申請(qǐng)人:清華大學(xué)