欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種重復(fù)刪除的模式切換方法及裝置與流程

文檔序號(hào):12121528閱讀:655來(lái)源:國(guó)知局
一種重復(fù)刪除的模式切換方法及裝置與流程

本發(fā)明涉及網(wǎng)絡(luò)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種重復(fù)刪除的模式切換方法及裝置。



背景技術(shù):

重復(fù)數(shù)據(jù)刪除是一種數(shù)據(jù)縮減技術(shù),旨在消除冗余數(shù)據(jù),減少存儲(chǔ)系統(tǒng)的容量使用。一般采用SHA-1、MD-5等類似的算法將數(shù)據(jù)流切成更小的數(shù)據(jù)塊,并且為每個(gè)數(shù)據(jù)塊生成一個(gè)哈希值,方便與設(shè)備上的數(shù)據(jù)進(jìn)行比較,若已存在,則不保存新數(shù)據(jù),以下簡(jiǎn)稱重刪。重刪包括有損重復(fù)數(shù)據(jù)刪除和無(wú)損重復(fù)數(shù)據(jù)刪除。其中,有損重復(fù)數(shù)據(jù)刪除是指在使用哈希算法進(jìn)行重復(fù)數(shù)據(jù)刪除的過(guò)程中,若出現(xiàn)哈希沖突,則丟棄新數(shù)據(jù),使用Hash相同的原數(shù)據(jù),以下簡(jiǎn)稱有損重刪;無(wú)損重復(fù)數(shù)據(jù)刪除是指在使用哈希算法進(jìn)行重復(fù)數(shù)據(jù)刪除的過(guò)程中,若出現(xiàn)哈希沖突,則從存儲(chǔ)設(shè)備上讀取對(duì)應(yīng)的原數(shù)據(jù),并與新數(shù)據(jù)進(jìn)行二進(jìn)制比較,若相同,則丟棄新數(shù)據(jù);若不同,則保存新數(shù)據(jù),以下簡(jiǎn)稱無(wú)損重刪。

現(xiàn)有的重復(fù)數(shù)據(jù)刪除功能只能固定于有損重刪和無(wú)損重刪中的一種模式,不能實(shí)時(shí)切換,使得應(yīng)用場(chǎng)景受到極大的限制,導(dǎo)致系統(tǒng)整體不夠靈活。



技術(shù)實(shí)現(xiàn)要素:

有鑒于此,本發(fā)明提供一種重復(fù)刪除的模式切換方法及裝置來(lái)解決現(xiàn)有技術(shù)中重復(fù)刪除不支持動(dòng)態(tài)切換模式的問(wèn)題。

具體地,本發(fā)明是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:

本發(fā)明提供一種重復(fù)刪除的模式切換方法,所述方法應(yīng)用于存儲(chǔ)設(shè)備中的DPC,所述方法包括:

DPC接收LUN根據(jù)數(shù)據(jù)寫(xiě)入指令下發(fā)的由數(shù)據(jù)拆分成的多個(gè)粒度;

分別計(jì)算所述多個(gè)粒度對(duì)應(yīng)的hash;

遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄;

判斷當(dāng)前重刪模式是有損重刪還是無(wú)損重刪;

若是有損重刪,則將每個(gè)粒度標(biāo)記為重刪成功;

若是無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。

進(jìn)一步的,所述方法還包括:

DPC將所述多個(gè)粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個(gè)粒度的重刪結(jié)果更新本地的映射表的第一對(duì)應(yīng)關(guān)系和第二對(duì)應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對(duì)應(yīng)關(guān)系和LBA與DPC上的Hash的第二對(duì)應(yīng)關(guān)系。

進(jìn)一步的,所述遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄,具體為:

獲取第一粒度對(duì)應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計(jì)到有記錄hash中;若不存在,則將所述第一hash對(duì)應(yīng)的第一粒度寫(xiě)入DPC,將所述第一粒度在DPC中的PBA以及所述第一hash的對(duì)應(yīng)關(guān)系添加到所述哈希索引表中,并將該hash統(tǒng)計(jì)到無(wú)記錄hash中。

進(jìn)一步的,所述方法還包括:

當(dāng)確定哈希索引表中的hash記錄沒(méi)有LUN引用時(shí),將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時(shí),回收該hash記錄中PBA對(duì)應(yīng)的物理空間。

進(jìn)一步的,所述確定哈希索引表中的hash記錄已更新到LUN上,具體包括:

DPC在哈希索引表中新建hash記錄時(shí),為該hash記錄增設(shè)引用計(jì)數(shù),引用計(jì)數(shù)起始值為1,若該hash記錄被引用時(shí),則該引用計(jì)數(shù)加1;若該hash記錄被更新到LUN中的映射表時(shí),則該引用計(jì)數(shù)減1;當(dāng)引用計(jì)數(shù)為零時(shí),回收對(duì)應(yīng)的hash記錄;

若回收集合中的hash記錄被引用時(shí),則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計(jì)數(shù)加1。

基于相同的構(gòu)思,本發(fā)明還提供一種重復(fù)刪除的模式切換裝置,所述裝置應(yīng)用于存儲(chǔ)設(shè)備中的DPC,所述裝置包括:

接收單元,用于接收LUN根據(jù)數(shù)據(jù)寫(xiě)入指令下發(fā)的由數(shù)據(jù)拆分成的多個(gè)粒度;

計(jì)算單元,用于分別計(jì)算所述多個(gè)粒度對(duì)應(yīng)的hash;

統(tǒng)計(jì)單元,用于遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄;

標(biāo)記單元,用于判斷當(dāng)前重刪模式是有損重刪還是無(wú)損重刪;若是有損重刪,則將每個(gè)粒度標(biāo)記為重刪成功;若是無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。

進(jìn)一步的,所述裝置還包括:

返回單元,用于所述多個(gè)粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個(gè)粒度的重刪結(jié)果更新本地的映射表的第一對(duì)應(yīng)關(guān)系和第二對(duì)應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對(duì)應(yīng)關(guān)系和LBA與DPC上的Hash的第二對(duì)應(yīng)關(guān)系。

進(jìn)一步的,所述統(tǒng)計(jì)單元,具體用于獲取第一粒度對(duì)應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計(jì)到有記錄hash中;若不存在,則將所述第一hash對(duì)應(yīng)的第一粒度寫(xiě)入DPC,將所述第一粒度在DPC中的PBA以及所述第一hash的對(duì)應(yīng)關(guān)系添加到所述哈希索引表中,并將該hash統(tǒng)計(jì)到無(wú)記錄hash中。

進(jìn)一步的,所述裝置還包括:

回收單元,用于當(dāng)確定哈希索引表中的hash記錄沒(méi)有LUN引用時(shí),將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時(shí),回收該hash記錄中PBA對(duì)應(yīng)的物理空間。

進(jìn)一步的,所述回收單元,具體用于在哈希索引表中新建hash記錄時(shí),為該hash記錄增設(shè)引用計(jì)數(shù),引用計(jì)數(shù)起始值為1,若該hash記錄被引用時(shí),則該引用計(jì)數(shù)加1;若該hash記錄被更新到LUN中的映射表時(shí),則該引用計(jì)數(shù)減1;當(dāng)引用計(jì)數(shù)為零時(shí),回收對(duì)應(yīng)的hash記錄;若回收集合中的hash記錄被引用時(shí),則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計(jì)數(shù)加1。

由此可見(jiàn),本發(fā)明可使DPC在收到LUN下發(fā)的多個(gè)粒度時(shí),分別計(jì)算所述多個(gè)粒度對(duì)應(yīng)的hash,再遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,并在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄;然后判斷當(dāng)前重刪模式是有損重刪還是無(wú)損重刪;若是有損重刪,則將每個(gè)粒度標(biāo)記重刪除成功;若是無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。因此本發(fā)明可以實(shí)現(xiàn)重復(fù)數(shù)據(jù)刪除系統(tǒng)中能夠動(dòng)態(tài)更改重刪方式,使元數(shù)據(jù)組織方式更加靈活,使系統(tǒng)具有較強(qiáng)的擴(kuò)展性。

附圖說(shuō)明

圖1是LBA、PBA、映射表以及哈希索引表的關(guān)系示意圖;

圖2是本發(fā)明一種示例性實(shí)施方式中的一種重復(fù)刪除的模式切換方法的處理流程圖;

圖3是本發(fā)明一種示例性實(shí)施方式中的系統(tǒng)結(jié)構(gòu)示意圖;

圖4是本發(fā)明一種示例性實(shí)施方式中的映射表組織方式示意圖;

圖5是本發(fā)明一種示例性實(shí)施方式中的一種重復(fù)刪除的處理流程圖;

圖6是本發(fā)明一種示例性實(shí)施方式中的一種物理空間回收的處理流程圖;

圖7a本發(fā)明一種示例性實(shí)施方式中的重復(fù)刪除的模式切換裝置所在設(shè)備的硬件結(jié)構(gòu)圖;

圖7b本發(fā)明一種示例性實(shí)施方式中的一種重復(fù)刪除的模式切換裝置的邏輯結(jié)構(gòu)圖。

具體實(shí)施方式

存儲(chǔ)設(shè)備中包括多個(gè)LUN(Logical Unit Number,邏輯單元號(hào)),用于為應(yīng)用服務(wù)器提供可訪問(wèn)的邏輯存儲(chǔ)資源,LUN中有分為多個(gè)邏輯塊,其對(duì)應(yīng)的地址LBA(Logical Block Address,邏輯塊地址)是應(yīng)用服務(wù)器訪問(wèn)LUN時(shí)使用的地址。當(dāng)有新的數(shù)據(jù)寫(xiě)入存儲(chǔ)設(shè)備時(shí),先將該數(shù)據(jù)切分成若干個(gè)固定長(zhǎng)度的數(shù)據(jù)塊,利用特定的哈希算法為每個(gè)數(shù)據(jù)塊生成一個(gè)哈希值Hash,再通過(guò)查詢哈希索引表確定新寫(xiě)入的數(shù)據(jù)塊是否為重復(fù)數(shù)據(jù),其中,所述哈希索引表用于在使用重復(fù)數(shù)據(jù)刪除的存儲(chǔ)系統(tǒng)中記錄Hash到PBA(physical Block Address,物理塊地址)的對(duì)應(yīng)關(guān)系,所述PBA是向物理存儲(chǔ)資源存取數(shù)據(jù)時(shí)使用的地址;若確定為重復(fù)數(shù)據(jù),則丟棄該數(shù)據(jù),并更新映射表,將對(duì)應(yīng)LBA映射至該Hash;否則,將該數(shù)據(jù)塊寫(xiě)入存儲(chǔ)設(shè)備,將對(duì)應(yīng)LBA映射至該Hash,同時(shí),在哈希索引表中增加Hash至PBA的記錄。其中所述映射表用于在使用重復(fù)數(shù)據(jù)刪除的存儲(chǔ)系統(tǒng)中記錄LBA到Hash的對(duì)應(yīng)關(guān)系。所述LBA、PBA、映射表以及哈希索引表的關(guān)系如圖1所示。

由于現(xiàn)有的重復(fù)數(shù)據(jù)刪除系統(tǒng)通常只支持有損重刪或無(wú)損重刪其中的一種,不能在兩者之間進(jìn)行實(shí)時(shí)切換,因此使得應(yīng)用場(chǎng)景受到極大的限制,導(dǎo)致系統(tǒng)整體不夠靈活。

為了解決現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明提供一種重復(fù)刪除的模式切換方法及裝置,使DPC在收到LUN下發(fā)的多個(gè)粒度時(shí),分別計(jì)算所述多個(gè)粒度對(duì)應(yīng)的hash,再遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,并在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄;然后判斷當(dāng)前重刪模式是有損重刪還是無(wú)損重刪;若是有損重刪,則將每個(gè)粒度標(biāo)記重刪除成功;若是無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。因此本發(fā)明可以實(shí)現(xiàn)重復(fù)數(shù)據(jù)刪除系統(tǒng)中能夠動(dòng)態(tài)更改重刪方式,使元數(shù)據(jù)組織方式更加靈活,使系統(tǒng)具有較強(qiáng)的擴(kuò)展性。

請(qǐng)參考圖2,是本發(fā)明一種示例性實(shí)施方式中的一種重復(fù)刪除的模式切換方法的處理流程圖,所述方法應(yīng)用于存儲(chǔ)設(shè)備中的DPC,所述存儲(chǔ)設(shè)備可以是單獨(dú)的設(shè)備,也可以是設(shè)備集群,所述方法包括:

步驟201、DPC接收LUN根據(jù)數(shù)據(jù)寫(xiě)入指令下發(fā)的由數(shù)據(jù)拆分成的多個(gè)粒度;

在本實(shí)施例中,存儲(chǔ)設(shè)備包括一個(gè)DPC以及多個(gè)LUN,如圖3所示,其中,所述DPC(Deduplication Process Center,重刪處理中心)主要負(fù)責(zé)對(duì)新數(shù)據(jù)進(jìn)行重刪處理、維護(hù)哈希索引表、存取重刪成功的數(shù)據(jù);所述LUN用于維護(hù)映射表,并提供訪問(wèn)資源。當(dāng)LUN接收數(shù)據(jù)寫(xiě)入指令時(shí),可以將數(shù)據(jù)劃分為多個(gè)粒度,并將所述多個(gè)粒度下發(fā)給DPC。本實(shí)施例中,所述粒度是指在邏輯上將LUN劃分成一個(gè)個(gè)固定長(zhǎng)度的塊并順序編號(hào),稱每個(gè)塊為一個(gè)粒度,粒度是重刪的基本單位。LUN可以將接收到數(shù)據(jù),按粒度的大小拆分?jǐn)?shù)據(jù),從本地映射表中讀取對(duì)應(yīng)的映射,不對(duì)齊的部分可以通過(guò)回讀映射進(jìn)行補(bǔ)齊,從而湊成完整粒度。

步驟202、分別計(jì)算所述多個(gè)粒度對(duì)應(yīng)的hash;

DPC收到LUN下發(fā)的多個(gè)完整粒度時(shí),可以分別計(jì)算所述多個(gè)完整粒度對(duì)應(yīng)的hash。

步驟203、遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄;

為了確定哪些粒度已經(jīng)保存在DPC中,哪些粒度還沒(méi)有保存,DPC可以遍歷本地的哈希索引表,針對(duì)所述多個(gè)粒度對(duì)應(yīng)的hash中分別統(tǒng)計(jì)無(wú)記錄hash和有記錄hash,具體來(lái)講,DPC可以獲取第一粒度對(duì)應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計(jì)到有記錄hash中;若不存在,將該hash統(tǒng)計(jì)到無(wú)記錄hash中,并將所述第一hash對(duì)應(yīng)的第一粒度寫(xiě)入DPC后,將所述第一粒度在DPC中的PBA以及所述第一hash的對(duì)應(yīng)關(guān)系創(chuàng)建新的hash記錄添加到所述哈希索引表中。以此類推,直到所述多個(gè)粒度對(duì)應(yīng)的hash統(tǒng)計(jì)完成。

步驟204、判斷當(dāng)前重刪模式是有損重刪還是無(wú)損重刪;

在本發(fā)明可選的實(shí)施例中,DPC可以為用戶提供重刪模式控制模塊,使用戶通過(guò)重刪模式控制模塊在進(jìn)程數(shù)據(jù)存儲(chǔ)時(shí),選擇所需的重刪模式,本實(shí)施例中重刪模式可以包括有損重刪和無(wú)損重刪,因此本發(fā)明可以實(shí)現(xiàn)重刪模式的動(dòng)態(tài)切換,從而使系統(tǒng)適應(yīng)更多的應(yīng)用場(chǎng)景,提高了系統(tǒng)的應(yīng)用靈活性。

步驟205、若是有損重刪,則將每個(gè)粒度標(biāo)記為重刪成功;

若確定當(dāng)前重刪模式為有損重刪,則可以不顧及重刪沖突的情況,因此可以將每個(gè)粒度標(biāo)記為重刪成功。

步驟206、若是無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。

若確定當(dāng)前重刪模式為無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。具體來(lái)講,DPC首先獲取第一粒度對(duì)應(yīng)的第一hash,并在哈希索引表中查找與該第一hash相同的第二hash;然后讀取本地物理空間中所述第二hash對(duì)應(yīng)的數(shù)據(jù)并與所述第一hash對(duì)應(yīng)的數(shù)據(jù)進(jìn)行比較,若相同,則將該第一hash對(duì)應(yīng)的第一粒度的重刪結(jié)果標(biāo)記為重刪成功;若不同,則將該第一hash對(duì)應(yīng)的第一粒度的重刪結(jié)果標(biāo)記為重刪沖突;然后繼續(xù)重復(fù)上述流程對(duì)其他粒度進(jìn)行無(wú)損重刪。

在本實(shí)施例中,DPC將所述多個(gè)粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個(gè)粒度的重刪結(jié)果更新本地的映射表的第一對(duì)應(yīng)關(guān)系和第二對(duì)應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對(duì)應(yīng)關(guān)系和LBA與DPC上的Hash的第二對(duì)應(yīng)關(guān)系。在本實(shí)施例中,DPC維護(hù)的哈希索引表包括Hash到DPC的PBA的對(duì)應(yīng)關(guān)系,所述LUN中維護(hù)的映射表中既包括LBA與LUN本地的PBA的第一對(duì)應(yīng)關(guān)系,又包括LBA與DPC上的Hash的第二對(duì)應(yīng)關(guān)系,其中所述第一對(duì)應(yīng)關(guān)系用于讀寫(xiě)存儲(chǔ)于LUN本地的數(shù)據(jù),所述第二對(duì)應(yīng)關(guān)系用于讀寫(xiě)存儲(chǔ)于DPC的數(shù)據(jù)。所述LUN收到DPC返回的粒度對(duì)應(yīng)的重刪結(jié)果時(shí),可以將標(biāo)記為重刪沖突的粒度寫(xiě)入本地的物理空間,記錄寫(xiě)入的LBA和PBA,并根據(jù)寫(xiě)入的LBA和PBA更新本地映射表中的第一對(duì)應(yīng)關(guān)系;根據(jù)標(biāo)記為重刪成功的粒度的LBA和hash更新本地映射表中記錄的第二對(duì)應(yīng)關(guān)系。

由于現(xiàn)有技術(shù)中,存儲(chǔ)設(shè)備中的每個(gè)LUN維護(hù)各自的一張LBA與PBA的映射表,DPC維護(hù)系統(tǒng)內(nèi)唯一的哈希索引表。而本發(fā)明中LUN維護(hù)的映射表中可以包括LBA與PBA的第一對(duì)應(yīng)關(guān)系和LBA與Hash的第二對(duì)應(yīng)關(guān)系,因此用戶可以通過(guò)LUN維護(hù)的映射表查詢DPC上的數(shù)據(jù),從而減少DPC的業(yè)務(wù)負(fù)擔(dān),提高讀寫(xiě)效率。

另外,在本發(fā)明可選的實(shí)施例中,當(dāng)確定哈希索引表中的hash記錄已更新到LUN上時(shí),將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時(shí),回收該hash記錄中PBA對(duì)應(yīng)的物理空間。

因?yàn)镈PC物理空間中的每一粒度數(shù)據(jù)都可能不止被一個(gè)LUN使用,也可能被一個(gè)LUN使用不止一次,所以采取引用計(jì)數(shù)的方式,實(shí)時(shí)統(tǒng)計(jì)哈希索引表中每一條記錄的使用情況。DPC在哈希索引表中新建hash記錄時(shí),為該hash記錄增設(shè)引用計(jì)數(shù),引用計(jì)數(shù)起始值為1,若該hash記錄被引用時(shí),則該引用計(jì)數(shù)加1;若該hash記錄被更新到LUN中的映射表時(shí),則該引用計(jì)數(shù)減1;當(dāng)引用計(jì)數(shù)為零時(shí),回收對(duì)應(yīng)的hash記錄;若回收集合中的hash記錄被引用時(shí),則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計(jì)數(shù)加1。在某條記錄的引用計(jì)數(shù)為0時(shí)并不會(huì)立馬回收,可根據(jù)設(shè)定的策略觸發(fā)DPC回收,該策略由用戶配置,既可以是可回收記錄的個(gè)數(shù)達(dá)到閾值時(shí)觸發(fā),也可以是固定時(shí)間周期觸發(fā),在系統(tǒng)運(yùn)行期間隨時(shí)可以更改策略,改完后會(huì)立即確認(rèn)是否可回收。Hash保護(hù)功能可避免計(jì)數(shù)為0的記錄在回收后立馬又被使用,避免重復(fù)建立記錄而浪費(fèi)性能,提高了DPC的效率。

為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面對(duì)本發(fā)明的方案作進(jìn)一步地詳細(xì)說(shuō)明。

在存儲(chǔ)系統(tǒng)中,元數(shù)據(jù)包括兩部分,即映射表和哈希索引表,其中,每個(gè)LUN維護(hù)各自的一張映射表,DPC維護(hù)系統(tǒng)內(nèi)唯一的哈希索引表。與現(xiàn)有技術(shù)不同,映射表既支持LBA-PBA的記錄(此處的PBA指向LUN的物理空間),也支持LBA-Hash的記錄,其具體組織方式如圖4所示,整張映射表被劃分成若干段,每一段包括標(biāo)志區(qū)和映射區(qū)兩部分,標(biāo)志區(qū)每一個(gè)bit與其后映射區(qū)的每一條記錄線性對(duì)應(yīng),用于標(biāo)記該條記錄中的映射類型,若為1,是Hash,若為0,則是PBA。假設(shè)LBA、PBA的長(zhǎng)度均為8個(gè)字節(jié),系統(tǒng)若采用SHA-1算法做重刪,即Hash的長(zhǎng)度為20個(gè)字節(jié),那么,映射區(qū)每一條記錄的長(zhǎng)度為20+8=28個(gè)字節(jié)。在用戶配置完重刪的算法時(shí)便可確定映射區(qū)每條記錄的長(zhǎng)度,單個(gè)段的長(zhǎng)度設(shè)置具有很大的參考范圍。

LUN接收到服務(wù)器下發(fā)的數(shù)據(jù)寫(xiě)入指令時(shí),可以按命中的粒度拆分?jǐn)?shù)據(jù),從映射表中讀取對(duì)應(yīng)的映射,不對(duì)齊的部分會(huì)根據(jù)映射進(jìn)行回讀(若為PBA,則去LUN本地的物理空間讀,若為Hash,則去DPC的物理空間讀),并湊成完整粒度,然后將這些粒度下發(fā)給DPC,則重刪處理流程如圖5所示,其中包括:

步驟501、LUN將所有粒度下發(fā)給DPC,轉(zhuǎn)步驟502;

步驟502、DPC計(jì)算出每個(gè)粒度的Hash,轉(zhuǎn)步驟503;

步驟503、開(kāi)始遍歷哈希索引表,轉(zhuǎn)步驟504;

步驟504、判斷該Hash是否有記錄,若是,則轉(zhuǎn)步驟506;若否,則轉(zhuǎn)步驟505;

步驟505、讀取記錄內(nèi)容,轉(zhuǎn)步驟507;

步驟506、標(biāo)記該hash,轉(zhuǎn)步驟507;

步驟507、結(jié)束遍歷哈希索引表,轉(zhuǎn)步驟508;

步驟508、判斷是否所有hash均有記錄,若是,則轉(zhuǎn)步驟511;若否,則轉(zhuǎn)步驟509;

步驟509、分配物理空間寫(xiě)入被標(biāo)記hash的數(shù)據(jù),轉(zhuǎn)步驟510;

步驟510、根據(jù)返回的PBA逐個(gè)建立記錄,轉(zhuǎn)步驟511;

步驟511、判斷是否為無(wú)損重刪,若是,則轉(zhuǎn)步驟512;若否則轉(zhuǎn)步驟513;

步驟512、僅將新建記錄的hash所對(duì)應(yīng)的粒度標(biāo)記為重刪成功,轉(zhuǎn)步驟514;

步驟513、將每個(gè)粒度標(biāo)記為重刪成功,轉(zhuǎn)步驟520;

步驟514、開(kāi)始遍歷所讀取的記錄,轉(zhuǎn)步驟515;

步驟515、根據(jù)記錄中的PBA去物理空間讀取數(shù)據(jù),轉(zhuǎn)步驟516;

步驟516、判斷是否與新數(shù)據(jù)相同,若是,則轉(zhuǎn)步驟517;若否,則轉(zhuǎn)步驟518;

步驟517、將對(duì)應(yīng)的粒度標(biāo)記為重刪成功,轉(zhuǎn)步驟519;

步驟518、將對(duì)應(yīng)的粒度標(biāo)記為重刪沖突,轉(zhuǎn)步驟519;

步驟519、結(jié)束遍歷所讀取的記錄,轉(zhuǎn)步驟520;

步驟520、將所有hash及粒度處理結(jié)果返回給LUN,轉(zhuǎn)步驟521;

步驟521、LUN逐個(gè)解析粒度的處理結(jié)果,轉(zhuǎn)步驟522;

步驟522、判斷是否無(wú)重刪沖突,若是,則轉(zhuǎn)步驟523;若否,則轉(zhuǎn)步驟524;

步驟523、更新映射表,并結(jié)束;

步驟524、向LUN本地的物理空間寫(xiě)入數(shù)據(jù),轉(zhuǎn)步驟525;

寫(xiě)入數(shù)據(jù)時(shí),若LUN本地沒(méi)有對(duì)應(yīng)的物理空間,則LUN可以為該數(shù)據(jù)分配可用的物理空間后再進(jìn)行數(shù)據(jù)寫(xiě)入。

步驟525、合并返回的PBA及重刪成功的Hash,轉(zhuǎn)步驟523。

至此圖5所示步驟結(jié)束。

請(qǐng)參考圖6,本發(fā)明的回收流程包括:

步驟601、哈希索引表新建記錄是對(duì)應(yīng)的引用計(jì)數(shù)設(shè)為1,轉(zhuǎn)步驟602;

步驟602、DPC由新數(shù)據(jù)計(jì)算的hash命中哈希索引表的某條記錄;

步驟603、判斷引用計(jì)數(shù)是否為0,若是,則轉(zhuǎn)步驟604;若否,則轉(zhuǎn)步驟605;

步驟604、將該記錄從回收集合中剔除,轉(zhuǎn)步驟605;

步驟605、將該引用計(jì)數(shù)加1,轉(zhuǎn)步驟606;

步驟606、LUN更新映射表的某條記錄時(shí),記錄原映射若為hash,轉(zhuǎn)步驟607;

步驟607、引用計(jì)數(shù)減1,轉(zhuǎn)步驟608;

步驟608、判斷引用計(jì)數(shù)是否為0,若是,則轉(zhuǎn)步驟609;若否,則轉(zhuǎn)步驟610;

步驟609、將該記錄納入回收集合,轉(zhuǎn)步驟610;

步驟610、判斷策略條件是否滿足,若是,則轉(zhuǎn)步驟611;若否,則轉(zhuǎn)步驟601;

其中,該策略由用戶配置,既可以是可回收記錄的個(gè)數(shù)達(dá)到閾值時(shí)觸發(fā),也可以是固定時(shí)間周期觸發(fā),在系統(tǒng)運(yùn)行期間隨時(shí)可以更改策略,改完后會(huì)立即確認(rèn)是否可回收。

步驟611、判斷回收集合是否為空,若是,則結(jié)束流程;若否,則轉(zhuǎn)步驟612;

步驟612、統(tǒng)一回收DPC的物理空間,并結(jié)束流程。

上述過(guò)程即為Hash保護(hù)功能,可避免計(jì)數(shù)為0的記錄在回收后立馬又被使用,導(dǎo)致重復(fù)建立記錄而浪費(fèi)性能,也降低DPC的效率,可以使存儲(chǔ)設(shè)備提高存儲(chǔ)介質(zhì)的利用率,為用戶降低成本。

相比于現(xiàn)有技術(shù),本發(fā)明的存儲(chǔ)系統(tǒng)能針對(duì)不同的應(yīng)用場(chǎng)景進(jìn)行配置并支持刪除模式的動(dòng)態(tài)轉(zhuǎn)換,因此使系統(tǒng)的使用范圍更加廣泛,提高系統(tǒng)的效率及靈活性;并且在保證數(shù)據(jù)安全及系統(tǒng)性能的前提下,可以通過(guò)回收機(jī)制自動(dòng)清除冗余數(shù)據(jù),提高存儲(chǔ)介質(zhì)利用率。

基于相同的構(gòu)思,本發(fā)明還提供一種重復(fù)刪除的模式切換裝置,該裝置可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,本發(fā)明的重復(fù)刪除的模式切換裝置作為一個(gè)邏輯意義上的裝置,是通過(guò)其所在存儲(chǔ)設(shè)備的CPU將存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取后運(yùn)行而成。

請(qǐng)參考圖7a是本發(fā)明一種示例性實(shí)施方式中的一種重復(fù)刪除的模式切換裝置700,所述裝置應(yīng)用于存儲(chǔ)設(shè)備中的DPC,該裝置基本運(yùn)行環(huán)境包括CPU,存儲(chǔ)器以及其他硬件,從邏輯層面上來(lái)看,該重復(fù)刪除的模式切換裝置的組成如圖7b所示,其中該裝置700包括:

接收單元701,用于接收LUN根據(jù)數(shù)據(jù)寫(xiě)入指令下發(fā)的由數(shù)據(jù)拆分成的多個(gè)粒度;

計(jì)算單元702,用于分別計(jì)算所述多個(gè)粒度對(duì)應(yīng)的hash;

統(tǒng)計(jì)單元703,用于遍歷哈希索引表分別統(tǒng)計(jì)所述多個(gè)粒度對(duì)應(yīng)的hash中無(wú)記錄hash和有記錄hash,在哈希索引表中為無(wú)記錄hash創(chuàng)建新的hash記錄;

標(biāo)記單元704,用于判斷當(dāng)前重刪模式是有損重刪還是無(wú)損重刪;若是有損重刪,則將每個(gè)粒度標(biāo)記為重刪成功;若是無(wú)損重刪,則將新記錄hash以及有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對(duì)應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。

可選的,所述裝置還包括:

返回單元705,用于所述多個(gè)粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個(gè)粒度的重刪結(jié)果更新本地的映射表的第一對(duì)應(yīng)關(guān)系和第二對(duì)應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對(duì)應(yīng)關(guān)系和LBA與DPC上的Hash的第二對(duì)應(yīng)關(guān)系。

可選的,所述統(tǒng)計(jì)單元703,具體用于獲取第一粒度對(duì)應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計(jì)到有記錄hash中;若不存在,則將所述第一hash對(duì)應(yīng)的第一粒度寫(xiě)入DPC,將所述第一粒度在DPC中的PBA以及所述第一hash的對(duì)應(yīng)關(guān)系添加到所述哈希索引表中,并將該hash統(tǒng)計(jì)到無(wú)記錄hash中。

可選的,所述裝置還包括:

回收單元706,用于當(dāng)確定哈希索引表中的hash記錄沒(méi)有LUN引用時(shí),將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時(shí),回收該hash記錄中PBA對(duì)應(yīng)的物理空間。

可選的,所述回收單元706,具體用于在哈希索引表中新建hash記錄時(shí),為該hash記錄增設(shè)引用計(jì)數(shù),引用計(jì)數(shù)起始值為1,若該hash記錄被引用時(shí),則該引用計(jì)數(shù)加1;若該hash記錄被更新到LUN中的映射表時(shí),則該引用計(jì)數(shù)減1;當(dāng)引用計(jì)數(shù)為零時(shí),回收對(duì)應(yīng)的hash記錄;若回收集合中的hash記錄被引用時(shí),則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計(jì)數(shù)加1。

上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。

對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。

以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
陈巴尔虎旗| 普洱| 蓝田县| 陇西县| 盱眙县| 电白县| 溧水县| 静宁县| 灵璧县| 桑植县| 贵定县| 原平市| 五大连池市| 抚顺市| 文水县| 清涧县| 灌南县| 长顺县| 呼和浩特市| 兴仁县| 永兴县| 衡水市| 邮箱| 普格县| 和政县| 鸡泽县| 石阡县| 泗水县| 马龙县| 筠连县| 崇信县| 惠水县| 三江| 仙游县| 大足县| 大竹县| 峨山| 兴城市| 鸡东县| 乾安县| 南阳市|